有的同学可能会听已经工作的朋友说,真正工作的时候其实这个算法都不会用到,甚至还有人开玩笑说能写个for loop就行了,今天就和大家聊一聊为什么大厂面试要考算法和
数据结构,但是实际工作中却很难感受到他们的重要性。
首先,我从我自己的工作经历来看,在真正的工作中,确实不会出现跟
leetcode算法题形式完全相同的工作内容,有些算法像动态规划,binary search,甚至
recursion在真正工作也都很少用到。这种gap确实存在,但是通过算法能力的考察能保证面试者具有一下的一些能力 :
(1)时间空间复杂度分析的能力,比如说你要实现的功能和你需要的资源是平方甚至立方的关系,随着人数的增多,需要花费大量的CPU和内存,而另一种解决的方法是线性关系,这样的解法明显更好
(2) 算法能力是一个需要长期锻炼才能具有的能力。我认为对于大部分人来说,算法能力的提升是一个需要花费大量时间和努力的事情,不是靠临时抱佛脚和死记硬背就能获得的。所以说如果一个面试者如果具备很强的算法能力,那么这至少能够证明他是一个努力用功的人,肯定也不会太笨。所以从这个角度看这是一个很好的筛选
candidate的方法。
那么我们为什么还要学习算法和数据结构呢?
可能有的同学听人说,我在工作中从来没用到过算法这样的话,我觉得这样的回答肯定是没有经过深思熟虑说出来的。算法的学习会给你带来以下几个方面的回报:
(1)抽象问题的能力。做算法题需要你把一个抽象的问题,联系到一个具体的算法上,这个过程就是一个锻炼思维的过程。这种思维的锻炼,在日后的工作中应用会非常广泛,很多工作中的问题都是抽象的问题。
(2)Coding的能力,也就是写代码的能力。通过不断地算法题练习很好的提高你的编码速度和质量,相信很多同学在练习过程中都会去看别人写的solution,你们是不是有的时候会惊叹于啊这个
solution怎么可以写的这么简单,这么简洁,时间复杂度还原来可以更低,看别人高质量的代码就是很好的学习提升的途径。
(3) Debug的能力。在做题的时候不可避免的会遇到test不过的情况,这时候就需要你自己去发现自己代码的问题。常见的debug方式有:
肉眼debug法,这个方法是指你不去运行你的程序,就靠眼睛去看,如果有同学习惯这样的方法,我的建议是你拿笔去写一写画一画,比全靠眼睛去看可能效果更好break pointe调试,这个是比较常见的方法,通过IDE的debug功能,你能看到代码执行到哪里了,每个变量的只是多少,是一种很好的debug方式Print大法,就是在关键位置打印出变量的值,也是一种很常见的方式,听上去没有上面那种方式那么专业,但是非常的实用,我自己经常用这个方法 :-)。
希望以上分享对你有所帮助!