聊聊前端面试

最近 Zoom 国内又开放招聘了,咱们组有了前端的 HC,因此我也参加了几场面试。合肥总体的前端氛围很通常,厉害的人比较少,来参加面试的偏初阶的比较多,不过咱们面试也不卷,不多出一些复杂的算法题,面试难度并不高。咱们对候选人的要求也没有那么高,基本上你能达到 p6 的水平,就能经过个人面试。固然,若是你是工做年限较久(六年以上)的老玩家,我对你的指望和要求也会相应的提升。前端

在面试的过程当中我也发现了不少问题,所以做为一个 9 年工做经验和 7 年面试经验的老兵,我想分享一些经验给你,但愿看完后对你有所帮助。程序员

面试的目的

先想一想看,为啥要面试?面试

首先,面试是一个双向选择的过程,在这个过程当中,面试官经过一些提问和交流来判断候选人是否合适这个工做岗位,他是一个怎样的人,你将来想不想和他一同共事;那么候选人也能够经过面试的过程来感觉到面试官是否专业,是不是本身心仪的公司或者是团队。算法

其次,对于候选人来讲,面试的过程也能够发现本身的不足之处,经过一些专业性的技术交流能够了解本身对于某些知识点的理解和掌握的状况,以便以后查漏补缺。此外,经过对本身经历和项目的描述,也能够锻炼本身的表达和沟通的能力,若是在面试中发现本身并无发挥好,那么则能够增强这方面的练习。编程

最后,对于用人单位来讲,面试除了帮助本身招到合适靠谱的人才以外,也是竖立本身公司形象的机会,对于整个面试流程安排够不够专业,面试官的资历够不够深,能不能让候选人有个不错的面试体验,都多多少少会影响公司在业内的口碑。所以,不少大厂都会对面试官的级别要求比较高,并会给予必定的面试培训(我在百度的时候就有幸被培训过)。小程序

写给候选人

对于候选人,我主要想从简历和面试准备这两个方面给你一些指导。浏览器

简历

写简历的目的,就是让面试官和 HR 能从几页纸中对你的过往经历有个大体的认识。首先,你得保证简历的真实性,不能有半点造假,由于这涉及到一我的的诚信问题。有些人为了让本身简历能被筛选经过,在学历和工做经历上做假,有些人为了让本身能多谈一点薪资在流水上做假。对于知名企业,对这些造假行为是零容忍的,由于不少企业都会对候选人作专业的背调,一旦查出来有做假行为,不只 offer 没了,也可能会有永不录用的风险。性能优化

那么有些人可能会问:我学历不行,又没啥工做经验,不造假,简历都通不过呀。markdown

很差意思,若是你的资历不够,那么你暂时就是进不了一些名企,能够先进一些小公司锻炼,而后有必定工做经验,且技术能力提高后,再考虑进大厂。你能够想一想看,为啥一些优秀的本科生和硕士生一毕业就进入了名企,那是别人寒窗数十年努力学习换来的,因此后面路天然就好走一些。若是你年轻时候由于不懂事或者一些不可抗力因素而荒废了学业,那么起点低也是正常的,可是这样并不影响你将来经过努力学习和奋斗改变命运。数据结构

名企的 HR 对候选人的背景要求高,也是从一个几率学的角度来考虑的,毕竟,好的学校和工做背景意味着更好的学习能力和工做能力,这样的候选人符合岗位要求的几率天然就更高。

对于在小公司工做的人,进入大厂也并非不可能,可是你可能要花费比通常人更多的努力去学习,那些学历背景很差最后也成为大佬的人,付出的努力,背后的辛酸,可能只有他们本身知道。

另外,经过大厂外包转正,或者结识圈内好友内推大厂,都会多一份成功的机会。 回到简历自己,除了真实性,第二个要点就是要突出重点。简历并非记流水帐,你不须要把以前全部过往的工做经历都写在简历上,面试官也没时间看。建议你给每段工做经历中挑出一两个重点的项目,详细去写项目的技术重点和难点,以及你在其中负责的角色,作的事情。

