前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >谈一谈面试算法的几个常见误区

谈一谈面试算法的几个常见误区

作者头像
叶秋学长
发布2023-08-31 15:35:23
1500
发布2023-08-31 15:35:23
举报
文章被收录于专栏:全栈学习专栏全栈学习专栏

下一篇我们就开始梳理面试算法的体系了,今天呢,有个问题有必要谈一下——如何正确对待算法,如何征服算法。

目录

1.如何平常心对待算法

2.关于准备算法面试的一些误区

1.如何平常心对待算法

在老师之前算法班的群里,有位同学分享过一个让人震惊的信息。他说一个女孩去面试,在简历的个人优势部分里写自己不孕不育,不需要产假。这个是优势吗?我问几个女同事,她们竟然对此表示认同,至少不反对。很多女生面试时也会被反复问及家庭和婚育方面的问题,甚至因此过不了面试,可见职场多么残酷!可问题是,不孕不育是亮点吗?我们是求职,但不是牲畜,也不是机器。每个人都有追求幸福的权利,为了家人、为了孩子, 我们更有动力去工作。这个女孩内心一定会有深深的失落,但这种失落不会化为认真工作的动力,只可能变成熬时间的浑浑噩噩。

认真只能将事情做对,用心才能将事情做好。如果我是她老板,会鼓励她该看病就请假看病,回来就认真工作,只关注考勤和工作时长的公司不是好公司,特别是重在脑力劳动的互联网公司。

这件事也告诉我们想打造一个亮点是多么难,在简历上加一条要付出多大的代价。那问题说回来,什么才算亮点呢?我们知道社招面试会考察三个显式方面:项目、技术和算法。还有两个隐式方面:学历和上一家公司的档次。显式的意思就是面试可以聊,而且能直接反应你客观水平的。隐式条件是双方不会怎么说,但是大家心照不宣,而且你也无法改变的。所以,项目经验丰富是亮点,技术水平过硬是亮点,算法能力强是亮点、学历高学校好是亮点,上家公司好也是亮点。面试就是战场,将所有的亮点摆出来,就看谁能到最后。

能否面试成功、能要到多少的薪资 ,很多时候是看你值多少钱,而不是多么能加班。经常在各种群里看到抱怨如何如何被歧视,参加线上交流的时候几乎每次都有人问两个隐条件,平时也经常有人反复问:想去大厂,专科有机会吗?外包有机会吗?小公司有机会吗?等等。事实上,告诉你有和没有有啥区别吗?你能做什么吗?什么都做不了!可以告诉你100个没有机会的理由,也可以告诉你100个有机会的例子,我至少有五位同事都是普通学历,但是进了微博美团等大厂。你会花几年重新高考吗?你能让时光倒流,重新冲击大厂吗?如果不会,纠结这个问题有什么意义呢?

学历歧视是普遍存在的,只是没有哪个公司敢直接说而已,各行各业都这样,大家都心知肚明。爱美之心人皆有之,如果选择贾玲和杨幂做你老婆,你会选择谁?我们都知道贾玲非常优秀,非常幽默,人品又好,还很会挣钱,所以我选择杨幂,原因就一个:杨幂漂亮!如果两个求职者面试情况非常接近,一个是阿里来的,一个是某个谁都不知道的小公司来的,你更想要谁?这是人的本性,我们无法改变。如果换位,我们也可能是那个我们讨厌的人。

编辑

相对而言,研发岗位更注重真才实学,即使你学历高学校好也不见得就一定能行,如果技术不清不楚,算法也写的不好,那学历就是个摆设,机会还是没有,这种例子也非常多。另一方面,很多公司在缺人的时候会降低隐性要求,给你一个面试的机会。那接下来就看你面试的表现了,项目水平、技术深度和算法能力就真刀真枪来一遍。遗憾的是很多人在面试过程中软绵绵的,技术说不清楚,算法写不出来,甚至直接放弃,那对方怎么给你机会呢?

都知道算法很难,但是要去大厂、要拿高薪,这是必须要过的坎。

遗憾的是很多人 ,发完誓之后就不见了。

不少人快面试的时候才想起来算法弱,然后急着问怎么办。别人能怎么办?要是3天就有办法解决,那老师的课就不是几百了,而是几万,我相信愿意来的人更多。

之前互联网行业行业整体是缺人的状态,机会很多的,但是近几年情况发生了很多变化,互联网虽然不到“前端已死,后端已凉”,但是需求大幅下降。供过于求的情况下,内卷是必然,技术卷,算法也会卷,所以算法已经不是“锦上添花”的内容,而是每个程序员必须要过关的坎。

“穷则独善其身,达则兼济天下”,我们要么躺平,要么把自己锻炼成金子。我相信加入鱼群的你还是想锻炼自己的。如何面试、如何学技术,包括我们接下来要谈的算法等都是有科学的方法可以训练的,只要将相关的能力训练出来就行了。

所以如果以后再有人问起点一般有没有机会去大厂,我们就直接问他“算法如何”,如果说不会,那就直接告诉他没有机会。反之,则鼓励他,积极关注,有机会就去冲刺!

