越深入理解内核各个io子系统驱动,越感觉基础很重要,下面提到仅供个人抛砖引玉,不时的询问自己(摘自陈老师的公众号),并加入自己的延伸。
1.信息的表达和处理
整数和浮点数的表示;数值的转换、移位
2.从汇编层面理解程序的执行
顺序、分支、循环、函数调用、数组、结构体等在汇编层面是怎么实现的,寄存器和内存是怎么使用的
理解了这些其实也就理解了冯诺依曼计算机体系结构,这是计算机学科一个基础性的东西
知道程序在底层是怎么运转的, 对于学习各种虚拟机有很大的帮助,比如JVM,它要解析执行的是字节码,字节码本质上要表达的就是这些东西,只不过有所扩展。
理解了栈帧,就能理解函数调用的本质,递归,以及尾递归的实现。还有安全相关的概念,如缓冲区溢出这个臭名卓著的漏洞及其防范办法
3.进程和线程
4存储器的层次结构
5.数据结构和算法
6.计算机网络
7.数据库
8.分布式基础知识
这些已经偏向应用层面了,但是现在很多系统都是分布式的了,分布式就变成了一种基础知识。
系统通信:RPC, 消息队列等
CAP原理,BASE原理,幂等性,一致性模型(强一致性,最终一致性.....)和相关协议(两阶段提交,Raft,Paxos......)
数据分片:取模算法,一致性Hash,虚拟桶
9.基本设计思想