怎么看待Quora上大家对(谷歌)技术面试一边倒的吐槽?

偶然在Quora上看到问题: “Can every CS professor pass Google's interview?” (所有计算机科学教授都能通过谷歌面试吗?) 然后有一个自称是来自谷歌面试委员会的人回答,说了有一次一位某大学的CS教授栽在他手里的故事。大意是说这个教授在一开始的基础问题上表现很好;然后被问到一个稍微需要思考的问题就虾米了。那个问题大概是关于“a fairly trivial modification of DFS”(对DFS做个很小的修改,不知道他的DFS是指树…
关注者
223
被浏览
29473

10 个回答

面试过程的古旧和死板乃至狭隘,几乎是美国各大软件公司的通病。这并不代表这些公司不知道自己的面试过程有问题,他们很清楚自己面试过程的弊端所在,但是他们可以接受这个弊端带来的后果,并且在经过了谨慎地计算和思考之后,觉得改善不会带来更大的效益。

纵观美国所有大型软件公司的面试,基本可以说是如出一辙。一天4-5轮面试,每轮45分钟到1小时。每轮有一个来自公司的engineer去问你算法问题,大多是白板写程序,而且是写算法核心部分。而大部分题目要么网上可以搜到,要么是网上版本稍作修改。

这种面试的弊端很明显,首先准备和没准备完全就是两个概念。由于考点相对集中,刷了leetcode和没刷去面试,尽管编程水平上差距不大,但是给考官的印象会完全不同。很多算法题完全就是「以前做过」和「以前没做过」的区别,比如一个数组找唯一一个没重复两次的元素。其次写30行左右的核心代码,对于考察一个人的编程水平的帮助非常有限。且不说这30行代码至少有一半是之前刷题准备过的,即便是没准备过,写30行代码能看出来多少水准?

而考官必须在这45分钟或1小时内对面试者进行判断,因此他们就不得不借助一些有的没的的看似重要的细节。比如对corner case的把握,白板编程是不是0 bug,某道题是否直接用了n log n的算法而非n^2,等等。这些东西重要么?当然重要,但是绝不是最重要的。可是这是考官在短时间内唯一可以考察的。

如果要理解为什么公司不去改善这个弊端明显的过程,首先要明白为什么公司要这么干。而公司选择这种方式的核心在于——省时省力。把面试工作平均分摊到大量的engineer身上,让他们问一些有「正确」答案的问题,非常有效地减少了不同人之间对一个面试者评价的差异。同时这些engineer也不用过多地进行准备,找几个有答案的题就行了。对于一个在公司的员工来说,一周拿出来45分钟面试一个面试者,并不是什么太费劲的事情。同理,与其说白板编程是考验面试者一次写对的能力,还不如说是公司配置环境需要时间。在面试的地方架起来一台电脑,配置好面试者舒适的环境,还要有面试者所用的语言。更重要的是,面试者需要编译通过,而这要么需要面试者自己写testcase和外部的wrapper,要么需要公司完成,都给公司带来了额外的开销。

所以,公司之所以进行这种简单粗暴的面试,核心原因是对于公司来说,这样的付出最小,而并非公司觉得这样的面试最能筛选出人才。从这个角度说,大家觉得大公司的面试过程很不靠谱再正常不过,因为他们自己没往靠谱去走。

当然这不是故事的全部,付出少只是硬币的一面,关键是在少量的付出之下,收益还要过得去。

在这种面试方法下,公司招进来的人一定不是公司最想要的,会有一些漏网之鱼,也会有一些滥竽充数的。但是大公司是完全可以承受这种影响的。每年招500人比如,其中有100个不符合要求,第二年开了就好;有100个面试的本来很好但是因为面试者问题没给offer,无所谓不差这些人。对于面试者来说,可能是进与不进,0和1的差别,但是从公司的角度,这就是个概率问题。用渔网的渔民才不会在乎是不是每次下竿都钓上来鱼了。

