面试指北:算法与数据结构(一)开篇
经历过长久的停滞,码字的念头又跳回到我的大脑。可能是希冀记录一下自己人生,毕竟人这一生如落花似流水;可能是受朋友激发,发现原来身边也有同行者,在写作上不再孤独;可能是主动总结一下生活和技术经验,算是对一段时间内的自己做下整理,就像把信息当作食物放进锅里煮,祈求能够融会贯通,做出一顿美食,以飱读者。好啦,字数凑完,以下进入正文。
本文主要内容:
•为什么要学算法与数据结构?•算法与数据结构有哪些内容?
下期预告:
•如何学习算法与数据结构?
我们都知道算法和数据结构是计算机技术的基础,但对于要牢牢掌握算法与数据结构我们可能心存疑问。学生可能会问:算法和数据结构学来何用,远不如写点网页、Android 或者 iOS 来的直观。社会人可能会问:写了几万行代码,没用过算法和数据结构,学这干啥?确实如此,理论和实践比起来总是显得更加遥远。下面我来结合算法与数据结构在计算机技术知识中所处的位置和实际情况说一下为什么。
为什么要学算法与数据结构?
1. 它是内功,它是地基
如果把计算机各种技术比作武术,那算法与数据结构、操作系统、编译原理、计算机网络等等均属于内功,而像各种工具如 IDE、Git 等等的使用、各种语言 API 属于外功。
张无忌就是学了《九阳神功》才得以拥有快速学习掌握其他招数的能力,学乾坤大挪移之速度把美丽的小昭都看傻眼了。
建盖楼房时,要想盖的更高,地基也必须要打的更深才行。这和你想成为技术专家,必须掌握牢靠的基础知识是一个道理。
你是否在担心自己 35 岁失业?你是否在担心技术更新太快来不及学习?熟练掌握计算机基础知识可以说是此问题的命门所在。树木生长枝桠不可能凭空长出来,都必须依靠上一个树枝才能结出新枝。科技、文化亦是如此。不要惧怕新技术的浪潮把自己拍在沙滩上,因为新技术也是从旧技术生长而来,其核心不会发生太大变化,只要你不是浮在表面,而是掌握了内在的原理,那你完全可以用很快的速度学习掌握新技术。如此,那还怕啥?
2. 它有用,它有大用
香农的信息论奠定了计算机的基础。当今互联网时代可谓信息弥漫,电磁波载着各个终端的数据来回穿梭,我们确实活在信息的世界。在这个世界中,信息处理必不可少,而做这个事情就要用到算法。更何况,大数据时代对算法的高效要求更甚。
这也是一个移动时代,手机就像我们植入的硬件,已经无法离开。马斯克的生物科技公司 Neuralink 在开发一种可以植入脑中的设备,和这种能够生理上植入大脑的设备相比,手机已经植入我们的脑中,只不过是精神上的。我们的生活已经大大依赖于此,就像领土对于国家一样,手机对于我们来说是不可分割的一部分。
说回我们日常用手机完成生活的很多事情,比如我们要点外卖,如何匹配到离店家最近的外卖员,又如何确定他可以在限定时间内送完手上的订单?比如你要打车回家,如何选择最合适的路线,不堵车不绕路?我们用搜索引擎搜索我们想要的内容,如何通过关键字匹配最优结果呈现出来?这些过程肯定要用到算法。
即日常用的 app 离不开算法,手机离不开 app,而我们离不开手机。
3. 大厂看重它
各个大厂面试都会考察算法与数据结构。诸如国内的腾讯、阿里、百度、字节跳动等等,国外的 Google、Facebook 更是要做好万全准备才可以去面试。
为什么大厂面试必考算法与数据结构?
因为对于大厂来说,把你招进来不仅仅要看你当下的实力,更看重你的长期成长,也就是有没有潜力。而正如第一点所说,计算机基础是内功、地基,它决定了你的技术天花板,也就是你的技术潜力。
我们都希望能够了解框架原理和设计思想,不满足于仅仅做一个 API 调用者。而了解算法与数据结构之后,有助于我们理解框架中一些数据结构和算法的选用原因。
如果你希望做个泛泛之辈,那代码能跑就行可能符合你的选择。但如果你希望自己的代码能够不断精进,那除了代码风格、设计模式之外,对性能和内存占用也要做到一定要求。而算法与数据结构能够给你更多的思路和工具去提升性能、降低内存。
算法与数据结构包括哪些内容?
简略版
如果你目标是入门,或者急于面试,掌握 10 个数据结构、10 个算法足以。
10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 数。
10 个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分支算法、回溯算法、动态规划、字符串匹配算法。
完整版
完整版则包含较多内容,不再一一罗列,参考思维导图内容。
如果你需要文中思维导图,可以关注下方公众号
3.141516
回复算法与数据结构
获取 xmind 源文件。
另外推荐一下好友公众号,多一些人文信息的公众号。
学习累了?玩会儿休闲小游戏解解压。CrazyBounce 是前段时间我对大三做的游戏的微信小程序复刻版。