如何看待为了进 Google、微软等外企大量刷题?

来源:https://www.zhihu.com/question/35133069

编辑:深度学习与计算机视觉

声明:仅做学术分享,侵删

作者:程墨Morgan
https://www.zhihu.com/question/35133069/answer/277743663

首先,不只是中国人刷题,洋人为了进FLAG也刷题,这就是现状。

我一个现在在Google总部的哥们,他非常资深,我本来以为他不用准备,但他说去面试之前也被HR提醒要刷刷题,因为面试官就是喜欢问这些问题,你不准备别人会准备,如果不刷题,就会吃亏。

所以,现在面试就和中国的应试教育一样,即使不能考察你的真实水平,但要考察一下你的智商,至少要考察一下你愿不愿意为加入这家公司努力......努力刷题一把,呵呵,有心去准备的,还能看懂题目的总会比漠不关心的好吧,现在就是这么一回事。

不过,我那哥们进去之后,发现有的脑子不大好使的人,通过刷题也被录用了,真是让人啼笑皆非。

作者:硅谷IT胖子
https://www.zhihu.com/question/35133069/answer/974737533

当然要刷题。我以前刷题,现在当面试者(很烦面试官这个词,根本不是“官”,是苦力好吗,面试多了要吐的,还要花时间写反馈)。

海外谣传说印度三哥不用刷题,白人不用刷题,墨西哥人不用刷题,只有华人苦X地刷题是跟自己人竞争内卷,都是想当然的谣言,至少大厂不是这样。做不好题挂在我手下的白人、三哥不少了。

我考华人、白人、印度三哥还有极少数的墨西哥人等,都是一模一样的题,都是一模一样的标准(当然,每过一段时间我会不断换题)。这是公司文化要求的,也是面试培训时强调的。

这就是大厂所谓的“标准化面试”,也就是“刷题型面试”。考coding的我,连废话都没有,进去打个招呼,问要不要喝水休息一下之类寒暄几句,然后一句话“我是张三,这轮是coding interview,我们现在开始吧,我的问题是……”

有人说,这连简历都不问?呵呵,自然有别的人在别的轮去问,不需要我,我何必费事;

有人说,不介绍介绍你自己的工作?结尾会给几分钟答疑;

有人说,连个过场都不走?呵呵,一轮面试只有45分钟,我东拉西扯5分钟,损失的是被面试人的时间,我自己倒是无所谓;我省去废话,其实是帮他们;再说,题做得好什么都好说,题做不出来态度好的,我见过太多了,没有用;

还有人说,我会不会故意黑或是帮某些人?基于种族、观感、心情等主观思考?其实大厂面试非常标准的,难度和要求都很类似,面试官们面多了早就机械化了,几句话一说,白板一写,一般都心里有数了,说难听点,来只猴子或是骷髅在那里写白板,我估计也是同样的评判标准。

太烂的,我帮你有用吗?我就算好心放你过去,你也必然死在别人手里;

可过可不过的,我一般会说好话,但也相对客观地描述我的观察;

很多人认为,如今刷题已经疯魔了成规模了,其实不然。

以我的观察,年轻人90后95后刷题基本上是标配(因为他们成长于刷题标准化以后),很多人完全不理解题也在那里背。这些年轻人的刷题技巧和苦功夫是有了,但方法仍嫌不足,题目一旦灵活,很容易死;

80后的老人们这波,会刷题的早就在经济危机后的黄金10年中挪到大厂了;好多不刷题的是懒,就是想看看能不能凭运气混进来;

再老些的,尤其是非中印的,完全不知道刷题为何物,整场懵X的我都见了好几个了;很多人信息闭塞,根本不知“刷题”为何物;

所以,尽管社会上已经充斥着“刷题刷题”的声音,真正面试中,刷题刷得精湛的,表达思路清楚,code也没问题而且还不乱的,其实真的很少了;

而且,在我这轮过了的,很可能被别人拒掉;也有别人感觉不错或是通过,但到我这里写得乱七八糟被我拒绝的。

