http://www.aliyue.net/1270.html
每到年后,便是换工作的高峰期,很多同学会开始面试马拉松。当然也会有一批人选择年前面试年后入职。今天,我决定聊聊关于面试的话题,以及前端工程师的面试套路. (ps:这篇文章摘自 医小生与程序猿 的微信订阅号)。
简历的细节
作为一个标准的理科生,我也曾大大咧咧,不修边幅。但这毕竟是找工作,尤其是前端工程师,对于细节一定不能忽视。虽说面试以技术为主,但简历是敲门砖,一个潦草随意的简历必定是会减分的。简历都做成这样,做网页能好到哪去。
具体来说,有那么一些原则。首先,错别字是肯定不能有的,不多解释。除此之外,字体、字号,以及边界对齐,都要做到整体一致,视觉上舒适。有个人博客、个人作品的链接,最好把链接加上,这样别人一点就能看而不用复制到浏览器。有些同学会把简历做成图片的格式,导致连复制链接都不能,这是典型的不为他人考虑。有些同学在mac上用pages做简历,完了就把.pages文件发过来,你怎能确定对方hr就是在用mac办公呢?
这些细节重要吗?也没有多重要,但却能反映出你的个人习惯,以及与人交际的态度。换位思考一下,你就知道为什么这些细节不能忽视。想象一下,你跟一个同事要他的电话号码,他给你发了一段微信语音。
js套路
作为前端工程师的核心技能,js知识的考察是面试的重要环节。
一般来讲,如果面试者是初级工程师,我会先从基础问起。经典问题如js的原型继承、闭包、类型转化,常用函数的一些用法,比如很多同学都记不清数组的splice方法的三个参数。
对于只用过jquery的同学(大部分初级同学是这样),有几个问题是必问的,比如jq监听事件的几种方式及其异同点,在此基础上解释事件代理、事件冒泡机制。jq的一些方法的实现原理,比如$.inArray。jq插件的写法,解释$.fn是什么东西。
如果以上的回答比较满意,就开始问mvc、mvvm、模块化开发、ES6等这些脱离了“刀耕火种”年代的新东西。
如果对于新知识体系的掌握都不错,我还会问一些常见的性能优化,以及这些框架在实战项目中的优缺点。毕竟入门一个框架便可以泛泛而谈,但只有深入使用并解决一些复杂问题,才能有自己的见解。
然后是前端工程化方面的探讨。再往上就是项目的架构讨论,这种一般是问面试者目前工作中的架构,有哪些局限和可优化的地方。主要是想了解他是否有自己的思考,而不是在现有的框架之下停滞不前。
如果面试者是2~3年有经验的工程师,我会直接问mvvm这一层。如果发现他是那种工作3年却只有1年经验的类型,则往下降,开始问jquery方面的知识,不行就再往下降问基础。事实上我遇到的这种类型还真不少。
css套路
css是最容易被忽视的一块,也是最能挖掘出知识的一部分。
对于初级前端,我会先问应用。比如说左右两栏自适应如何实现,底部自适应如何实现,一些布局技巧如margin负值、各种情况的居中、盒模型的计算等等。
再往上就是原理性的一些知识,比如解释BFC的概念及常见场景。IE6兼容的问题我记得是很久没问过了,毕竟过时了。css与渲染性能也是需要知道的,我会问重绘和回流是怎么回事,如何在css布局阶段就减少性能浪费。
css 新知识相对少一些,基本就是css3和css预编译了。这块的话其实也没什么深度,大体上掌握了就能过关了。如果一定要看面试者的功力,那就是探讨sass/less框架下的整站css架构话题。
移动端套路
前端页面在移动端的舞台越来越大了,尽管如此,还是有些同学没有这块的经验。前端的知识断层就是这么严重。行走在移动端的前端还是有很多特有问题的,所以必须得考察。
最基本的就是布局问题,不同屏幕下的自适应。首先会问viewport的概念,解释清楚它是什么,默认值是多少,移动端如何通过控制viewport来实现自适应。
除此之外就是各种自适应的方法,百分比布局的问题啦,rem布局的问题啦,flex布局,以及css3的calc知道不知道。
由于移动端开发是一个经验密集型差事,很多问题的解决就是靠踩坑、靠经验。所以很多零碎的问题会随机来问,比如点击事件300毫秒延迟、绝对定位的兼容、ios下iframe兼容问题、scroll事件的性能优化、各种卡顿问题的解决方案等等。
算法及其他
一说算法,可能很多同学都头疼。甚至也有面试者在我提到这块时,直接就说你别问了,我算法不行。
其实算法一般是不问的,其他公司也应该也是这个情况,我知道美团除外。我问算法的情况一般是对方是软件工程或者是计算机专业毕业。毕竟这是基础课程嘛。
不会问很难的,因为算法这块我自己也不行,只能简单问一问探个路。说说常用的几种排序算法,找最大数、找中数,时间复杂度怎么计算的,差不多就这些了。
对于软件/计算机专业,操作系统、编译原理、计算机网络这些应该是基本课程,我有时也会问一问,但是我知道这对前端工程师来说属于“边缘知识”了,不起决定作用,算是附加题吧。
学习能力
学习能力是很重要的一个指标,对于新手尤其重视。判断学习能力其实是很难的,通常有那么一些角度可以观察到。
写博客。我未毕业的时候就开始写博客,并坚持到现在。我也坚持认为,自学到知识并能写文章表达出来,可以展示出一个人的学习能力。所以如果一份简历中有博客链接,我通常会仔细去看。
另外一个考察学习能力的方式就是看他的“折腾能力”。比如,就算工作中不用angular,你是否自己研究过它。是否自己研究过nodejs,乃至于Android、iOS开发,这都是有可能的。
再有就是问问他平时看的书、网站、APP等,如果一个人下班后就不关注程序开发,我不认为他学习能力强。因为学习本身就是克服惰性的一个过程。
沟通/表达/人品
在面试评估表上,这也是占一栏的。关于沟通表达能力的评估,会贯穿面试的整个过程。主要踩分点就是,你要知道面试官具体问的是什么,不要答非所问,也不要硬扭转话题,真实自然的表达即可。有一些“面试技巧”会教你说把谈论的话题往你擅长的方向引,在我看来这是愚昧的,因为面试官并不傻。
曾有一个面试者硬要给我背写出冒泡算法,尽管我已经说了不必写了,他还是不停。难道我会不知道这是他提前背好的吗?有一些比较“聪明”的会隐秘些,但难逃法眼。你要相信,面试或许会有运气成分,但绝无空子可钻。
诚实很重要。另外一个我比较看重的就是,人品。简单来说,你是否是一个顾及他人感受的人。有些人在面试的时候话比面试官都多,整个过程都是他在给面试官讲道理。就算你年龄比面试官大,工作经验很高,但此时此刻,你是面试者。
怀有谦卑之心的人是我一直喜欢的,然而要看透这一点并非易事。我一般会问面试者一个主观问题:你如何向一个完全不懂编程的局外人解释前端工程师这个职业。这个问题看似简单,但能考察他对前端的理解,他的表达能力,最难的是他要站在一个完全不懂编程的人的立场来解释清楚。大家可以试着回答一下。
在这里郑重的说一下: 机会只会垂青有准备的人!加油吧2017!