C++科班学习路线
参考github
找资料
推荐几个网站
顺序,从上到下依次学习,尽量不要跳跃
计算机导论
计算机科学导论
书籍
《计算机科学概论》
- 导论,就是一个目录的作用。我建议学计算机之前先看看,看不懂不要紧,有个大致的印象就差不多了,本来也是起一个计算机系目录的作用,不用对目录的每个名词都刨根问底,以后有的是机会。一共只有三百多页,已经算很少了。
软件工程导论
书籍
《软件工程:实践者的研究方法》
- 不建议初学者读,不建议大部分人读,六百多页,很花时间,内容和知识太多太繁杂,确实也算是软件工程SE的目录,但更适合等你其他必修课学完之后,再确定好以后做软件工程的方向,并且开始工作之后,再读这本书,书里的知识绝大部分更偏向于工业实践,在学校里面,读了意义也不大,大概率无法理解。可以直接跳过,但是确实软件工程导论已经没有其他书可以推荐了,软件工程本来就是从计算机科学与技术里面细分出来的分支,不要对这门课要求太高。
基础类(必看)
C语言
书籍
《C程序设计语言》
- C语言这种书,要学深入了,可以推荐很多书,但是这里我是把它当作本科第一门编程语言来学习的,所以没必要学什么特别厚的书,这本就够了,学学语法,熟悉一下学一门语言大概有哪些的东西,写一点迷你程序就够了,最重要的是:
1、学习指针,了解到了内存管理最基本的东西,给你以后学操作系统课程有一个印象。
2、学习从代码到可执行程序,了解整个代码到生成产物的过程,给你以后学编译原理埋下伏笔。
所以要我说初学者学C语言的目的是什么,我觉得是学语法感受编程、学指针感受内存管理、学编译感受从代码到执行。
简单面向对象语言(C++为例)
网站
数据结构
书籍
《数据结构(C++语言版)》
- 学习数据结构,语言不是什么问题,用什么语言都可以学习数据结构,用C、C++、Python、Java都可以实现各种各样的数据结构,为什么这里用的教材语言是C++的,纯粹是因为我暂时没有找到其他语言更好的国内教材。
C++系统性学习
书籍
《C++ Primer》
- 听我先说啊,这本书800多页,非常厚,而且是工具书、字典那样的,其实根本不适合新手入门去学习面向对象技术与方法。
为什么这里就推荐这个书,最大的原因是数据结构教材,用到的语言是C++,当然也有用C语言的,但是我没找到特别好的书,所以没有办法,只能让大家先看看C++,大部分初级工程师在使用C++的时候,也只用到了面向对象的特性,很多高级特性都用不上,模板都用得很少,真的就是写ifelse而已。
这本书非常厚,不管是第一次学C++还是第N次学C++都要看,所以我推荐你们,先去什么类似菜鸟教程那样地方,先把C++大概的内容过一遍,那个应该很快就能过完,然后你过完之后就去看我接下来介绍的以C++为语言的数据结构教材,如果你看不明白,发现有不懂的C++的地方,你再去看这个C++ Primer,不要把C++ Primer当作是那种,看完了书,就再也不翻了,不会的,你会经常、一直去翻它。
计算理论与算法分析
书籍
《算法设计与分析基础》
- 我们计算机系上的课,是计算理论和算法分析,这里只推荐了算法分析的教材。因为计算理论那里面的什么图灵机的构造,图灵完备性证明之类的,更偏于理论,你们肯定学起来也枯燥,觉得没意思,那是属于计算机系开天辟地级别的知识,如果有兴趣,可以自己去找相关的书来看,我就不推荐了。
- 主要是本科教材要么找不到,要么就是写得比较一般,网上又推荐什么算法导论纯粹来搞笑的,这本算法书挺好的,但内容确实也挺多的,确实是我之前视频说的课程算法。我看了目录,就勾起了我大二的回忆,希望大家不要怕这本书太厚太多,还是可以看看的,实在不能理解的内容,跳过就好了,以后再来理解。
数据库原理与设计
书籍
《数据库系统概论》
《数据库系统概念》
- 数据库是真的不好推荐,国内的教材和国外的教材其实是两种思路,国内是把你当天才,很多东西默认你懂,或者是一句很简单的话直接带过,觉得你理解了;而国外的教材就是把你当傻子,讲得非常细,非常多,就像是把上课的时候学生提问都记录下来了。从页数也可以看得出来,一个400页,一个800页,当然这是概论课,不会花大心思给你讲MySQL怎么用,MySQL只是理论的一种实现框架罢了,大学教这个不是为了让你去打工当后端,而是看你是不是对数据库研发感兴趣,以后没准你就选了这个方向。
这两本书就是国内外大学教材的一个经典对比
所以到底你们更喜欢哪种教学方式呢,这个取决于你,当然了,我大二学的是国内的教材。
进阶类(必看)
操作系统
书籍
《操作系统导论》
《操作系统原理、实现与实践》
- 进阶类的操作系统,可以看的书特别多,你去豆瓣上搜索操作系统四个字,有特别多经典的黑皮书,我这里全都推荐的话,入初学者肯定是看不完的,所以更多还是推荐一些导论类的课程,等你们看完了,学完了,再去看那些黑皮书,其实就挺好的。
这里的国内那本,最大的优点是章节分得很清晰,界限分明,非常像我大三学的那门课的样子,可能也是因为国内的教材设计是一脉相承的,我觉得挺适合一开始看这本的。
国外的那本,章节可能分得不是很清晰,但是循序渐进,短小精悍,讲的细致的地方也更多,典型国外教材风格。
不知道你们到底适合哪种,所以都给你看介绍一下看看。
计算机组成原理
书籍
《计算机组成原理唐朔飞》
《计算机组成与设计硬件/软件接口》
- 计组本身就是软硬件都有的课程,一开始找这种讲整个体系的书的时候,就特别累,因为确实很难兼顾自学,同时又要书还不错,保证一定的深度,比较难搞。
大学的时候学的书,基本都是学校老师写的教材,或者是上面那种样子的书,高等教育出版社,几乎都是一模一样的,看你感觉自己喜欢哪种书吧。这个书,其实想做软件工程,尽快找个工作,转码,确实也不是必须看的,和计算机体系结构、汇编、编译原理一样,面试根本不问。但毕竟大学是通识教育,是让你找到未来方向的,所以感兴趣,看看其实也行。
计算机体系结构
- 这个课很硬件,我感觉我推荐了,大家也不会看,关注我的更多的还是想在互联网、游戏行业的,就索性算了吧。
计算机网络
书籍
《计算机网络》(谢希仁版)
《计算机网络:自顶向下方法》
- 这两本书,我本科的时候都看了,我特别特别特别特别喜欢这门课。
上课用的谢希仁那本,结课后自己看的自顶向下。谢希仁的那本是自底向上的,当时大三从物理层开始往上学,最后学到应用层之后,开始介绍我们互联网的各种各样的应用,给我的感觉就是一切的辛苦终于换来了成果,好像打开了一座又一座的金矿一样。
但是呢看完谢希仁那本,还是有一些疑问,所以又去看了自顶向下,看完之后之前的挺多问题就解决了,谈不上哪本书更好,因为我看自顶向下的时候已经对计网有很多理解了。
汇编与接口技术
书籍
《汇编语言》王爽
- 还是一样的,汇编面试不问,属于基础课,但工作之后有概率会遇到汇编语言,但需要你解决的问题,大概率比书里面的问题浅非常多,学有余力去看看吧。当然如果你想做相关工作的话,那就不一样了
编译原理与设计
书籍
《编译原理》(龙书)
《编译原理》(清华大学出版社)
- 到了编译原理、汇编、计网这种课程,推荐入门书已经没有任何意义了,基本都开始推荐经典教材了,因为看这个的时候早就不是入门阶段了,深度早就该提上来了。
龙书很经典,但编译原理这门课和计网、操作系统类似,需要你写代码,非常重要,你也可以去看网上的各种lab,都可以,你觉得适合自己的学习方式就好,觉得学到了知识就好,没任何问题,也完全不用跟我一样,喜欢看书啃书,这个完全是因人而异。
这里为什么还把清华大学出版社的编译原理拿出来,就是告诉大家,我本科学的就是这个书,我的编译原理老师很厉害,很不错,但是我不太喜欢这本教材,当时上这个课我看这本书非常难受,总有一种哪里好像没讲的感觉,但我翻来翻去,就是找不到知识点,但就是感觉脑海里的知识缺了一块,不知道是为什么。强烈不推荐大家看这个紫皮书。
选修类(后端开发方向选看)
Java语言程序设计
Linux程序设计
书籍
《鸟哥的Linux私房菜基础学习篇》
- 大部头,仅入门,不要去记忆,而是理解、应用一次书中提到的各种概念即可,一定要配套一个Linux操作系统来进行学习,边学边写
《Linux高性能服务器编程》
- 仅仅是一本Linux服务器编程的入门书,在学过C语言、计算机网络、操作系统之后学习
分布式系统设计
- 《大规模分布式存储系统:原理解析与架构实战》
- 《Paxos到Zookeeper:分布式一致性原理与实践》
- 《分布式系统:概念与设计》
实力提升
进入这一步,一定是要基础部分提到的内容已经掌握很熟练之后,再来进阶学习,否则学习效率会很低,因为你看不懂。并且该部分需要自己选择内容去学习,并非全部都要完全掌握
C / C++
- 《C++ Primer》
- 《Effective C++》
- 《STL源码剖析》
操作系统
- 《现代操作系统》
计算机系统
- 《深入理解计算机系统》
计算机网络
- 《计算机网络:自顶向下方法》
- 《TCP/IP 详解》
- 《图解HTTP》
数据库
- 《MySQL必知必会》
- 《高性能MySQL》
缓存
- 《Redis设计与实现》
离谱之路
项目
这部分是根据网络整理出来,适合C++后端开发写入简历的项目,有的没有文档,因此需要你直接看它的源码实现,只要你理解了它的代码,并且自己手动实现一次,就能保证面试的时候对答如流,那么写进简历是没问题的。
前言
项目,就是你看完、学完、自己默默实现完之后,可以写进你简历的项目。强烈建议,不要做重复相似的项目、不要做不适合校招生做的项目、尽量做能体现计算机系水平的项目、你的项目不要只局限于一门语言,并非做C++路线,就一定要做C++项目,你做Go、Java项目一样很不错嘛,前提是项目要好
这里给出的项目,只是例子,更多好项目,别人没做过的项目,你要自己创造、或者自己去查找,如果这里列出来,可能就有很多人一样做了,所以先学会模仿项目,再学会创造项目、做更深入的项目
重点多说一句:并非就一定要做C++项目,你做Go、Java项目一样很不错嘛,前提是项目要好,之前流行过一阵Go的RPC框架,也很好!
- 下面列出的,只是一部分例子,更多项目,请关注我的视频~
重复相似的项目
- 商城系统、博客系统、图书管理系统、各种XX应用层系统
- WebServer、简单的课程设计
实现STL
基于C++实现一个迷你STL
实现标准库部分容器和算法,对标准库进行扩充
实现WebServer
Linux C++ WebServer
(不适合写进项目)非常简单的http服务器
实现网络框架
基于IO多路复用和线程池的C++网络库
轻量级网络框架,线程池技术,C++11
Linux C++高性能TCP服务框架,基于Reactor模式,支持单线程、多线程Reactor,也支持UDP服务
协程
libco(建议直接阅读源码,不用写进项目)
文章
漫谈微信libco协程设计及实现(万字长文)
腾讯开源的 libco 号称千万级协程支持,那个共享栈模式原理是什么?
数据库
利用c/c++ 开发基于B+树的小型关系型数据库
C / C++ 丝绸之路(完全可以跳过,有时间再看,面试的时候大概率不会对校招生问到这么细的)
- 《C和指针》
- 《C专家编程》
- 《C陷阱与缺陷》
- 《C++ 沉思录》
系统设计
《数据密集型应用系统设计》
《大话设计模式》
《代码整洁之道》
《重构》
《深入理解Nginx》
Unix高级(难度比较大)
- 《Unix网络编程》
- 《Unix环境高级编程》
- 《Linux多线程服务端编程 使用muduo C++网络库》
国外优秀网课(有一定难度)
《MIT 6.S081: Operating System Engineering》
《CS162: Operating System》
《CMU 15-418/Stanford CS149: Parallel Computing》
《MIT6.824: Distributed System》
- Title: C++科班学习路线
- Author: Huan Lee
- Created at : 2023-08-22 10:35:00
- Updated at : 2024-02-26 04:53:15
- Link: https://www.mirthfullee.com/2023/08/22/C++科班学习路线/
- License: This work is licensed under CC BY-NC-SA 4.0.