恰逢招聘旺季,不少候选人在准备一轮轮面试。其中,不少工程师技术实力不错,甚至自认为面试过程表象良好,但最终还是没能收到 offer ,原因可能是他们过于专注于技术研究,缺乏沟通技巧,对面试本身也不怎么了解。
BAT是互联网行业的领头羊,它们的招聘流程与人才甄选标准更为科学、完善,研究大厂的面试套路、方法,无疑对求职者和技术 Leader 都有帮助。
所以,php中文网收集了《BAT如何面试前端工程师?》,从不同角度解决候选人与技术 Leader 的疑惑。
以下是详细的内容。
康康:从数据分析、行业观察来看,最受欢迎的前端人具有怎样的特性?
根据平台上观察到的数据,我们发现,大厂的技术leader或hr在挑选人才过程中会考虑如下几个方面:
1.基本背景, 包括学校、学历、公司背景、稳定性
学历:BAT一般对学历比较看重,学历背景好自然是加分项。但是不同岗位要求不一样,对于算法、数据等职位会要求计算机专业研究生以上等,对于前端岗位相对要求相对较宽松。一般3-5年相关工作经验的最好还是本科学历,而5年以上相关工作经验的,对学历的要求会放宽
学校:985,211优先,但绝大多数大公司不做强求。
公司背景:关于大公司或者明星创业公司的背景,有最好,非必要,但是非常小的公司背景往往会比较难,这里教育背景和公司背景至少有一条是比较亮眼的,这样通过率会较高。
这里举一个最近通过php中文网平台入职大厂的例子。其中一位同学是大专毕业,但是有7年前端开发经验,并且曾经在在几家比较知名的公司,比如携程、1号店任职,他后来拿到了阿里的不错的offer,成功入职。
稳定性:至少有一段2年以上的工作经验,否则会判定稳定性差,在筛选简历时就剔除。
2.技术能力
技术能力是大厂选拔人才时最为看重的,稍后两位技术大牛也会就此问题做深度分析。从平台数据来看,大厂除了看重候选人技术深度的同时, 也非常看重技术广度。例如前端工程师,除了考察前端相关技术之外,还会考察计算机基础知识,例如算法、数据结构等,因为前端工程师首先是软件工程师,基础很重要
3.软性能力
软性能力包括沟通能力、学习能力、目标导向型思维、求职意向。这里着重跟大家分享下,大厂面试官一般是通过什么问题来判断候选人的软性能力的。
比如,关于沟通能力,面试官一般会让候选人叙述自己过去曾经做过的项目,看候选人是否能讲清楚项目的目的是什么、由几个team完成,候选人在其中扮演什么角色,用什么技术解决了什么问题,和其他团队怎么配合等, 描述过程中可以判断出候选人的沟通能力;
再比如,关于学习能力,面试官会问候选人最近关注了哪些新技术,并且会就某项技术的细节问题深入问下去,以判断候选人是否真正学习了,以及学习的深度如何;
大厂都要求每个人能独当一面,有解决问题的能力,因此目标导向型思维是大厂面试时比较看重的,一般会通过详细追问候选人是如果完成一个任务或者一个项目的,看候选人解决问题的思路和顺序是什么,并会追问选择这样方案的原因是什么,以考察候选人的思维方式
关于求职意向,一般是hr或者部门老大比较关注, 会问候选人为什么离开上一家公司,甚至是再之前一次跳槽的离职理由是什么,以判断候选人真正想要的东西是否是大厂能给的,这是未来候选人能够长期工作下去的基础。
接下来我们再给大家分享一下大厂一般的面试流程,当然各个公司情况不同,但基本大同小异。
一般是2-3轮技术面试+一轮HR面试
一面官通常是个资深或者高级程序员,通常聊的久一点,30-60分钟,他会根据你的笔试题聊一聊,数据结构和算法,捎带着聊一下经历,找找共同点。
二面官通常是直接领导,聊30-60分钟左右,一是看你的项目,项目担任的角色,通用的工具,解决问题的思路,问一些算法,还有看看你的智商情商。
三面官通常是交叉部门面试或者部门技术负责人,通常聊的时间比较短,15-30分钟,技术不会聊太多,主要就聊之前的项目,解决过的问题,你对技术的看法和对新技术的追求,然后看看这个人是否浮躁,是否能培养,给你下标签,给你树立威信。
HR通常聊15-30分钟,主要关注你的离职原因,求职动机以及薪资期望,最好在面试前把这三个问题都想清楚,以防在面试时逻辑混乱,或者没有把自己的真实想法表达清楚而后续陷入被动。答案要诚恳且中立,表现出你的价值,给到对方你的诚意。
Winter:从应聘者角度谈,前端工程师如何准备面试?
如何面试前端工程师?主要从应聘者的角度去分享,应该怎么样去准备好一个面试,目标是为了避免大家在面试中因为一些非技术元素失分。
1 简历
1.1 简历-基本原则
首先来看简历,整个面试流程的第一步,也是前提,先给大家讲的是:草根如何准备自己的简历。
简历基本原则:不要相信各种模板,不要相信炫酷的简历能加分,表达清楚最重要。有成就写成就,没成就写案例,没案例写心得,打动面试官是你的终极目标。
1.2 简历-成就
这里的成就包括:知名公司的工作经历,好的教育经历,包括专业上的一些成就。还可以加几项:在学校的比较有影响力的论文,著名的开源项目经历。
总的原则是:用心写简历,写每句话的时候去想简历怎么对面试官产生影响,而不是在网上找模板,这是不用心的体现。你想过的每一行,你有没有去认真想一些,它是不是你的成就,不是成就是不是你的案例。
什么算成就?有个非常简单的原则:你预计面试官是否听说过这件事,比如说我写了个js的动画库,如果说面试官没听说过,那就没有意义,工作经历、教育经历也如此,如果你觉得你写出来的东西,不能让面试官重视的,则不能当成就来写。
1.3 简历-案例
不能当成就的东西是不是就不写了?很多项目经历、工作经历应该当案例写。
案例和成就的区别在于,成就写一句话就够了,案例要遵循STAR原则。
STAR原则是阿里HR最喜欢提的一点,也是内部面试官反复强调的原则。S是Situation(场景)、T是Task(任务)、A是Action(行动)和R是Result(结果),这是描述完整案例的方法论。
STAR原则不管是面对有经验还是没经验的面试官,用处都很大。
场景 :可以使对方代入到你的工作中来,去理解你工作的价值和意义。
任务:让面试官明确理解你所面临的问题和困难,能够产生身历其境的感觉。
行动:一般大家都会写,按照STAR原则我们是第三步才写行动,这时候你讲行动,其实是一个顺趋而自然的事情。
结果:常被人忽略的一点,比如说我做了些优化,最后产生什么结果,会被人忘记写,有STAR原则就不会忘。
1.4 简历-心得
最后落到没有案例怎么办,写写心得。心得的案例如图,右边是时任新浪微博招聘总管的申城贴的一张图,说一个孩子给了他一张图,简历里附了一张手绘的新浪产品发想的脑图。这张图实际没什么内容,却获得了HR的高度评价。
所以,当你实在觉得自己怀才不遇时,你又觉得自己很有才华,你可以硬写,创造一个场景,把你的构想写进去。比如说,你作为前端,觉得擅长 javascript 的底层原理,那你就可以写 javascript 的底层是怎样的,你怎么理解的,你如果擅长CSS的布局体系,你去总结一下。
心得就当写一个博客文章,大家很少在简历上写心得,实际上非常有效。当你既没有成就也没有案例时,这可能就成为你唯一的依赖了。
2 面试的目标
我们要明确面试的目标是什么。很多人的面试目标是:通过开心,不通过不开心。
我们真正目标的面试目标应该是:通过且合适或不通过且不合适为开心,通过且不合适或不通过且合适为不开心。
通过不合适的情况,仔细想想会很可怕:例如试用期离职,会是你简历里很不好看的一点,或者你一直处于高压工作体验,一定是不愉快的结局,影响危害可怕。不通过且合适,危害小一些,最大问题浪费机会,无论是大家花时间准备面试,还是招聘方安排面试,不通过且合适的结果对双方而言非常痛苦。
3 理解面试评价方式
明确了标准后,我们讲一讲具体的面试过程:大家要理解面试的评价方式。
很多人往往会用同一种心态去对待面试和考试,其实两者间有非常大的不同。考试得分规则:每题得分,总分相加。面试,完全不一样,在于评价方式是根据总体印象作出,很多问题不答都没关系,反过来说,一个回答都有可能决定最终结果。
我们内部做结构化面试评估方案时,我们会有一些特殊的问题:比如说有一些项呢,是直接一道题就pass掉,有的,直接拒绝,比如说,发现你的回答里面,有试图去欺骗面试官的行为,基本后面表现再好,面试结果也是不通过。
3.1 理解面试评价方式:表达方式
另一点,是表达方式,也会影响最终对你的评价,其实,不只是结果会对最后的面试成绩产生影响,比如说同样一件事,如果用STAR原则描述,那么会比你直接描述过程和结果有说服力得多。
过程很重要,很多人关心算法题,其实算法题你最后做不做得出来,可能并不是关键因素,你是不是有努力分析才关键。
比如,算法题最常见的分析手段是:我要算100个数,我先把1个2个数的case,手工一个一个去分析看一下。这个过程有两个正面因素:一是你在思考,能找到思路,二是你能收到很多面试官给你的讨论和提示。
很多人描述问题的能力,让面试官很头疼。面试官问:你怎么样做前端的发布呢?有人答:我就开发一个发布系统。一句话就打发了,那就让面试官非常头疼。
回答问题不要过于抽象,你以为面试官听得懂,实际上我想知道你具体做了哪些发布系统,你是怎么设计的,设计和实现的难度都在哪,如果你总是抽象,面试官很累,负责的会多问几句,不负责的可能就这样过去了。
3.2 理解面试评价方式:问题
第一,知识型问题直接答就行,如果不会就直接说不会,如果面试官问了20个问题,有18个问题,你肯定就被淘汰了,如果问了10个问题,你就1个不会,基本上也没什么关系,除非这是对你的岗位非常非常重要。
第二,开放性问题,建议大家调整心态,当作一场演讲。
例如这道开放性问题:你都知道有哪些HTML的标签,能不能说一说他们的语意是什么?
面对此题,我很希望应聘者把自己珍藏的干货,知道的最有意思的标签,一些边边角角的问题能够讲出来,体现自己的水平,或者是将一些普通的标签能够把它的语意理解得非常到位,能够说出一些标准里举的例子,或者自己业务里举的例子,这道当面试官讲开放式问题时,他希望你能当作一场演讲来发挥。
第三,案例分析问题,这类问题是必答,不存在不会的情况,只存在拒绝回答的情况。比如说面试官给你设计了一个场景,他是希望你一步步引导最终做出来,一般来说,面试官会保证给出很多提示,最终解决问题,如果你最开始就放弃,那么等于放弃面试。
最后,说一下大家都很关注的算法和编程题,前端需不需要考算法?其实有时候我觉得不太好区分,什么叫算法什么叫编程,从算法定义看,所有的编程序都是在用算法,只是是否用到经典算法而已,大家可以理解难的是算法题,简单是编程题,如果说难易,算法题和编程题因人而异。
我面试前端工程师出的都是编程题,比如冒泡排序,这应该不算算法题。我想跟大家说的是,对你职业发展有长线规划的公司,会更注重你的编程和算法能力,在我自己的求职过程中,可能更希望公司注重我的算法和编程能力。
3.3 理解面试评价方式:不会的情况
面试中遇到你不会的情况该怎么办?最直接的做法就是,告诉面试官,你不会,大部分问题其实都不一定需要回答,从我参加的面试和我作为面试官经历的面试,我的经验如此。你可以对问题做一些分析,或者是要求、等待提示,另一个常见做法是,谈一谈与问题相关的,如果面试官问你HTTP 码 404 是什么意思,假设你记不清了,你可以回答500、501是什么意思,不过在此之前,可以先回答,我记不住404了,你的坦诚会给面试官留下深刻的印象。
3.4 理解面试评价方式:争论的情况
最后介绍一种情况,非常少见,对应聘者压力很大:和面试官产生争论。
不要拂袖而去,面试官可能故意给你争论,试图一些压力考核。解决方案不是你坚持己见,而是你尝试论证,当你从最基本的结论,找出双方认知的共同点,逐步给出论证过程,逐步分析推理结论,你们有可能达成共识。
举个例子,javascript 是基于对象不是面向对象这句话,当然是错的,因为 javascript 在标准里面写了是面向对象的,如果你说出这句话,我更关注的是你怎样去理解这句话,对你来说,面向对象的定义是什么,基于对象的定义又是什么,是javascript 的哪些特性让你觉得他是基于对象而不是面向对象。
如果你这句话是单纯从某本书上看到的,没有经过自己的思考,我一定认为你这道题答错了。如果你有自圆其说的过程,我会给出正面评价,因为你在这个期间,经过了一些自己的思考。
井铎铎:从面试官角度谈,如何甄选一名前端工程师?
我要分享的是:1.简历筛选与沟通 2.面试环节设计 3.软技能考核 4.候选人实力上下限判断
1.简历筛选与沟通
作为面试官,会先快速阅读:相关经验、公司经历、教育背景等信息
相关经验按照STAR分析法,公司经历主要是否是互联网公司,是否一线互联网公司,如果有经历,一定要写,因为做事差别很大,有的是传统开发模式,有的是MVP开发模式,有的是结果导向有的是过程导向,同时要关注候选人做过的事情,是面向互联网用户的还是面向公司内部用户的,因为面向互联网用户更关注用户体验这些细节部分,后者则更多强调通用性、拓展性,以及开发效率。
教育背景主要作为参考。
对候选人来说,自己的职责、做的事情、取得的成绩一定要写清楚,说白了目的性要强、重点要突出,要让面试官很快能把握到:你的公司技术栈什么样的,前后端合作模式什么样的,你取得的成绩是业绩,指标提升了,还是效率提高了,能快速把握你的亮点。
2.面试环节设计
第一点,面试过程中有哪些必须的"坎"
面试官会有一份大纲,形成一套自己的标准化面试,如面试不能太随意,都是要带着目的来问的,从面试官角度来看,候选人在你心中会有初步印象,接下来就是设计问题求证的过程,设计问题是有套路的,比如说js的基础知识、css的基础知识,是框架还是性能相关的,一定要具体,考察细节问题,最好围绕简历中的一些亮点,让候选人打开话匣子,讲到更多细节。
那么开放型问题部分:提出有区分度的问题,能让面试官区分出候选人答得是好的、一般的还是差的答案。
我一定会设计的:一般是技术栈的优缺点,主要是缺点,因为技术栈的优点比较容易答,像vue,很明显,用它学习曲线比较平稳,双向数据绑定,但问到缺点,很多人意识不到,比如在移动端首屏渲染耗时如何、多页面应用解决。
除了电话面试,一般也会考察一些思维逻辑问题,看这个候选人是否灵活
第二点,是否有需要候选人写码即coding的必要性。一般来说是需要的,前提是:先确保方案靠谱,会引导或者提示他到最优方案,然后再让他写代码。一般来说,有时候公司老大会推荐一些人过来,碍于面子会面试一下,所以一定会考察一下写码能力,有句话说得好,Talk is cheap,show me the code 。
面试一般三轮,加上人力面,采用审核委员会制,一面,二面,三面交换一下意见,每个面试30分钟。
从候选人角度来说,一定要细节比较清楚,了解面试官的目的,要考察啥,自己简历上列出来的问题,要好好准备一下,在面试官提出问题,先弄清楚问题,再给出实现方案,根据方案还要能给出它的优缺点,最终再来做coding,coding完,自己要单测一下,编写异常值,而不是把答案直接丢给面试官。
3.考核能力
第一点,我们会考核候选人是学习型选手还是经验型选手,是否聪明。学习型选手很大的特点是:能够自己接触很多新的知识,保持对整个业界最新知识的基本关注,不但能自身总结一些问题,还能从别人身上学习到一些东西,后者更多依赖自己的沉淀,从交流中、学习中获得较好,我们更多是看聪明程度,而不仅看经验。
第二点,考核责任心是否强,很关键,我让候选人做题后,看他是否会做自测。天平秤药材问题,很多人都很快给结果,丢给你验证,你提出问题,候选人还说:你这样这样不就行了。其实很多时候,希望候选人自己做自测。
第三点,沟通能力。简单能说能否听懂你的话,能说清楚自己想表达的话,我希望候选人既能抽象也能具体,当你问业务是什么时,你期望他能用宏观来回答,当你问架构时,他知道画什么图。
第四点,机灵程度和好奇心。我一般在三面,让候选人教我一个很复杂但我不懂的东西。
第五点:leadership。普通工程师依旧需要有动员其他人的能力,比如说我们有个工程师做性能优化项目,那他需要协调产品端、app端、web端还有统计部门、数据统计部门,一起完成性能统计的需求整理、日志整理、日志上报、数据分析、数据展示等等。那我们会有一个面试大纲,围绕这些大纲面试官可以出自己的题目
比如写一个URL解析函数,同时考察你网络协议、正则、js代码设计、前后端协作方面的知识
对候选人来说,基本功比较硬,做事方法好,这两点重要。基本功看自己,做事方法需要有人带,也要自己总结,我也会推荐两本书。《卓越成效的管理者》和《google 模式》
4.候选人实力上下限判断
最后一点:如何快速判断候选人真实实力。结合简历以及表现,能够确定下限,大概是什么水平。接下来,是开放性问题,这些问题是有区分度的,比如说看待解决性能问题的思路和方案,从而判读候选人上限,结合上限和下限,最终得出真实水平。
经典问题:让你划分js水平,怎么划分?有些人分第一会用框架、第二了解框架原理,看过源码,第三写基础框架。如果你再追问:你处于什么水平?再结合候选人的反馈,更容易推论出来候选人实力。
对候选人来说,面试的本质是展现自己真实水平,找到适合自己的岗位,面试官是的本质是找一个和自己共事、愿意晚上加班的家伙。
Q&A
1.@winter:除了基础的前端技术,是否还要掌握算法?bat大厂对算法的掌握有怎样的要求,需要掌握到什么程度?
A:对于前端来说,对算法要掌握到能够写一个排序这个水平,面试不会只考排序,同等难度还会有几道题。我们还有一个原则:当你的成就,超出了算法的范围,那我们会根据你的项目、案例里面去问了,不会特意出题考察。如果是css,从原则上来说,我们不希望大家把自己定位成某某工程师,即使是我们前端的职责,也是在不停地变化,如果说你把自己圈死,说你是css工程师,我们不招的。
比如说大末,他是业内著名的css专家,他来我们这边,做的不仅仅是css,总的原则是我们看应聘者身上最光辉的地方,肯定不是挑选短处。
2.@井铎铎:面试前端工程师和前端主管,前端架构师和前端总监,部门总监,需要的不同要求和特质以及面试方法,能说一下大厂现在的录取策略吗?
前端工程师:基础专业性好,做事方法好。
前端主管:做成事,能培养人,能指导人。
前端架构师:对应百度T7、T8阿里P7、P8,专业性高,两到三个方面是专家级,广度够,能够解决多条业务线的问题,产出在业界有影响力。