对于技能这块,也是要突出你擅长的技术栈,弱化甚至不用去写一些你不熟悉的技术栈。有些人在技能方面就是在罗列一些技术名词,这样毫无心义,一旦面试官去问其中一些技术点,而你又不能很好的回答,是很是减分的。

读到这里,可能有些人会说,我以前待的都是一些小公司,业务简单,项目都不难,没啥可写的。但你有没有想过,你天天的开发工做,有没有痛点或者不爽的地方?好比常常经过 CV 大法拷贝代码, 你有想过抽离和复用这些模块吗?公共 JS 模块的共享,你是经过拷贝代码,仍是本身搭一个 NPM 私服?全部项目都放在一个 repo 下,编译打包速度慢,有没有想过拆成 multiple repo 或者是 mono repo?开发上线流程不规范,有没有想过参考一些业内成熟的方案搭建一套 CI/CD 方案呢?使用一些开源库遇到问题,你是去百度或者等着别人去解决,仍是本身研究源码而后去提个 PR 呢?

再举一个正面的例子,多年前在知乎上,我看到一个在小公司作小程序的哥们,由于小程序的审核特别慢,并且也不容许动态加载和经过 new Function 或者 eval 的方式运行 JS 脚本,他就想到一个法子,大体就是经过把 JS 脚本当作数据来下载,而后经过 JS 实现的 JavaScript 解释器去动态跑这些代码。虽然这种方式对开发来讲可能不够优雅,但也解决了他大部分的需求,另外这种爱折腾技术的精神,大厂能不爱吗?

除了突出重点以外,简历还须要有亮点。近几年选择作程序员的人愈来愈多,竞争愈来愈激烈,那么如何让你的简历脱颖而出,就须要你在简历中有一些亮点了。

那么什么算亮点呢,对于应届生来讲,好比优秀的学历背景、名企实习经历、竞赛获奖,知名期刊发表过论文等等。对于有工做经验的人来讲,好比名企的工做经历,有技术博客(有必定高质量的博文),作过知名的开源项目或者参与知名开源项目的共建,写过书等等。

固然,亮点只是加分项,它不能决定你是否能经过面试,但至少从简历上看,面试官会对你多一分兴趣。 不过你要记住,若是没有亮点,那就不要写了,好比我看过一些候选人的博客,内容简单,并且从时间上来看都是近期的写做,有很是大的专门为面试而准备的嫌疑;还有一部分的候选人贴的 GitHub 地址,点进去后空空如也,这些反而是减分项。

最后,简历上不要写一些偏主观的话,好比“我对技术感兴趣”,你对技术感不感兴趣,从你有没有写过技术博客,有没有参与过开源项目,或者翻译过一些国外技术文章等等一些事情就能够看出来。

面试准备

那么,一旦你的简历经过了筛选,进入到面试阶段,你须要作哪些准备呢?

首先,技术面主要是考察的就是技术能力,面试官对候选人的技术评价,一般会从基础知识、知识深度、知识广度三个方面来考察。在我看来,知识点主要是靠平时工做和学习的积累,你须要构建本身的知识体系,把这些知识点都牢记在本身的脑海中,那么面试的时候天然就能够和面试官谈笑风生。 前端的知识点多而杂,有些人会在面试前几天找一些常见的面试题来看,可是前端知识点那么多,短期想搞透是很难的。因此个人建议是要把学习融入到平时,若是是你工做中遇到的技术,那么你必需要深入理解其背后的本质,并作一些延伸学习。除工做以外,你也能够找一些和工做相关但可能暂时没有用到的技术学习,我公众号里推过不少课程,大部分课程都是很是值得学习的,我本身也作了几门 Vue.js 的课程,若是有条件,跟着名师学习要比本身踩坑效率高的多,一旦学进去了,投入产出比也是很是高的。

不要跟我说平时工做太忙没时间学习,那都是借口,即便你晚上加班到 12 点,你有没有想过你的有效工做时间是多少,中间有没有聊天、刷抖音、头条、微博,你的工做效率是怎样的,多少时间是在开发,多少时间是在改 bug,多少时间在开低效会议。

若是有心学习,天天抽两个小时不成问题,若是你真的天天 12 小时满负荷工做,那么你应该换个工做了,注意本身的身体吧。

