面试之锤
算法面试的真相:你不是写错了,而是没“说对”
本文另有英文译文 · 阅读英文版 →
有一次 mock interview 结束后,我朋友脸有点僵。
他说自己明明把代码写对了,还提前完成了题目,为什么面试官还是面无表情地点点头,然后说了一句:“OK,move on.”
我问他有没有解释自己的思路。他说没有。他觉得代码都写出来了,还需要解释吗?
我又问:“写之前你说了怎么做吗?”他说没有,他觉得面试官能看得懂。
“中间为什么这样写?有没有考虑别的写法?”——“我自己有想过,但没讲出来。”
这一问一答,就是很多人算法面试被刷掉的真实样子,也包括我自己。
我们以为算法面试是做题。但其实,它考的不是你有没有写出答案,而是你是不是那个能让问题被稳稳推进的人。
面试官不是判题系统,他们更像未来的同事
写出对的代码,是基本功;能不能让对方相信你能独立解决未知问题,才是加分项。
算法题只是载体,真正被评估的是:你怎么理解需求?你怎么推导解法?你会不会澄清边界条件? 当事情没按预期走时,你能不能自我修正?
对方坐在那里,不是为了算你得几分,而是为了判断一件事:“以后项目里出了问题,我能不能放心把你拉进来一起想办法?”
最重要的表达,不是说“我做了”,而是“我是怎么想的”
比如一个经典的题目:“找出字符串中最长不重复子串”。
很多人一上来就写:两个指针,哈希表,时间复杂度 O(n),一气呵成。
但你什么都没说,面试官看到的,只是一段跑得通的代码。
如果换一种方式:
“我先确认一下,这题是要求连续的、不含重复字符的最长子串长度,对吧?我打算用滑动窗口,每次右边加一个字符,如果出现重复,就移动左边直到去掉那个字符。我用 HashSet 来记录窗口里的字符,时间复杂度是 O(n)。我开始写一下。”
即使你后面写错了几个边界判断,面试官也会知道:你在想、你有方法论、你不是在凭手感写。
这跟“写对了”是两码事。
Think out loud,不是“表演欲”,而是“沟通能力”
Think out loud 是算法面试的第一原则。
但是很多人误解了这个原则。
不是让你边写边讲每一句代码的作用,而是让对方知道你脑子里在发生什么。
面试时你不需要显得聪明,但你需要让别人看见你在思考。
尤其在难题卡住时,光是说出:“我先从暴力法开始写,确保理解正确,再尝试优化。” 这句话本身就是工程思维。
你可以写错,但不能全程沉默。
你可以没写完,但不能让人完全看不懂你的判断逻辑。

会写不等于靠谱,靠谱是“能解释得出自己在做什么”
我见过一些候选人,代码没问题,思路也对,最后却被打了 Weak No Hire。
原因不是技术能力,而是要不没有提前澄清题目,就是没有解释选择背后的理由,或者没有表达我能识别风险、判断 tradeoff的信号。
你说:“我也想过这个方案,但觉得空间复杂度高了点,后来我换成这种结构”,这句话的分量,远大于你偷偷改了一行代码。
写出来,是你有能力;讲出来,是别人敢跟你一起做事。
AI工具不是写答案,而是帮我们练怎么说
我现在用 AI 练算法题,已经不再是为了写出新解法,而是练怎么讲、怎么推理。
我会把写好的代码丢给 AI,然后请它从面试官角度挑战我:
你这个方法有考虑过其他写法吗?
有没有性能瓶颈?你怎么判断?
如果出 bug,你会从哪里开始排查?
这时候,AI 就成了我练“说”的陪跑员。
不是每个都用得上,但这些过程让我知道:
我说出来的,不是模板,不是套路,而是“我自己真的理解过”。
面试不是你打败问题的过程,而是你让别人相信你能面对问题的过程
很多人觉得算法面试太机械、太刻板,但其实它考察的,是一种我们在日常工作中真正会用到的能力:
你有没有清晰的思维路径?
你能不能在不确定下推进方案?
你能不能把复杂的判断讲清楚,让人跟你走?
所以,不要再问我是不是不擅长算法了。
问问自己:
“我有没有让人看见,我是怎么一步步想的?”
最后,给你一组练习建议
- 每次刷完一道题,不要停在“AC”,而是写出一段解题过程,把它讲出来。
- 让 AI 模拟面试官,用“边界判断”“复杂度解释”“方案权衡”来 challenge 你。
- 尝试回答这些问题:
如果你写的代码错了,你能在 5 分钟内自己找出 bug 吗?
面试官不问问题时,你能主动讲出你的思考路径吗?
你有没有尝试说出 tradeoff 和你选这个方案的理由?
这三题如果你答不出来,那不是你不会做题,而是你还没有准备好表达。
但你只要愿意练,每一次说清楚,就离被信任更近一步。