为什么要刷题,我以前在自己的文章中论述过,实在不想再重复了。大概是,我个人觉得,刷题是现阶段能找到的最标准化的面试方式。刷题无法挑出人才,但能控制下限,而下限是非常影响一个公司的技术水平的。

多年前就听说过,尤其是CS PhD等,一个认真做科研,结果Offer一般;一个认真刷题科研划水,结果去了Google爽死。这个不是公平不公平的问题,而是计算机行业,工业界不是一般的强势所导致的。火坑专业很多科研和前沿在学院,而热门专业科研和前沿多在大公司。

不是说科研就一定比刷题高贵。很多计算机系的科研可能只是闭门造车,而同样的时间花在刷题上,跨过大公司门槛,然后去做高精尖的科研,也许才是如今的正道。何况,CS PhD很多都是特殊渠道招聘的,按科研背景招聘,更看重方向而不是普通的刷题。

最后,很多人认为不强的人通过刷题进了Google又能怎样。这种态度是不对的,因为以Google之强,哪怕一个普通人进了Google,几年下来,肯定也是功力大进。人的强弱是个动态问题,不要静态地看。IT行业大牛和领袖当然需要天资、机遇、奋发等,但普通当士兵的,耐劳易使最重要,刷题那么辛苦枯燥无聊,在二十多岁能坐住板凳耐心刷下来的,不是合格的士兵是什么?

作者:吴昕
https://www.zhihu.com/question/35133069/answer/61588635

我个人原来也困惑于这个问题,觉得算法题面试不是最好的面试方式。一方面precision不够高,有的技术能力很弱的人可以靠着刷题混进来。另一方面也有一些实际技术能力不错,但是缺乏算法面试经历的人,可能会fail在一些算法问题上。

当我还在是学生的时候,和一些微软的面试官交流过,为什么他们选择用算法题进行面试。其中一人的回复是,刚毕业的学生,也没有什么实际工程经验可以问,所以其实也只能问问面试题了。

经过自己一年多的面试经验,以及和一些面试官的探讨。我觉得选择用算法题做面试是有这样一些原因的:
1、大公司希望招聘一些有generalized problem solving能力的人。因为许多时候大公司里遇到的都是一些全新的,没有已知解法的问题。在这种情况下,candidate探索和解决新问题的能力是很重要的。对于没有刷过题的人,算法问题可以从某些角度考察candidate抽象问题,分析问题,和举一反三解决问题的能力。所以相比之下一些大公司面试之中,没有特别在意candidate已经掌握的知识,而且focus在一些general的coding的解决问题的能力。
2、Algorithm类的问题可以在测试一个人的coding能力。我在实际的面试中,遇到过一些candidate可能是刷过题,所以能很快知道解法。但实际让他code的时候,还是有很多问题暴露出来。所以通过这类面试,还是可以筛选掉一些盲目的去背解法,而实际coding能力一般的人。

另外是一点我自己的看法,我觉得通过算法面试的大概有两种人,一类是算法能力本来就很强,一类是能力一般,但是刷题很努力的。其实在实际工作中,你需要的大概也就是这两类人,要么能力很强或者很聪明。要么虽然天赋一般但是很努力,这样工作中遇到问题只要稍加指点,他也能持之以恒的去尝试,从而找到解决办法。所以在我看来,能够努力刷题去通过面试的人,也许大部分在工作中也能通过努力学习和探索去解决技术问题。而且也许这些人还更符合大公司想要的”Excellent Sheep“。