平时感觉自己还挺聪明的,一到算法就感觉智商为0, 该咋办呢?

我可以明确告诉你,面试官也是刷题过来的,大部分面试都是以常见题目为主,而常见的算法题是有限的,常考的题目类型也是固定的,因此你只要将我当成驾照一样,集中一段时间将其学会就行了。

学会这些不是要百分百过一切面试,而是做到80%以上的题目都能搞定就行了。我们的课程也绝不会说让你一定能解决所有的算法,那你需要海量的时间和精力,我们的目标就是让你用最少的时间搞清楚80%的问题,剩下的时间学技术、做项目更有意义。那如果遇到奇葩面试怎么办呢?不用怕,大不了问候一下他祖宗,换下一个公司就是了。

所以, 算法这东西就当做驾照,常见不过十几种专题,300多道常见问题,将当做要掌握的一种必备技能就行了。反之,一直回避,不想下功夫,却天天抱怨,每次换工作都要被折腾一圈,即使大厂招人,很多人也压根就没机会。

面试的算法其实没什么用的,尤其是不会在工作里用

很多人想学算法,觉得对工作非常有用,所以要学好,所以要好好刷LeetCode。我可以告诉你LeetCode里的算法是没啥用的。你在工作中有写过链表吗?有写过二叉树吗?有自己实现过回溯吗,有写过动态规划吗?反正我从来没有。因为这种代码不易扩展 ,很难维护,如果在工作中写,一定会被骂,但是在算法里是绝对的重点。

那算法有什么用呢?其实就是练习思维的游戏,说白了就是面试用的。那话又说回来,为什么面试非要现场写算法呢?因为算法是测试你是不是金子的最有效手段。这种方式不是完美的,但是最好的。

我也曾经很排斥,但是当我作为面试官去面别人的时候才感觉到为什么非要这样。从一开始我就努力识别这个人的水平到底怎么样,我会分析项目里哪些是他自己做的,哪些是他真正理解的,哪些是他背的。但只有让对方写个难度中等的算法,看他在整个过程中的表现,我才会放心他的基本功是不是扎实的。

为什么呢?因为算法是所有程序员的共同语言。虽然都是做java,大家的行业和具体的事情千差万别,很难准确判断一个人到底水平如何,说不定他说得天花乱坠的设计,最后只是写了个if else。做CPU指令的人也不太可能懂前端小姐姐说的vue是什么。做网络的面试官可能对擅长数据库的求职者也没什么感觉。数据结构与算法就成了双方都能交流的领域,而且好坏立竿见影,不管怎么说,能写出来,能运行出来就是真功夫。对于大厂以及很多还不错的公司,算法成了面试的一个必备环节,有的面试官只有亲自考你一个才放心。

2.关于准备算法面试的一些误区

对于算法,有很多很多的论调,有的还截然相反,这里看几个。我们都不喜欢说教,但是在之前的课程中,和很多小伙伴聊的时候都发现存在一个或几个问题,这会影响学习效果,干脆就统一列举一下吧。观点没有好坏,希望能帮你进一步审视算法。

1.学而不思,思而不学

经常有人说花了3小时写了一个算法,这样不好说不好,只能说效率太低,偶尔干一干还是可以的。很多算法的方法是固定的,完全靠自己想出来费时费力,即使写出来的,不管结构还是设计上可能非常差,而且很容易就忘了,面试时即使考原题还是一样懵逼。比如在《位图》一章,我们会介绍很多技巧,这些靠自己面试时临时想出来几乎不可能。这就是典型的思而不学,还有人是另一个极端。有的人说自己刷了200题,还是感觉很迷茫,我非常怀疑他根本没有刷清楚,可能只是跑了一下别人的答案而已。如果刷过一定量的题,一定会发现大量的考察点是重复的,很多问题本质上是一个东西,所以题目是越刷越少的,甚至还能自己出题,怎么会越来越迷茫呢?那学和思怎么划分呢?我的感觉做题以半小时为界限,如果半小时后还想不到怎么做,就该找别人的解析来学习。

2.抬头仰望星空长叹,低头抱怨不断

很多人愁算法的时间比真正练习的时间更长。不知道大家在学生时代是否一直为如何学好英语犯愁,整天各种疯狂英语,各种新东方,但是一直到毕业也没将英语真正学好。为什么?一个原因就是天天喊着要学习英语,但从来没做过,更别说坚持。算法也一样。还有的人马上要面试了,才急着找个佛脚抱抱,平时根本不关心。有的人会一时兴起,随便选一道题来考察自己算法到底行不行,十有八九是失败的,因为一道题可能涉及了hash,涉及了树,涉及了递归,结果你连怎么定义树节点都不知道 ,怎么可能解决呢,最后必然是打击自己。这就好比很久没运动了,突然让跑一万米,谁能跑下来?

3.总想着一步登天,一劳永逸

