如何系统学习数据结构与算法?

上网导航 2023-09-26 338 0条评论
摘要: 系统学习算法与数据结构之路。...

大家好,我是小北。

今天给大家聊聊我的算法学习之路。

第一次接触是在大一C语言课上,零散的接收着老师穿插讲的排序、递归这些入门级算法,那时候理解递归已经算是一个不小的挑战。

后来,上大二了,学校开设了数据结构课程,第一次系统学习了树、图、BFS、DFS、KMP这些算法,但是总觉得没有融会贯通,每个算法都是孤立的存在。

我觉得入门学习算法与数据结构时应包含三个部分:

在这里也给大家推荐一些不同阶段的数据结构与算法的学习书单,有入门的,有面试的,也有如《算法导论》这种大部头:

如何系统学习数据结构与算法?

当时觉得写程序似乎也不需要这些算法,大多数都是 if/else 组合各种 API 就完成了。

直到后来大三,准备找实习前几个月刷面经,才知道算法是技术面试常考内容,其重要程度不亚于操作系统、计算机网络。

当时在网上看了很多博客,但是都比较零散,后来才想起以前在极客时间买的《数据结构与算法之美》专栏,还在吃灰。

于是拿出来看了几章,结果一看就停不下来,王争老师讲得真的很不错,于是我在一周之内将整个专栏都刷了一遍,每一节都是将一个算法和应用结合起来,看起来也不像算法书那么费劲。

印象很深的一点是,当时看完二分查找这一节,专栏里介绍了很多注意事项和变体:

如何系统学习数据结构与算法?

结果后来在我阿里二面的时候就考到了。。。这里面变体的一种。(PS:不看应该也写得出来。

毫不夸张的说,这是市面上最实用又全面的算法教程,口碑特别好(10W+的订阅量,就是最好的证明)。

也是我买过最值的专栏,熟悉的朋友都知道,这个课我推荐过好几次了。

运营小姐姐说过几天要涨价了,所以想趁着还有优惠,再次推荐给小伙伴们

如何系统学习数据结构与算法?

输入口令:suanfa999

到手仅¥89,半价秒杀

即将涨价至¥199

如果你在准备春招,墙裂建议把这个专栏刷一遍,这样数据结构基本没啥问题了,而且专栏基本上就是结合面试官常问的问题作为切入点,来讲解数据结构及其应用场景,可以看下标题:

如何系统学习数据结构与算法?

微信上经常有朋友问我面试咋复习算法,我都会推荐《数据结构与算法之美》+ 《剑指offer》+ Leetcode 刷高频题:

如何系统学习数据结构与算法?

再说回算法,不少同学可能觉得,就算不懂算法知识,只要 Java API、开发框架用得熟练,照样可以把代码写得“飞”起来。

真的是这样么?

比尔·盖茨曾说过:

如果你自以为是一个很好的程序员,请去读读 Donald E. Knuth 的《计算机程序设计艺术》吧……要是你真把它读下来了,就毫无疑问可以给我递简历了。”

虽然比尔·盖茨推荐的是《计算机程序设计艺术》这本书,但是本质却折射出了算法的重要性。

尽管计算机相关专业的同学在大学都学过这门课程,甚至很多培训机构也会培训这方面的知识,但是据我了解,很多程序员对数据结构和算法依旧一窍不通。

还有一些人也只听说过数组、链表、快排这些最最基本的数据结构和算法,稍微复杂一点的就完全没概念。

校招的时候,参加面试的学生通常没有实际项目经验,公司也只能考察他们的基础知识是否牢固。

社招就更不用说了,越是厉害的公司,越是注重考察数据结构与算法这类基础知识。

相比短期能力,他们更看中你的长期潜力。

我觉得程序员不管是业务开发还是基础架构开发都要有自己的追求。

比如业务开发工程师,我们经常自嘲 CRUD Boy,只要利用已经封装好的现成的接口、类库来堆砌、翻译业务逻辑就好了。

但是,如果不知道这些类库背后的原理,不懂得时间、空间复杂度分析,你如何能用好、用对它们?

存储某个业务数据的时候,你如何知道应该用 ArrayList,还是 Linked List 呢?

调用了某个函数之后,你又该如何评估代码的性能和资源的消耗呢?

又比如,我们常用的 Key-Value 数据库 Redis 中,

里面的有序集合是用什么数据结构来实现的呢?

为什么要用跳表来实现呢?

为什么不用二叉树呢?

如果我们能弄明白这些底层原理,就能更好地使用它们。

即便出现问题,也很容易就能定位,而快速定位、解决问题的能力才是职场中需要的。

因此,掌握数据结构和算法,不管对于阅读框架源码,还是理解其背后的设计思想,都是非常有用的。

如果你是做基础架构研发工程师,也就是常说的infra,那么写出达到开源水平的框架才是你的目标!

现在互联网上的技术文章、架构分享、开源项目满天飞,照猫画虎做一套基础框架并不难。我就拿 RPC 框架举例。

不同的公司、不同的人做出的 RPC 框架,架构设计思路都差不多,最后实现的功能也都差不多。但是有的人做出来的框架,Bug 很多、性能一般、扩展性也不好。

而有的人做的框架可以开源到 GitHub 上给很多人用,甚至被 Apache 收录。为什么会有这么大的差距呢?

我觉得,高手之间的竞争其实就在细节。这些细节包括:你用的算法是不是够优化,数据存取的效率是不是够高,内存是不是够节省等等。

这些累积起来,决定了一个框架是不是优秀。所以,如果你还不懂数据结构和算法,没听说过大 O 复杂度分析,不知道怎么分析代码的时间复杂度和空间复杂度,那肯定说不过去了,赶紧来补一补吧!

最后再强调下

小争哥算法课马上就涨到¥199了

现秒杀叠加口令「suanfa999」

到手仅¥89,只有100个名额

如何系统学习数据结构与算法?

另外,小争哥说算法易学难精,贵在坚持,所以发起了「算法刷题打卡」活动,通过刻意练习提升自己,专栏读者都可以免费加入。

第一期预计 500人,现在仅剩 200多个坑位了,在这个群里有各个领域优秀的程序员,大家一起讨论干货,交流技术,互相监督,学习成长。小争哥也会进群,带着大家一起刷题。

如何系统学习数据结构与算法?

可不要小看这个刷题打卡,坚持一个月试试,半年试试,一年试试?

文章版权及转载声明:

作者:上网导航本文地址:https://www.90xe.com/post/4933.html发布于 2023-09-26
文章转载或复制请以超链接形式并注明出处技术导航

分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