从大二下学期放暑假开始(7.14)到8月初,我一直在寻找一份实习,锻炼一下自己,看看学的怎么样。这期间,我相继面试了小米、途牛、滴滴和百度,都拿了实习offer。其中百度拿了两次实习offer,但由于我自身一些原因,都爽约了。(在这里给百度真诚地道个歉,我非常珍视这两次机会,但无奈遇到了不可抗拒的原因,今后有机会还会再投的(˶‾᷄ ⁻̫ ‾᷅˵))最后选择了在滴滴实习,很难得的经历。实习期间一直没空闲下来分享一下,结果拖到了现在…那么这篇文章就来分享一下我的面试和实习心得吧

面试

有一些记不清了,毕竟时间太久了…

小米

  • 说一下你的前端学习经历
  • css左右边固定宽,中间自适应,有几种方案
  • css3动画,transition属性知多少
  • 说说你是如何配置你项目里的webpack
  • 如何判断变量是true or false
  • 数组去重,要求时间复杂度为O(n)
  • http状态码,304什么情况
  • 跨域方法
  • 其他想不起来了…

途牛

  • typeof 都返回哪些类型 typeof null 返回什么,为什么?
  • cookie和session有什么区别
  • 有没有实际写过、解决过跨域相关问题
  • 使用过ES6/7哪些特性
  • 说说 promise 几个常用API和原理
  • React的特性,接着问原理,接着问好在哪里
  • 堆和栈的区别
  • 其他想不起来了…

滴滴

  • React技术栈做项目用到了哪些东西
  • React特性、virtual dom、diff 、合成事件、调和等原理
  • 为啥要给列表类组件设个key?
  • 读过React源码吗?
  • 使用过哪些状态管理库,我说Redux,接着问Redux 是如何管理React 的,你又是如何使用Redux架构你的项目的
  • Redux 有哪些优缺点
  • 了解数据可视化吗?做过之类的东西没有?
  • 了解node吗
  • 其他记不起来了…总之都是围绕React技术栈来问的,上来就问框架很显然想让你进来直接干活:)

百度(地图事业部)

  • 你在滴滴实习,为啥要来百度?(blablabla…夸了百度一番)
  • 你在滴滴做什么东西?用了什么东西(数据可视化,还用了你们的echarts呢(/ω\))
  • 那你知道echarts有哪些可以优化的地方?读过它的源码吗?
  • React 特性、原理,React 突出的思想
  • 你是如何使用Redux架构技术栈的
  • 我看你用了Redux-saga,它比thunk、promise有啥好处?
  • 你使用过哪些ES6 新特性、promise原理
  • 跨域的几种方法
  • 你这个项目有没有遇到什么你觉得难的问题,你怎么解决的?
  • 你有啥想问我的?(一般问部门技术栈、工作氛围)
  • 其他记不起来了…

百度(校园品牌部)

  • 介绍一下前端经历
  • 你平常如何用css管理页面布局的,我说栅格,又问栅格怎么实现的
  • css3动画、transition、transform,canvas、svg
  • sass跟less的区别?
  • javascript 有哪些特性,我说了弱类型、单线程、事件驱动,就有了下面的
  • 你怎么理解事件驱动机制的?
  • 用过事件委托吗?怎么用的?
  • 嗯…ES6 用过哪些新特性?我提到了箭头函数,于是就问
  • 箭头函数跟ES5匿名函数有什么区别?我提到了this指向,然后就接着问
  • 箭头函数自动绑定this原理是什么?
  • 嗯…你这个项目怎么配置webpack的?用过gulp吗?webpack跟gulp有啥区别?
  • React 突出的特性
  • 怎么用git建立一个远程分支
  • Linux命令知多少?
  • 怎么把一个链表倒序?
  • 其他记不清了….

总结

总的来说,由于面试的特殊时期,面试难度会比春招实习、校招要低很多。

面试会围绕你的简历来问,所以简历写好并且为简历做好准备很重要。

面试大多问的是基础,而且问的很细,经常围绕一个点来深挖,还会问一些经常用到的API,所以面试一定要准备,把一些零碎的知识温习一下,基础很重要。项目问的比较少,但项目决定你简历的质量。

前端要掌握的知识面比较广,但是有一些是构建工程所必须的,最好先培养自己比较全面的基础技术栈,可以足够形成构建一般工程项目的基本能力,然后再深挖。

照目前情况来看,深入理解一门框架是很有必要的,但也没必要多。

前端面试算法问题问的较少(大公司问的较多),但别告诉我你不知道查找、排序、去重、遍历二叉树…

面试一定要保持平和心态,抱着我已经拿到BAT offer的心态,不紧不慢的交谈,用眼神、肢体语言帮助嘴巴说话;择机展示思考的过程,全程展示对这行的热情。

祝愿大家都能找到心仪的实习、工作。

实习

我在滴滴实习了一个多月就走了,原因是学校课太多,导员不让出去,我也意识到了现在还是以学业为重…

实习期间,我参与了两个项目,一个是一个滴滴实时计算平台,另一个是 Druid 管理平台。

实时计算平台,面向滴滴内部工程师,是一个依靠滴滴海量数据完成实时计算、任务调度、自动报警监控等等,项目很大,做了一年了,业界少有吧….我所做的是将我负责的部分数据可视化及国际化;

Druid 管理平台,仍面向内部工程师,是一个可视化数据库管理平台,前端由我和另一位实习生负责。我做的是一期核心模块的开发。

最大的体会就是

  • 要对产品有极致追求,不能容忍错误,不能容忍繁琐的操作,还要兼顾所有可能的操作
  • 体会到了海量数据下的性能的重要性,开始关注性能优化
  • 要抱着后台什么数据都有可能产生的考虑,来写健壮的程序,类型检查、空值检测、try catch是必要的
  • 做好渐进增强、功能解耦、组件分离很能体现一个人的编程能力和水平,最忌讳代码粘一块、写死,坑的都是自己,,,
  • 调试很重要,要有写debugger的习惯
  • 时刻准备迎接新技术,哪怕从未听说,只要项目需要,就得立刻上手(我所在的组还是很喜欢用新技术的,只要它好用,License符合)
  • 前后端分离的接口文档遵循规范能少说很多废话
  • 项目管理,敏捷开发是很好的方式
  • 我所在的组开发项目的流程一般是:老大不知道从哪弄来一个需求(可能上级安排的,很多是自己想的…),然后全员开会说需求、定任务,各成员写排期,后端定具体需求、接口,前端配合后端一同开始,每周报告任务进展…
  • 对前端er来说,改需求不用那么在意,我们最终的目的都是让这个产品更好不是吗?
  • 实习生很少会接触to C产品,做的大多是面向内部人员,因为出bug好商量嘛…
  • 我所在的部门女工程师还是挺多的,这个的确让我很惊讶(No Offense)…
  • 想到再补充(/ω\)

这次实习,确实比自学效率高多了,而且最重要的是,开阔了眼界,了解了这行业前沿是个什么情况,大公司又是如何部署前端技术栈开发项目的,以及我自身的不足。我也很幸运,找到了自己感兴趣的方向。