如何看待中国学生为了进 Google、微软等企业疯狂地刷题?

论坛 期权论坛 期权     
匿名用户   2018-9-23 01:24   2021756   9
提示: 作者被禁止或删除 内容自动屏蔽
分享到 :
0 人收藏

9 个回复

倒序浏览
2#
Haojun  3级会员 | 2018-9-23 01:24:17
我之前没怎么刷题,于是第一个电面就懵逼了:

面试官:写个开根号的程序吧。
我:好的,可以用牛顿法(Newton–Raphson method),我开始写啦?
面试官:
我:。。。
面试官:那是神马东东?没听过!
我:??!!就是一种数学上的逼近方法blablabla,我写出来你就明白了!
我:(飞速写完,一边写一边解释),搞定啦!我来分析复杂度吧!
面试官:

我:。。。
面试官:嗯。。。这个方法不对吧。。。
我:牛爵爷还能错?我给你证明一下blablabla。。。
面试官:嗯。。。我还是不相信是对的。。。怎么看都不对啊。。。
我:好吧,我给你跑几个例子吧,(测了几个例子都是对的)。
面试官:嗯。。。好吧。。。算你是对的。。。但是感觉很慢的样子。。。
我:怎么会?超快的!O(log n),blablabla
面试官:嗯。。。好吧。。。算你对了
。。。
。。。
。。。
(面试官沉默了很久)
。。。
。。。
。。。
面试官:(还有五分钟结束时)你听过二分查找吗(binary search)?之前所有面试者都用的二分查找啊?
。。。
。。。
。。。
我的内心OS: 原来。。。二分查找。。。才是标准答案吗??!!

虽然非常匪夷所思,但这确实是我参加某大公司第一轮电面的情况!!!!我就不黑是哪家了。

可能是这个面试官没做任何准备;可能他还没睡醒状态不好;可能他很长时间没用过牛顿法,听到Newton–Raphson method就懵逼了。不管怎样,没刷过题很多时候真的猜不出“那个面试官心里想的标准答案”是神马!!!!

这时他问你问题,你以为他在考你,实际上他可能只是在引导你用他心目中的标准方法。

所以。。。在所有面试者都刷题的情况下。。。你也必须刷题。。。不然。。。即使你能做对题目。。。也可能会因为和其他人的解法不同而实力懵逼。。。

而且要是碰上老印完全听不懂的话,如果刷过题,知道大概的题意,应该会帮助很大吧!

毕竟。。。你不能把找工作这种大事,寄希望于遇到“有耐心,英文标准,还善于引导”的面试官上!

以上,就是我开始刷题的经过。。。

=========华丽丽的分割线==========

1. 我写这个段子想表达的,不是“我知道牛顿法我好牛逼呀”(这个真的超级基础),而是“现在Google,Facebook,微软的面试者都刷题,你不刷题可能会实力懵逼”。毕竟面试官都有自己日常的工作,面试算是额外的任务,并不是每个人都很上心。

有很多评论说需要impress面试官,我觉得没必要。常规方法把题都做完,一遍bug-free就OK了!而且常规方法也比较容易解释,毕竟我们口语也是有一定障碍的。

2. 既然很多评论区大神对求根号的算法很感兴趣,我就在这儿简单讨论一下:

1) 牛顿法每次迭代的误差都会至少小一半,所以复杂度最多是O(log(n))。在数学上,牛顿法是quadratic convergence的,求高精度开根号是灰常常用的方法。

2) 有没有O(1)的算法?当然有,最著名的就是用Magic Number(0x5f3759df)算出 (1/根号 n),然后再乘以n,但是这种算法做个游戏还行,科学计算还是歇歇吧。而且,实在是太难理解了!

3) 这个链接比较了15种快速开根号的方法 Best Square Root Method,除了使用了特殊汇编指令、以及Magic Number的方法外,基本都是牛顿法的变种。而且几乎所有O(1)的算法,都会通过一步或两步牛顿法来提高精度。

4) 经评论提醒,Magic Number也是牛顿法的变种。不过我记得这个Magic Number和数学估算出的数还是有偏差,但是magic的地方就在于。。。在32位机器上。。。它的效果很多情况下都比数学估算的数更好!!!!(也可能是我记错了,反正这个数很神奇!!!!)

5) 二分查找对于较小的N可能会比牛顿法快,但整体而言肯定是没牛顿法好,所以我面试的时候压根就木有提起。

3. 对于那个不知道牛顿法的面试官,你说Magic Number或是上面链接里任意一个神奇方法,你都肯定会跪得很惨!!!!还是刷刷题,看看大家的常用解法是什么比较靠谱!!!!

4.另外请祖国人民放心,面试肯定是过了的。

以上,
3#
280东  2级吧友 | 2018-9-23 01:24:18

这个问题拆成两个子问题了。第一个子问题: 为什么这么多中国学生要努力进Google,微软等企业。第二个:为什么要刷题。


本来想先回答第一个的,但是回答会比较虚。第二个的回答会比较偏实际分析,我先说第二个好了。


"为什么要刷题",可能题主想问更本质的问题是”为什么这些企业都鼓励过于标准化的编程面试“,甚至更进一步问”这些企业难道不知道,这种面试会被靠刷题来应付吗“。


首先说企业是不是不知道会被各种面试准备来应付的,答案是企业肯定知道的,且是鼓励的。我个人经历是,遇到过Amazon,LinkedIn,Google,Uber的Recruiter直接把要考的知识范围发给我(公司自己写的大纲,不是具体题目,但是知识点都差不多了)。我自己面试Facebook时,公司还专门举办官方的interview workshop,请大家去Facebook园区里面做客,了解面试流程,而且有面试官清楚得给大家讲,每一面我们问哪类题目,有哪些地方你需要注意,等等。


所以这些公司是非常希望候选人有备而来,再经历面试洗礼的。那么各位可能会问,“这样不就暴露了面试方向,让通过面试的人都是有所准备的,这样的面试结果还准确吗”?


我用自己语言对这个的理论解释是,公开的标准化流程,是为了用最小的总误差,来找到统计意义上最适合的一群人。让人措手不及的偏题难题,看似无法准备,其实得到的结果,误差和噪音是相当大的。


(如果题主是懂机器学习的,那么理论一点说就是,标准面试流程本身就是一个对未来工作能力的预测函数,对它的优化目标是,在遍历极大数量的候选人上的总loss function(预测工作能力的误差)最小,哪怕候选人尝试适当把自己去猜测这个函数让自己这个样本去overfit得到好结果。)


如果刚才说的都太理论太晦涩了,举个比较实际的例子吧。假设题主要一年内招两万个旅行家。怎么招呢?你可以有两种做法:


第一种是,人进来面试了,突然问他去没去过一些很偏僻的地方,比如卢旺达的Mudasomwa镇,或者南极的Joinville岛。如果这种地方都去过,那么“我擦这种生僻的地方都去过,肯定足迹遍及全球了,招招招”。


第二种是,提前告诉要来面试的人,我们一小时考欧洲风土人情,一小时考非洲主要城市,一小时考中国主要城市... 请你们把自己相关的旅行经历整理一下之后,过来面试。


第一种看似是一种更即兴更真实更不可提前准备的考察,其实对招人的质量误差非常之大。比如能去过一些谁都不知道的小镇的旅行家,那么有三种可能: A)这人真的是足迹遍布全世界了所以这些都去过,不过这种可能性其实很小 B)他就是瞎猫撞到死耗子了,正好去过那几处,其他地方其实旅游也很少 C) 其实这个题目也被暴露了,他为此专门去了这地方。


第一种对大部分优秀的,或者高于平均的旅行家来说,也不公平。他们哪怕走遍世界很多地方,也很大概率没有去过这些生僻的地方。那么他们可能会被刷掉。


结合平时我们熟悉的面试问法,第一种类比于,强调问一些很生僻很超前很难的技术吧。如果答上来了,就哇连这个都知道肯定其他方面也不错,答不上来就是这人so so。这种对人的评判的误差很大。


