为什么要学习数据结构和算法
数据结构和算法是程序员的必修课,也是大厂面试的必经环节之一,我也是经历了面试,深深体会到了数据结构和算法的重要性,经常会问道的问题,红黑树、大数据高效查询等等,有时候大厂面试要求高的话会叫你现场手写一个算法,我想从今开始,一步一步的学习数据结构和算法,夯实基础。如果是服务器开发,不同的人对不同的需求可能会写出不同的时间、空间复杂度的算法,可能一些微小的差异,在碰到大数据的情况下,稍微性能优一点的算法最后的效率就相差非常大,这也是大厂会专门有算法工程师岗位(待遇会非常好)的需求的原因。对于我们大多数开发业务的程序员来说,我们平时可能会用到现成的已经封装好的api,例如Array,List,LinkedList,HashMap等等容器,当面试的时候面试官可能会深入的问他们之间的差异,或者说底层的实现原理,或许我们就一脸懵逼,用封装好的接口或者容器,不需要我们自己实现,但并不代表我们不需要了解,只有了解了,我们碰到具体的需求的时候才能更好的判断选择什么的样的数据结构。
对编程还有追求?不想被行业淘汰?那就不能只写凑合能用的代码!
何为编程能力强?是代码的可读性好、健壮?还是扩展性好?我觉得没法列全。但是起码在我看来,性能好坏是其中一个非常重要的评判标准。但是,如果你连代码的时间复杂度、空间复杂度都不知道怎么分析,怎么写出高性能的代码呢?
可能你会说,我在小公司工作,用户量很少,需要处理的数据也很少,开发不需要考虑那么多性能的问题,完成功能就可以,用什么数据结构和算法可能差别不是很大,但你真想“十年如一日”的做这样的工作嘛?
我们这行业到了30岁以上,其实竞争很激烈,我也是想重拾基础,夯实基础,不想做一个碌碌无为的码农。有时候我们不少程序员,都是用现成的框架,器大活好,拿来就用,还不用太担心性能问题。就像那些建楼的工程师不需要懂得砖瓦的构成,也能盖楼。司机不需要懂汽车引擎的原理,也能当顺风车司机载美女兜风,遇到不会的问题上Google,赖上GitHub找框架,所以写了那么多年代码,依旧是个菜鸟。或许有时候修炼了自己的内功,把设计模式,数据结构和算法,网络原理捡起来,或许就不会那么菜鸟了。怼人也更加自信,跳槽也不用畏畏缩缩了,可能就相对不会那么容易被淘汰了。
什么是数据结构和算法
大部分教材可能都没有明确的定义。但这些定义都很抽象,对理解这两个概念并没有实质性的帮助,反倒会陷入死扣定义的误区。毕竟,我们现在在学习,并不是为了考试,所以,概念背的再牢,不会用也白搭。
虽然我们没必要深挖严格的定义,但并不等于不需要理解概念。
广义:数据结构就是指一组数据的存储结构,算法就是操作数据的一组方法。
狭义:是指某些著名的数据结构和算法,比如队列、堆栈、树、图、表、二分查找、动态规划等。这些都是前人只会的结晶。
学习的重点
首先要掌握一个数据结构与算法中最重要的概念-复杂度分析。
数据结构算法的大致内容:
20个最常用的、最基础的数据结构和算法,一般应付面试和工作,集中精力逐一攻克这20个知识点就足够了。
10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树
10个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。