喂,搞那么难的算法面试题有必要么?

喂,搞那么难的算法面试题有必要么?
2021年07月27日 15:16 CSDN

前两天,抓码君在收集素材时,认识了我们账号的一位读者,他是北理工的硕士,也曾在某军工单位工作一年,简历优异的他却心甘情愿的呆在某小厂,而且一干就是4年。

我很好奇他为啥不想办法进大厂,就问他原因,他回答:“大厂面试关实在过不了,总问一些偏算法的理论的东西,平时工作那么忙,哪还有时间刷面试题。”

他的故事不禁让我想起15年Max Howell (Homebrew的作者)在 Google 面试时遇到的情境,Google拒绝了Max 并给出理由:“我们90%的工程师都用你写的软件,但抱歉我们不能聘用你,因为你没法在白板上翻转二叉树。”

于是我和几个大佬聊了聊这个问题,大家一致的结论认为:面试问到的理论和算法在实际工作中几乎用不到,但为了面试不得不狂刷题。

这似乎已经成了程序员竞争岗位时的一种新内卷?

算法理论YYDS

一般来说,进入大厂面试除了常规的项目经历及面试常规题“为何从上一家离职、平时都学习些什么”之外,Java 八股文和算法题是一定不会少的。

但是这些东西在实际操作中却几乎不会用到。

比如——

请问,Object作为HashMap的key的话,对Object有什么要求吗?

请问 hashset 存的数是有序的吗?

输入一个二叉树和一个整数,打印出二叉树中节点值的和等于输入整数所有的路径二叉树的搜索区间

现在有一个单向链表,谈一谈,如何判断链表中是否出现了环随机链表的复制

找出数组中和为S的一对组合,找出一组就行

求一个数组中连续子向量的最大和

谈一谈,如何得到一个数据流中的中位数?

你知道哪些排序算法,这些算法的时间复杂度分别是多少,解释一下快排?

请你解释一下,内存中的栈(stack)、堆(heap) 和静态区(static area) 的用法。

说一说,heap和stack有什么区别。

请你设计一个算法,用来压缩一段URL?

谈一谈,id全局唯一且自增,如何实现?

一个长度为N的整形数组,数组中每个元素的取值范围是[0,n-1],判断该数组否有重复的数,请说一下你的思路并手写代码

请问求第k大的数的方法以及各自的复杂度是怎样的,另外追问一下,当有相同元素时,还可以使用什么不同的方法求第k大的元素

判断一个链表是否为回文链表,说出你的思路并手写代码

懵逼了么?反正我是挺懵逼的,作为一个程序员,有部分算法也许在开发中一辈子也不会用到,但是为了面试又必须要熟悉这些算法,甚至花费半个月一个月的时间去刷面试题。

有性子烈的程序员表示见到需要笔答的面试就撤,还有大牛敢直接用实力说话,比如抓码君就认识一位大神,去别人公司面试时被问了一些基础的理论,他直接打断了面试官的问题说:“这些基础的理论就不用问我了吧,你就说你们团队现在遇到什么问题,抛出来,看我能不能给你们解决。”

而除了这些大神,程序员群体中沉默的大多数只能在 996 的间隙默默刷题。

假如你问一个工作几年的程序员一些关于基础算法、数据结构的试题,他的回答肯定不如刚从学校出来的应届生。而全局的架构设计肯定不会在每一个细节上都让单个程序员亲自实施,一般都要依托团队来完成。

相反,一个合格、高效的面试官应首先了解自己招聘的岗位具体需求是什么,如果要招一个细分模组下的实现者,那根本不需要这种工作十五年、偏业务设计的人,在简历筛选时就该把他筛出去,等到人家都来了才发现不合适,这纯属浪费彼此的时间。

大厂如果需要倒背如流的理论基础,不如去招应届生来的痛快。

会做题等于会写代码?

由于大量毕业生涌入就业市场,再加上互联网行业红利不再,部分中小公司接连死掉,各个公司技术岗的面试题也越来越离谱,甚至可以说成了一种新的内卷表现形式。

比如某位X手员工曾经向抓码君表达:“我去应聘的时候也不喜欢答基础,原因很简单,就是不会。某个知识点,一个开发不会,其实是非常正常的事情。术业有专攻,毕竟每个人所在的行业,领域都不一样。难不成真的让我们每天不上班,对着基础和源码天天背书?而且无论怎么准备,总是有我们遗漏的基础理论。但是环境这个样子,大厂面试就喜欢问这些东西,能怎么办?”

于是,大多程序员的现状是:虽然痛恨,但是没办法,只能乖乖刷题。

像以二本学历收获了阿里、b站等多家offer的小李就认为:“大厂面试算法确实是一个槛,我和大多数人一样都很怕笔试算法题,但是啊,算法这东西,环境在这,没办法避免的,只能花时间来刷题。leetcode 或者 oj,100道题不够就200道题,200不够就300,只要花时间肯定能克服!”

其实这些实际工作中不会用到的算法题和基础理论在程序员圈中一直占据着非凡的地位。算法题和基础理论之于程序员就像某战和王某博在之于追星少女。

在程序员交流网站csdn中,长期霸占热榜第一的帖子是“3万字《算法 + 数据结构》刷了 3333 道算法题后的一点总结(建议收藏)”,热度高达109100......

截图(csdn热榜)

对于这种现象,有人发话认为是为了筛掉脑袋不灵光的人——

这的确是一个原因,但抓码君认为这不是主要原因。

主要原因是什么?是大多数人能写在简历上的工作经历没什么区分度,于是只好靠这些高难度的题来筛人。

要知道在互联网,行业里很多人基本没有能拿得出手的项目与技术经验,毕竟有这类经验的都已经乘着东风当上管理层财务自由了,所以最终,不得不回归应试教育式的筛选机制。

另一方面,「结构化」的算法题面试只能筛出基层“做题家”,而越往上的资深级选手越无法通过做题将他们筛出来,比如不懂 WebGL 的 LeetCode 做题家是一定写不出自己的渲染引擎的。

换个角度,如果你面试一位顶级的开源贡献者,如果某道算法题他没马上答上来,就证明你比他厉害了吗?

面试是双向选择的过程,大公司的标准也不是“金科玉律”,当你发现某司的面试官不过是一群日常CRUD的做题家,那他们的团队是否值得加入也就需要掂量掂量了。

冗重的行业与市场

抛开劳累和职业发展不谈,程序员的确算是一个高薪的职业。根据 JetBrains 最新发布的《2021开发者生态系统现状》,中国程序员(年)薪资中值达 21000 美元。

高薪且正在高速发展,也让计算机专业成了每年高考的热门志愿,虽然计算机专业录取分数较高,但选择就读的学生人数一直很多。

根据2021年的数据,本科毕业人数中排名前三的就有计算机科学与技术,毕业生数量达到了14万以上。

除了这些,目前甚至有程序员“程序员要从娃娃抓起”的倾向,很多小朋友还在上小学,就已经被父母逼着去考级了。

内卷从小孩开始

这样一通操作下来,大量基层程序员涌入互联网,你说这行业能不卷么?

目前业内是什么情况?高端稀缺、中端平衡、低端饱和。

在这个环境之下,即使只需要做“拧螺丝”的工作,你也得懂点“造火箭”的原理,不然你好意思参加面试?

从这个角度看,大厂们在面试中出的那些高难度题其实也是无奈之举,当然,那肯定不能算好的面试,因为好的面试是不会停留在算法和基础理论上的。

那你要问我怎么办,那我也不知道,好像除了“卷”也没有第二条路?

如果各方面条件允许,或许出国也未尝不可?抓码君曾写过一篇文章汇总了一些国内外的差异,有兴趣的小伙伴可以回看:《国内水深火热、国外闲云野鹤,程序员的唯一出路是出国吗?》

话说回来,虽然现状残酷,但我们也并没有选择,就像那句话说的:“成年人的生活里没有容易二字”,找准自己的目标,负重前行吧。

你对高难度的面试题怎么看呢?你是否有类似的面试经历可以分享呢?

财经自媒体联盟

新浪首页 语音播报 相关新闻 返回顶部