雨后黄昏花易落-数据结构与算法篇

数据结构与算法的学习,文字教材跟从王争的《数据结构与算法之美》,视频教程跟从AcWing的y总。做技术,要耐得住寂寞,十年磨一剑,不否认来时路,也无畏将来。

为什么要学习数据结构与算法?

数据结构与算法不是一朝一夕就可以掌握的。下定决心学习前,最好做好要学一年以上的准备。如果仅仅是写纯框架的工程,大概是不需要学习特别深的算法的。但是在阅读开源项目源码、程序语言内置方法底层实现时,是需要读者具有深厚的数据结构与算法能力的。

我见过许多技术非常强,但是面试会跪在“算法”上,网络安全岗位随着逐渐兴起,也从一开始会使用脚本,到非常强调算法功底,尤其是二进制方向。拿pwn方向来讲,栈相关题目需要栈相关知识,而堆相关的题目需要链表相关的知识。

我学习过前端开发(vue为主),也学习后端开发(golang为主,java也写),前端在编写动态路由、组件复用,后端的响应处理、CURD、中间件、消息队列,我大多是根据业务逻辑使用框架编写。这些框架底层,一般都揉合了很多基础数据结构和算法的设计思想。

比如,我们常用的Key-Value数据库Redis,里面的有序集合是用什么数据结构来实现的?为什么用跳表来实现?为什么不用二叉树?

王争在开篇词就写到基础架构研发工程师,我也为之一撼,因为我的目标就是能写开源框架。以RPC为例,不同公司、不同人做出的RPC框架,架构设计思路差不多。最后实现的功能也差不多。但是有些做出来的Bug多、性能一般、扩展性不好、只能在公司仅有的几个项目使用。而有的人做的框架可以被Apache收录。

高手之间的竞争在于细节。算法是不是够优化?数据存取效率是不是够高,内存是不是够节省等等?这些累积起来,决定了一个框架是不是优秀。

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

实际上,数据结构和算法的东西并不多,常用的、基础的知识点更是屈指可数(不是我说的,王争说的,狗头保命),还没有到考验智商的地步。

理解概念并学会使用

概念记的再牢,不理解、不会用也是徒劳无获。理解的过程中不必死扣定义,但是要理解概念。比如理解什么是数据结构与算法:
数据结构是为算法服务的,算法要作用在特定的数据结构之上。数组支持随机访问,可以使用二分查找来提高效率,如果使用链表存储,那么二分查找就无法工作了,因为链表不支持随机访问。

学习的重点内容

数据结构与算法的内容非常多,先学什么?后学什么?学习数据结构与算法首先要学会复杂度分析!然后就可以进入数据结构与算法的正文内容了:

事半功倍的学习技巧

学习数据结构是非常好的思维训练过程,所以,千万不要被动的记忆,要多辩证的思考多问为什么,引用中庸关于学习的经典:”博学之,审问之,慎思之,明辨之,笃行之。”,我会单独出一篇说说来读博学之这一篇,汲取先辈学习之智慧。

边学边练,适度刷题

每周花1-2个小时的时间,集中把每周学习的数据结构和算法,全部自己写出来,用代码实现一遍。然后留出两个小时纠错和总结。
“适度”刷题,但不要浪费太多的时间刷题。学习的目的还是掌握,然后应用。

多问、多思考、多互动

学习最好的方法是,找到几个人一起学习,一块儿讨论切磋,有问题及时寻求老师答疑。

打怪升级学习法

学习最大的问题就是,坚持不下来。所以,在枯燥的学习过程中,也可以给自己设立一个切实可行的目标,像打怪一样升级。

知识需要沉淀,不要试图一下字掌握所有

在学习的过程中,一定会碰到”拦路虎”。如果碰到学不懂的知识点不要着急,实属正常现象。学习知识的过程是反复迭代、不断沉淀的过程。书读百遍其义自见。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