数据结构与算法之美
王争
前 Google 工程师
283750 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 81 讲
基础篇 (38讲)
数据结构与算法之美
15
15
1.0x
00:00/00:00
登录|注册

01 | 为什么要学习数据结构和算法?

打开通往新世界的大门
帮助写出高质量的代码和设计优秀的框架
在面试、业务开发、基础架构等方面都有应用
解决问题的深度和角度不同
提升编程技能和逻辑思维
建立时间复杂度、空间复杂度意识
长期不考虑非功能性需求容易被行业淘汰
高性能代码是编程能力强的体现
高性能代码需要考虑数据结构和算法
细节决定框架的优秀程度
应用于实时统计等场景
框架中融合了基础数据结构和算法的设计思想
长期潜力比短期能力更重要
大公司面试考察基础知识
数据结构和算法在软件开发中的应用
学习数据结构和算法的原因
数据结构和算法的重要性
学习数据结构和算法的目的
对编程还有追求
基础架构研发工程师
业务开发工程师
通关大厂面试
课后思考
内容小结
为什么要学习数据结构和算法?

该思维导图由 AI 生成,仅供参考

你是不是觉得数据结构和算法,跟操作系统、计算机网络一样,是脱离实际工作的知识?可能除了面试,这辈子也用不着?
尽管计算机相关专业的同学在大学都学过这门课程,甚至很多培训机构也会培训这方面的知识,但是据我了解,很多程序员对数据结构和算法依旧一窍不通。还有一些人也只听说过数组、链表、快排这些最最基本的数据结构和算法,稍微复杂一点的就完全没概念。
当然,也有很多人说,自己实际工作中根本用不到数据结构和算法。所以,就算不懂这块知识,只要 Java API、开发框架用得熟练,照样可以把代码写得“飞”起来。事实真的是这样吗?
今天我们就来详细聊一聊,为什么要学习数据结构和算法。

想要通关大厂面试,千万别让数据结构和算法拖了后腿

很多大公司,比如 BAT、Google、Facebook,面试的时候都喜欢考算法、让人现场写代码。有些人虽然技术不错,但每次去面试都会“跪”在算法上,很是可惜。那你有没有想过,为什么这些大公司都喜欢考算法呢?
校招的时候,参加面试的学生通常没有实际项目经验,公司只能考察他们的基础知识是否牢固。社招就更不用说了,越是厉害的公司,越是注重考察数据结构与算法这类基础知识。相比短期能力,他们更看中你的长期潜力。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