第二种面试方法,看起来很容易被候选人针对,因为他们可以专门去这些地方旅游一遍来针对面试。但是... 1) 如果公司已经明摆了要问这些了,大家同样都准备过,答得还能比其他人更好的,本身大概率就是能力更强的。 2) 通过第二种面试招进来的1000个人,跟通过第一种面试招进来的1000个人,肯定统计意义上能力更好更综合,更胜任工作 3) 这些考的地方,因为不是生僻,一般不会去过就彻底知道没去过就彻底不知道,比如考欧洲旅行知识,这个往深也可以说很深,有助于面试题目的一个平滑的区分度 4) 你招人进来的工作内容,很可能是让他们去覆盖一些常见的地方,那么这些能答上,其实是更适合应付日常工作的。


于是,上面这么多段话,回答的内容是,“为什么公司喜欢选择,过于标准化的,容易被候选人针对准备的面试题目”。在这个成立基础上,水到渠成的事情就是,“候选人会去想办法应付标准化的面试”,即“刷题”。


此外,要注意,现在去这些公司,基本都是做很标准化的螺丝钉工作,所以对量产的螺丝钉,肯定也是需要标准化流水线化的招聘面试的。


写得有点多了,这个回答了第二个子问题吧。已经太长了,第一个还是不写了。

4#
白如冰  5级知名 | 2018-9-23 01:24:19
看你说刷题不如精读好书我还是有同感的,但看到你举的例子是 《黑客与画家》,《从0到1》,我整个人都不好了。。。
5#
李陶冶  3级会员 | 2018-9-23 01:24:20
不要试图从任何一个答案中寻找结论。有人告诉你刷题掉智商,但持这个观点的人可能拿过Tco或Gcj Final的奖金。就好像有人说“数论是毫无用处的”,但那个人的名字叫:Paul Erdos。
6#
tombkeeper  3级会员 | 2018-9-23 01:24:21
这是一些勤奋的年轻人在为实现自己的阶段性目标而努力学习。“刷题”是对学习的蔑称,“疯狂”是对勤奋的诋毁。
7#
Tim Shen  3级会员 | 2018-9-23 01:24:23
面试面算法题是这么个思路“在刷题还没有兴起的年代,算法题做得好的,很大可能比较聪明,或很大可能学习东西较快,总之,和我们注重的高生产力有迷之相关性”。

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

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

所以刷题还是要刷的,但是倘若光刷刷题就能拿offer,而其它能力不怎么行,那要么是面试官懒惰,要么是放水,要么是naive。当然,这些错误惯性巨大,需要时间来修正。
8#
Elodin  3级会员 | 2018-9-23 01:24:24
谢贝勒爷邀。

自从我国开始反思批判应试教育了之后,我见到了很多类似这样的 Argument:“我们培养了大量的考试机器,扼杀了中国的爱因斯坦/贝多芬/毕加索/爱迪生/...” 这个题目也一样,只不过爱因斯坦换成了 Linus,贝多芬换成了乔布斯。这类论断最大的问题就是没有搞清芸芸众生和世之奇才的区别。你说学生为了高考、考研、找工作而刷题,而不是去读《从0到1》,去试图实现一个优秀操作系统内核,去研读更艰深的理论研究;可是我看到的是,真正的未来的 Linus 四年级就开始编程,大学精研各类黑魔法,随便写几行代码就比我快十倍整洁一百倍;真正的未来的乔布斯高中毕业就创业了,几年就搞出了很有意思的东西,现在已经小有成就;未来的爱因斯坦中学就看完了费曼,大学期间在研究组专心钻研理论物理;更有如贝勒爷这样的未来中国政坛之希望,从小黑格尔尼采就没断过。这些人真的不刷题,但你也真的很难见到,所以你以为他们不存在。

至于我们芸芸众生,刷题就是实现我们普通的小目标小梦想最高效率的方式,我不觉得有什么问题。

P.S. 在下面说“爱因斯坦看费曼,你是SB”的,咱俩里面一定有一个语文不及格
9#
Vinjn张静  3级会员 | 2018-9-23 01:24:25
老外都需要刷题,都出到第五版了
10#
吴昕  1级新秀 | 2018-9-23 01:24:26
我个人原来也困惑于这个问题,觉得算法题面试不是最好的面试方式。一方面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。 至少愿意去刷题,可能代表了今后工作中也愿意努力去解决问题吧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:24326
精华:1
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP