浅谈如何做好一名技术面试官

前两天有人找我周一给大家做个做个技术面试的赋能培训,我上公司内网找一下有没有合适的赋能材料,想一下偷懒,结果没找到,最后还是得按自己的思路来,顺便借这个机会总结一下以往的经验教训。

结合当前团队人员招聘的现状,我主要讲几个方面的事情:

  • 面试官的原则和心态
  • 岗位要求的解读
  • 技术面试的参考做法

面试官的原则和心态

首先,面试选人是非常重要的工作(如果不认同,请绕道)。作为技术团队来说,技术面试尤为重要。但目前面试过程还是比较随意的。作为面试官,希望做到:

  • 相信自己的判断,甚至这只是第一感。本来面试时间就不长,能力可能没挖掘出来,问题可能也没暴露,不苛求但要做出自己的判断。
  • 不要受招聘进度过度干扰,最终毫无底线。项目组有时候会要人要得很急,但我们不是靠堆人来做工作,要在短期掌握业务也没那么容易,加人的短期效果并不明显。另外,来面试时间也要有一定规定,约定人数,特定时间段,避免过多干扰工作。
  • 谨慎招聘低于平均水平的。什么是平均水平,主要看你周围的同事。这样才有可能让团队向上走。如果遇到水平实在太差,严重造假等情况,也要反馈,要求前头把一下关。
  • 你选人,人选你,面试你代表门面,平时要充实自己,不要被人笑话。现在的岗位分类还是比较细的, 面试官也要专业对口的,例如不要java的去面c++岗位的。
  • 不要一来就非常奇怪或偏门的问题,要循序渐进。

岗位要求的解读

我们的目标是寻找人员能力经验和岗位要求匹配度比较高的面试人员。但岗位要求,说真的,市场经济,有多少钱办多少事。但无论怎样,在团队中如果有太多小白,协作成本非常高,加人只是负作用。

所以,对岗位的要求,实际面试中,也不是完全参考的。要看面试人员的经验和岗位要求的匹配度,也要看面试人员的掌握程度,相关技能的适配程度。岗位要求分清楚有哪些是必须的,不然培养成本太高,有哪些是可选的,有就挺好,没有关系不大。人员能力中哪部分是强项,哪部分是弱项,即使和岗位要求有些差异,但是不是学习起来并不会太难?

例如我们招聘大多数技术岗位,都是要求有java的编码经验,很可能是必选的,因为我们说java通常会附带相关的框架经验,那么只有python经验可能转过来成本比较高,就不合适了。

但如果要求mybatis框架经验,面试人员没用过,但面试人员用过其他的,例如hibernete,这可能就也可以接受,但你要了解mybatis和hibernate的差异,知道关键点在哪,根据关键内容的掌握程度来判断新框架的学习成本。

技术面试的参考做法

N连问的考察方式

这种方式在网上也比较常见,就是针对同一个知识点,多提几个问题来考察应聘者对知识和技能的掌握水平

比如对方的简历上写着熟悉多线程,你就可以这样来提问。

1)你了解多线程吗?

对方可能会回答:“了解”、“熟悉”、“用过”。你可以接着问。

2)你们多线程用在什么场景,用到库之类?

对方可能巴拉巴拉说一堆。对方可能会提到线程池,你接着问。

3)JDK自带的线程池机制是怎样的?

那么还可以接着问。

4)JDK自带的线程池默认带了哪些实现?

对方可能能举出有哪些实现,每个实现有哪些缺点之类。那你还可以继续。

5)怎么评估线程池大小,能不能动态调整池的大小?

这个可能就比较麻烦了,对方可能能答上一些,那你还可以在操作系统机制,实现方案上继续讨论。

项目经验描述+引导

不得不说,很多面试人员,简历写的很不好,再加上自己介绍也比较简单的。

我们可以先让面试人员介绍一下自己熟悉的项目,有什么重要的业务流程。这个业务流程采用什么技术实现的。

对方可能会说一下业务流程是怎样的。(我们主要关心有什么比较典型的业务场景,和技术方案),用的什么框架,用了什么中间件,大体是怎样的巴拉巴拉。

你可以问问为什么这么做,有没有其他方案。

也可以问问各个组件是怎么通信的,数据结构是怎样的,巴拉巴拉..

当然,你关心或感兴趣的地方,可以用N连问的方式挖掘一下。这个过程主要是感受一下面试人员的分析、理解的能力如何,沟通能力如何,能不能把事情讲清楚

“走马观花”找亮点

这个主要是面试之前做的,拿到简历之后,浏览简历看看待会问什么问题,同时看看有什么有趣的、不同的内容,提前准备

我一般会关注一下:

  • 工作经验怎样,工作经验长的会根据情况提高期望,工作经验少的多关注基础、学习能力。
  • 知识面怎样,到时候可以多关注会什么,而不是不会什么。例如一般前端,那么会点后端就是加分项,当然主要关注点还是前端能力。
  • 有没有总结分享的习惯,例如有没有博客、开源项目之类,有时间的话我会上去看看。
  • 有没有学习的习惯,例如有时候会问问最近学什么,看什么书,当然也要求讲讲具体内容是什么。
  • 学历怎样,行业经验怎样,有什么竞赛经验之类(或多或少会有第一印象,但我们要尽量避免定型)。

白板面试

主要针对开发人员的,也经常使用,都是一些算法题。虽然很多人抗拒这个,但在难度适中的情况下,我还是比较乐意推荐的。一般的初中级开发人员,我选择的问题:

  • 不用一些特别的算法,例如动态规划之类
  • 代码长度不长,在20行左右的核心逻辑
  • 避免技巧性过高、过于数学化的情况
  • 需要顺便回答一点算法时间/空间复杂度判断或优化

总结

从团队的角度,每个公司每个团队都有自己的风格,所以招聘风格也是有所差异的,有些精益求精,有些大包大揽,有些深挖底层,有些硬钢算法。

从个人的角度,我个人虽然参加过很多次面试,但回想下做得也并不是很好,能趁此机会总结一下也好。我发现,很多时候前面一两分钟的感觉很大程度就决定后面要不要,基本上问问题也有一部分是在照顾对方情绪而已。

所以很多东西无所谓好坏,形成自己的风格和判断最重要。