OMG,为什么找工作总爱考算法啊

抛开第2、3条不谈,通用问题思考能力就是把专业能力拿去,看一个人遇到一个非专业的问题,水平如何。

这是一个很大的范畴,想象力,创造力,记忆力等等,都能被包括进去。上面的“智力题”很大程度上是在考察通用问题思考能力。

不幸的是,当下大部分互联网企业比较认可的结论是:算法面试可以很好地同时顾及“通用问题思考能力”和“专业能力”的考察。

说算法问题可以很好地考察【专业能力】很好理解。怎么算法就能很好地考察【通用问题思考能力】了?

因为,解决算法问题是一个典型的“学以致用”的过程。对于计算机专业的同学来说,近乎大学前两年,就已经将基本的算法和数据结构学习完了。数据结构大体就那么多,经典算法大体就那么多。但是,面试者能否综合这些知识,解决一个一个算法问题?大家都懂这其实并没有那么简单。

我们在工作里也会经常面对类似的情况,各类语言就摆在那里,各种 API 文档上写得一清二楚,各种开发工具都唾手可得,github 上各类开源项目应有尽有。我们能否合理组合这一切,完成我们想要的功能?

解决算法问题,近乎就是这个解决问题模型的小小缩影。

03

当然,还有一类面试问题,可以更好地模拟这种“真实的问题”,那就是系统设计类问题。比如:

  • 如何设计一个淘宝?

  • 如何设计一个百度搜索?

  • 如何设计一个抖音短视频?

  • 如何设计一个微信?

  • 如何设计一个消息投递服务?

  • 如何设计一个通知系统?

但如果仅仅考察系统设计问题,最大的缺点是容易流于表象。

比如,面对性能问题,我们可以使用缓存机制。但是,具体在实现一个缓存机制的过程中,可能会出现什么问题,仅仅靠说肯定是不够的。

面试的时间是宝贵的,所以面试官不可能让每一位同学都真正实现一个完整的缓存机制。因此,对于系统设计问题的考察,通常很难触及到代码层面。

对于程序员来说,正确地实现代码,比知道几个诸如缓存这样的名词重要多了。很多人说起这样的概念头头是道,但真的写起代码来,就原形毕露了。

a397676e447468ea91e50279e51ea54d.png

算法面试相较而言,虽然问题规模会更小,问题本身也更有局限性,但能考察出程序员真刀真枪写代码的能力。

04

就算是算法问题,相信大家也都有体会。对于一个问题,描述它的解决思路是容易的,但真要落实到代码,就不那么容易了。

对于一个具体的工程设计问题,没有受过专业训练的人很容易忽略复杂的细节,将问题想简单。盖一个房子不过是建四面墙,上面加个屋顶而已,这里面包含了诸多复杂的工程问题。所以外行看来很简单的问题,实际上是很复杂的。

比如:

排行榜不就是排个序吗?

但能否达到性能标准?

搜索引擎不就是把互联网上相关的信息展现出来吗?

但是怎么定义“相关信息”?

微信支付不就是扫码然后付款吗?

但是怎么避免网络波动带来的支付失败问题?

Kruskal 最小生成树算法,思想非常简单:对所有边排序,之后从小到大选边,只要和已有的边没有形成环,就选择,否则抛弃。

落实到具体代码中,怎么判断“是否和已有的边形成环”?

在历史上,Kruskal 算法的思想很早就出现了,直到人们意识到可以用并查集进行环检测之后,它才成为了一个实用的算法。

所以,程序员的核心价值,是具体用代码实现出功能,而不是侃侃而谈思想或者概念。

05

当然如果遇到真才实学的面试官,面试者随便吹几个概念,其实也不可能蒙混过关。有经验的面试官一定能深入问出面试者的水平。但这对面试官的要求太高了。

高水平的程序员,他的主要时间应该用来完成工作,而不是去面试。

这样一来,算法面试的另一个优势自然而然就出来了:面试官好准备。

对于系统设计问题来说,面试官的水平要远远高于面试者才能真实地鉴别出面试者的能力。算法就不一样了,即使面试官的算法水平低于面试者,也可以进行考核。因为面试官可以直接看答案,理解清楚解题思路和代码就行。

正因为如此才会出现:

cf662a46f62ef85ced0cc1e4062323fb.png

一个算法面试官问你一个算法问题,你没做出来问题不大,这并不代表他比你强。因为你们处于信息不对等的位置。

06

当然算法面试还有更多优点。

  1. 和语言无关:不管是编译型语言,还是解释型语言;不管是前端还是后端语言,都能用来解决算法问题;

  2. 对硬件条件要求低:并不需要非常特定的环境或者配置;在公司的会议室可以完成,走在路上能完成,面对面可以完成,远程也可以完成。拿张纸都可以开始;

  3. 使用算法问题,可以很容易地比较面试者的水平差异。其他领域的问题,很难像算法问题一样,在不同难度级别上,产生这么多看似完全不重复的问题。不管是深度还是广度,不管是简单的还是难的,总会有合适的算法问题让面试官选择,以测试出你的水平上限;

  4. 正因为算法问题的选择很多,所以使用算法面试,非常容易成规模地进行招聘。在一段时间里进行几百场面试,题目不会重样。这样,避免了泄题的问题。


但是算法题最大的缺点,就是容易漏过人才。不擅长算法的人不意味着不胜任计算机专业的工作。

那大厂错过了人才怎么办?

他们可能并不在乎6a800ee660fd0edf2eea5addbcec3dec.png950266e83f08c99d7a9b42a96e3cd281.png694523427a3ef57e62f4291ec6fdc0a0.png

反正有简历源源不断地涌进来,他们只要招聘到足够数量满足自己需要的人就可以了。

通常来讲,擅长算法的人,近乎都能够很好地胜任软件工程师的工作。反之,不擅长算法的人,虽然有可能是人才,但更加可能不是人才。

07

很多小公司面试不考算法的原因,是因为他们不需要考察通用问题解决能力。小公司更注重专业能力的考察。能干活最重要。他们并不会接触到那么多创造性的问题。

招聘领域专家时虽然也有算法,但难度明显降档,最典型的就是 Google 在面试 Homebrew 的作者 Max Howell 的时候,给出的算法面试题“翻转二叉树”。这个问题在 Leetcode 上就是一个 easy ,然而他并没有写出来f6fbebde383b38d9c19ba389cad938fd.png

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!**

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 28
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值