面试官喜欢问的问题
以下会列出一些我们面试官的问题,请提前做好准备。
需要注意的是,校招和社招的是不一样的,校招会更加关注基础知识,而社招会更加关注之前做过的项目情况。
项目相关
面试其实说白了就是根据一个人之前的经历,来判断出后续这人会做得怎样,如果你之前从没做成过一件事情,凭什么让别人相信你之后能做成呢?因此无论哪里的面试都会问你之前做过的项目
项目可以是多人协助开发一个产品,也可以是自己个人做过的业余应用,只需介绍 1、2 个就够了,需要注意的是 1 + 1 != 2,做了两个平庸的项目不如做了一个好项目
一般来说会问如下几方面的问题:
● 做过最满意的项目是什么?
● 项目背景
- ○ 为什么要做这件事情?
- ○ 最终达到什么效果?
● 你处于什么样的角色,起到了什么方面的作用?
● 在项目中遇到什么技术问题?具体是如何解决的?
● 如果再做这个项目,你会在哪些方面进行改善?
技术相关 - 1 面
技术一面主要判断对基础知识的掌握
● 描述一个你遇到过的技术问题,你是如何解决的?
- ○ 这个问题很常见,有没有遇到过很不常见的问题?比如在网上根本搜不到解决方法的?
● 是否有设计过通用的组件?
- ○ 请设计一个 Dialog(弹出层) / Suggestion(自动完成) / Slider(图片轮播) 等组件
- ○ 你会提供什么接口?
- ○ 调用过程是怎样的?可能会遇到什么细节问题?
● 更细节的问题推荐参考 https://github.com/darcyclarke/Front-end-Developer-Interview-Questions/
技术相关 - 2 面
技术二面主要判断技术深度及广度
● 你最擅长的技术是什么?
- ○ 你觉得你在这个技术上的水平到什么程度了?你觉得最高级别应该是怎样的?
● 浏览器及性能
- ○ 一个页面从输入 URL 到页面加载完的过程中都发生了什么事情?越详细越好
(这个问既考察技术深度又考察技术广度,其实要答好是相当难的,注意越详细越好) - ○ 谈一下你所知道的页面性能优化方法?
这些优化方法背后的原理是什么?
除了这些常规的,你还了解什么最新的方法么?
如何分析页面性能?
● 其它
- ○ 除了前端以外还了解什么其它技术么?
- ○ 对计算机基础的了解情况,比如常见数据结构、编译原理等
兴趣相关
● 最近在学什么?接下来半年你打算学习什么?
● 做什么方面的事情最让你有成就感?需求设计?规划?具体开发?
● 后续想做什么?3 年后你希望自己是什么水平?
主动性相关
● 在之前做过的项目中,有没有什么功能或改进点是由你提出来的?
● 是否有参与和改进其它开源项目
面试过程
我们一般会有 3 轮面试,对于高级别的工程师可能会有 4-5 轮面试。
可能会采用哪些方法来面试
一般会有 3 轮面试,对于高级别的工程师可能会有 4-5 轮面试。
● 代码编写笔试
● 问答式
过程遵循 STAR 面试法 。
面试官喜欢什么样的面试者
● 基础扎实
- ○ 从多年的经验看,那些发展好的同学都具备扎实的基础知识
- ○ 比如只懂 jQuery 不懂 JavaScript 是不行的哦
- ○ 如果了解计算机基础会更好,因为我们将面临很多非前端技术的问题
● 主动思考
- ○ 被动完成任务的同学在这里进步会很慢
- ○ 你需要有自己的想法,而不是仅仅完成任务
● 爱学习
- ○ 前端领域知识淘汰速度很快,所以最好能经常学习和接触新东西
● 有深度
- ○ 遇到问题时多研究背后深层次的原因,而不是想办法先绕过去
- ○ 比如追踪某个 Bug 一直了解它本质的原因
● 有视野
- ○ 创新往往来自于不同学科的交集,如果你了解的领域越多,就越有可能有新想法
● 公开面试题不怕面试者精心准备么?
- ○ 面试题大多是开放性问题,是无法准备的
- ○ 如果真的精心准备,在各方面都能答好,那说明做事态度认真且努力,这正是我们需要的品质,因为我们相信一个人不是一成不变的,可以不断学习和进步,只要 ta 肯努力
● 我只会 CSS/HTML,或只会 JavaScript,可以么?
- ○ 不行,而且很多内部项目还需要用 PHP
●
- ○ 首先,你确定简历提交到的是「Web 前端研发部」,而且我们正在招聘
- ○ 如果符合前面的条件,很遗憾,或许是我们招满了,或许是你暂时不适合我们部门,但这不意味着你不能改进,请继续努力
js套路
作为前端工程师的核心技能,js知识的考察是面试的重要环节。
一般来讲,如果面试者是初级工程师,我会先从基础问起。经典问题如js的原型继承、闭包、类型转化,常用函数的一些用法,比如很多同学都记不清数组的splice方法的三个参数。
对于只用过jquery的同学(大部分初级同学是这样),有几个问题是必问的,比如jq监听事件的几种方式及其异同点,在此基础上解释事件代理、事件冒泡机制。jq的一些方法的实现原理,比如 . i n A r r a y 。 j q 插 件 的 写 法 , 解 释 .inArray。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架构话题。
mianshi3
移动端套路
前端页面在移动端的舞台越来越大了,尽管如此,还是有些同学没有这块的经验。前端的知识断层就是这么严重。行走在移动端的前端还是有很多特有问题的,所以必须得考察。
最基本的就是布局问题,不同屏幕下的自适应。首先会问viewport的概念,解释清楚它是什么,默认值是多少,移动端如何通过控制viewport来实现自适应。
除此之外就是各种自适应的方法,百分比布局的问题啦,rem布局的问题啦,flex布局,以及css3的calc知道不知道。
由于移动端开发是一个经验密集型差事,很多问题的解决就是靠踩坑、靠经验。所以很多零碎的问题会随机来问,比如点击事件300毫秒延迟、绝对定位的兼容、ios下iframe兼容问题、scroll事件的性能优化、各种卡顿问题的解决方案等等。
算法及其他
一说算法,可能很多同学都头疼。甚至也有面试者在我提到这块时,直接就说你别问了,我算法不行。
其实算法一般是不问的,其他公司也应该也是这个情况,我知道美团除外。我问算法的情况一般是对方是软件工程或者是计算机专业毕业。毕竟这是基础课程嘛。
不会问很难的,因为算法这块我自己也不行,只能简单问一问探个路。说说常用的几种排序算法,找最大数、找中数,时间复杂度怎么计算的,差不多就这些了。
对于软件/计算机专业,操作系统、编译原理、计算机网络这些应该是基本课程,我有时也会问一问,但是我知道这对前端工程师来说属于“边缘知识”了,不起决定作用,算是附加题吧。
学习能力
学习能力是很重要的一个指标,对于新手尤其重视。判断学习能力其实是很难的,通常有那么一些角度可以观察到。
写博客。我未毕业的时候就开始写博客,并坚持到现在。我也坚持认为,自学到知识并能写文章表达出来,可以展示出一个人的学习能力。所以如果一份简历中有博客链接,我通常会仔细去看。
另外一个考察学习能力的方式就是看他的“折腾能力”。比如,就算工作中不用angular,你是否自己研究过它。是否自己研究过nodejs,乃至于Android、iOS开发,这都是有可能的。
再有就是问问他平时看的书、网站、APP等,如果一个人下班后就不关注程序开发,我不认为他学习能力强。因为学习本身就是克服惰性的一个过程。
沟通/表达/人品
在面试评估表上,这也是占一栏的。关于沟通表达能力的评估,会贯穿面试的整个过程。主要踩分点就是,你要知道面试官具体问的是什么,不要答非所问,也不要硬扭转话题,真实自然的表达即可。有一些“面试技巧”会教你说把谈论的话题往你擅长的方向引,在我看来这是愚昧的,因为面试官并不傻。
曾有一个面试者硬要给我背写出冒泡算法,尽管我已经说了不必写了,他还是不停。难道我会不知道这是他提前背好的吗?有一些比较“聪明”的会隐秘些,但难逃法眼。你要相信,面试或许会有运气成分,但绝无空子可钻。
诚实很重要。另外一个我比较看重的就是,人品。简单来说,你是否是一个顾及他人感受的人。有些人在面试的时候话比面试官都多,整个过程都是他在给面试官讲道理。就算你年龄比面试官大,工作经验很高,但此时此刻,你是面试者。
怀有谦卑之心的人是我一直喜欢的,然而要看透这一点并非易事。我一般会问面试者一个主观问题:你如何向一个完全不懂编程的局外人解释前端工程师这个职业。这个问题看似简单,但能考察他对前端的理解,他的表达能力,最难的是他要站在一个完全不懂编程的人的立场来解释清楚。