大家好,我是小北。
今天给大家聊聊我的算法学习之路。
第一次接触是在大一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多个坑位了,在这个群里有各个领域优秀的程序员,大家一起讨论干货,交流技术,互相监督,学习成长。小争哥也会进群,带着大家一起刷题。
可不要小看这个刷题打卡,坚持一个月试试,半年试试,一年试试?