为什么面试总喜欢考算法题?

2015-08-20 16:13:53 +08:00
 ototsuyume

每年校招的季节总会有这种讨论,有人觉得考算法题没意义不如考实战考项目考 XX 。有人大学的时候做了很多个网站写了很多项目然而就是做不出这些“没有意义”的算法题拿不到 offer ,有人觉得太简单做算法题区分度不大。

先来看一下,在大公司来说,程序员日常的开发工作是怎么样的。就拿腾讯来说,比如你的职位是 qq 的后台开发,那么你的日常开发语言是 C++,你日常的工作是维护一大堆已经上线的用 c++写成的 cgi 和后台的逻辑 server ,有新需求的时候用 C++去开发新的逻辑 server 和 cgi 来实现这些功能。而这其中, cgi 有现成的库,逻辑 svr 也有现成的库,存储方面用公司内部开发的 CKV 或者其他组件,它们有专门的运维团队来维护,其他像发布数据统计日报等全部都有现成的组件。你只需要把产品的逻辑组织好填到框架中就行。

那么你工作之外接触的其他技术哪部分跟你工作中用到的东西有关系?你开发网站用的 php/python ?或者是做存储用的 redis 和 mysql ?甚至更时髦的 docker ?

事实就是,越成熟的大公司,内部有越多的内部组件内部系统,你在里面工作,你不需要担心应该采用什么数据库用什么语言什么发行版的 linux ,你只需要选择现有的组件设计好架构组织好代码就足够。

那么回到面试题目这个问题上,特别是校招面试上面,假如一个应届生非常聪明和刻苦,每天都是专研计算机课程的专业课程(算法、编译器、 os 、 etc.),里面的每个算法都倒背如流,甚至能在一场面试内写个 LR1 的 parser 算法出来,那么你问他一些实际项目是考察不出他的潜力的和实际的学习能力的。而对于一个没怎么学过算法,但是做了几十个外包网站的同学,他的项目能力很强,但是你确定他能在入职后应付到工作中遇到的挑战?

所以说,面试考算法是一个基准点,因为算法是计算机科学里面最基础的学科,其他更高级的学科都是在这个基础上面展开的。在过了这个基准点的基础上,再考其他的东西,例如更复杂的算法,实际的项目经验,知识广度等。这也是目前国内大公司面试的标准形式。但这其中有个问题是面试官的知识水平不一,所以有时候面试官水平不够甄别出水货和牛人。说白了就是不够标准化。就比如我试过一次面试,面试官连珠带炮问了我两个小时,但是全都是问的各种基础概念,假如我当时对着电脑打字速度够快的话,他这种面试方式有何意义?

而说到面试的标准化,那就得说回微软 /google/facebook 以及湾区众多 hot startup 的面试方式。这些公司的 onsite 面试一般是四轮,应届生大多数情况下不会有设计题,几乎都是算法题。在现在刷题网站越来越多的时代,靠考算法题还有没有筛选度?

这里我拿 facebook 来举例,因为 facebook 的面试太过标准化了。 facebook 的面试分为四轮,其中一轮 culture fit ,两轮算法,一轮设计(应届生不会有这一轮)。 facebook 的算法题不难,几乎不会有 dp 题目,大概就是 leetcode 上面中等难度及以下的题目。有人说,这么简单的题目,随便一个英语好点的搞过 acm 的学生都能过。实际上去年 facebook 在中国招了多少个应届生呢?不超过 30 个。

为什么?一道简单的算法题,你现在对着电脑想,可能没什么难度,一下就能写出来,但是面对面试的时候的压力,你能否在十几分钟内在纸上能写出整洁无 bug 的代码?另外,简单的题目只是一道开胃菜,后面几乎可能有稍难的 follow up 。而且还有非常关键的一点,就是沟通能力。以前在知乎上面看过一个是清华的一个竞赛出身的学生问为什么 google 问的问题那么简单他答出来了还被拒了,你搞竞赛出身你有一身牛逼的 coding 本领熟悉各种奇技淫巧,但是要你解释思路的时候却三言两语就糊弄过去,换你做这样的同事你愿意不?一道算法题你觉得做出来不难,但是试试自己用语言描述出你的思路,然后证明你的算法是对的,可不一定那么简单。

而对于社招来说,算法题是一个考查方面, design 题目也很重要, design 题目很大程度会影响你的入职的级别和工资。而假如你知识面广或者某个方面很厉害,在简历上体现出来的话面试官也会适当地问你有关的问题,这里也是加分点,但是这不是能否通过面试的关键点。

说了这么多,我只想说明一点,面试时考算法不一定是最好的,但是是比较有效的,而且是比较公平的方法。至于你说花几天的时候让他做一个项目,那么你想想 facebook 人均创收几十万上百万美刀,本来请个人过来面试已经要花个几百刀的了,还要让个员工花了几天去应付他,那一年下来得亏多少钱?公司不是傻子,你要是发明一种更有效的更低成本的甄别人才的方式,不用多久肯定就传开来了

3692 次点击
所在节点    程序员
28 条回复
fszaer
2015-08-20 20:29:07 +08:00
这个时候是不是要 @一下因为翻转二叉树没写好被拒绝的那位了=。=
ototsuyume
2015-08-20 20:42:25 +08:00
@fszaer 这个已经被人讨论到烂了,我的看法是 google onsite 面试有四轮,不会因为某轮面得差就终止面试,也不会单单因为一道题做不出来拒掉他,更何况他本身的履历就非常不错。但是他只提到面了一轮问了一道问题,这里面槽点太多了。除了他没人知道真实的情况,说不定他就是看不爽 google 编个段子出来黑一下

写了这么多好像并卵,游戏规则别人定,你想去那些公司就只能按照对方的游戏规则来玩。当然更好的是自己能当庄家自己定游戏规则。反正既然无法反抗就乖乖地享受
oclock
2015-08-20 21:21:17 +08:00
因为工程能力、靠谱程度比算法更难考查
lincanbin
2015-08-20 21:38:28 +08:00
为什么?一道简单的算法题,你现在对着电脑想,可能没什么难度,一下就能写出来,但是面对面试的时候的压力,你能否在十几分钟内在纸上能写出整洁无 bug 的代码?

引出了纸上写码这个新问题。
lcqtdwj
2015-08-20 21:40:19 +08:00
因为真正的好程序员必须要有好的算法功底
YouXia
2015-08-20 21:54:09 +08:00
以前我也认为纯粹的考算法意义不大,因为工作中那些算法基本上用不到。

而最近这段时间负责搜索引擎代码优化,对计算机基础和算法都有较高要求,每当自己陷入困境,我就后悔学生时代刷题刷的太少。

于是我跟同学自嘲说,以前认为工作中基本上用不了那些算法,主要原因是自己当时做的项目太弱,眼界太低,现在需要了,反而后悔莫及。
UnderIndex
2015-08-20 22:05:25 +08:00
ACMer 弱弱路过..
如果不专搞 ACM ,常用的算法就那么多。链表二叉树图论这些基本的数据结构算法就那么点,撸清楚了没什么面试能难得到的。。还是看自己的知识面广度和深度吧,操作系统,网络这些也很重要。
orvice
2015-08-20 22:10:09 +08:00
其实就是一个成本的问题吧。。。
最简单的方式找到需要的人,而漏掉一些人也是可以接受的这样?
refresh
2015-08-20 22:19:32 +08:00
懒,算法有标准答案,其它没有
算法当然重要,顶端的程序员都是算法牛人
但问题是,很多公司并非招顶端的程序员,也招不起顶端的程序员
很多公司根本不知道自己需要什么样的人
以及如何去找到这些人

招扫地的,就要求他有招地的技能就好了
有人会问,假如有一天,万一你遇到一个算法上的难题怎么办?
那你还不如招会日语呢,万一有一天你遇到一个难题,只有日语资料你怎么办,如果你会日语,不是一下就能解决问题了?

我对算法牛人保持敬畏,但我反对一刀切都考算法
对于一般程序员,会用递归迭代右左反转之类的就差不多了
算法这种事,让专职的程序员大牛去干吧

对于多数程序员,英语水平比算法重要 N 倍

欢迎喷我
publicID321
2015-08-20 22:39:34 +08:00
幸福源自磨难
wdlth
2015-08-20 22:43:13 +08:00
如果连枯燥的算法都能忍受得了,其他的问题应该不大。大概是这么想的……
msg7086
2015-08-20 22:57:35 +08:00
@refresh 日语能力还是比较重要的。
现在写 ruby ,不少资料就是日语的,你要是不会日语那不得抓瞎了。
lvfujun
2015-08-20 23:19:06 +08:00
@msg7086 哈哈, ruby
我就不喷了。。。。。。放着阳光大道不走,非得走独木桥。
msg7086
2015-08-21 02:23:46 +08:00
@lvfujun 阳光大道是什么鬼
ericls
2015-08-21 07:54:30 +08:00
因为国内招聘是买方市场

别人想怎么弄就怎么弄

就算要求面试者跪着面试 也有人会去
yakczh
2015-08-21 08:56:22 +08:00
因为靠算法简单,写两行字就搞定,判断结果也是固定的模式,

比如 求 1-10 之间的整数 加起来之和等于 10 的所有排列组合
输出结果
(1,9 )
(2,8 )
...
(1,1,1,1,1,1,1,1,1,1 )



考项目经验这个出题维度多,比较复杂,判断结果也不好判断 A 做了个图书馆项目,B 做了个调查问卷项目,你说这两个人谁技术水平高?
zonghua
2015-08-21 09:00:51 +08:00
也就是数据结构的什么东西,谈不上算法。我倒是希望多考察操作系统和计算机网络,这些也能很好地客观评价。
sandideas
2015-08-21 09:17:00 +08:00
@yakczh 弱弱的问下这题比较巧妙的解法。。
sandideas
2015-08-21 09:21:53 +08:00
@yakczh 搜索然后剪枝么。。
CtrlSpace
2015-08-21 10:04:44 +08:00
大公司应该考察算法比较多
普遍小公司拉进来能立马干活的就不错了。
(参考培训机构的出来忽悠一下 10K+,算法,数据结构为 0 ,啥是链表?)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/214579

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX