极客时间已完结课程限时免费阅读

不定期福利第四期 | 刘超:我是怎么学习《数据结构与算法之美》的?

不定期福利第四期 | 刘超:我是怎么学习《数据结构与算法之美》的?-极客时间

不定期福利第四期 | 刘超:我是怎么学习《数据结构与算法之美》的?

讲述:刘超

时长08:18大小7.59M

你好,我是刘超,是隔壁《趣谈网络协议》专栏的作者。今天来“串个门儿”,讲讲我学习《数据结构与算法之美》这个专栏的一些体会和感受。
《数据结构与算法之美》是目前“极客时间”订阅量最多的专栏,我也是其中最早购买的一员。我之所以一看就心动了,源于王争老师在开篇词里面说的那段话:
基础知识就像是一座大楼的地基,它决定了我们的技术高度。那技术人究竟都需要修炼哪些“内功”呢?我觉得,无外乎就是大学里的那些基础课程,操作系统、计算机网络、编译原理等等,当然还有数据结构和算法。
这个也是我写《趣谈网络协议》的时候,在开篇词里反复强调的观点。我为什么这么说呢?因为,我们作为面试官,在招人的时候,往往发现,使用框架速成的人很多,基础知识扎实的人少见,而基础不扎实会影响你以后学习新技术的速度和职业发展的广度。
和“极客时间”编辑聊的时候,我也多次表达,希望我们讲的东西和一般的培训机构有所区别,希望“极客时间”能做真正对程序员的技能提升和职业发展有价值的内容,希望“极客时间”能够成为真正帮助程序员成长的助手。
所以,当“极客时间”相继推出《Java 核心技术 36 讲》《零基础学 Python》《从 0 开始学架构》《MySQL 实战 45 讲》这些课程的时候,我非常开心。我希望将来能够继续覆盖到编译原理、操作系统、计算机组成原理等等。在这些课程里,算法是基础的基础,也是我本人很想精进的部分。
当然,除了长远的职业发展需要,搞定算法还有一个看得见、摸得着的好处,面试。
我经常讲,越是薪资低的企业,面试的时候,它们往往越注重你会不会做网站,甚至会要求你现场做出个东西来。你要注意了,这其实是在找代码熟练工。相反,越是薪资高的企业,越是重视考察基础知识。基础好,说明可塑性强,培养起来也比较快。而最牛的公司,考的往往是算法和思路。
相信很多购买《数据结构与算法之美》专栏的同学,下单的时候,已经想象自己面试的时候,在白板上挥洒代码,面试官频频点头的场景,想着自己马上就能“进驻牛公司,迎娶白富美”了。
然而,事实却是,武功套路容易学,扎马步基本功难练,编程也是一样。框架容易学,基本功难。你没办法讨巧,你要像郭靖学习降龙十八掌那样,一掌一掌劈下去才行。
于是,咱们这个专栏就开始了,你见到的仍然是困难的复杂度计算,指针指来指去,烧脑的逻辑,小心翼翼的边界条件判断。你发现,数据结构和算法好像并不是你上下班时间顺便听一听就能攻克的问题。你需要静下心来仔细想,拿个笔画一画,甚至要写一写代码,Debug 一下,才能够理解。是的,的确不轻松,那你坚持下来了吗?
我在这里分享一下我的学习思路,我将这个看起来困难的过程分成了几部分来完成。
第一部分,数据结构和算法的基础知识部分。如果在大学学过这门课,在专栏里,你会看到很多熟悉的描述。有些基础比较好的同学会质疑写这些知识的必要性。这大可不必,因为每个人的基础不一样,为了专栏内容的系统性和完整性,老师肯定要把这些基础知识重新讲述一遍的。对于这一部分内容,如果你的基础比较好,可以像学其他课程一样,在上下班或者午休的时候进行学习,主要是起到温习的作用。
第二部分,需要代码练习的部分。由于王争老师面试过很多人,所以在专栏里,他会列举一些他在面试中常常会问的题目。很多情况下,这些题目需要当场就能在白板上写出来。这些问题对于想要提升自己面试能力的同学来说,应该是很有帮助的。
我这里列举几个,你可以看看,是不是都能回答出来呢?
在链表这一节:单链表反转,链表中环的检测,两个有序的链表合并,删除链表倒数第 n 个结点,求链表的中间结点等。
在栈这一节,在函数调用中的应用,在表达式求值中的应用,在括号匹配中的应用。
在排序这一节,如何在 O(n) 的时间复杂度内查找一个无序数组中的第 K 大元素?
在二分查找这一节,二分查找的四个变体。
这些问题你都应该上手写写代码,或者在面试之前拿来练练手,而且,不仅仅只是实现主要功能。大公司的面试很多情况下都会考虑边界条件。只要被面试官抓住漏洞,就会被扣分,所以你最好事先写写。
第三部分,对于海量数据的处理思路问题。现在排名靠前的大公司,大都存在海量数据的处理问题。对于这一类问题,在面试的时候,也是经常会问到的。由于这类问题复杂度比较高,很少让当场就写代码,但是基本上会让你说一个思路,或者写写伪代码。想要解决海量数据的问题,你会的就不能只是基础的数据结构和算法了,你需要综合应用。如果平时没有想过这部分问题,临时被问,肯定会懵。
在专栏里,王争老师列举了大量这类问题,你要重点思考这类问题背后的思路,然后平时自己处理问题的时候,也多想想,如果这个问题数据量大的话,应该怎么办。这样多思考,面试的时候,思路很容易就来了。
比如,我这里随便列了几个,都是很经典的问题。你要是想不起来,就赶紧去复习吧!
比如说,我们有 10GB 的订单数据,我们希望按订单金额(假设金额都是正整数)进行排序,但是我们的内存有限,只有几百 MB,没办法一次性把 10GB 的数据都加载到内存中。这个时候该怎么办呢?
如果你所在的省有 50 万考生,如何通过成绩快速排序得出名次呢?
假设我们有 10 万个手机号码,希望将这 10 万个手机号码从小到大排序,你有什么比较快速的排序方法呢?
假设我们有 1000 万个整型数据,每个数据占 8 个字节,如何设计数据结构和算法,快速判断某个整数是否出现在这 1000 万数据中? 我们希望这个功能不要占用太多的内存空间,最多不要超过 100MB,你会怎么做呢?
第四部分,工业实践部分。在每种数据结构的讲解中,老师会重点分析一些这些数据结构在工业上的实践,封装在库里面的,一般人不注意的。
我看王争老师也是个代码分析控。一般同学可能遇到问题,查一查有没有开源软件或者现成的库,可以用就完了。而王争老师会研究底层代码的实现,解析为什么这些在工业中大量使用的库,应该这样实现。这部分不但对于面试有帮助,对于实际开发也有很大的帮助。普通程序员和高手的差距,就是一个用完了就完了,一个用完了要看看为啥这样用。
例如,老师解析了 Glibc 中的 qsort() 函数,Java 中的 HashMap 如何实现工业级的散列表,Redis 中的有序集合(Sorted Set)的实现,工程上使用的红黑树等等。
尤其是对于哈希算法,老师解析了安全加密、数据校验、唯一标识、散列函数,负载均衡、数据分片、分布式存储等应用。如果你同时订阅了架构、微服务的课程,你会发现这些算法在目前最火的架构设计中,都有使用。
师傅领进门,修行在个人。尽管老师只是解析了其中一部分,但是咱们在平时使用开源软件和库的时候,也要多问个为什么。写完了程序,看看官方文档,看看原理解析的书,看看源代码,然后映射到算法与数据结构中,你会发现,这些知识和思路到处都在使用。
最后,我还想说一句,坚持,别放弃,啃下来。基础越扎实,路走得越远,走得越宽。加油!
分享给需要的人,Ta购买本课程,你将得20
生成海报并分享

