如何看待中国学生为了进 Google、微软等外企疯狂地刷题?北美学生想进这些名企也要刷题吗?

发布时间:
2024-08-08 20:38
阅读量:
23

我之前没怎么刷题,于是第一个电面就懵逼了:

面试官:写个开根号的程序吧。

我:好的,可以用牛顿法(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.另外请祖国人民放心,面试肯定是过了的。

以上,

END