当然了,通过算法题面试还是存在着许多弊端的。比如说前段时间爆出的,Homebrew的作者抱怨自己因为不会反转binary search tree而被Google拒了,Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off. : programming。有一些比较有经验的senior engineer会认为,被一个刚毕业一两年的小毛孩用算法题来面试,是一种对他们的侮辱。
那么针对应届毕业生有什么更好的面试方式吗?我觉得有两个方向是可以考虑的:
1、找有经验的人针对项目问一些具体的问题。比如说,我在一个学生时的项目中用到过Lucene,然后某一次面试官详细问过我一些Lucene的细节,包括它是如何score一个document。这样可以考察出candidate是真正参加了一个项目,还是只是加到简历上吹牛用。而且从中也可以反映出candidate学习新技术的能力。只是这样需要找到一些和candidate背景相似的面试官,有时候不一定有这样的机会。

2、可以具体询问一些CS某门核心课程的知识。学生在学校毕竟是以学习为主,我觉得一个合格的码农不需要每门课都学得好,但至少需要有几门课是学的不错的。因为这反应了他的学习能力,以及对待技术的学习态度和热情。这些都是一些很重要的品质。
例如在Quora的这个问题The best interview questions to evaluate a machine learning researcher里。有人提到说可以让candidate选择一个他最熟悉或者喜欢的machine learning algorithm,让他比较详细的讲解给你听。如果能够很清晰的讲解出一个算法的出发点,推导,应用中的一些trick。那么candidate在这一领域应该是有比较solid的知识,因此之后再工作中,学习技术的能力应该也不错。

当然了,针对这两种面试,肯定也有人像刷题一样的去准备,不过我觉得能在准备的过程中多学到一些基础知识,对于candidate也是有好处的。
综上,我觉得面试不是一个寻找最优解(最好candidate)的问题,而是一个如何在restricted time and resource下,找到satisfiable candidate的问题。算法面试虽然不能找到最优的candidate,也会错过一些优秀的candidate,但的确是在面试资源比较稀缺的,同时candidate pool又很大的时候,一种可以接受的面试手段吧。

至于刷题这样的行为,和为了高考刷题、为了出国刷gpa gre,为进职业圈刷天梯分是差不多的。在信息不对称的情况下,大公司只能通过学校、算法面试这样的方式来高效的筛选candidate,而candidate也自然会通过刷gpa、刷题等方式来向公司传达一个signal。至少愿意去刷题,可能代表了今后工作中也愿意努力去解决问题吧。

作者:李陶冶 https://www.zhihu.com/question/35133069/answer/61577461

不要试图从任何一个答案中寻找结论。有人告诉你刷题掉智商,但持这个观点的人可能拿过Tco或Gcj Final的奖金。就好像有人说“数论是毫无用处的”,但那个人的名字叫:Paul Erdos。

作者:廖宝华
https://www.zhihu.com/question/35133069/answer/287983151

原来我们国内找工作准备面试时都没有刷Leetcode的习惯,都是在POJ上一道道AC的。后来不正是北美的学生们搞出了Leetcode么?说实话应该感谢Leetcode的普及,上面的题目会简单一点,反而降低了各大公司面试中算法题的平均难度。

此外,作为Google APAC Hiring Committee的成员之一,想稍微纠正一点对面试问算法题的误解。互联网大公司的校园招聘一般分为两种,一种是按部门和职位招聘,候选人面试前就确定通过后会去哪个部门的哪个组(比如百度凤巢的算法工程师职位),代表公司有BAT,算法和相关项目经验都很重要;另外一种是统一招聘,所有候选人都一视同仁,拿到offer后再选组,代表公司有Facebook Google,算法和写代码为主,也问项目和设计(一般非系统设计)。微软大概是介于两者之间,是按照部门的统一招聘,算法题和写代码的比重也比较大。这里就不详细论述两种招聘的优缺点了,存在即是合理,更多的是跟公司文化的一种契合。并不是国内公司都采用第一种方式,外企都问算法。实际上湾区的很多互联网公司也更看中项目和实习经历。

对于统一招聘的公司来说,在面试中问太多项目的意义就不大了,相对来说更注重考察候选人解决问题的能力,以及未来发展的潜力。而且校园招聘面试工作量巨大,很难按照候选人的实习或者项目经历背景来安排面试官,所以算法、数据结构、coding和design自然成为面试的重要考察点。但是面试官问的算法,都不会太复杂,基本上可以用算法与数据结构这门课程上的相关知识来解决,毕竟面试中可以完成的代码不会太长,问太复杂的算法根本来不及写完。

为了避免面试官使用原题,Google内部会把流出的问题禁掉,但是招聘量太大流出的太多,有时候也根本来不及禁掉。我看过的面试feedback应该也有几百份了,为了避免用原题,相当一部分面试官会用自己出的题(可能是某种算法或者数据结构的简单包装或者变种)。此外,为了观察候选人的解决问题的能力,面试官一般也会选择可以扩展的题目,这种情况下,哪怕最初的问题是流出的原题,扩展的问题往往可以更好地考察候选人的真实能力。

此外,每位面试官都需要详细记录他们与候选人的沟通细节,比如候选人思考的过程、面试官给过什么提示等。基本上一个小时面试,写feedback也需要一个小时。在Hiring Committee上,我们也不是简单的看候选人是不是做对面试里的每个算法题。每个HC的成员都需要在开会前仔细阅读每个候选人的简历,成绩单,推荐信,面试官的feedback,以及历史面试的feedback等等,最后通过投票以及讨论的形式来决定每个候选人的录用情况。在外面看来,算法似乎成了这些公司唯一考察的能力,实际上远远不是这样,很多参加过ACM Final的候选人都没有通过面试,Google员工里有ACM背景的比例其实是很低的(应该不到5%)。

最后,应届生找工作时刷刷题还是有必要的,但我觉得主要是练习一下白板、白纸或者Google Doc里手写代码,毕竟平时不管做什么项目和实习,大家基本都是在IDE或者配置好的编辑器里写代码。至于通过刷几遍Leetcode来记住原题的做法,我个人觉得意义不是很大。

作者:穆尼奥
https://www.zhihu.com/question/35133069/answer/61405523

题主一定没有抽出时间来自己去做做那些题,我原先也有题主一样的成见,后来自己开始做之后,发现真不是刷那么简单。我反而觉得它是我所谓的“能力”进步最快的时候,它是对编程核心——抽象的反复考较和贯通。

写程序写多了你就会发现,什么最重要?一曰抽象,二曰实现。这两个能力(各种模型的套用和变化,不同语言的数据结构实现)在你所谓的刷题里都能得到很好的锻炼。


作者:左程云
https://www.zhihu.com/question/35133069/answer/280665605

如果把刷题单纯理解成做习题,在这种“又是另一种应试啊”的感觉下,你得到的答案会非常消极。如果把刷题理解为,给定一种需求,用代码实现出来,要求又快又省空间。刷题就成了程序员练脑和coding能力的手段而已。题,在别的领域可能无关紧要,你爱怎么鄙视随你;但在程序员的日常工作范畴里,什么不是题?

作者:Hao Lee
https://www.zhihu.com/question/35133069/answer/281784400

如果有面试别人的经历就很容易理解为什么面试偏重算法了。
十月初我被公司派去进行校园招聘,这也是我第一次面试别人,一开始不知道该问什么,只能看看简历上写了什么再对应的问问,但是应届生大部分都是做的课程设计,没有大项目,而且很多杂七杂八的技术我自己也不懂,问了也不知道对错,所以最后干脆直接问算法了,先问基础的,看着能力不错再一步步问难的,实在想不到解决思路的就一点一点引导他看他能不能想出来。我自己对面试流程的感觉就是,问算法题是最省事的面试方式,很容易看出面试者能力水平,可比性很强。
面试就像高考,算法题只不过提供了一份全国卷。


作者:Tim Shen
https://www.zhihu.com/question/35133069/answer/61448516

面试面算法题是这么个思路“在刷题还没有兴起的年代,算法题做得好的,很大可能比较聪明,或很大可能学习东西较快,总之,和我们注重的高生产力有迷之相关性”。