赞 102

提建议

上一篇
不定期福利第三期 | 测一测你的算法阶段学习成果
下一篇
总结课 | 在实际开发中,如何权衡选择使用哪种数据结构和算法?
unpreview
 写留言

精选留言(60)

  • Monster
    2018-12-28
    我感觉不定期福利可以让基础比较差的同学跟上进度,又可以根据文章中提到的点加强练习。感谢分享,我刚开始不懂数据结构,现在已经逐渐掌握了一些,虽然很吃力,很烧脑,但是要坚持!
    66
  • 老杨同志
    2018-12-28
    两位老师的课都订阅了,收获很多。算法课,最后的动态规划有点掉队,元旦动手写一下。 刻意练习,投入时间,一定要不这些基础拿下。给一起学习的小伙伴一点建议:对自己宽容一点,不要给自己定太高的目标,比如,读一遍文章就学会,读二遍就学会,只要不放弃,肯定能学会。会了以后,一次学会的和十次学会的区别并不大。太高的目标会影响心情,自我否定进而放弃。要学会自我激励。怕什么真理无穷, 进一寸有一寸的欢喜
    展开
    共 2 条评论
    62
  • Jerry银银
    2018-12-30
    王争老师,诚恳地请教一个问题:如何才能进Google,达到什么的水平才能进Google,烦请抽点时间指点迷津 ——来自一个想精进的真得想做点不一样的事情的程序员 可能你的指点,会给这个普通的程序员指名一条阳光大道。人不怕吃苦,怕的是没有明确的方向
    展开

    作者回复: 这个话题有点大 我可以搞个知识星球 分享分享😄

    共 3 条评论
    39
  • 不一样的烟火
    2019-06-25
    我三十岁了 学算法不知道还有没有前途

    作者回复: 我也30了,职场才刚开始啊

    共 5 条评论
    36
  • Geek_41d472
    2019-01-07
    目前就就字段串算法 中下 以及后面有一个基于这个字符串算法的掉队了,被里面什么前缀后缀子串的名词绕晕了,直接跳过这几章,今天刚看到动态规划第一天,还能跟上,有被字符串算法那几章绕晕的点个赞,我相信不止我一个人

    作者回复: 我觉得,能看懂70%就已经是高手了吧:)

    共 2 条评论
    20
  • 2018-12-30
    还在排序那里扎实啃基础,每篇文章涉及的知识都在LeetCode做题练习,一遍看不懂就多看几遍,几遍看不懂就找相关文章相关书,一直慢慢的蜗牛般进行着,不认为自己掉队,为了进度快速的学不是自己想要的,来了就是为了学一节会一个知识点,认认真真学完对老师是一种尊重,对自己也有最大的交待,同时学习过程中深深感受到了老师的真诚,谢谢你。
    17
  • 2019-03-21
    边看边忘真蓝瘦
    9
  • 許敲敲
    2018-12-28
    我是准备换行的,计算机小白,看了一遍下来,现在感觉了解一些概念,打算冲头开始复习一下,再配合leetco练习,也希望老师说下,每个内容,面试都要掌握到什么程度是写出来,还是讲出思路就好
    9
  • 悟空WuKong
    2018-12-28
    都是高人,你们的课我都买了
    8
  • 黑子
    2018-12-28
    老师真是操碎了心…不断的鼓励我们,还有什么理由不坚持下去呢?
    5
  • Monster
    2018-12-28
    感谢刘超老师的分享,趣谈网络协议我也订阅了,写的很生动形象。每期的不定期福利中提到的内容,我都会花时间再去重新看一遍,都会有新的体会和理解。希望看完掌握了这些课程,可以助我拿到高薪职位。
    4
  • liangjf
    2018-12-28
    数据结构与算法之美 掉队了,不过老师的网络课坚持下来了,收获良多。
    3
  • Cyen2018
    2018-12-28
    都是高人
    3
  • CathyLin
    2018-12-28
    谢谢刘超老师和王争老师的分享!看到发新文了就来看了一下,又有了前进的动力! 不好意思,我掉队了,因为一个很忙很忙的学期,几乎开学过后就再也没有看过专栏了。现在在补前面的,但我相信我会赶上来的。我也有一种很强烈的想把算法学好的愿望!我也想成为老师所说的那种高级程序员,不仅仅是用就完了,还要了解为什么这么用。 所以加油加油再加油!!!没有任何借口!!!
    3
  • 未来小鬼
    2018-12-30
    红黑树那章实在看不懂,,,很期待专栏的linux 系统内核方面的原理课程!
    2
  • Ewing
    2018-12-28
    总有一种学任何新的东西,语言也好,框架也好,都像是在学陌生的知识。就是基础不够扎实
    2
  • 一个工匠
    2019-09-09
    最喜欢的两位老师,聚首了。
    1
  • 吴小智
    2019-03-28
    看了很久的专栏,每一篇都认真看了,很有收获,感谢老师。
    1
  • qinggeouye
    2018-12-31
    数据结构和算法基础、代码练习、海量数据处理、底层实现原理,路漫漫其修远兮...
    1
  • swx
    2018-12-28
    我也掉队了!咬紧牙关重头再来,非常感谢老师们的指引点拨。
    1