流形:我是如何面试一位前端工程师

8,978 阅读6分钟
原文链接: zhuanlan.zhihu.com

最近面试不少,发现团队同学面试的问题以纯知识点为主,提问方式很机械。对于现在前端面试总是被人吐槽面试与实际的工作完全不搭边,和面试官面试方式有很大关系。这篇文章主要是记录我是如何面试,以分享给大家作参考。希望对你有用。

扎实的基础

很多面试者的简历中一定会写各种『精通』,这是非常有自信的表现,对于基础的考察,最好的方式还是笔试。

计算机学习无非也包括记忆和理解。前期记忆的内容颇多,也比较容易上手给人一种很快就可以『精通』的错觉。而恰恰忽视了理解的重要。理解能力是对我对是否能够进入这行工作最先考察的内容。分两个方面

1. 对已知的理解深度。对你掌握的知识,一定会有所考察,是肤浅还是真正的精通。

我喜欢问 setTimeout (fn, 0) 执行顺序,如果能说到 macroTask 机制,是出自标准规范的 job 和 task 处。还能讲上一些执行优化的策略,就基本满分了。当然现在前端发展太快,框架本身就体现出很高的复杂度,比如我不会问 React 生命周期触发顺序这样的问题,更多是问些设计上的问题,setState 的设计等。

2. 对未知的预判。对你未了解的知识是否可以举一反三,判断运行过程。

我喜欢问可视化相关的问题,大部分人都没做可视化工作,API 自然不是重点。比如在没写过图表的前提下,怎么抽象数据与图形的映射,怎么去组合不同的图表部件。

纯知识点就是太死板了,一般只是校招同学会这么问。我更喜欢以场景展开,比如我常问的一个校招问题,有一块区域要展示一组数据,但数据需要请求 3 个接口才能计算得到,请问前端是怎么做的,如何优化,前端什么情况下可以放弃合并接口的要求。这个地方至少会考察到异步,本地缓存,延展下会问下并发,竞态,协程等。答得好不好完全在于你的知识面的深度和广度,能否一直让我延展下去。

我常常说面试只看前5分钟的感觉。这种感觉就来源于他是否有非常扎实的基础。

过去的思考

在工作中磨练过的同学,我最看重的是解决问题的能力。前端工程,以工程为主。我自己一般在面试前会花10-20分钟时间根据你简历中的经历来准备你『擅长领域的问题』。

这里非常需要简历有故事性,比如过去工作的项目背景,项目的内容和成果,你做了些什么。如果有网站或作品就非常棒了。或你在实验室研究的内容,有没有相关的 paper 或是开源工程。简历中一定要体现出你的价值。如果没有,我一般会先问一个问题,在过去一年中你遇到的最大挑战是什么。其实这个问题很难回答,尤其是你自己在过去的工作中没有总结和思考的话。

面试官要考察:

1. 是否有抽象。有很多问题本身都非常小,但是否能以点及面,考虑更大的层面。比如做不同项目,有没考虑体系建设,怎么考虑历史库的升级及维护

2. 是否有向前看。前端发展非常快,有很多的新内容。对新内容的判断,怎么使用也是考察的重点之一。尤其是为什么要用某个技术这个问题是我常问的。为了技术而技术,考虑问题的全面性就会差很多。

互相交流难题

我们大老板曾对我们说,面试不是去问倒别人,来显得你多牛,而是去尽力找对方的亮点。

每一次面试对我来说是一次非常好的交流机会,我在公司面试过程处在中间的位置,到我这里的同学已经接受过技术的考验,我相信有能力可以提出更高的要求。

有时我问的问题,会拿些非常棘手的场景,我自己都不知道最佳实践是什么,至少我们没有做好。很多时候,我很想知道你有没有好的答案,我也很想把我的想法分享给面试者,这是一个互相交流的过程。有时,被面试的同学有些非常好的思路,我也非常兴奋。

最近面试到一位同学,做过全链路的数据采集,但没有用到分布式架构,这让我很意外。我完全忘记在面试,而在聊他们是怎么做的,遇到性能和同步问题怎么解决的。当然,我把我的方案也和他聊了一下,总之还是非常愉快。

气味相投

说到底,面试是在选择你的同事,你的下属,或帮合作同事选择。你的一纸通过意味着得到了你的认可,这种认可一半是出自技术,一半是出自气味相投。

作为面试人,我一定会在最后问『有什么想了解我们团队的么』这样一个问题。只要不在机密范围内,我都会和你介绍我们的工作内容,愿景是什么。希望你能够了解我们,是不是你想要去的团队。

作为面试者,我一定希望你有足够的兴趣来我们团队,预判团队工作是否有挑战,公司的远景是什么,是否以技术为驱动力,我是否有合适的位置等。

写在最后

对于面试者,面试过程只是一个时刻,你的过去和将来更为重要。多思考在工作或学习中,还有什么问题值得你去解决的,尝试不同的方案,总结失败和成功。最为关键的是将来的你要成为什么,去往这个方向努力。

对于面试官,你需要找到每一个人的闪光点,学会欣赏每一个人,从这个过程中去寻找比你优秀的伙伴。