基础技术分为两部分:编程和系统
编程部分
- C语言:接近底层,内存管理更直接,掌握程序的运行情况。《C程序设计语言(第2版)》,学习 C语言精细控制底层资源,如内存管理、文件操作、网络通信
- 汇编语言:可以深入了解计算机怎么运行,针对lock free之类高并发,可以更好的理解和思考
- 编程范式:有助于培养抽象思维,提高编程效率,提高程序的结构合理性、可读性、可维护性,降低冗余,提高运行效率。面向对象编程(C++、JAVA)、泛型编程(C++、GO、C#)、函数式编程(JavaScript、Python、Lisp、Haskell、Erlang)等
- 算法和数据结构:编程中最重要的东西,提高程序的合理性和执行效率。不仅是为了写出运转更为高效的代码,更是为了能写出覆盖更多场景的正确代码
系统部分
- 计算机系统原理:价值在于,除了能够了解计算机的原理之外,还能举一反三的反推出高纬度的分布式架构和高并发高可用的架构设计。《深入理解计算机系统》(Randal E.Bryant)
- CPU的体系结构(指令集【CISC/RISC】、分支预测、缓存结构、总线、DMA、中断、陷阱、多任务、虚拟内存、虚拟化等)
- 内存的原理与性能特点(SRAM、DRAM、DDR-SDRAM等)
- 磁盘的原理(机械硬盘【盘面、磁头臂、磁头、启停区、寻道等】、固态硬盘【页映射、块的合并与回收算法、TRIM指令等】)
- GPU的原理等
- 操作系统原理和基础:理解程序是怎样被管理的,提供了怎样的支持与接口,性能特性如何,进程间怎样通信。《UNIX环境高级编程》《UNIX网络编程》《Windows核心编程》
- 进程
- 进程管理
- 线程
- 线程调度
- 多核的缓存一致性
- 信号量
- 物理内存管理
- 虚拟内存管理
- 内存分配
- 文件系统
- 磁盘管理等
- 网络基础:学习网络层次结构(ISO/OIS模型、TCP/IP协议栈)。《TCP/IP详解》
- 数据库原理:
- SQL(基于B+数,强一致性)
- NoSQL(较弱的一致性,较高的存取效率,基于哈希表或其他技术)
- 分布式技术架构:
- 负载均衡
- DNS解析
- 多子域名
- 无状态应用层
- 缓存层
- 数据库分片
- 容错和恢复机制
- Paxos
- Map/Reduce操作
- 分布式SQL数据库一致性
信息来源
常见的信息源有
- Google等搜索引擎
- Stack Overflow、Quora等社区
- 图书
- API文档
- 论文和博客