最后夹藏一点私货吧。我当初选择Green Hills,很大程度上是面试过程给了我耳目一新的感觉,而当时HR的一句话(后来代表公司招聘的时候了解到这个是套路~)也左右了我的决定——「你要知道,以后你的每一个同事,都是经历了和你同样的筛选的。」

回头想想那些大公司的面试,我就义无反顾地来到了这里。

我们的面试一共是两整天,每周末4人左右。周五从早饭开始,由一个manager和HR带着吃饭聊天,上午见每一个组的manager(我们只有5-6个组),中午和CEO一起吃饭,然后给一道题。这道题就是我们面试最核心的技术部分——一道需要写五个半小时的程序题。下午面试者被安排到一台电脑面前,从零开始写这道题,不允许上网,剩下随便。从一点半写到七点。晚上由host和一个engineer带去吃晚饭。周六和这个group里的其他人+他们的host+hr一起出去玩,有kayaking啊,或者滑冰啊,攀岩啊,每周活动都不太一样。晚上再和host吃饭。这才结束。

而当时我面试的所有公司,几乎都是一模一样的流程——你打车过来吧,我们报销。面5个小时,5个人。你打车走吧,我们报销。你吃饭小票留着,我们报销。

Green Hills的面试有两点给我印象太深刻。第一是技术部分的难度和价值。一个从零开始写五个小时的完整程序,和45分钟可以考三个的算法片段,对程序员的考察是完全不在一个层次的。而摸着机器把一个程序从输入输出开始写完,也和在白板上写个算法核心完全不是一个感觉。如果我可以选择,我一定会选择经历了一道题五个小时考察的同事,而非五道题一个小时的。第二就是所谓「重视程度」。不用进到大公司,你就可以感觉到自己会是个螺丝钉。因为Nobody cares。吃啥随意,面试就是从进公司开始到出公司结束,剩下的我们给你钱你自己爱干嘛干嘛。而在和Green Hills面试的这两天里,我甚至没机会花出去一分钱。从我睡醒出门就有人陪着,直到晚上他们送我回宾馆。如果一个公司可以在你还没进公司的时候就对你这么在意,那进了之后他也不会扔下你不管。

当然,毫无疑问,这种成本是大公司不可想象的,如果google每年面几千人都这么搞,那就崩盘了。或许从另一个角度说,这种成本也是大公司不必要的。就算他们冷漠简朴,还是有无数的程序员愿意去给他们干活。

谈不上对错,因为大人的世界里只有利弊。
我还是比较赞成 @高天的答案的。说简单点,就是:招人这事对于Google来说不够重要。如果你是面试director或者VP级别的职位,可能体验会大不一样。

我只是个普通码农,但是我见识过在美国学界面试教授是什么样的:面试两天,每顿饭都有3到4个教授陪着你吃,job talk的时候全系上下从老师到学生坐得满满的。剩下的时间里每个小时和一个教授1对1聊天,所以两天下来每个教授都会至少见两次。最后所有教授坐一起提意见选人,统一意见所有人都觉得满意的才能最终录用。

区别是什么?面试教授,招进来的是一个今后6年的时间(正常的tenure clock时间,如果招的是tenured的职位那搞不好就是一辈子)跟你朝夕相处平起平坐的同事。今天不多花点时间面,不小心招个刺头进来,以后日子可不好过(开除一个教授即使对于系主任来说都是很难的事情)。面试Google呢?招进来是一个可能我今后再也碰不到的不知道在哪个组干什么的人,我只要大致按公司的要求来就行了。我去过几次startup的面试,感觉更像学界的面试,确实对你尊重得多,考察得也全面得多,但是打铁还需自身硬 ---- 真正有前途的,前景可以跟Google的待遇compete的startup也不是人人都能进得去的。

如果你想要受到更大的尊重,那就得努力站到一个值得别人尊重你的位置上。如果你只是芸芸众生中普通一个,那还是学着遵守规则吧。