面试官如何进行一场技术面试

4,997 阅读13分钟

在当前职位竞争激烈的工作背景下,技术面试是一个很热门的话题。但更多文章是站在面试者的角度来分析,告诉你如何准备关键基础知识、如何调理心态,甚至收集大厂常见的面试题来进行题海战术,最终目的都是为了帮助我们通过面试考核,获得预期中的工作职位。个人认为,面试官的面试准备、沟通、评价工作同样重要。如何识别优秀的候选人,如何帮助团队找到更合适的工作伙伴,对面试官的技术能力、个人素养要求更高。同时,长远来看,人才积累是性价比最高的投资,招聘当前条件下最适合的人才,对公司、团队的整体收益价值也更好。

这篇文章的原型本来是几个月前,自己根据最近几年在不同公司、团队的面试官经历,整理而出的一些总结、心得。而最近一次偶然的机会,恰好跟几位朋友聊到相关话题,有感而发,所以重新整理了下内容(主要是移除了一些公司、业务的敏感信息),期望有更深入的探讨空间。

这篇文章更适合有面试官背景或者即将成为面试官的同学阅读,尤其是刚开始接触面试官的角色,不知道如何进行技术面试的同学。

一、面试官的面试流程

对面试官而言,一个完整的面试流程大概会经过三个阶段:

  • 面前准备
  • 面中沟通
  • 面后评价 我们下面会从这三个方面来聊聊具体的操作细节。

二、面前准备

无论候选人还是面试官,都需要做面试准备。根据个人经验,面试官的准备工作可以主要集中在以下几个方面:

  • 团队职位预期
  • 候选人基本情况
  • 面试流程
  • 面试问题

2.1 明确团队职位预期

首先,我们需要清楚当前团队的职位预期是什么。避免由于跟候选人的目标偏差较大导致浪费面试的精力、资源,需要知道面试也是一种成本付出,也要考虑效率和产出。

职位预期可以理解为:假如候选人来到团队,我们期望候选人能去执行什么事项,能去承担多大职责,能给团队创造多大价值。 大家都喜欢动手能力强、发展潜力大,技术能力、个人素质都很不错的同学,但在实际面试中很少会遇到这么完美的候选人,我们更多的时候是要评判候选人是否可以在预期范围内为团队带来更多收益。

另外,有些团队还对候选人的教育背景、管理经验、技术能力、当前职级等有比较特殊的要求。这个时候就需要特别注意,发现不符合条件的时候应该尽快提前终止面试流程,减少后续消耗。

2.2 了解候选人基本情况

作为面试官,我们更多是通过简历中来初步了解候选人的基本信息,如工作年限、教育背景、技术栈等,这些信息对我们初步评判候选人能力、后续准备面试问题帮助都很大。

很多情况下,面试官会从简历中推断自己的初步评判结论,后续面试过程只是在一步步验证自己的结论、矫正误差。所以,简历中的信息对候选人、面试官都很重要。

有些时候我们也会在简历中遇到一些不太符合常规的信息,如毕业时间、工作时间等,可以提前跟 HR 或者候选人沟通下,保证双方认知一致。毕竟现在这种社会背景下,造假的成本还是比较低的,为减少后续麻烦,需要提前排除这些意外因素。

2.3 沟通面试流程

一定要提前跟 HR 或者候选人做下沟通,明确自己进行面试的时间、方式、流程等信息,为面试过程中的问题花点时间做准备。同时,提前规划自己的日程,避免工作安排冲突。

面试的形式会给我们的面试效果带来一定影响。现在很多公司都会在正式面试前进行一轮电话面试,大家都清楚电话面试不太适合考察编程能力,这个时候可以更多侧重考察一些特定知识点的广度和深度。不过双方应该都心知肚明,电话面试更多情况下只是为了考核候选人是否具有一定的基础常识,提前做候选人过滤,来降低大量候选人面聊的时间、人力成本。

