shalom 05ce188128 | ||
---|---|---|
01_妥拉笔记 | ||
02_面试笔记 | ||
03_计算机基础笔记 | ||
04_小程序笔记 | ||
05_前端笔记 | ||
Bitcoin笔记 | ||
C语言笔记 | ||
DataStruct笔记 | ||
Docker笔记 | ||
dos命令笔记 | ||
English笔记 | ||
ETH笔记 | ||
Fabric笔记 | ||
Filecoin笔记 | ||
GFS笔记 | ||
Git笔记 | ||
Go语言笔记 | ||
Heartbeat笔记 | ||
IDEA,Goland笔记 | ||
IPFS笔记 | ||
JavaScript笔记 | ||
Java笔记 | ||
Linux笔记 | ||
Mongodb笔记 | ||
Mysql笔记 | ||
Nginx笔记 | ||
node笔记 | ||
Redis笔记 | ||
shell笔记 | ||
Typra笔记 | ||
VPN笔记 | ||
Windows笔记 | ||
分布式笔记 | ||
后端笔记 | ||
微服务笔记 | ||
测试笔记 | ||
管理笔记脚本 | ||
编程思想 | ||
网络编程笔记 | ||
读书圈/自控力笔记 | ||
迪士尼笔记 | ||
.gitignore | ||
.gitmodules | ||
ASCII表.jpg | ||
README.md |
myNotes
我的笔记
学习方法论
-
将要学的知识拆解成一个一个的点
- 找多本该领域综述性的教科书看它们的目录;
-
针对每个点做刻意练习,变换多种方法练习该点
- 对书里的章节进行精读
-
对多个点的排列组合,进行刻意练习
-
最后把知识点和现实工作中的情况(自己工作,或其他公司相关的工作)进行对照
这样就可以融会贯通建立对一个领域的理解
这样说可能有点抽象,拿我当年学习分布式存储的过程为例子,先结合自己的工作内容梳理出需要深入了解的知识点(例如,元信息组织,Meta Server设计和HA,副本组织和管理,Recovery,Rebalance,单机存储引擎,数据/元信息流,纠删码,一致性,多租户,存储介质,网络环境和IDC等等),同时看很多综述性的材料,梳理分布式存储的知识点(有网上各种整理的比较好的文章,也有从各种系统实现的paper里抽出),不断迭代构建分布式存储领域的知识点(寻找pattern,这是最难的一个过程);然后针对每一个知识点,找相关材料进行深度学习,例如,对于分布式一致性,需要阅读CAP理论,Paxos的论文,Raft的论文等等以及周边的很多材料(刻意练习);然后找各种系统实现的论文或文章,比如GFS,Dynamo,Aurora,OceanBase,Ceph,Spanner等等,看看和对比它们在一致性上是如何考虑和取舍的,当然,最重要的是结合自己工作中的反复实践和所学知识点进行比对(及时反馈)。这三个阶段并不是割裂的,而是周而复始的,经常会在刻意练习和及时反馈的学习过程中,发现自己遗漏的知识点,或者发现自己梳理的两个知识点其实是重合的。通过这种交叉比对,以及在实践中不断检验的方式建立的知识点是非常可落地的,而不会看了几篇论文以后就人云亦云。拿分布式存储的一致性举例子,如果不是反复对比、思考和反复实践,你不会发现GFS论文里最难的一段,多个Writer对一个文件进行append的逻辑,在实践中根本没用;你也不会发现看起来优雅而学术的CAP三选二的理论,实践中压根不是这么完美,很多时候只能三选一;你也不会发现Dynamo论文里的Vector Clock,网上有无数文章摇头晃脑的解读,但在Amazon的应用场景里是个典型的over design,Cassandra在这点就务实很多。
对于一个领域还未完全掌握的同学,深度是最重要的,不用想广度的事情,等掌握了一个领域之后,再去拓展广度就变得很容易了。
持续不断的review自己之前的代码