面试官出LeetCode题时,他真正在看的不是你的解法
面试官出LeetCode题时,他真正在看的不是你的解法
你面试时遇到一道算法题,想了10分钟,写出了最优解,时间复杂度O(n)。
结果没过。
同一道题,你的朋友只写出了O(n log n)的解法,但他过了。
你气得想打人。
但如果我告诉你:面试官给你打的分比他低30%,原因跟算法无关——你会更气。

做出来≠过了
大部分人对技术面试有个根深蒂固的误解:考的是”能不能做出来”。
兄弟,如果面试真的只考”能不能做出来”,那直接让你在OJ上提交不就行了?何必让一个年薪百万的工程师花45分钟盯着你写代码?
做出来只是60分及格线。真正拉开差距的是评分表上那4个你看不到的隐藏维度。
面试官会看你是怎么想到这个解法的——是拍脑袋蒙的还是有迹可循的分析路径?他会看你有没有主动考虑边界情况——空数组、整数溢出、单元素,还是写完就自信满满说”没问题了”然后被一个测试用例打回原形?他会看你能不能边做边讲——还是全程沉默最后像交作业一样甩出一坨代码?他还会看你卡住时怎么办——是盯着屏幕发呆3分钟,还是主动说”我目前思路是这样,但遇到了一个卡点”?
这4项加起来占了评分的40%。而大多数候选人在这4项上的得分是——零。
你花了三个月刷题,结果输在了从来没练过的科目上。这就像高考复习了数学物理化学,结果考场上发现还有一门叫”体育”。
沉默10分钟的代价
一位前Google面试官在匿名社区分享过一组让人破防的数据:他面过的候选人中,能给出最优解的只有20%。
但最终拿到offer的人里,有40%并没有写出最优解。
你品品这两个数字。
一半以上拿到offer的人,题没你做得好。但人家过了,你没过。
扎心吗?更扎心的来了——
没写出最优解但展示了清晰思维过程的人,得分比写出最优解但全程沉默的人高50%。
换句话说,你辛辛苦苦从O(n log n)优化到O(n)的那个提升,还不如人家多说了几句话值钱。
面试官的逻辑其实特别朴素:你入职后可以查StackOverflow、可以问ChatGPT、可以翻文档——代码能力有一万种外挂可以补。但你不能查”如何跟同事沟通技术方案”。
算法能力是可以Google的,但沟通能力没有搜索引擎。
你一直在用错误的方式准备
技术面试本质上是一场开卷考试。但你把它当闭卷考试来准备了。
闭卷考试靠什么?背。你背了500道LeetCode,每道题的最优解都记得滚瓜烂熟,Two Sum闭着眼睛都能写。
开卷考试靠什么?理解和展示。你知道怎么分析问题、怎么一步步逼近答案、怎么把思路讲清楚。
面试官不在乎你背了多少题。他在乎的是——你拿到一个没见过的问题时,能不能用3分钟把它拆解成可解决的子问题。
刷500道LeetCode却不会表达思路,就像背了整本字典却不会造句。
刷题有用吗?当然有用。但刷题的价值不是”记住答案”,而是”训练拆解问题的肌肉记忆”。如果你刷了300道题但面试时还是闷头写代码一言不发,那你其实只完成了训练的一半。
另一半是什么?是每道题做完后,对着镜子(或者对着你的猫)把思路讲一遍。不是讲代码——是讲你怎么从题目描述走到解题思路的那个推理链条。
这个练习看起来很蠢,但它可能是投入产出比最高的面试准备方式。

3个明天就能用的加分技巧
道理讲完了,你可能想说:我懂了,但具体面试时我该怎么做?
三招。不需要你多刷100道题,只需要改变你在面试中说话的方式。
第一招:出声思考
拿到题的第一句话不是”嗯……“,而是:
“我先分析一下输入输出和约束条件——输入是一个整数数组,输出是目标值的索引,数组长度最大10^4……”
然后边想边说:
“我第一反应是暴力双循环,但看到数组长度10^4,O(n²)可能超时,我想想有没有更好的方法……”
沉默是面试最大的敌人。面试官看到你不说话,他不会觉得”这人在深度思考”,他会觉得”这人卡住了”。
哪怕你真的卡住了,说出”我卡住了”本身就比沉默强。
顺便说一句面试中最要命的一句话:”这题我做过。”——千万别说。面试官听到这句话会直接换题,而且对你的印象分会打折扣。就算你真的做过,也请表演一个”现场分析”的过程。
第二招:先暴力后优化
永远不要试图直接写出最优解。
正确流程是先说:”我能想到一个O(n²)的暴力解法——用两层循环遍历所有组合。”
写出来。
然后说:”让我看看能不能优化。暴力解法的瓶颈在于内层循环的查找,如果我用hash表存已经遍历的元素,就能把查找从O(n)降到O(1)……”
面试官看到你有解题策略——先保底再优化,这比看到你直接写最优解更高分。
为什么?因为直接写最优解有两种可能:你真的很强,或者你之前做过这道题。面试官无法区分。但”先暴力后优化”展示的是一个清晰的问题解决过程,这是背不来的。
面试官想看的不是你的答案,而是你找到答案的导航过程。
第三招:主动提edge case
写完代码后,90%的人会说:”我觉得没问题了。”
而你应该说:”让我检查一下边界情况——空数组会怎样?只有一个元素的时候呢?如果输入有负数或者重复元素呢?”
然后逐个验证你的代码能不能处理这些情况。
这一句话值多少分?说真的,可能值20分。因为你展示了一个高级工程师才有的直觉:代码写完不是结束,验证才是结束。
初级工程师写代码,高级工程师写完代码后找自己的茬。 面试官要的就是后面这个本能。

回到开头那个问题
那个写出O(n)最优解但没过的你,不是输在算法上。
是输在”沉默的10分钟”上。
面试官看到的不是你的代码。是那10分钟里,你脑子在转但嘴巴没说话。他的评价栏上写的是:”思维过程不可见,沟通能力无法评估。”
而你的朋友,虽然只写出了O(n log n),但他全程在说话。他说了自己的思路、说了为什么选这个方向、说了哪里卡住了、说了怎么绕过去的。面试官的评价栏上写的是:”思路清晰,善于沟通,遇到问题能主动寻找替代方案。”
技术面试不是考试——是一次模拟工作。面试官在想的是:”如果这个人进了我的团队,我跟他协作的体验会怎样?”
沉默10分钟然后甩出完美代码的人,协作体验通常不会太好。
所以下次拿到题,先开口。哪怕你说的是”这题我需要想一下,我先从暴力解法入手”——这句话就已经比沉默值10分了。
面试的本质不是证明你能做出题。是证明你能跟人一起做出题。