刷题到底有什么用?你这么刷题还真没用

  • 2020 年 11 月 10 日
  • 筆記

关于刷题,上一篇文章讲了 How,今天我们来聊聊 Why —— 为什么要刷题?

或许很多人没考虑过这个问题,或者会说因为面试要考啊,没错,就是这个原因,就这一个理由足以让我们去刷题。但今天我们来聊点不一样的,希望给你新的启发。

算法之前,面试考什么?

我曾在这篇文章《从 LRU Cache 带你看面试的本质》中提到过部分,美国大厂面试 80% 都是在考算法,这其实是最近 5-10 年以谷歌、雅虎为首才兴起的;国内大厂对于算法的考察虽然没有这么狂热,但也越来越重视了。

那为什么会形成这种局面?在考算法之前它们在考什么?

你有两个罐子,容量分别是 5 升和 3 升,还有一池塘的水。在没有测量工具的辅助下,问能否准确的取出 4 升水来?

煎一个鸡蛋需要 15 分钟,可是你手头没有计时器。现在给你两根绳子,烧完一根绳子需要一个小时;而绳子是粗细不均匀的,有可能半根绳子几分钟就烧完了。

填满一辆校车需要多少个高尔夫球?

这类题被称为”Brain teaser”,不只是十几年前的科技公司在考,如今的金融公司还在考,比如我在刚毕业面试 Quant,Risk 的职位时都会被问这种问题,为此也专门准备过。

那时候互联网行业刚刚兴起,每天都会面对很多未知的问题,那么就需要“聪明人”来想办法解决这些问题,所以面试的核心是选拔最聪明的人。

为什么考算法?

后来互联网大规模的兴起,需要大量的工程师去解决问题,那么面试的核心就变成了如何选拔出能够解决普通问题、写出有效代码的人。

一个基本功扎实,思维逻辑强,能够写出有效代码的人就能够胜任这些职位,因此互联网公司的面试规则也随之改变。

互联网行业的大规模扩张降低了行业的门槛,虽然目前依旧是高薪行业,但对个人的门槛已经大幅降低了,甚至不问背景和专业,每个人都有机会进入顶尖的公司。

大部分互联网公司认为,算法是非常有效的筛选出他们想要的工程师的。

算法,一是能够考察面试者思考解决问题的能力,二是考察写代码的基本功。

一个能通过算法面试的人大概率是能够胜任工程师的职位的,不能胜任那还有 pip 等着呢;一个不能通过算法面试的人大概率是无法胜任这项工作的。

当然了,可能会漏掉某些优秀的人才,但真相就是,大厂不在乎

面试是能够最高效的选出需要的人才,最好还能够流程化、标准化,如果需要员工在面试上投入太多,哪有时间好好工作呢?

所以算法就像是高考一样,可以帮助企业快速筛选人才,并且相对其他方法来说性价比更高:成本低、效果好。

但如果你是在某些方面有所特长,或者是某个领域的专家,就不需要经历这种标准化的面试了。就像高考时也会有特长生、奥赛保送之类的,但实际上,这种方式,更难。

所以以上我所说的更多的是针对初级工程师,也就是刚毕业的同学,没有实习没有重量级项目的同学,你说要考察什么呢?这么一算,算法真的是通往大厂的捷径了。

算法,仅仅是算法吗?

那有些人又说了,学了算法工作中根本用不到,学它有什么用?不学我也一样可以工作。

那我想问,你学了操作系统工作中也没让你写个操作系统啊,学了前端也没让你开发浏览器,学了数据库也没让你造个数据库啊,那怎么学个数据结构你就一定要想着造个数据结构呢?

现在工作中大都是直接用这些工具而不是重新造轮子,这也是互联网行业能够大规模发展的原因,就像连锁店的产生,也不需要每个员工都会去生产核心产品。

但是,一旦需要你去造轮子,比如开发新的产品,一定离不开大量的算法;那如果你不在这些职位上,自然是用不着的。

那这也解释了为什么大厂都喜欢考算法,而小公司更注重你是否熟悉某一个框架的使用,毕竟小公司是要你直接来干活的。

那不在这些岗位上,就一点都用不到算法了吗?也不是。

对我来说,算法已经影响了我的方方面面。

比如一个很常见的问题,工作中 debug 时,不是从第一个开始查,而是要用二分查找的思想,先找到一个中间位置设置断点,查看到这个位置的信息是否正确,然后再逐渐缩小查找范围,最终找到问题所在。这个思想就来源于 Leetcode 上的二分查找的算法题原题。

模版,你还在用模版吗?

说到二分查找,有同学都有问过我哪个模版好,我都惊呆了,原来还有很多个模版?!

我在上一篇讲我的刷题方法中并没有提到模版,因为我根本不用模版,我认为但凡是用模版的就是你对这个算法根本没理解清楚。

关于二分查找确实有很多变种,有些人总想用一个模版套所有情况,是会有这种模版,但这个模版一定不是所有情况的最优解。

在面试时面试官稍微变化一下条件,多问你几个这样行不行,那样可不可以,你就露馅了。

更重要的是,这样背模版来做题才是真的没有用!这样刷出来的算法工作中真的用不到,到实际 debug 时你还想套模版吗?难道在 debug 时,你还先翻翻模版,再确定往哪个方向去查找 bug?

公司招人是来解决问题的,如果套模版就能解决的问题,何必花高薪招人来解决呢?

所以刷题有没有用,还要看你怎么刷,不同的人刷同样的题,效果可能完全不一样。就像我们高中时做数学题一样,做题不是为了高考时碰到原题,而是锻炼自己的思维、思考方式,这样才能在遇到新题时迎刃而解。

当然了,我也不想神话刷题的作用,有些工作就是用不着,没错,那就好好工作。

工作几年之后算法所占面试的比例一定会减小,一个工作 5 年的工程师去面试,如果问算法题,那通过之后会给一个 senior 的职位;而一个刚毕业的学生去面试同样的算法题,哪怕答的再好,也只是 entry level,这就是区别,区别在于算法之外的内容。


好了,想进自习室刷题的可以继续加我微信,上周没加上的抓紧时间了。

还不了解自习室的小伙伴可以看这个视频了解一下,学习内容不局限于刷题,英语健身前端后端各种都有打卡,欢迎你的加入。

我是小齐,终身学习者,我们下期见!