我是反对刷面试题的,即便你在刷题,那你也不该该去背他们,而是查漏补缺,前端知识点不少,有些你没接触过的,不会也没有关系,可是你会的,你必定要把它们很好地表述出来。

为何背题没有用,举个例子,“从输入 URL 到页面渲染中间发生什么” 这是一个老生常谈的问题,有些候选人回答这个问题感受一看就是准备过的,可是一细问都会露馅,好比 TCP 的三次握手,每次发了回了什么样的包?浏览器解析文档过程当中,遇到外链的 JS,会不会阻塞渲染,遇到外链的 CSS,会不会阻塞渲染,若是阻塞了,缘由是什么,若是没阻塞,缘由又是什么?一道题的背后,每每蕴含着很是多的知识点,若是你知识蜻蜓点水似地只背大体流程,意义并非很大。

有些人可能会说,这道题细节太多了,我不可能都会啊。确实是不少,我也并不要求你所有掌握,我想表达的是,你能够从这道题背后,延伸学习不少基础知识。若是你不了解其背后深层次的原理,你去作性能优化基本都是无从下手。可是,若是你掌握的细节越多,就能说明你的知识储备很丰富,有些时候会让面试官眼前一亮。

其次,面试过程当中面试官一般会问你简历中的项目的技术难点,技术挑战,你在其中的角色,以及怎么去解决其中遇到的问题的。这块是能够好好准备一下的,由于这里面不只能体现出你的技术能力和思考能力,还能体现出你的表达能力。所以,平时多作技术分享,有机会参与一些述职演讲都能很好地帮助你提高这方面的能力。

另外,据说如今不少大厂内卷严重,面试喜欢问算法题,那么要不要突击刷算法题呢?

在我看来,算法题的学习也是平时工做积累下来的,好比背包问题、图和树的遍历、贪心算法,在工做中我都接触并实践过,那么天然对它们的理解更加深入。

若是你确实工做中接触不到什么算法题,但你对算法感兴趣,能够抽点时间去学习一些常见的数据结构和算法。除此以外,你也能够去看一些源码,也能学习到一些常规算法的实现。在我看来,代码看的多了,写的多了,天然能够接触到算法相关的知识。

固然,面试官出算法题的目的也不是要考倒你,一般这只是一个加分项,主要考察你的思惟能力,若是面试中真的遇到一些算法题卡壳了,你也不要放弃,至少要说一些你的思路,彻底放弃是下下策。

要记住,面试是一个平等的过程,做为候选人就是要尽可能把本身的能力和优点展现给面试官,尤为是一些匹配岗位需求的技能,能够 show 出来。不要以为本身是来找工做的就显得惟惟诺诺的,要自信一些(但不能狂),这也能给面试官留个好印象。

最后,面试前也要对你面的公司和团队有个大体的了解,若是这个团队还作过一些对外输出的事情,好比有开源项目或者是技术博客,能够重点关注一下,在面试的时候也能够聊一聊,由于人都是有虚荣心的,有些面试官发现本身团队作的事情被人关注了,天然会很高兴,对你的印象也会更好。

一般面试最后面试官会问你有什么问题须要提问的,千万不要傻傻的去问对方对本身面试的评价如何,若是你对团队感兴趣,能够问一下团队的技术栈,所作的事情,团队的人员状况,技术氛围等等,也能够问问若是本身有幸进入这个团队,大体要负责哪方面的事情。若是能明显感受本身此次面试失败了,也能够虚心请教面试官本身有哪些不足,或许能找到本身将来努力的方向。

写给面试官

对于面试官,我想说面试官有些时候表明的是一个公司的门面。面试官的专业能力是要至关过硬的,由于他须要从各个方面考察候选人的技术能力和综合素质是否达到本身的用人标准。

我在百度的时候面试官最低级别都是 T5(至关于阿里的 p6)起步,并且会接受专业的培训,而且一般面试官要和候选人平级或者是更高的级别,不然可能会由于段位不够不可以充分考察出应有的能力而不能作出相对客观的面试评价。 有些公司不知道出于什么考虑派一些段位较低的面试官出站,有些时候还会闹出一些不愉快的事情让公司的口碑和形象受损。在我看来,招聘仍是一件很严肃的事情,由于你招来的人将来是要和你一块儿共事的,因此必定要很是重视。 那么,做为面试官,你应该如何面试呢?

对于前端茫茫多的知识点,想短期内都考察一遍不现实,并且面试官也很忙,有些时候面试占据了太多的工做时间。因此个人经验是出一套难度适中的笔试题,HTML、CSS、JS、广度、编程、算法题都有涉及,而后对于工做五年以内,预期是 p6 及如下的候选人,先让他们作题。而后根据笔试的结果,就可以筛掉一批不合适的候选人。

那么笔试题经过了,面试的时候就能够针对笔试题的知识点,作一些深刻的提问,一般问到对方不会或者你不会为止,这样就能够充分考察候选人对某个知识点的掌握程度。

除了笔试题的部分,剩下的面试我建议是针对候选人简历中提到的技术深刻提问,而不要问他不了解的技术,举个例子:若是对方是一个 React 玩家,即便你团队的技术栈是 Vue,我也不建议你去问他 Vue 的问题,由于毫无心义,不过你却是能够问他 React 和 Vue 相比,他们的优劣在哪里,这样能够考察他对技术有没有作一些深刻的思考。

候选人简历中没提到的技术,可是你招聘的需求中有的,你能够问,若是候选人有了解那么你能够继续深问,若是候选人不是很了解,那么就没有必要继续问了。有些经验浅的面试官会就一些他很是熟悉的领域,或者是最近研究的一些技术疯狂提问,即便候选人已经表示这方面研究很少,这种面试体验想一想都以为不好。

固然,若是说你问了不少招聘要求的技术候选人都不会,那么说明候选人并不适合大家岗位,一般从简历筛选阶段就能筛掉这部分人。

要记住,你面试的目的不是为了考倒候选人,也不是为了炫技,你要作的是考察候选人的技术能力、学习能力、潜力等等综合能力,因此应该多让他有机会展现本身的能力,从他对技术或者是项目的描述中深挖一些更深层次点去提问,或者是从你的经验上去判断他的作法可能会存在的问题,而后再去问他有没有解决,若是没有的话,不妨问他有没有思路啥的。因此,这就要求面试官自己有必定的段位。

我在知乎看到某个资历较浅的面试官面了一些工做多年的候选人一些基础的 JavaScript 问题,由于对方没有回答出来而在知乎上挂出来,言语中充满着嘲讽的意味。我以为大可没必要这样,首先,你有没有去发现候选人其它方面的亮点,有没有给候选人充分的机会展现本身的能力,若是这位候选人真的没有答出基础的问题,确实有必定问题,但也不必在公开场合上说,由于面试中存在着信息不对称,若是有一天你去面试别人再问你一个相对基础的问题而你也刚好不会,若是也被挂出来,你的感觉又是如何?

你这样作只能说明你的面试很是不专业,对于一个工做经验久的人我不会在意他还记不记得这些 JavaScript 基础,我对他自己的要求就会很高,我会更多的去问他最近深刻研究的技术,或者考察他对于本身过往项目架构设计的理解,也可能会给他一个场景,抛出一些问题,来看看他对这些问题的理解和思考。

因此针对不一样的候选人,对应的指望和要求是不同的,对于工做五年以内的候选人,我更可能是看他的干活能力,能不能独当一面。而对于工做更高年限的候选人,除了能干活以外,我还要考察他在专业领域的深度,对于一个较为复杂,涉及多个功能点的业务系统,或者技术难度较高的底层系统,可否作良好的架构拆解并实现。

总结

扯了挺多东西,总结下来,不管你是做为面试官仍是候选人,都应该要保持持续学习,由于这俩角色是很容易互换的,在某平台看过一个段子:A 上午做为面试官去面试某个候选人 B,下午去面试遇到上午的 B 做为他的面试官,而后 B 把 A 上午刁难他的一些问题又问了一遍 A,结果 A 也没有很好回答出来。

所以,只有你的专业性足够强,才能让你不管在什么角色,都可以游刃有余,谈笑风生。可是,没有人能够随随便便的成功,那些你眼中看到的一些大佬,背后都付出了不少的努力,因此加油吧~