我开始招人时接手的大多数面试题,都是披着风衣的知识点问答:聪明得让人觉得严谨,具体得让人觉得公平,但和我后来真正在意的事情几乎完全不相关。这篇文章是我用作业样本替换它们之后真正学到的东西的清单,以及那些我留下来的、至今仍然值得占位的问题。
风衣暴露的特征
“穿风衣的知识点”面试题有家族相似性。我现在大概十秒钟内就能认出它们:
- 它们有一个正确答案。 优秀的候选人不会”大致正确”到达终点——他们要么知道那个坑,要么不知道。
- 它们奖励对特定代码库或语言特性的表面熟悉,而不是判断力。
- 它们的评分标准悄悄衡量的是**“这个候选人背熟了这个具体技巧吗?”**,而不是”这个候选人能做这份工作吗?”
- 爱这类问题的面试官,三份工作前被问过同样的问题,至今还有点小得意自己当年答出来了。
当你发现自己在写这种问题时,停下来。那份得意是暴露特征。好问题不是因为聪明而存活的;它们是因为枯燥且有效而存活的。
我淘汰的四个问题
我不会点名具体公司,但这些都是我接手过、在真正开始衡量什么预测好的招募之后删掉的问题。
“在白板上翻转一棵二叉树”
我在十年的生产代码里写了恰好零次二叉树翻转。我读过大概两次。这道题完全是一个”你最近有没有用这道题做面试准备”的筛选器。它对积极求职的人有强力正向筛选,对目前在职且满意的人有强力反向筛选,而这是错误的方向。
“你会怎么设计 Twitter?”
系统设计问题不是问题;“设计 Twitter”才是。它奖励那些背熟了 Twitter 架构套路的候选人——用户、推文、写入时扇出、缓存层——而不是真正能推理一个他们没见过的系统的候选人。
我现在用候选人从没听说过的冷门系统来问系统设计题。“设计一个跨六个 region 实时匹配广告库存竞价的系统。” 新颖到没人背过;具体到权衡是真实的。好的候选人会问澄清问题。背套路的人会卡壳。
“[语言 X] 里 sort 的时间复杂度是多少?”
纯知识点问题。正确答案是”去查一下”。一个背熟了标准库复杂度界限的高级工程师,把shelf space 换给了真正重要的东西——关于何时担心复杂度、何时不用的判断力。我不想要背诵者。
“带我过一下[某个具体的冷门 CS 概念]”
“解释 CAP 定理。""BASE 和 ACID 的区别是什么?""什么是 Merkle 树?“这些作为话题开场没问题。作为筛选器是灾难,因为它们筛选的是最近学过这些词汇的人,而不是真正理解底层约束的人。我见过能闭着眼睛背 CAP 定理但在生产环境里推理不了最终一致性的工程师。我也见过从没说过”CAP”这个词但建了十年正确分布式系统的工程师。筛选行为,不是词汇。
我留下的三个问题
那些在我重写后存活下来的问题,都共享一个结构:给候选人一段真实的工作,或者非常接近真实工作的东西,然后观察他们如何思考它。
“这是我们系统里一个真实的 bug 报告。调试它。”
在我的经验里,这是黄金标准的技术面试。我们给候选人一份真实的(脱敏的)bug 报告:症状、日志、一个部分的栈追踪、一个可能相关的 commit。我们看他们推理45分钟。他们可以问我们任何问题。
这道题信号强,因为它考察了:
- 好奇心 — 他们在跳向修复之前会先问系统的事吗?
- 模式识别 — 他们大致见过这类 bug 吗?
- 判断力 — 他们知道什么时候该停止调试、开始假设吗?
- 沟通 — 他们能在推进过程中解释自己的推理吗?
它也是公平的,以背诵问题无法做到的方式:每个候选人面对同一个 bug,评分标准是”他们展示了思维方式吗”,而不是”他们到达了那个唯一正确答案吗”。
“告诉我一个你现在后悔的技术决策。”
每个高级工程师都有一个。没有的候选人要么资历很浅,要么在自己的工作上非常不诚实。好的答案是具体的(项目、年份、后果),有反思性的(他们会有什么不同的做法),并且对过去的自己公平(在他们当时拥有的信息下,这个决策是合理的)。
最好的答案包含”这就是我因此改变了做决策方式的地方”。这才是信号。不是后悔本身——是能否闭合循环的能力。
“你会问你未来经理什么、但不会问招聘人员的问题?”
这是我问过的所有问题里,答案最能改变我招募决定的一个。
好的候选人问具体的事:团队怎么处理 on-call、代码评审文化是什么样的、一个功能晚交付时会发生什么、团队现在有多少工程师。
红旗候选人问彰显性的事:晋升阶梯、影响力赛道、“战略方向”。不是因为这些是坏问题——它们是合理的——而是因为这些是一个读了更多职场博客而不是交付了更多代码的候选人会问的问题。第一个桶是工程判断力;第二个是职业外观。
作业样本的技巧
对于高级候选人,我现在大力倾向于作业样本:候选人在自己的时间、自己的编辑器里,做一小段接近他们入职第一天会做的真实工作。不是”90分钟里构建一个编译器”。更像是”这是一个400行的做 X 但做得很差的文件;请按你通常的方式重构它,花你需要的时间,在后续说明里解释你的选择。”
我听到过的反对意见:
- “对空闲时间少的人不公平。” 这是个真实的顾虑,但解决方法是为作业样本付费(我做过)或保持它小(我做过)——而不是退回白板知识点题。
- “候选人会用 AI。” 我希望他们用!工作本来就会涉及 AI。我想看他们怎么用。一个提交了干净的 AI 辅助重构、并且附有关于保留什么改变什么的深思熟虑解释的候选人,正在展示2026年真正的技能。
- “它占用的候选人时间比1小时技术环节更多。” 是的。但它给我的信号也更好得多。正确的调整是减少面试轮次,而不是缩短每一轮。
承认自己仍然会出错的部分
我不想声称我破解了面试这件事。我没有。我拒绝过可能还不错的候选人,也雇用过结果不合适的候选人。每个招聘超过十年的高级工程师都有同样的清单。
我最确信的是,穿着风衣的知识点问题永远比替代方案差。 每次我淘汰一个,我得到了更好的信号。每次我”为了传统”保留一个,我之后都后悔了。
如果你现在在招人:审计你的面试流程。对每个问题问一句:“对这道题的好答案长什么样,那个答案真的能预测工作表现吗?“如果你写不出这个预测版本,淘汰这道题。用作业样本、真实 bug 或者关于候选人过去经历的澄清对话来替换它。
你的流程会变短。你的招募会变好。你会停止让人在白板上翻转二叉树,在2026年,这是一个小小的文明进步。