有的人想着从0开始,于是就找了本厚厚的数据结构书看。但是大部分人会对这类书没什么感觉,更不会坚持看完,于是没多久就不了了之。有的人发誓将leetcode全部刷完,彻底解决算法问题,然后从第一题开始向后刷,要知道LeetCode里靠前的题目普遍比较难的,因此费劲好大也没刷几道,信心没有了,不想刷了,甚至心生畏惧,最终算法成了过不去的痛。有的人希望算法能达到熟记的程度, 抬手就能来,这是不可能的,我们重点在于理解清楚,面试的时候给你点时间就能想明白、写出来,而不是全部熟记才算。

还有的人总是感觉动态规划才叫算法,回溯才叫学算法,而不重视基础问题。其实是认为高难度题目都会了,基本问题还是事吗?

这就像总想着取到白富美, 对自己身边的女孩漠不关心,那注定孤独一生。面试过程中大部分算法是以基础问题和变型问题为主的,有点难度,但是不会难于登天。如果只盯着难题,往往会难题搞不清楚,基本问题又不会,也许这就叫走火入魔吧。

4.因为别人的外在吹牛而焦虑

例如喜欢看一些如何刷算法的毒文章,有些会推荐一堆的书,特别是《算法导论》。我觉得这种人真该死,因为这本书虽然叫导论,但比一般的算法书要难很多,没有足够的数学功底根本看不了。起点不高的人看了会迅速失去信心,因此这类书对大不部分人来说根本不适合,这种毒文无疑也让人坚信算法天生是难的,更别说乐趣。没有乐趣的学习,注定无法持久的。还有人对群里那些炫耀特别敏感,有些面过大厂的人为了提高自己的逼格,会极度渲染面试的紧张,比如30min必须写完,要当着面试官的面写完,远程时面试官盯着你的桌面让你写等等。

事实上,在面试官面前写算法,如果你一直没有思路,有些面试官会提醒你的。如果你的思路有问题,他也会提醒的,方案没有问题才会让你去写,这无疑会降低你写算法难度的。所以面试官盯着你,你就当成一个高手在指导你就行了,何必这么紧张。那些人渲染面试多么紧张会给别人带来极大的恐慌和焦虑,所以这种人我是看到一次怼一次,绝不客气!

5.总感觉以后在工作中多积累一些算法就行了

事实上面试算法和工程算法的侧重点是完全不一样的,相互之间的关联非常少。我们在后续章节中会看到大量这样的例子,例如工程中会大量使用Hash,因为简单好用又稳定,但是很多算法一旦使用Hash就没有含金量了。所以在面试算法里,Hash只是个备胎,只要有其他思路一般就不用了。在工程应用中我们追求的是易用性和稳定性这些,而算法更多考察思维能力而不怎么管是否能用。所以必须针对面试算法做一定的积累,指望工作中积累只会是幻想。

6.工作事多、平时很忙,没时间学习

别说没时间,因为这只是借口,对自己不够狠。这个我们前面介绍过狠人是怎么干的,今天再说一个例子,我读研时,实验室里曾经有位博士,有机会去斯坦福大学。当时他只有3个月的时间来准备英语,还有科研任务在手,而当时他连英语6级都没过,怎么可能在3个月内达到要求呢?于是他报了新东方的培训班,坚持上课学习,然后每天早上5点起来练英语,就这样一直坚持,直到考完。后来回国后,一个公司给开年薪150W,结果人家没看上。

你觉得让他脚本会更快吗?让他做需求会更好吗?加班时间会更长吗?那凭啥人家的薪资是我们的几倍甚至十几倍?因为他档次高!关键时刻他能顶住压力做到常人做不到的事。薪资水平不仅仅取决于工作时长,更多是自己的档次和展现出来的能力,让人相信你值这个价。一直强调自己能加班,反而显得自己技术水平不够。虽然大部分都不会在工作中用,但是算法本身就是思维能力的一种证明。不会做就不给加钱,做出来就敢多要几千,就这么简单。

7.试图能通过硬背答案来解决算法之痛

算法有没有模板?有的,而且还很多,越是高级的算法越有模板,例如二分查找、各种牌组方法、数字、位运算、双指针、滑动窗口、回溯、动态规划等等都有自己的模板,而前缀树、线段树、堆、平衡树等等本身就是一套规则,理解规则了,题目几乎都不用做。

既然有模板那是否可以背一下呢?那就错了,模板是思想一致,解题思路一致,而具体的代码则千变万化,不可能记住的。而且稍微换一下条件就可能修改好多代码,因此靠背答案是没有任何意义的。比较靠谱的是先透彻理解算法的思想,一题一题做,将技能和技巧总结出来,最后将题目归类总结出本类型题目的解题套路,这就是模板,我们后面几乎每个章节都是这种方式进行的。

8.能不能考个证,然后面试就不用面啦?

我曾经试图找各种算法的误区,一次上课直播的时候,一位同学的问题让我瞬间懵逼“有没有算法的证啊”。我就问他为啥要考证,他说这样可以证明自己算法确实过关了,然后面试的时候就可以不用写了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叶秋学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.如何平常心对待算法
  • 2.关于准备算法面试的一些误区
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档