通过前几讲我给大家介绍的几个经典的算法面试题,相信大家现在应该对数据结构与算法有了一个很浓烈的学习兴趣,嘻嘻🤭,数据结构与算法学起来还是非常有意思的,不骗你!激起大家的学习热情之后,接下来,我们就要正式步入数据结构与算法的学习旅程中了。
首先,我们来看一下数据结构与算法的重要性究竟主要体现在哪些方面。
数据结构与算法的重要性
我本人根据自己多年的工作经验总结得出,数据结构与算法的重要性主要体现在如下几个方面。
第一个方面,算法是程序的灵魂,优秀的程序可以在海量数据计算时,依然保持高速计算。
算法是程序的灵魂,这一点一点都不夸张,就像一个优秀的程序之所以能在海量数据计算的时候仍然能保持较高的一个运算速度,是因为它有优秀的算法在做支撑一样。举个最简单的例子,你攒够钱打算买一辆属于自己的小轿车,这时相信你更多看重的并不是这辆车的外观,而应该是这辆车的引擎和发动机的性能,因为这辆车跑得快不快并不取决于其外观,而是取决于其引擎和发动机的性能如何,虽然有时外观也是一个决定性的因素。
对应到咱们程序,那么说的就是程序的优秀好坏最核心的决定因素仍然是算法了。当然,算法有很多种,例如大家在学大数据的时候,会学习到大数据相关的算法;学人工智能和机器学习时,又会学习到另外一片领域的算法,如图像识别算法、语音识别算法、数据挖掘算法等,人工智能和机器学习领域主要是偏这些算法。
当然,大家在学习Java的时候,我相信你也会学习到非常多的算法,就拿本套系列教程来说,你就会学习到如下十大常用算法。
- 二分查找非递归算法
- 分治算法
- 动态规划算法
- 贪心算法
- KMP算法
- 马踏棋盘算法
- 普利姆算法
- 克鲁斯卡尔算法
- 迪杰斯特拉算法
- 弗洛伊德算法
以上这十大常用算法我后续将会重点给大家讲解,因为这些算法在我们平时开发的时候用到的可能性非常的大,就拿弗洛伊德这个算法来说,在怎么去求一个最小生成树和最短路径时,我们就需要用到它,总之,大家是时候该学一学算法了!
最后,还有一点我得给大家强调一下,就是在学算法之前,你得先把数据结构给搞清楚,要知道数据结构一共是有两大类的,即:
- 线性结构:主要代表就是栈、队列、链表,相信这些大家应该是再清楚不过了。
- 非线性结构:主要代表就是图和树,图和树说来大家可能不是太清楚,但这没关系,后续我都会给大家详细讲解到。
第二个方面,一般来讲,程序会使用内存计算框架(比如Spark)和缓存技术(比如Redis)等来优化程序,以提升其性能。那么,不妨大家再深入地思考一下,这些计算框架和缓存技术,它们的核心功能又是哪个部分呢?是不是就是算法啊!
虽然并不是说我们每一个人都得去当算法工程师,但是有一个趋势大家必须得承认,那就是目前程序员的门槛已经变得越来越高了,企业对程序员的要求也随之变得越来越多,说一千道一万,就是现在的程序员实在是太多了,在这种情况下,企业自然就是要优中择优了,谁会的技术多,谁掌握的基础更扎实,那就要谁,给谁更高的薪水,道理就是这个道理!
这里,我突然想到了一个故事,就是一个前辈跟我讲过的他的实际工作经历中遇到的一件往事,我记得他是这样跟我说的,他说他最早是在Unix下开发服务器程序的,功能是要支持上千万人同时在线,然后他就开始写代码,写完代码觉得非常OK,接着在上线之前做内测,结果内测没有任何问题,一切OK,他说他当时心里面还暗自高兴,心想就这,这也太简单了吧!可现实总是啪啪打脸,产品上线后,服务器马上就瘫了,立马就支撑不住了,然后公司领导马上就把他叫过去,说你这写的代码很垃圾啊,怎么一上线服务器就瘫了呢?他说他也不是很清楚,明明内测是没有任何问题的啊!公司领导一听立马就知道大事不妙,于是,迅速组织开了一个小会,将公司最牛的CTO请过来排查问题,然后公司CTO就把他写的代码拿过来,逐行逐行进行查看,最终发现他写的代码确实是有问题,因为这位前辈他压根就没有做缓存。
不过这也情有可原,因为这位前辈说他当时刚工作的时候压根还没有像Redis、MemoryCache等这种专门的缓存技术,那个时候他说他自己都不知道缓存是什么,怎么可能知道如何来做缓存呢?当然,那个时候缓存都是要靠自己来写的。
问题最终怎么解决的呢?前辈说最后还是由公司CTO对他写的代码进行了一下优化,他还跟我说公司CTO也没有对他写的代码进行大面积改动,就是业务逻辑不用动,主要是对这段业务逻辑所使用的底层算法进行了一下优化,然后再次上线之后,就坚如磐石了。
犹记得当初这位前辈向我说起这件往事时的情景,他说完这件事情之后一脸震惊的表情我到现在都还记忆犹新,他说他真的感觉到了优秀的程序员写的代码就是跟普通的程序员不一样,那一刻才深切体会到了程序是有灵魂的,就是算法。我想,只有深刻体会到了这点,才能算是一名卓越的程序员吧!想一想也是,有些程序员一个月7/8k,人家老板都有点不乐意给,而有些程序员一个月就能入到5/6万甚至是10万,为什么差别这么大啊?因为他们写的代码就不一样。
第三个方面,目前程序员面试的门槛越来越高,尤其是很多一线IT公司,也就是大家所说的大厂,在面试时都会有几道数据结构与算法的面试题,而且我可以很负责的告诉你,肯定是会有的。
如果你有机会将来去面试百度/腾讯/阿里/谷歌等这样一些好的公司,或者是一些外企,那么你必然是会碰到几道数据结构与算法的面试题的,而且这些题一般看起来很简单,但你就是写不出来,例如给你一道求一个最短路径的问题,题目看起来很简单吧,但你就是做不出来,为什么啊?因为这里面需要用到算法。
最后一个方面,我想强调的是,如果你不想永远都是代码工人,那么你真的应该花点时间来研究一下数据结构与算法了。
以上就是数据结构与算法的重要性,我就给大家讲到这儿了。