很多人都觉得当个面试官很简单,只需要随便找点题问问,顺便 pua 一下面试者就可以了。但想当一个合格的面试官,还想圆满完成面试的任务,其实还是有一定难度的。
如果你是个经常看面试经验,但是感觉面试效果总是不好。这次不妨换个角度,来看一下面试官平时都在想什么。如果你刚开始面试别人的话,也可以来学习一下如何当一个不被别人喷的面试官,并且简单快速的完成面试目标。
面试的核心目的
其实面试的目的就是一个:找出面试者的能力边界。
记住,这里的重点是"边界"。很多人拿着固定的面试题一个一个的问,问完就下一道题。面了三四十分钟,面完之后还是不清楚面试者的技术到底在哪个层次。总感觉不少题目都答上来了,有一些没题没答上来,又感觉无关紧要。最终的结论就俩字:还可以。
这不是浪费时间么,你觉得不爽,面试者也觉得不爽。
面试的目标,尤其是技术面,就是要把面试者在对应领域的能力量化。如果面试没通过,作为面试官你要清楚对方是哪些方面没有满足要求,还差多少。如果面试通过了,你要让后面的面试官有一个清晰的认知,知道对方的特色是啥,优势是啥,缺点是啥。
这一切能够达成的基础就是,你对面试者的能力有了清晰的量化。
那么问题来了,怎么量化?
面试的核心思路
其实方法很简单,就是往死里问。抓住一个问题一直延伸,直到你的能力边界或者面试者的能力边界。
通过这种方式,每问完一个问题你都可以获得一个很清晰的认知:某某技术他不如我 / 他比我强。
这种方式的过程可能会有点痛苦,因为面试者大概率会产生:"麻了,怎么这么多问题都答不上来" 的想法。但是产生这种想法不代表面试会挂,大家应该都有经历过 "很多问题都没有答出来,但是面试就是过了" 的情况。
同时这种面试效率也特别高,当面试者技术远不如面试官,面试很快结束,因为你没啥能问的了。而当面试者技术远超面试官的时候,面试也会很快结束,因为他能又短又快的回答出你的问题,直到你不知道该问啥了。
面试官应该怎么做?
现在我们来看看,基于上面这个思路,我们都需要从哪些方面着手开始面试?
1. 如何挑选问题?
首先是最重要的,如何挑选问题。
答案很简单,从简历里挑。一方面,能写在自我介绍里的内容,说明面试者有一定的信心,自然不存在(至少不应该存在)答不上来的情况。
不要上来就问八股,这年头谁还没背过几个八股?先从简历里找一些比较宽泛的问题,看对方的层级、知识有没有形成脉络。然后逐渐细化、深入,在深入过程中再问一两个相关的八股看一下对细节和原理的了解情况就可以了。
比如下面这个自我介绍,你会怎么提出问题?
- 熟练掌握React并研究过其源码,有大型的Vue、React项目开发经验
- 熟练掌握Rollup、Gulp、Webpack相关配置经验,有脚本工具开发经验,开发过脚手架
- C、B端经验丰富,对于不同技术栈能快速上手、完成业务需求
- 熟悉代码调试,能够快速定位解决问题,能够熟练使用charles、fiddler抓包代理
- 深入了解javaScript语言,对js运行机制、v8底层有过了解
- 熟悉nodejs开发,使用过mongodb/mysql+egg/koa/express框架开发
你可以这么问:
- 第一条提到你研究过 react 源码,为什么会去研究?是公司有需求或者场景遇到了比较晦涩的问题?还是单纯的想给简历增加亮点?
- 第一条还提到你有大型的项目开发经验,能讲一下你负责过最大规模的项目是怎么设计,怎么搭建的么?会不会涉及到多个端?会不会涉及到 js sdk 或者微前端?
- 第二条提到你开发过脚手架,为什么会去选择开发脚手架而不是用现成的?你都用过哪些脚手架?你自己开发的对比来说有什么亮点?
- 第三条提到你 C端 B端 都做过,能讲一下这两个方向在前端项目设计、部署、打包方面和侧重点上有什么区别么?
- 第四条提到你能快速定位问题,那假设现在交给你一个新项目,要求你一下午解决问题,你会怎么着手查看问题?有什么排除思路么?
- 第五条提到你深入了解过 js 的语言,那能讲一下你研究过最深最底层的一个模块是什么么?为什么停在这里了?
- 第六条提到你做过 node 后端开发,能讲一下你觉得 egg、koa、express 各自都有什么缺点么?如果让你做一个 BFF,你会选择哪个框架?
思维比较灵活的一眼就能看到出题的思路:以简历里的关键字为起点,结合实践、如何落地、如何做好这些方向出题。这样可以很轻松的看出来面试者是真的做过这种场景,还是只是看过了解过、单纯背背概念。
不过切记!尽量不要从你自己的经历里找问题,特别是和面试者简历八竿子打不着的。有很多面试官都因为自己之前解决了一个让自己沾沾自喜的问题,就把这个问题放在面试里去问,对方没答出来就觉得水平不行。拜托先看一下你这个问题和要考察的能力有没有关系,你这个问题是不是犄角旮旯型问题再问好不好。
之前我有一个内推同学面试完之后告诉我,面试官问了一个小程序相关的缓存问题,但是自己对这方面不熟悉,工作内容也和小程序不相关,就说了不知道,结果面试官还是不依不饶,旁敲侧击的问各种细节情况。最后结局就很不愉快,这个同学私下里也大骂了面试官一通。
所以,如果面试官的能力和岗位需求不符合,那咱可以直接拒掉简历不面试。如果面试了,咱就好好问和岗位相关的问题,不要浪费彼此的时间。
另外,还有一些比较常见的问题,比较开放,可以快速确定面试者的能力级别,这里也分享给大家:
- 你搭建过最复杂的项目是什么样的,比如有多少端?有没有 jsSDK、npm 包之类的?你是怎么管理、协作的?
- 你开发过最复杂的一个模块是什么?什么场景?复杂点在哪里?
- 你解决过最恶心或者印象最深的一个问题是什么?
- 你研究过最底层的一个技术是什么?(框架源码?计算机网络协议?node 源码?更底层的 c++ 实现?)为什么要去研究?
- 你带过团队么?最大规模是多少人?你有遇到什么管理方面的问题印象比较深的么?
2. 如何控制面试时长?
除了问什么问题之外,把面试时长控制好也是面试官的一个必修课,要尽量做到半个小时就能就能确定面试者的能力,剩下随便问点比较大的问题看一下发展潜力就行了。
那么如何控制面试时长呢?可以通过这么几点:
-
如果一个问题往下问,问到对方答不出来了,就及时停下
因为你找到了对方的能力边界,已经完成目标了,剩下的就不用浪费时间了。
-
如果一个问题刚开始就回答不出来,就往简单了问,或者说更进一步用答案提问
这种情况有可能是面试者没有理解你的问题,这时候你提示一下,对方可能就反应过来了。
而如果是对方实力不够,真没做过的话,也可以把问题搞简单一点,看看对方的实际水平在哪。但是也不用太多,如果简化两次还答不出来的话就可以换下一题了。
-
不要问场景太复杂的问题
比如你之前解决过一个问题,但是介绍这个问题的背景、前提、上下文要花很多的时间。那就不要问了,因为你们可能需要在同步对问题的理解上花很多时间,没必要。
总结一下就是,别浪费时间,找到能力边界了就下一题,问完了就结束。如果问题需要你描述很久,那就不要问。
面试官更喜欢什么样的面试者?
其实掌握了上面的内容之后,作为面试官就已经可以搞定绝大多数面试了。下面我就以我的面试经历出发,讲一下我更喜欢什么样的面试者:
1、懂得分情况讨论
这个很重要,其实很多面试官提出的问题都比较宽泛,这时候你不能简简单单的按照八股的答案去讲,最后就算答完了也会被面试官认为中规中矩平平无奇。比如下面这些问题你会怎么回答:
-
怎么解决页面在不同尺寸下的响应式问题?
-
🔴 普通的回答:可以用 css3 的媒体查询,用
@media screen
处理不同尺寸下的样式... -
🟢 更好的回答:这个要分情况讨论,因为响应式问题是一个系统级问题,不是靠单个技术就能解决的。对于简单的样式,我们可以靠 css3 的媒体查询,也可以借助一些 UI 库的栅格布局、或者类似 tailwinds 的断点功能。对于模块级别的响应式,我们可以靠 window.resize 写一个 react hook,然后根据不同的情况渲染不同的 react 组件树。这样可以更好的隔离不同端的代码逻辑...
-
-
让你设计一套脚手架,你会怎么做?
-
🔴 普通的回答:可以 commander 来实现命令行的交互,然后把接口、组件库、常见模板的之类的封装起来让业务开发调用,这样可以减轻后期的升级和开发成本...
-
🟢 更好的回答:这个要分情况讨论,因为开发脚手架本身也是有成本的,所以应该根据团队的规模、项目的进度来做不同的选择。对于刚起步、人手不足的团队,我们可以只是简单的抽取几个比较通用的项目模板,这样有新项目启动的时候直接从模板仓库 fork 就行,对于有一定规模的团队,我们先调研一下当前工作有没有什么痛点,可以开发一个基于 commander 的简单命令行工具来实现一些模板快速创建之类的功能来减轻开发工作量。对于大团队,能抽出来人手专门维护脚手架的情况,我们就可以考虑把业务项目需要的依赖、封装统一起来进行管理....
-
其实核心思路就是跳脱出面试官的问题,站在更高的角度来回答。只要能让面试官产生:"哦?这小子有点东西" 的想法,你的面试就稳了一半了。
2、有自己的开源项目、博客
很多人都知道有开源项目和博客是加分项,但是不清楚究竟能加多少分。所以觉得没有也行,但是我现在告诉你,要做,最少要有个博客,哪怕你只记录一些平时解决的问题,也是很有用的。
我就经历过不止一次,去面试的时候面试官说:"你的博客我过了,能看出来你的水平,所以咱就不问技术题了" 的情况。直接跳过八股文环节欸,这种程度还不够诱惑人么。
咱们再实打实的分析一下:
- 如果你面试的厂比较大,别人都有博客你没有,你觉得谁的胜算大。
- 如果你面试的厂比较小,别人都没博客就你有,你觉得谁的胜算大。
所以不要觉得这些东西是小时候考试时的加分题,做不做都行。有自己的博客再不济也相当于手里多了一把炸弹,有可能胜负就靠这个了。
其实很多人都有想过做博客,但是因为工作太忙 / 需要加班 / 没有时间的种种原因导致没有做下来。如果大家感兴趣的话,我可以写一篇如何最简单最高效的写出来能让面试官眼前一亮的博客。评论区告诉我。
总结一下,其实面试的关键不一定在于你的水平高低,更重要的时是否能让面试官觉得你与众不同,对于其他人选来看你有很明显、令人印象深刻的特点。能做到这一点,你的面试就稳了另一半了。
写在最后
本文的内容到这里就结束了。最后祝你面试顺利、没有工作的可以尽快找到心仪的工作!