全部文章

面试之锤

本文另有英文译文 · 阅读英文版 →

有一次 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 就成了我练“说”的陪跑员。

不是每个都用得上,但这些过程让我知道:

我说出来的,不是模板,不是套路,而是“我自己真的理解过”。


面试不是你打败问题的过程,而是你让别人相信你能面对问题的过程

很多人觉得算法面试太机械、太刻板,但其实它考察的,是一种我们在日常工作中真正会用到的能力:

  • 你有没有清晰的思维路径?

  • 你能不能在不确定下推进方案?

  • 你能不能把复杂的判断讲清楚,让人跟你走?

所以,不要再问我是不是不擅长算法了。

问问自己:

“我有没有让人看见,我是怎么一步步想的?”


最后,给你一组练习建议

  1. 每次刷完一道题,不要停在“AC”,而是写出一段解题过程,把它讲出来。
  2. 让 AI 模拟面试官,用“边界判断”“复杂度解释”“方案权衡”来 challenge 你。
  3. 尝试回答这些问题:
  • 如果你写的代码错了,你能在 5 分钟内自己找出 bug 吗?

  • 面试官不问问题时,你能主动讲出你的思考路径吗?

  • 你有没有尝试说出 tradeoff 和你选这个方案的理由?

这三题如果你答不出来,那不是你不会做题,而是你还没有准备好表达。

但你只要愿意练,每一次说清楚,就离被信任更近一步。

通过反复表达思路建立面试信任的示意图