[新星计划] 为什么要学习数据结构和算法?如何学习?
Posted ChinaManor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[新星计划] 为什么要学习数据结构和算法?如何学习?相关的知识,希望对你有一定的参考价值。
引言
大家好,我是ChinaManor,直译过来就是中国码农的意思,俺希望自己能成为国家复兴道路的铺路人,大数据领域的耕耘者,一个平凡而不平庸的人。
近期报了极客时间的算法训练营(花重金 ),想做些笔记以便更好的复习学的算法知识。
通关大厂面试
很多大公司,比如 BAT、Google、Facebook,面试的时候都喜欢考算法、让人现场写代码。
为什么这些大公司都喜欢考算法呢?
校招的时候,参加面试的学生通常没有实际项目经验,公司只能考察他们的基础知识是否牢固。社招就更不用说了,越是厉害的公司,越是注重考察数据结构与算法这类基础知识。相比短期能力,他们更看中你的长期潜力。
你可能要说了,我不懂数据结构与算法,照样找到了好工作啊。那我是不是就不用学数据结构和算法呢?当然不是,你别忘了,我们学任何知识都是为了“用”的,是为了解决实际工作问题的,学习数据结构和算法自然也不例外。
业务开发工程师
对于大部分业务开发来说,我们平时可能更多的是利用已经封装好的现成的接口、类库来堆砌、翻译业务逻辑,很少需要自己实现数据结构和算法。但是,不需要自己实现,并不代表什么都不需要了解。
作为业务开发,我们会用到各种框架、中间件和底层系统,比如 Spring、RPC 框架、消息中间件、Redis 等等。在这些基础框架中,一般都揉和了很多基础数据结构和算法的设计思想。
如果你能弄明白这些底层原理,你就能更好地使用它们。即便出现问题,也很容易就能定
位。因此,掌握数据结构和算法,不管对于阅读框架源码,还是理解其背后的设计思想,都是非常有用的。
基础架构研发工程师
基础架构研发工程师,写出达到开源水平的框架才是你的目标!
现在互联网上的技术文章、架构分享、开源项目满天飞,照猫画虎做一套基础框架并不难。
我就拿 RPC 框架举例。
不同的公司、不同的人做出的 RPC 框架,架构设计思路都差不多,最后实现的功能也都差不多。但是有的人做出来的框架,Bug 很多、性能一般、扩展性也不好,只能在自己公司仅有的几个项目里面用一下。而有的人做的框架可以开源到 GitHub 上给很多人用,甚至被 Apache 收录。为什么会有这么大的差距呢?
我觉得,高手之间的竞争其实就在细节。这些细节包括:你用的算法是不是够优化,数据存取的效率是不是够高,内存是不是够节省等等。这些累积起来,决定了一个框架是不是优秀。
不想被行业淘汰
何为编程能力强?是代码的可读性好、健壮?还是扩展性好?我觉得没法列,也列不全。但
是,在我看来,性能好坏起码是其中一个非常重要的评判标准。
学习的重点在什么地方?
提到数据结构和算法,很多人就很头疼,因为这里面的内容实在是太多了。这里,我就帮你
梳理一下,应该先学什么,后学什么。你可以对照看看,你属于哪个阶段,然后有针对地进
行学习。
想要学习数据结构与算法,首先要掌握一个数据结构与算法中最重要的概念——复杂度分
析。
这个概念究竟有多重要呢?可以这么说,它几乎占了数据结构和算法这门课的半壁江山,是
数据结构和算法学习的精髓。
数据结构和算法解决的是如何更省、更快地存储和处理数据的问题,因此,我们就需要一个
考量效率和资源消耗的方法,这就是复杂度分析方法。所以,如果你只掌握了数据结构和算
法的特点、用法,但是没有学会复杂度分析,那就相当于只知道操作口诀,而没掌握心法。
只有把心法了然于胸,才能做到无招胜有招!
所以,复杂度分析这个内容,我会用很大篇幅给你讲透。你也一定要花大力气来啃,必须要
拿下,并且要搞得非常熟练。否则,后面的数据结构和算法也很难学好。
20 个最常用的、最基础数据结构与算法
所以,结合我自己的学习心得,还有这些年的面试、开发经验,我总结了20 个最常用的、
最基础数据结构与算法,不管是应付面试还是工作需要,只要集中精力逐一攻克这 20 个知
识点就足够了。
这里面有 10 个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie
树;10 个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算
法、动态规划、字符串匹配算法。
掌握了这些基础的数据结构和算法,再学更加复杂的数据结构和算法,就会非常容易、非常快。
总结
掌握了数据结构与算法,你看待问题的深度,解决问题的角度就会完全不一样。因为这样的你,就像是站在巨人的肩膀上,拿着生存利器行走世界。数据结构与算法,会为你的编程之路,甚至人生之路打开一扇通往新世界的大门。
以上便是为什么要学习数据结构和算法,愿你读过之后有自己的收获,如果有收获不妨一键三连一下~
以上是关于[新星计划] 为什么要学习数据结构和算法?如何学习?的主要内容,如果未能解决你的问题,请参考以下文章
学习算法首先要爱上刷题,「 英雄哥 」教你如何爱上「 刷题 」