程序员如何避免面试被坑? 昨天 google 面试,今天 HR 跟我说面试不理想。觉得有一部分是自己水平真的不够,还有一部分是被坑了。以我的水平一面过不去这到底要招怎么样的人啊!我觉得一面至少没问题的,毕竟还算清华计算机系年级里写程序差不多前 10%的人。 先让我自我介绍,然后他说,面试想考察我们的思路,具体结果不重要,问了我一个非常简单的题,我就回答他就用 BFS 就好了。之后他问我怎么存图,我就说考虑到一般社交网络是稀疏图所以用邻接表,然后说了说邻接表怎么存……后来又问了我一个问题,大概是验证 XX 理论。最后,是一道数论题,我根本做不出来。他说没指望我做出来就做暴力搜索就好了,说怎么优化,我脑抽根本没想到他说的是要做剪枝,因为我觉得这些都是显而易见的啊,然后整场面试就这么崩了。 我这样子算是被坑了么?我自己这里面做的除了第一步就开始慌了还有什么问题么?我在这次面试中应该如何应对是更好的? paradisor,殚千金之家三年技成而无所用其巧 Google 员工在班车上来回答一下这个问题吧。应该不能算是给狗家洗地,毕竟 Google 不会因为我洗个地给我发奖金,也不会涨股价;只是想把自己对 Google 面试的理解写一下,让大家更能理解面试的游戏规则。毕竟想来 Google 的人总是有的,理解了规则成功率会高一些。 先下个结论吧:题主没有被坑。至少从面试官的角度来说,这个面试就是狗家标准的电面形式,没有任何不合规则之处。 我看了一下题主对自己的描述,清华 top10% + NOI 金牌,绝对算是牛人了,而且是高过大量 Google 员工的牛人,所以有这种“这也拿来考我”的感觉很正常。其实我当年读书期间去申 Google 实习,虽然我那时水平远不如题主,也是有完全一样的感受:“不能问点有难度的问题么”。但是后来慢慢了解得多了,尤其是自己也到 Google 参加了面试培训,就知道这里面的规矩了。总的来说,Google 是非常相信自己的面试的——Google 自己内部统计的数据说 Google 面试成绩与员工最终在公司表现的相关度高于其它任何指标(包括学校出身、GPA、工作经验、竞赛经验、论文)与员工表现的相关度。因此 Google 是非常追求面试的标准化的。以下是我觉得 Google 面试比较共性的方面,基本在我能了解的范围里,少有例外。 Rule 0: Google 对于所有人(或者说绝大多数人)的面试都是非常类似的。 不论你是名校教授,或者几十年工作经验,或者高中没毕业,面试 Google 的时候问的问题都很相似。很多人都会有自己擅长的领域,但是这个领域一般来说在 onsite (现场)面试的时候会在 5 个面试官里面有 1 个人来问你,而电面的时候不会有人问。这点其实是很多人知道而不愿意相信的——很多人都会觉得自己非常 special,Google 应该会在乎我的特长吧。事实是Google 面试几乎不考虑特长,而是在确定进公司之后根据特长分配 project。 Rule 1: Google 面试不会直接考难题。 Google 无论是电面还是 onsite,一定会先问简单题。这不是坑你,而是为了让面试有区分度。也有人提到——而且还有人专门提到怎么坑人时说到——真要坑人就上来出难题就是了,面对一个我一点不认识的人,出道题把他黑成白卷我觉得六七成的概率总是有的,要是我知道这个人的简历,黑成白卷基本就是百分之百了——二维 DP 会么?计算几何会么?数论会么?哦,算法都会了?大数据会么?lock-free 会么?OS 内核会么?总之如果只是想让人交白卷,太容易了。 MITBBS 上经常有人问说要面试印度人了,出哪个难题把他干掉,Google 还是尽可能地在规则上防止这种事情的(不然反过来就是印度人出难题干你了)。因为如果你交了面试记录(特别提醒一下,虽然 Google 面试官权力很大,但是上面一定是有人看他的记录的,无论电面还是 onsite),就问了一个难题,对方没答上来,那么其实你没法证明这个人不行,可能就是这个题太难他正好没想到而已。所以Google 面试每个面试官都会给你一个 15 分钟之内能解决的简单题目,做完了再给你出难题。这是规矩了。 Rule 2: Google 面试的难题不会考“aha!”的题目。 就是说,如果一个题目只有一个解法,想到了就做对,想不到就白卷,那么这个题目不能拿来面试的。Google 要求所有题目都是让人可以 make progress 的,否则的话第一会鼓励背题目,第二会导致运气成分太重。所以如果一道题目你不知道怎么做,先把你想到的写下来,追求最优解不是必须的。如果你站着只是发呆,那面试反馈只能写“面试者没有给任何 solution(解决方案)和 feedback(反馈)”了。 Rule 3: Google 面试最终看的一定是你的代码。 这个可能是最容易受到误解的了,因为不论是面试官还是面过 Google 的人,总会有意无意地说,你的解决问题的思路最重要,我们考察的是你的解决问题的能力。一定要记住,当他们说“思路最重要”的时候,他们是针对上面的 Rule 2 来说的,意思是说“做不出最优解没关系”,而绝对不是“不写代码没关系”。 因为面试官可能会误解你说的话,可能会不理解你说的话(像题主说的,你说的一些 OI 时的常用词面试官可能真的不知道),所以面试官不能保证把你的思路都记下来。而保证一定会记下来的,是你写的代码。如果你写出了代码,面试官不理解,他必须得回去再验证,或者是找人帮他看面试记录。而如果你说的某句话他没理解,很大可能他就忘了。 因此在面试的时候,如果你觉得你说的东西面试官没理解,试着写点代码下来,这是最好的、或者说是唯一的保证你的思路不会被人忽视的办法。不要只是说“用 xxx 结构和 yyy 算法就解决了”。如果面试官听懂了,他还是会说“那你写个代码吧”;而如果面试官没听懂,他可能就会不自觉地想把你的思路往他的思路上引,这就很容易导致悲剧。 这应该就是 Google 面试大概的一些常见、有共性、而且容易被人误解的地方了。如果没经历过类似的大公司的面试,很容易因为对面试的期望有偏差而导致像题主这样以为“被坑”的心情。希望题主随着面试经验的增长,能对这个游戏规则更熟悉。记住你面试的目的是为了向一个水平 75 分的人证明你的水平过了 60 分线,而不是证明你的水平有 90 分——75 分水平的人是没这个能力看出来的。以在题目中我看到的题主的水平,只要熟悉玩法,这些大公司应该都是手到擒来的。 欢迎大家评论或者私信交流心得。 利益相关:Google MTV 总部软件工程师 查看知乎原文