欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  头条

BAT如何面试前端工程师?

程序员文章站 2022-03-05 21:59:19
...
恰逢招聘旺季,不少候选人在准备一轮轮面试。其中,不少工程师技术实力不错,甚至自认为面试过程表象良好,但最终还是没能收到 offer ,原因可能是他们过于专注于技术研究,缺乏沟通技巧,对面试本身也不怎么了解。

BAT是互联网行业的领头羊,它们的招聘流程与人才甄选标准更为科学、完善,研究大厂的面试套路、方法,无疑对求职者和技术 Leader 都有帮助。

所以,收集了《BAT如何面试前端工程师?》,从不同角度解决候选人与技术 Leader 的疑惑。

以下是详细的内容。

康康:从数据分析、行业观察来看,最受欢迎的前端人具有怎样的特性?

根据平台上观察到的数据,我们发现,大厂的技术leader或hr在挑选人才过程中会考虑如下几个方面:

1.基本背景, 包括学校、学历、公司背景、稳定性

学历:BAT一般对学历比较看重,学历背景好自然是加分项。但是不同岗位要求不一样,对于算法、数据等职位会要求计算机专业研究生以上等,对于前端岗位相对要求相对较宽松。一般3-5年相关工作经验的最好还是本科学历,而5年以上相关工作经验的,对学历的要求会放宽

学校:985,211优先,但绝大多数大公司不做强求。

公司背景:关于大公司或者明星创业公司的背景,有最好,非必要,但是非常小的公司背景往往会比较难,这里教育背景和公司背景至少有一条是比较亮眼的,这样通过率会较高。

这里举一个最近通过平台入职大厂的例子。其中一位同学是大专毕业,但是有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,专业性高,两到三个方面是专家级,广度够,能够解决多条业务线的问题,产出在业界有影响力。