参考:01星球图灵院
C++基础
基础很重要,但也很凌乱和繁多。所以应该经常学习与夯实基础,并行学习其他内容。
- C++ Primer:以C++11来讲解,全面讲解C++的语法以及C++11的新特性,建议至少通读一遍把握整本书的大体框架,然后选择性看重点章节。
- Effective C++:主要讲解C++程序的过程中需要注意的一些条款,有 助于梳理在编写 C++程序的时候需要注意的一些常见的问题和注意事项。
- STL 源码剖析:这本书讲解了C++的底层实现,内容包括C++底层的内存管理、各种容器和数据结构的实现、常见的算法实现等。(必读书籍)。
- 深度探索C++对象模型:这本书讲解了C++面向对象的底层实现机制。内容十分重要,尤其其中虚函数的实现机制。建议直接读英文原版。(必读书籍)
个人建议:先学习C++的教学视频,将C++语言及特性了解过后通读一遍C++ Primer,然后学习STL容器,学会使用容器,接下来就阅读STL源码剖析,可以起到复习数据结构的作用;然后阅读深度探索C++对象模型,学习C++面向对象的底层实现机制。其中有时间就并行阅读Effective C++和C++ primer的重点章节。
数据结构与算法
- 大话数据结构
- 算法(第4版)
- 算法导论
操作系统
- 深入理解计算机系统(CSAPP):遇到难以理解的概念可以先查阅资料,实在学不会就先跳过,可能后面就学会了。
- 操作系统——精髓与设计原理:与CSAPP结合一起看,可以互相补充。但需要先过CSAPP。
- 程序员的自我修养:详细讲解程序编译过程中的具体细节。
- 鸟哥的Linux私房菜:速看,主要了解Linux的基本命令。
- Linux\UNIX系统编程手册:想进一步学习Linux系统编程(APUE)的人推荐书籍
- Linux内核设计与实现:以实践为主对Linux的内核展开深入的学习和钻研。
- 深入理解Linux内核:以理论为主对Linux的内核展开深入的学习和钻研。
个人建议:先看CSAPP,其中有些部分可以跳过,比如操作系统设计的网络等知识需要学完计网和网络编程后才能更好的理解。然后看《操作系统——精髓与设计原理》,与CSAPP结合起来互相补充。若想更深入学习编译链接的原理,就可以再看《程序员的自我修养》。之后速看《鸟哥的Linux私房菜》。若想开始学习系统编程,则可以先看Linux系统编程(APUE),这里实操较多而理论较少,可以配合《Linux\UNIX系统编程手册》详细来看。最后就是对Linux的内核展开深入的学习,可以先学习理论,再从宏观的视角理解各个知识板块的逻辑关系和实现。
计算机网络
网络的知识比较容易理解,但是知识点比较繁杂,所以我们要注意文档或者 笔记的建立。
- 计算机网络:自顶向下方法:关于物理层和链路层可以快速过,了解以下基本原理即可。重点学校放在网络层、传输层和应用层、其中传输层的TCP和UDP非常重要。
- TCP/IP详解 卷一 协议:对网络更加深度的了解。
- Unix网络编程:对网络编程进行实践。
多做工程,当我们学习了网络编程以后,可以学习一下Linux 多线程服务端编程来学习C++的一些实际应用。如果我们看完了常用的网络 IO 模型,还可以自己实现一些网络库,并基于此实现一个 http server。
数据库
- 数据库系统概念:了解数据库的基础知识。
- MySql必知必会:学习MySQL的基础语法。
设计模式
设计模式方面的能力主要体现在大型软件的项目上,但它可以作为知识点来扩展学习,了解每个设计模式的思路就好。对于项目,我们需要熟悉Linux平台的GCC、makefile的书写规则、GDB调试工具的熟练使用。
- 大话设计模式
C++并发编程
- 操作系统真象还原:可以自己实现一个简单的操作系统
分布式
视频是 MIT 6.824(Schedule:Spring)
- Design Data Intensive Applications:可以结合视频一起看。
为了变得更强,还需要看一看工业界中常用的东西,各种中间件,如Redis,消息队列。
可以自己实现一个单机版本的kv数据库,可以用最简单的bitcask的方案做存储,再加上自己写的网络库对外提供服务。