加入面试过程需要特定场所的,一定要提前预定,避免临时预约不到而导致面试无法正常进行的尴尬场景(我曾经待过的一家公司,会议室就是一种极其稀缺的资源)。

2.4 准备面试问题

为了保证整个面试流程顺畅,我们需要提前了解清楚候选人的背景信息,准备好面试问题。

面试问题的设计有很大的技巧性,虽然很多有价值的信息都是在面试中临时问题引申而来的,但提前准备的面试问题依然具有很强的指导性,方便我们确定双方深入沟通的具体“大纲”,让面试过程有的聊,不尴尬。

我们应该如何制定题目?个人认为可以从一下几个方面来考虑:

候选人项目背景

主要用来了解候选人对相关业务的了解深度,是否有足够的业务场景处理经验,是否在长期的业务支持过程中得到个人成长。

我们举几个问题示例:

  • 项目 A 产生的业务背景是什么(考察对项目 A 的了解程度)?
  • 自己在项目 A 中主导了哪些功能开发(考察候选人的参与程度,对项目的贡献大小等)?
  • 你是如何解决项目中遇到的 B 问题的(考察候选人处理问题的前期调研、方式、手段等)?
  • 为什么选择方案 C 而不选择方案 D 来解决(考察候选人多角度思考、解决问题的能力)?

候选人技术栈

主要用来了解候选人基础知识水平,判断是否具有满足在当前团队进行业务开发、技术探索的能力。

我们举几个问题示例:

  • Vue 如何实现数据双向绑定的(考察对框架底层原理的了解程度)?
  • 假如开发一个简易的 MVVM 框架,你会首先处理哪些问题(考察对框架本质的认知)?
  • 你在业务开发都是如何使用 vuex 的(考察基本的使用方式、最佳实践等)?

候选人工作年限

主要用来了解候选人在预期年限的能力范围内所处的水平,判断后续的一些发展潜力,题目的形式可能更多样化些。

我们举几个问题示例:

  • 项目 A 的整体架构是什么样的(考察候选人对项目的认知高度)?
  • 浏览器的渲染一个页面的流程是怎样的(考察候选人对相关技术原理的认知程度)?
  • 如何实现多个整数数据中查找重复数据的功能,时间、空间复杂度如何计算(考察基础的编程能力)?

候选人管理状况

主要用来了解候选人在技术管理方面的能力,如没有相关管理经历,可以不设定相关题目。

我们举几个问题示例:

  • 当前团队中,你负责几个同学的日常开发工作?
  • 如何在个人成长、业务开发、团队收益之间达到利益最大化?
  • 如何帮助团队内的新同学快速成长?

三、面中沟通

开始正式面试前,最好先打印一份候选人简历,方面面试过程中随时查阅候选人信息(另一方面也是对候选人的尊重),并准备一两张白纸和笔方便自己记录相关信息(为后续面试评价做分析)。

一定准时联系候选人,一定不要迟到,特殊事由可提前跟候选人沟通下。疫情期间远程视频面试比较常见,我们需要提前调试好本地设备,开始面试流程。

面试具体过程因人而异,但还是有一些环节是必不可少的:

  • 面试官介绍:如公司没有强制要求,可以不说明面试官个人相关信息,可直接说明为 XX 公司 XX 团队技术面试官即可。
  • 面试流程介绍:可以简单说明下面试相关信息,如持续时间(20~45 min 为宜)、问题处理方式(如遇到不清楚的问题可以跳过,缓解候选人压力)等。
  • 正式面试过程:一般按照准备的题目开展面试过程,可以根据情况临时补充一些问题,能达到自己了解候选人整体情况的目的即可。
  • 候选人反问环节:面试最后可以问下候选人是否有想要了解的内容,可以适度描述一些团队的正向宣传内容,切记要适可而止,禁止涉及公司内部隐私(如产品战略规划、员工薪资情况等)。
  • 结束环节:尽量不要直接告知面试结果,只需说明会将情况反馈给 HR,由 HR 同学沟通后续面试流程,从而避免产生一些不必要的尴尬。