然后求职者注意到别人都在面算法题,于是开始有针对性地刷算法题。这时候算法题做得好已经和实际能力没有迷之相关性了,大家也开始喷面试面算法题有多荒唐。

然而其实问题不难解决。弄一些新题就能挡掉很多刷题刷傻了的,有思维定势的面试者。有一次偶然问到一个人,如果我面试时让人实现一个简单的garbage collector怎么样,答曰死翘翘。我又问如果面试时考寻找connected component怎么样,答曰秒杀。呵呵。

所以刷题还是要刷的,但是倘若光刷刷题就能拿offer,而其它能力不怎么行,那要么是面试官懒惰,要么是放水,要么是naive。当然,这些错误惯性巨大,需要时间来修正。

作者:cambridge
https://www.zhihu.com/question/35133069/answer/61453852

最近几个月开始在G家做面试官,题主因为一些刷题但没有实际编程能力的人混进公司感到不忿,能理解。
我觉得刷题无可厚非,计算机行业不是公务员,踢刷的再好还是要出活儿才行,牢记终身学习的特点对这个事儿应该就能释然了。
Q:我个人觉得他们进外企的方式很像在准备应试考试,这样好吗?难道北美的学生想要进这些IT公司,也需要先刷大量的编程题吗
A:公司有很强的动力(招到好员工)改进面试,但没改变,因为找不到更好的招儿。
除了个别outlier,北美学生也需要刷题。
Q:难道刷题就是最好的学习手段了吗?
A:是准备面试的最好方式。编程以外的“沟通能力,情商,个人影响力”,面试官会通过交流考察前两者,no jerk!
个人影响力。。。真的只是想招个写代码的而已
Q:请问,有多少位具有世界影响力的it界人士有刷题背景啊
A:没调查过,但,真的只是想招个安安静静写代码的而已。

google等公司对中国学生有偏见
comments: 没偏见。

国内的BAT等互联网公司,会考察你的编程能力,考察你对技术原理的理解,考察你的项目经历。例如阿里不会过多的看你是不是本科还是研究生,是985还是211,只要你某个方面有亮点那就OK看中你的多个维度的能力
comments: G也会问你项目经历,但中国学生故事肯定编不过印度人,语言也生动不过native。解算法题也算亮点 :)
单说面试这事儿,其他条件相同的情况下,为什么不多练练手刷刷题再面呢?
我的面试感受,
1. 基础扎实科班出身+刷题,这类人面起来很顺利,基本题给出来大思路不会跑偏。一步步细化解题思路的时候万一有点偏差稍加提示就上正道了。思路正确代码清晰简单跑几个测试能过就可以了毕竟on-site也就45分钟。
2. 基础扎实+不刷题,思路有时候会比较直接,暴力先行,然后优化。也可以吧,提示一下也能解题,白板上写代码不习惯,容易超时。
3. 非计算机出身+刷题,还没面过这种,但我猜如果刷到能融会贯通的程度,面试表现跟第一类差不多。只是刷个熟练指望碰原题就别想了,phone interview一轮,onsite 五轮怎么也能区分出来。真区分不出来,上岗以后自己也难受,万一有个风吹草动泡沫破裂。。。
4. 没基础+不刷题,没见过。。。估计phone interview或者简历关就折戟了。

所以这就跟高考一样,纯题海战术让人不齿,但总得练练吧,你基础再牛至少review一下旧知识,熟悉一下题型。
况且跟高考比,面试这点题量也没那么可怕。

另外为什么考些貌似平时用不到的算法呢,因为算法能考察cognitive ability,实现算法可以考察代码能力,短时间面试这是最行之有效的考试内容。算法题里也能穿插考察一些计算机思想。
想象一下,如果大量考概念原理会怎样?那就会出来xx问答100题之类的题库。

作者:PRO Pentium
https://www.zhihu.com/question/35133069/answer/61440409

曾经和题主有过一样的困惑
先上结论:只刷题确实是不行的,但是不刷题更是万万不行的。

