如何进行软件工程师模拟面试
作者 Aaron Cao · 更新于

每次只练习一轮,使用真实的计时,用真实轮次会用到的工具,并让面试官适时打断你。评估的重点应是结构、沟通与恢复能力,而不是你是否找到了最优解。一场从不出岔子的模拟面试,练的不是真正困难的部分。
真实的软件工程师模拟面试都包括什么?
你可能已经解出过大量题目,却依然感觉没准备好,原因通常在于:面试轮次考察的并不只是解题本身。本节将软件工程师面试流程中的三种轮次分开讨论,因为每一种都需要不同的练习方式,混在一起练只会浪费这次练习。
- 编码轮。35 到 45 分钟,一到两道题,边打字边说出思路。练习目标是:在解法尚未成形时就把它讲出来。
- 系统设计轮。45 到 60 分钟,一个开放式题目,除非你主动提问,否则不会有任何澄清。练习目标是:在动手设计之前先界定问题范围。
- 行为面试轮。45 分钟围绕项目经历展开,追问会很尖锐。练习目标是:在被追问到第三次、问到你后悔的某个决定时依然能撑住。
每次练习只做其中一种。三小时走完整套流程看似很有成效,实际上几乎产生不了有用的反馈,因为到第三轮时,你练的已经是疲劳应对而不是技能本身。如果你想要的是题库而不是练习方法,可以查看 模拟面试 专题页里的另一篇文章。
如何独自进行一场模拟面试?
独自练习的模拟面试往往会以一种可预见的方式失败:你会挑一道自己能解出来的题,卡壳时暂停计时器,最后带着还不错的感觉结束。这些做法恰恰都和真实条件相反。你需要做的是还原真实的约束条件。
- 不要自己挑题。从一份你没看过的题单里抽取,或者请别人替你挑。自己挑意味着挑一道让自己舒服的题。
- 启动计时器后绝不暂停。卡壳的时间本身就是数据。暂停会消除你正要练习应对的那种压力。
- 工具要一致。如果真实轮次用的是没有自动补全、没有运行按钮、没有测试套件的共享编辑器,就在同样的环境里练习。
- 对着空房间说话。这感觉很荒诞,却是最有价值的一环。默默解题练的是一种没人会给你打分的技能。
- 录下来。看回放会很难受,但它能让你看到自己的口头禅、反复回溯,以及沉默的那一分钟。
- 先不用画图工具做设计。很多设计轮其实只是一通语音通话加一份空白文档。
独自练习唯一无法提供的是打断,而打断恰恰是真实轮次困难的主要原因。AI 面试官可以专门补上这一块:它会在你话说到一半时追问下去,不会礼貌地等你说完。模拟面试模式就是按这种方式来进行各轮练习的。
你应该收集哪些反馈?
大多数人结束模拟面试后只会记下一个笼统的评价,一周之后这种评价就毫无用处了。你应该收集与可改变行为直接挂钩的具体观察。
- 提出第一个澄清问题所用的时间。如果超过九十秒,说明你在解决一个错误的问题。
- 最长的沉默时长。超过二十秒的沉默都应该用一句口头过渡语来填补。
- 你是否在动手写代码之前先说出了思路?每一次都要记录是或否。
- 卡壳时你是如何恢复的?重新复述问题、尝试一个更小的案例,还是直接愣住了。
- 复杂度讨论是被追问出来的,还是你主动提起的?主动提起得分更高。
- 对于设计题:你是先界定范围再画图,还是反过来?应先谈约束与规模,再画方框图。
一位准备高级职位面试流程的后端工程师做了十二次模拟面试,全部通过,结果在真实的编码轮上,因为在一道陌生的变体题上沉默了四分钟而没能通过。她的模拟面试从未包含过她解不出来的题,所以她从未练习过真正出问题的那一环。她只改了一条规则——允许出现高于自己水平的题目——沉默的问题立刻就暴露了出来。
模拟面试做多少次才够?它们又解决不了什么?
没有什么神奇的数字,超过一定量之后再多练也不再有回报。一个实用的节奏是:每种轮次在两周内做两到三次模拟面试,练习之间的复盘比练习本身更重要。做六次却不复盘,效果反而不如认真做笔记的三次。
要清楚它的局限。模拟面试无法告诉你实际会被问到哪道题,无法预测你面试官的风格,也无法替代对知识本身的掌握。它能改善的是表达层面:边想边说、先界定范围再动手、卡壳时大声地恢复过来。这些能力可以完全迁移到真实面试中,也是单靠阅读学不会的东西。
练习和面试中的实时辅助是两个不同的问题,答案也不同。练习本身没有争议。而真实面试中的辅助是否合适,取决于面试形式与雇主的规定,屏幕共享或有监考的编码轮则完全不在可用范围之内。关于这些限制的坦诚说明,见 可检测性 专题页。