刚开始参与技术面试时,我准备过一份很长的问题清单。
Java 集合、多线程、JVM、数据库、缓存、消息队列和分布式系统,每个主题都能继续追问。问题准备得越多,似乎越能准确判断候选人的技术水平。
实际面试多了以后,我越来越少按照清单逐项提问。
面试不是看谁知道得更多
面试官天然处于有利位置。问题由自己选择,也通常来自自己熟悉的领域。如果把候选人问到回答不出,并不能说明面试有效,更可能只是说明双方知识范围不同。
知识基础当然需要确认。不同岗位也有必须掌握的内容。但孤立问题能够判断的,主要是候选人是否接触和记住过某个知识点。
真正进入工作以后,更常见的情况是问题没有标准答案,信息也不完整。相比立即说出结论,我更关心一个人怎样确认问题、提出假设,以及发现原有判断不成立时是否愿意调整。
从真实项目向下追问
我通常会请候选人介绍一个自己真正负责过的项目,再沿着其中的选择继续问。
为什么要做,候选人负责哪一部分,遇到过什么限制,方案由谁决定,结果怎样验证。如果说做过性能优化,就问原来的瓶颈如何确认;如果提到架构升级,就问为什么不能继续使用旧方案。
真实经历有上下文,也允许候选人进入自己熟悉的领域。一个项目未必规模很大,只要能够把问题、行动和结果说清楚,往往比背出复杂概念更有信息量。
不知道答案时还能看什么
候选人遇到不会的问题很正常。
有人会直接说明没有接触过,再尝试根据已有知识分析;有人会不断猜测,直到给出一个听起来确定的答案。两种反应体现的不是知识量,而是对认知边界的态度。
工作中错误信息常常比暂时不知道更危险。能够区分事实、经验和推测,并说明需要什么信息继续判断,是一种重要能力。
表达不流畅不等于思考不清楚
面试是一种高压、陌生且有时间限制的交流。性格内向、紧张或不擅长自我展示,都可能影响表现。
因此我会尽量区分表达形式和思考内容。必要时换一种问法,给候选人一些整理时间,或者让他画出流程。面试官需要获取足够证据,而不是把第一次没有听懂直接当成能力不足。
当然,工作本身需要沟通时,表达能力仍然属于评价范围。只是它应该根据岗位要求判断,而不是偏好外向和善于包装的人。
面试官也需要被约束
面试前了解候选人经历,控制问题与岗位相关,不打听无关私人信息,也不把大部分时间用于讲述自己的项目,这些都是基本要求。
一场面试无法完整判断一个人。它只是有限时间里的证据收集,因此结论应尽量来自具体表现,而不是“感觉不错”或“和我很像”。
现在我仍会准备问题,但它们更像入口,而不是标准试卷。面试真正要判断的,不是候选人能否回答我知道的问题,而是我们是否看见了他进入真实工作以后可能怎样处理问题。