找工作前花很长时间刷题个人感觉的确很low。因为刷算法题这种事本应该是大一大二早就该做完的事,到了要面试的时候顶多也就复习一下就好。不知道好多人为什么临到了毕业找工作的时候才想起来。
在打基础的阶段多刷算法题确实很锻炼代码能力和算法基础。虽然看起来easy(实际上想把基本算法学通学透真的并不easy),但是确实很管用。没有基本的代码能力,后面的一切都是纸上谈兵。所以说不刷题真的是万万不行的。
但是CS的世界辣么大,远不仅仅是刷题那点小天地啊。首先作为一个合格的计科狗,必须要熟知的基础课就有网络、操作系统、编译原理、计算机组成原理、设计模式......如果想继续钻研某一方向可能还要学习HTML/CSS/JS、机器学习/神经网络/概率论/微积分、图形学/OpenGL、......不管是读研还是工作的面试都不仅仅是问算法题那么简单吧。
如果大学四年甚至一直到研究生阶段还停留在刷leetcode那种层次,缺少了其它方面的锻炼,那真的是太可惜了。而且走到工作岗位很有可能一下子不适应。

作者:gxnncrx1993
https://www.zhihu.com/question/35133069/answer/61455003

我记得有人跟我说过这个,不记得是谁了,他说类似谷歌这种以考算法为主的选拔方式,跟高考有一些相似之处,刚出学校的学生大部分姿势水平和人生经验都少得可怜,但谷歌有足够自信能把一个除了一点基础外什么都不会但智商突出的人调教成高手,于是某种程度上谷歌就变成了这种用算法题选拔出智商高的人的方式。
不好直接评价这个说法是对是错,但我觉得还是有些道理的。
既然知道这些公司算法考得多,那么如果仅仅为了通过面试这个目标,刷题并没有什么不对吧。有些公司考察全面能力,所以也会有人选择啥都搞一些但不会特别在某项上面费太多功夫。一些人认为工程能力之类的可以等到工作中慢慢培养出来,于是先获得一份offer在他们眼中就成了优先级更高的事情。各人自己的选择而已。
另外想靠刷题刷出份offer的都只是单纯想找份好工作而已吧。题主提到的几位具有世界影响力的IT界人士,他们的理想仅仅是找份好工作养家糊口就够了吗?像我这种平庸的人也就是非常现实地认为以自己的水平能找到工作养活自己就足够了,不是每个人都有改变世界那么伟大的理想的,也不是每个有这些理想的人都能有足够做到这些的实力和机遇的。你以为每个上海市委书记都能被调到北京去?

另外,我跟着多说几句。

题主看到身边有人靠刷题就能进google就认为很多人都是完全靠刷题进去的,然而我觉得真的完全靠刷题进google等公司的不会非常多。进google的人我认识不少,很多都是acmer,竞赛生涯长年累月刷的算法题数量不知道高到哪里去了,然而他们的简历根本没法让人觉得这些人是纯靠刷题进去的。题主看到的也只是身边的同学而已,并不是全部向着这些公司努力的人。而且题主看到的刷题行为也并不一定是题主这些同学的全部努力吧?
而且完全只刷题这种策略只是不适合题主而已,对一些人而言反而正是他们在衡量个人能力和其他条件限制之下做出的最适合他们的选择,为何到题主这里就认为是不考虑个人情况是跟风行为了。。。我想有些答案上来就喷题主大概就是这个原因吧。。。
生活压力和理想什么的,我觉得根本没法给出一个明确的答案,只能是“你认为哪个合适就选哪个”这种万能答案。不过我前面说了,有些人想法是很普通很现实的,找个好工作就是理想,所以对这些人而言这个反而是两全的。。。

作者:安晓辉

https://www.zhihu.com/question/35133069/answer/277532635

科举,是刷题。高考,也是刷题。

Google、微软等公司,只是提供了另一种形式的、相对公平、误差较小的准入考核机制而已。

     不断更新资源

     获取更多精彩

长按二维码扫码关注

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值