Faster, Higher, Stronger
更快,更高,更强

前端高端岗位面试总结

6月份出去面试了很多公司,大的、中小的都面了。因为自己平时业余时间做了很多私活吧,主要精力不是放在源码研究、设计模式这些地方,但是私活项目也不适合放到纸面上谈,所以总体面试下来的结果就是:

  • 我没法在不怎么准备的情况下拿到类似阿里P7这个级别的offer;
  • 部分中小公司可以给到前端leader的岗位,但是薪资上谈不拢。

这是在预料之中的,所以我一开始的计划也是从年中(6月份)开始,每个月都出去面试几家,有碰到合适的就跳槽,没有就继续呆着,试试看能不能年末在公司拿到一个资深的title(概率very低),然后过完年不管有没有这个资深title我都一定会跳了,不能继续在现在这家公司了。

但是运气好吧,拿了现阶段对我来说不错的offer所以就直接跳了。在这里我会提到一些面试题,但本文主要不是来讲面试题和答案的,也不会将题目和公司进行对号入座。我觉得这样做没有太大的意义,本文主来讲一些规律性的东西,其实你掌握了这个规律,并花上1~3个月的时间,高级别title的offer是很容易拿的。如果你确实对某某公司的面试题感兴趣,直接去看准网、牛客网、知乎这些地方搜搜就行了。直接看面试题可能会有种陷入细节的迷茫感,希望看完本文后能有个自上而下的全局观,战术上重视面试,心态上渺视之。

注:本文所谓的高端岗位泛指资深、架构以及前端leader

另注:针对面试,写了一本小书,还在更新中,尚未完结:《前端程序员备忘录》

另另注:面试要调整好心态,有些公司的面试是会让你很不爽的,有些公司的面试会让你意识到差距让你更有学习动力,有些公司的面试会打击到你,也有些面试会让你受益匪浅,不管如何,心态一定要稳,戒骄戒躁。

另另另注:其实通过阅读本文,你可以发现即使拿到了高端岗位,也不代表你的能力就很强,最多只能说明你大概率不算差。写代码本质上和写文章并无区别,当你能写出来有条理的文章时,你就具备竞争高端岗位的能力了,当你能写出来有条理、成系统的书时,你就具备写作良好的工程项目的能力了。

好,让我们开始。

一、面试官提问方向

面试官提问的方向无外乎是下面这几种:

  1. 根据面试时的自我介绍来提问;
  2. 根据简历上技能点来提问;
  3. 根据简历上的项目经验来提问;
  4. 问和简历无关的基础问题(基础问题一般都会问一些,但是一般不会问太多这方面的问题,因为除了常规的一些基础问题外,很多其实是记忆题了,只有极少数公司会一直问这块,反正我只面到过一家从头问到尾一直问这种问题的,这种公司你忽略就好了);
  5. 问和简历无关的高阶问题(不含算法题)。
  6. 算法题。
  7. 问主观题。

看着就是一堆废话,哈哈。不问这些还能问啥?其实和基础岗位的前端面试相比,面试差别还是很大的。

二、自我介绍

一般最开始都是自我介绍之后根据你自我介绍里提到的亮点来展开问(简历中的技能点和项目经验啥的,其实一般你自我介绍的时候就会介绍到,所以也可以归类到一起)。所以自我介绍是要好好准备的,如果有亮点内容一定要说出来。性别年龄身高这种就不用介绍,说下比如主要呆的公司、所在团队的规模及自己的角色、任职期间主要工作内容、工作中做的出彩的地方、工作之外写了啥项目这样。面试要讲诚信,而且这块也是后面展开面试的关键内容,所以据实说即可,要想表现好,平时就好好做事,不要动歪脑子走编造的方式,这些背调一下就查出来了。

这块和基础岗位面试的区别在于,在一个比较大的概率上,如果一个公司内部有初级、中级、高级、资深、架构等多个级别的前端人员时,对初级岗位的面试可能不太会让资深或者架构级别的人来面试你,让中、高级前端来面试你的可能性会比较大;反过来,对高端岗位的面试,让高级及以上的人来面你的可能性较大(多轮面试)。这里有一点需要注意,其实从对方针对你的自我介绍展开的提问内容,是可以大概估计他们的能力水平的(当然误差也会很大),有些人问的比较表面可能只是因为刚好你涉及到的这块他没怎么接触过,仅此而已。