针对正式面试过程,也有一些固有的套路可供参考:

  1. 开始可以让候选人先花一分钟简述下自己的工作、项目经历。 一方面,可以让候选人缓解下压力,这样在后续沟通过程中可以更好发挥。另一方面,我们面试官可以快速判断下候选人描述的情况跟简历内容是否匹配(简历造假、信息不匹配的情况很常见,基本遇到就铁定不会有后续结果了,快速决断避免后续浪费时间)、是否符合公司/团队要求的“及格线”(教育程度、经验年限等,如工作 5 年,前端只有 1 年开发经验,而我们想要一个高级前端开发,遇到这种情况很少能符合岗位预期)。

  2. 发现简历信息多而杂,不知道如何下手时,可以让候选人自己介绍下技术挑战最大的项目。 通过候选人对技术挑战大的理解和回答,可以快速预估出候选人的能力“天花板”有多高。然后,再通过候选人详细描述和双方沟通,基本可以认定候选人的业务处理能力、动手实践能力和项目规划能力。

  3. 在准备的问题基础上,可以适度考虑“压力”提问。 针对项目中的特定领域问题,连续不断追问一些具体实现、底层原理、业务逻辑等,目的是为了让候选人更彻底的去回答为什么、是什么、怎么做、怎么评估、怎么优化的问题,从而更全面了解候选人在开发过程中的调研广度、思考深度、执行力度和结果高度。“压力”情况下,候选人是否依然表现符合预期,是考察发展潜力的重要标准。知识的广度和深度作为额外补充,两点结合起来就可以推断出候选人的技术职级。

  4. 写一写算法。 算法是最适合考察动手能力的方式,无论什么职级的同学建议都考核一下算法代码实现。为避免大量刷题同学碰运气的成分,建议提前准备一些算法时间/空间复杂度分析、算法优化等更高程度的问题,能更真实的反馈结果。过去有候选人曾因为面试流程不安排算法而觉得面试流程不专业,所以为了提高公司的“逼格”,算法环节最好不要省略。单千万别提难度太高的问题,有限时间内除非候选人有相关经历和背景,不然很难达到预期考核效果。我们只需要做一些稍微有点挑战或者需要灵活变通下的题目,来考察候选人解决问题的思路和编码能力,能否真正写出得到预期结果的 code 反而不那么重要了。

四、面后评价

相较前面两个步骤,评价部分相对而言流程比较规范化。我们评价候选人的总体原则是:真实描述、客观评价

真实描述是指,评价中的面试记录内容一定要是面试官和候选人的原文记录,即使有些是错误的提问或者回答也需要真实记录。

客观评价是指,按照团队预期和职级标准,在不参杂任何外界条件的影响下,根据自己的判断来最终认定候选人面试结果和预估职级。

最后,如果觉得不适合当前团队需求,但又觉得个人能力不错,也可以考虑转推荐给其他部门,珍惜公司辛苦搜集整理的人才资源。

一个标准的面试评价模板大概是这样:

【面试评价】XXX - 前端工程师 - 初面
面试时间: 2020-10-01 10:30
面试地点: XXX 会议室
面试官: XX
面试结论: XXX 符合当前职位预期技术能力要求,通过当前轮次面试。后续面试轮次可重点考察 xxx 方面的能力。
面试记录:

    1. Q: xxxx ? A: xxxx.
    1. Q: xxxx ? A: xxxx.
  • ... 面试总评: (可以详细描述下候选人业务、技术能力如何,发展潜力如何,自身优势、劣势,是否适合当前团队需求,适合那些团队类型等等)

相信通过上面对一些面试环节的分析,会让你对面试官的面试工作处理的更加游刃有余。

五、总结

本文提及的面试内容是根据自己以往的面试经历总结而出的面试心得,仅供大家参考借鉴。不同公司、团队有不同的业务背景和要求,希望大家可以在本文基础上结合自身诉求推演出一套自己团队的面试方法论,成为更优秀的技术面试官,从而创造更好的团队价值。