学习数据结构和算法的重要性 掌握数据结构和算法对于在技术领域取得成功至关重要。不仅是为了通过大厂面试,还能够在实际工作中展现出色的编程能力。即使是业务开发工程师,也需要了解数据结构和算法的原理,以更好地使用现有框架和中间件。对于基础架构研发工程师来说,写出高质量的框架需要深入理解算法和数据结构,以确保性能和扩展性。此外,对于编程能力的追求和避免被行业淘汰也是学习数据结构和算法的重要原因。总之,掌握数据结构和算法将为你的编程之路和人生之路打开一扇通往新世界的大门。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《数据结构与算法之美》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(1082)

  • 最新
  • 精选
  • 姜威
    为什么学习数据结构和算法?我认为有3点比较重要 1.直接好处是能够有写出性能更优的代码。 2.算法,是一种解决问题的思路和方法,有机会应用到生活和事业的其他方面。 3.长期来看,大脑思考能力是个人最重要的核心竞争力,而算法是为数不多的能够有效训练大脑思考能力的途径之一。

    作者回复: 写的很好 同学们把这条回复顶上去

    2018-09-21
    19
    4199
  • HouShangLing
    一定要动手写

    作者回复: 你掌握了学这门课的最有效的方法。看十遍也没自己实现一遍学的牢。同学们这条也帮忙顶上去

    2018-09-21
    5
    2165
  • 小帅b
    其实问题的所在就是现在有很多现成的框架,器又大活又好,拿来就用,还不用太担心性能的问题。就好像那些建楼的工程师不需要懂砖瓦的构成,也能盖楼。司机不需要懂汽车引擎的原理,也能当顺风车司机载美女兜风。 遇到不会的上 Google,懒了就上 GitHub 找框架。所以写了这么多年代码,一直是个菜鸟。 或许是时候修炼自己的内功了。一直 CURD 有意思么?把设计模式,网络原理,数据结构和算法捡起来,或许就没那么容易菜鸟了。怼人也更加自信了。跳槽也不用畏畏缩缩的了。 为了不当菜鸟,我和我的小伙伴们就加入了哇!

    作者回复: 写的太好了

    2018-09-21
    11
    577
  • 裴海港
    年近40的大叔也有一颗积极向上的心

    作者回复: 终身学习 多大年纪也不晚

    2018-09-21
    12
    317
  • 五岳寻仙
    老师好!看到专栏第一眼就果断订阅了。我是一个菜鸟程序员,半年的工作经验让我感受到数据结构和算法太重要了!讲一个自己亲身经历的例子。 入职不久,就遇到一个需求,需要建立一个3G(30亿)条键值对映射,已供后续检索。听上去很简单的问题,用python的字典就可以解决。但在实现的过程中,很快就遇到了问题:字典是基于hash的,对于每条键值对要多消耗50个字节的内存维持这种结构(即便使用redis也需要这个内存花销),再加上键值存储消耗的内存,我大约需要3G×70=210G内存,超过服务器内存了。 后来,想到了可以根据键排序后线性存储,使用二分查找,解决了这个问题,大约消耗的内存也就3G×10=30G左右。 看似简单的问题,当规模大到一定程度,不借助算法和数据结构,就无法解决了。

    作者回复: 哈哈 你要是看到我讲的散列那一篇你就知道了 像java里的hashmap是比较耗内存的 你用到的解决方案是一种用时间复杂度换空间复杂度的思路 我们专栏也会讲的 不过你现在的解决办法还可以更高效 利用hash函数 我们专栏也会讲到 还有二分是logn的时间复杂度 是非常高效的一种时间复杂度 2的64次方个有序数据二分查找也顶多循环64次 有没有觉得logn这个复杂度很奇妙

    2018-09-21
    7
    232
  • Haoz
    一、数据结构和算法是什么 1、数据结构是指一组数据的存储结构 2、算法就是操作数据的方法 3、数据结构和算法是相辅相成的,数据结构是为算法服务的,而算法要作用在特定的数据结构之上 二、学习的重点在什么地方 数据结构和算法解决的是如何更省、更快地存储和处理数据的问题,因此,我们就需要一个考量效率和资源消耗的方法,这就是复杂度分析方法。在学习数据结构和算法的过程中,要学习它的「来历」、「自身的特点」、「适合解决的问题」以及「实际的应用场景」。 1、数据结构和算法学习的精髓-复杂度分析 2、最常用的、最基础的数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie 树 3、最常用的算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法 感谢老师的分析,一直以来数据结构和算法都是我的硬伤,学了很多次,也放弃了很多次,可能是方法不对,但更多的是因为自己之前的毅力不够。 在此立下 flag:从本篇文章开始,将老师的文章根据自己的理解进行输出相应的总结和思考,发表成留言,并将每周三篇文章中涉及的数据结构和算法用 Java 实现一次。

    作者回复: 写的很好👍

    2018-09-25
    2
    227
  • tdytaylor
    老师,就像你说的,工作中其实好多都和业务挂钩,基本上都是针对业务做增删改查,很难把所学的算法应用起来,我平时也时不时学习算法,但总感觉学了就忘,忘了又学,如此反复,老师,这种到底是没了解算法的原理导致不会灵活应用,还是写的少导致的,感觉学习算法很少能应用起来

    作者回复: 1. 客观的讲,有些项目确实涉及的数据结构和算法少一些,你可以再看下我文章里写的。 2. 你提到学了又忘,我觉得一方面你是没有掌握学习的方法,学习的重点,走马观花的看肯定比较容易忘;我们02节会具体讲; 3. 不会灵活应用?那估计还是没有好的教材教你如何应用,还有可能就是确实还没掌握太牢,只是懂点皮毛,很浅,灵活应用是一个比较的境界,需要一段时间的沉淀学习。 4. 学习算法并不是为了记住几个排序、二分查找、二叉树遍历,他还能锻炼你的逻辑思维、性能意识,而且,如果你写代码能力还有欠缺,你还可以通过把学到的数据结构和算法都实现一遍,这是一种很好很好的锻炼编程能力的方法。所以不要过度追求一定要在项目里手写快排、手写二叉树才能算是用上。

    2018-09-21
    2
    203
  • lane
    现实,都是面相领导编程…………一言难尽…

    作者回复: 没事的 如果工作不满意 不顺心 更要卧薪尝胆 提高能力 沉淀自己。总有一天 机会会到来 你做好充分的抓住它的准备就好。人在职场中 只要抓住一两次大的机会 就能做到很高的职位 就怕的是机会来了我们也抓不住

    2018-09-21
    8
    92
  • 阿康
    老师,我是一名iOS开发,怎么听完你这篇文章还是觉得算法对于我开发来说不是那么重要😂后面我有点怕自己听不懂,而且动手写,我该如何下笔,感觉自己很迷茫……

    作者回复: 1. 假设我们现在要做这样一个功能,我们希望在app上存储一个多级地址列表,用户可以一层一层的选择地址列表中的地址,来设置自己的所在的省份、市、区,如果这个地址列表不是经常变动的,我们希望保存在app端,这样就不需要每次操作地址列表都要跟后台交互,如果让你存储这个多级地址列表,你会怎么存储呢? 2. 如果地址列表也并不是一直都不变的,如果地址列表改变了,我们又不希望发新版,那如何更新app上的地址列表呢?如果地址列表比较大,我们不希望app重新全量的从服务器再拉一次,那又如何来做呢? 3. 我会用一种语言来实现 你可以翻译成object c

    2018-09-21
    5
    83
  • DDT
    就是想升工资吧 我知道学技术必须要拿出十年磨一剑的精神 从头开始...

    作者回复: 十年磨一剑说的太好了。我也是这么认为的。做技术就是不要浮躁。要耐得住寂寞。沉得下心。

    2018-09-21
    3
    62
收起评论
显示
设置
留言
99+
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部