三、初阶问题

  1. vue生命周期(以及比如各个生命周期做了啥事)。
  2. react生命周期(以及比如父子组件之间各个生命周期触发的顺序)。
  3. 事件循环、宏任务、微任务(为啥要区分微任务和宏任务、各种打log问输出顺序)。
  4. 原型与原型链。
  5. vue插件的写法。
  6. 闭包。
  7. ES5之后出来的语法特性。
  8. 跨域处理。
  9. 缓存。

四、高阶问题

基础岗位的前端面试,基础问题问的会比较多,高端岗位这块问的其实不多,会多问一些高阶问题或者主观题。而且经过我这一轮送人头,发现大家问的高阶问题都是惊人的一致(当然不是完全一致,但是重复率很高):

  1. 谈谈设计模式:架构师重点问题,由此可以衍生到比如观察者模式的实现(promise、vue里面EventBus的实现等);
  2. 谈谈vue和react的diff。
  3. 虚拟列表/长列表优化。
  4. react hook里常用哪些、useState原理(顺序问题)、定时器实现。
  5. HTTP。
  6. 从浏览器地址栏输入url回车到看到页面的过程、浏览器进程/线程。
  7. redux原理(状态机)。
  8. react setState异步同步问题。
  9. vue的实现原理。
  10. babel编译(如const/let的编译结果、polyfill方式)和AST(抽象语法树)。
  11. 安全(XSS、CORS、SameSite等)。
  12. webpack优化、生命周期。
  13. npm包、按需加载。
  14. 微前端。
  15. vite。
  16. 性能上报、错误监控、日志系统。

其实你可以看出来,这里:

  1. 有些话题,比如设计模式,是时效性很长的话题。
  2. 有些话题,比如react hook是时效性很短的话题,有点类似于读书时代政治考试里每年都会变的热点时事之类的。
  3. 有些话题,比如虚拟列表,是很实用的。
  4. 有些话题,比如babel编译结果,是很不实用的。
  5. 只要不是牛人扎堆的地方,问来问去就是这些,还能问啥呢?

有些人会说知道一些原理啊之类的,对平时编码是有帮助的,这当然没错,但是一方面你要考虑你的时间成本,不要去浪费生命,另一方面你要明白看不看源码懂不懂设计模式(理论),对是否能写出好的工程项目而言,并不是充分必要条件,完全是不充分不必要条件。在清楚这两方面的前提下,你再做出自己的要花多少精力在这块的决定会比较好。其实没必要每个话题都了解很深入,重点几个话题很出彩就不错了。

无论什么时候,靠谱的技术负责人,都是想找对团队有帮助性价比又高的人,不会以面倒你为目的的。以面倒你为目的的技术负责人,你去了干嘛呢,去接受职场PUA的洗礼吗?这是换位思考后很容易得出的结论,事情的本质就是这样简单,不需要怀疑。

五、算法问题

算法题基本都有问。其实问的都不难,虽然我答的不怎么样,不过难度怎么样是看得出来的。基本都是LeetCode里的题,应该都是些初级题。这方面我没啥经验就不总结了。但是如果你其他方面优秀的话,这块是不会卡死你的。明显感觉这块对面试结果的影响很弱,所以除非你时间比较空对解题有兴趣,否则不建议刷LeetCode。

三四年前,前端面试时涉及到的算法题还不会涉及到LeetCode,那会就是遍历下树这样。虽然不是难题,但是也能看出来是内卷出来在往应试教育考试的那种方向演变。虽然不建议刷LeetCode,但是基本的数据结构和算法是要了解的:

  • 快速排序、冒泡排序、二分法定位。
  • 队列。
  • 栈(普通栈、单调栈)。
  • 链表(单链表、双链表、循环链表)。
  • 二叉树(递归遍历、非递归遍历、逐层遍历、前中后序遍历)。

如果要攻算法题的话,LeetCode上直接刷初级和中级的题目,忽略高级,别瞎折腾。

六、主观题

如果自我介绍有有提到技术/管理带队的话,或者你的技能树比较广的话,容易被问到一些主观题,自由发挥的那种。

  1. 根据你的知识体系介绍下一个研发体系的从前到后的细节(开放题,啥都可以说,比如刷CDN、客户端及热更新、微前端、微服务、redis及其他数据库、定时任务、dubbo、nginx/负载均衡、apache、pm2部署、war/jar包部署、单点登录、APP内H5资源包版本管理、acess token & refresh token等等)。
  2. 在团队里扮演的角色,如何带团队。可以从基建建设、团队能力培养、制度建设、项目管理等角度展开论述。

七、总结

