大佬们一般都是怎么学习新技术的?
我一般先找个博文了解一下,然后在 github 上找个源码看,学会使用。 然后找本书看,了解原理。 最后才去看文档。
我一般先找个博文了解一下,然后在 github 上找个源码看,学会使用。 然后找本书看,了解原理。 最后才去看文档。
至于某些框架怎么用之类的,一般直接翻文档和 github 上的 example 对着模仿就行,比较好的方法就是试试把多个 example 的内容想办法融合到一个工程里面,慢慢就熟悉了。
要深入了解的,比如 HBase 、Hive 之类的,都已经很成熟的东西了,其实可以直接看书。你会发现很多技术,都是相通的。例如一般的数据库都有 WAL ( Write-ahead-logging,在 MySQL 里面是 redo 、undo )的概念,还有 LRU 缓存到内存的东西,还有选主的 Raft 算法等等。这些都是基本差不多的东西,直接快速阅读就行了。
我还是觉得看书比看视频好一些,因为看视频是别人嚼碎了,喂到你嘴里的。看书,最起码,你是要主动去思考一些东西。多画图总结,这样记得牢,有空的话,教给不会的人(费曼学习法)。
没有人他妈用都没用过,上来直接源码的,这不有毒吗?你要知道这个东西是干什么的?解决了什么问题?我该怎么用?然后熟练之后,再去看看书,这样学得快。如果你已经在这些域已经是大牛了(例如你在数据库方面已经是掌握得不错的了,然后看其他数据存储方面的,很快),你可以直接看源码。
我参考后总结了一下
1. 首先要搞清楚为什么会有这个技术,要不然平白无故多个技术,有毛用?
2. 其次要明白这个技术,解决了那些问题?怎样解决的?
3. 然后了解下这个技术在解决了一部分问题的同时,又带来了哪些问题呢?
4. 最后这项技术底层是用了什么样的设计思想,或者 linux 相关的系统功能呢?
5. 看文档,了解设计和架构之后,才去看源码。
PS: 我说的可能有问题,希望各位补充改正
就 docker 举例
1. 首先 docker 不是虚拟化,而是容器化,主要解决的问题应该是资源隔离
2. docker 可以减少运维问题,将运行环境封装到 docker 容器内部,同样地我们也可以对某个容器做精细的资源控制
3. docker 的本机网络是通过网桥,性能不错。但跨节点的化基本就要通过转发来实现。转发肯定会带来损耗。而且 docker 容器内部最好不要写,要挂卷写。
4. docker 底层隔离使用了 linux namespace , cgroupfs, 网桥,unionfs 等技术。k8s 跨节点网络使用的 netfilter, vxlan 等技术
5. 看文档,看看别人的使用实践
我觉得学习某个技术的底层实现最好落到 os 层面比较好,然后再看这种技术本身的时候,我们可以从底层来思考。比如 docker 本机上的网络通信是通过网桥的,因此本机容器的网络包会发送到网络栈的内核二层交换机上,然后在发送到用户空间。而跨机器的访问,是通过 netfilter 等规则实现的,这个损耗就要大一些。
很多技术都是基于 os 的,很多技术都是组合使用了多种 os 的功能
我是多么羡慕他~
说实话,学一个 well defined 新技术比摸黑 research 轻松太多了,上一堆叫着学不动的活该到时被优化。
1.预判:先看特性,猜测它的理论依据与实现思路,然后花点时间想想,如果自己来做,应该如何设计。
2.验证:去找 Demo,验证一下猜测对不对,查漏补缺。
3.测试:看文档,做小规模测试。