这一波面试下来,确实感觉这种面试很好套路,如果你花上2~3个月的时间把上面说的问题好好理理,看看网上的分析,部分内容翻阅下源码,然后简历里自己有提到一些在公司里做的比较出彩的事情,以及有一定年限的实际工作经验的话。拿到一个高级以上级别的高端岗位是很容易的事情。

突然觉得网上那些速成进大厂的视频,虽然我没去买过那些课程,但恐怕也并不是无中生有的,里面应该有些还是有(对面试来说的)实用价值的。

Business is business。要想拿高薪,还是要付出一番准备的。我们在提升能力的时候,一定要有个尺度去区分不同能力,找准自己的持久的核心竞争力,有侧重点地去准备。这里我把能力氛围高门槛能力和低门槛能力,他们的区别更多还是时间上的门槛高低。

7.1、低门槛能力

7.1.1、天花板不高的技术深度上的能力

有些能力,门槛是比较低的,可以短时间内提高。比如算法题。我不建议你预期自己年龄大了之后还要和刚毕业的同学比算法题解题能力。这种题目,长时间不接触会手生的。而且人家刚毕业的学生愿意花时间的话,加之这些题目在难度上天花板都不高,在这方面互相之间是拉不开差距的。这种能力,一般人都是在打算跳槽前半年内准备的。

其实就像本文中列举的那些高阶问题,也都是门槛很低的。和算法题性质并无太大区别,唯一的区别是相比算法题,对工作而言实用性更高一些。判断这个某种能力是否是低门槛能力,可以通过判断【一个应届生是否在理论上容易在较短的时间内在这方面达到甚至超过工作多年的从业者的水平】来估算。

题目里特意加了定语【天花板不高的】。我觉得一般人应该能看懂我的意思,但是我还是稍微解释下。这就和考100分的例子一样:

有些人考100分是因为卷子满分只有100分,有些人考98分是因为能力就只有98分。

在这个例子里,天花板就是100分,就算98分的人和100分的人能力上差距很大,实际分数就是只差2分。商业编程领域,大部分岗位里的从业者从事的都是应用类工作,并不是研发性质的,天花板高度就在那,互相之间是很难拉开差距的。

7.2、高门槛能力

7.2.1、管理能力

这个需要实打实的经验,而且由于此类岗位的稀缺性,这种经验的门槛相对较高,是非常适合从业多年的程序员积累的能力。这种能力描述起来相当主观,通常不容易直接比较两个人的管理能力孰强孰弱。所以一个很直接的比较方式,就是比较双方曾经带过的团队规模,可以说,一个带过100人团队的管理者,和一个带过10人团队的管理者,他们管理能力上的稀缺性(而非强弱)就和他们的团队规模一样,根本不在一个数量级。一个人,在下面没有二级团队负责人/小组长的情况下,通常能带10人左右,对应的就是部门经理,带100人的就是CTO。岗位稀缺性上的差距,决定了他们在人才市场上的稀缺性也存在很大的差距——虽然管理能力上可能带10人的人更强一些。

题外话,如果某天你所在的位置比较高,需要招一个管理者的时候,不要盲目追求应聘者曾经带领过的团队规模,你应该找那种带过的团队规模和你们公司团队规模类似,并且团队能力上都差不多的管理者(带10个P6和带10个初中级开发对管理能力上的要求是不一样的,后者更考验如何用有限的牌玩好游戏的能力)。

7.2.2、技术广度上的能力

不知道大家有没有听过BCrypt,它是一种为保存密码设计的算法,相比MD5要慢很多。它之所以安全的一个很大原因就是慢,导致不良分子想要暴力破解密码需要的时间成本很大以至于“不可能”。

技术广度上的能力就是类似这样的一种能力,因为编程领域的细节知识点太多了,导致很多人只会一个端甚至只会只会一个框架,就足以在职场吃饭了。在应用领域,广度上的积累比深度上的积累,天花板要高很多,所以也是一个门槛比较高的能力。

从个体角度考虑,确实是要分工明确才能高效进行,专业的事让专业的人做。但如果把视角放到一个团队里的话,里面其实是最好各种类型的人都有。市场是不会说谎的,你去看现在的招聘信息,前端最好有服务端经验,H5最好有原生客户端经验,诸如此类的并不少。另外,如果你参与过比如【React Native+原生】或者【H5+原生】的非套壳性质的APP的话,你就知道能在两个或者多个领域都做到高级以上的人是多么受欢迎。

另外一方面,如果你想单独做点什么事的时候,全栈会让你的前期成本更低。当经济不景气时,全栈在市场上也是最抗冻的。

赞(8) 打赏
转载需注明来源并给出来源页链接:峰间的云 » 前端高端岗位面试总结

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