C++自救指南-学习路线篇
如果你看了C++自救指南-方向梳理篇,就会发现,绝大多数C++相关的岗位,都存在着例如网络编程、并发编程、操作系统等行业通用的技术栈。
本篇章虽然打着所谓 “学习路线”的招牌,但实则是对这些通用知识一些资料的整合。这些资料大多是本🐭三年来踩过无数坑后筛选下来的,前人栽树,后人乘凉,照着下列推荐的课程或书籍学,让你几乎不走一点弯路。
稍微归纳总结一下C++自救指南-方向梳理篇中那些通用技术栈,无非就是下列这些:
- 语言:C++语法、STL标准库、C++新特性
- 网络:计算机网络基础、网络编程基础
- 操作系统:进程间通信、内存管理、线程同步、内存管理等
- 系统编程:Linux系统API、多线程编程
- 数据结构与算法:Leetcode,刷就完了
如果上述提到的技术都比较熟悉,那么大部分岗位的基本要求就差不多达到了,剩下的就是加强每个模块的深度,以及学一些特定岗位所需要的知识。
# 前言-推荐级别的解释:
- 重要且必要:表明该阶段中,除非找到更好的替代,否则几乎没有理由不学的课程或书籍。
- 高性价比:重要程度没有上面一个等级高,但是学起来不亏的课程或书籍。
- 重要但不必要:对于某个方向,或者某类岗位来说很重要,但可能对其他方向重要性稍弱的课程或书籍
- 不必要:有看的价值,但不看也可以
Tips :观前提醒,下面我说什么不重要,我贴出来的每个链接背后的内容才重要。 这些几乎都是经过我多年累积,优中选优的资料,把饭端你嘴边,学不学,学多少,就看你自己了。
# 零基础篇
面向转码选手,或者是0基础,入门困难的小白,主要是一些非常基础的课程,这个阶段不建议看书学习(大概率看不明白)
这个阶段的要求不高,只需要了解一些基础语法,以及开发环境(Linux)的基本使用即可。
因为科班的原因,所以我的启蒙主要是靠老师,一些资料收集并不详细,但是我还是列几个不错的供大家参考,这个阶段挑一个你看的下去的看,就可以了,不用纠结谁好谁坏。零基础阶段的目的就是快速入门,所以没必要耽误太长时间,哪个课程时间短看哪个!!!
# C 语言
对于 0 基础同学来说,学 C 是非常有必要的一件事,特别是对于 C++ 选手,更是如此。因为不管你是C选手还是C++选手,日后的工作中难免需要使用系统API进行编程,再不济,研究Linux的过程中,也是需要阅读大量C代码的,而且本就是一脉相承的语言,学好C对C++入门也会有较大的帮助。
- 翁恺 C 语言(重要且必要): 大多数 CS 人的启蒙老师,课程时间也短,就十几个小时,最推荐!! 浙江大学翁恺教你 C 语言程序设计!C 语言基础入门!_哔哩哔哩_bilibili (opens new window)
# C++
黑马 C++ 全套 2019(不必要):我本人没看过,但是听说质量尚可,零基础阶段仅需快速了解 C++ 这一语言即可,不需要扣细节,有个大概印象就可以过了。
黑马程序员匠心之作 |C++ 教程从 0 到 1 入门编程,学习编程不再难_哔哩哔哩_bilibili (opens new window)
其他任何你能看得下去的课程,这个阶段确实没啥好推荐的。。。
# Linux
- 尚硅谷 Linux0 基础(重要但不必要): 如果你对 Linux 一窍不通,那推荐看一下,拿来入门应该问题不大,了解基本的概念和操作即可。这门课不要全部看,看到你不想看为止。尚硅谷 2024 最新 Linux 零基础教程(linux 快速入门,上手开发)_哔哩哔哩_bilibili (opens new window)
# 初学者篇
稍微有点基础知识的同学,应该直接从这里开始。本篇章中,我会推荐一些必刷的课程或书籍,这些课程,如果在学习的过程中感觉吃力,可以跳过,但是今后回头一定还要再看。
虽然说是初学者篇,但其实我链接贴出来当中的内容,可一点也不基础。同时,这个篇章可能也是你在求职阶段耗费精力最多的篇章,万事开头难嘛,不必害怕,跟着本🐭严选的资料看下去,终有一日能“神功大成”。
# C 语言
为什么还要再学 C 语言? 其实我只是单纯想推荐下面这套课,有条件的话全程跟一遍,收获肯定比半路跟的要多。全程裸vim手敲,深入浅出,看过的都说好。
- 李慧芹 嵌入式 Linux C 全套(重要且必要):冷门神课,基础阶段可以只看 C 语言部分,适合 0 基础 C 语言速刷完后学习,更偏向就业,目前只需要看 C 语言者部分,后面的课程可以之后再看。史上最强最细腻的 linux 嵌入式 C 语言学习教程【李慧芹老师】_哔哩哔哩_bilibili (opens new window)
# C++
《C++ Primer》(重要且必要):必看的书,不解释,可以挑着看,可以分阶段看,但不能不看!!!链接给一个学习仓库,帮助你更快消化本书。GitHub - applenob/Cpp_Primer_Practice: 搞定 C++👊。C++ Primer 中文版第 5 版学习仓库,包括笔记和课后练习答案。 (opens new window)
侯捷:C++ 面向对象开发、C++ 新标准 11/14、 STL 标准库与泛型编程 (重要且必要): 三门课,我只能说不看你是你的损失(课不好找,大家各凭本事吧)
《Effective c++》(重要且必要):面试基本都会问,你就说你看不看吧
StudyBooks/C++ 进阶 at master · lizhenghn123/StudyBooks (opens new window)
《Effective C++》2023(上部完整版) C++ 进阶看这个_哔哩哔哩_bilibili (opens new window)
于仕琪 快速学习 C 和 C++(高性价比): 非常好的课,跟着大佬的思路,过一遍基础内容,链接中的四个视频最好都要看!!!于仕琪的个人空间-于仕琪个人主页-哔哩哔哩视频 (opens new window)
《STL 源码剖析》(重要不必要):可以学到非常多的模板的知识,但是基本没人问过我与之相关的很深入的内容,一般能问到的内容都在 《STL标准库与泛型编程》 这门课中了。
# 数据结构与算法
李慧芹 嵌入式 Linux C 全套(重要且必要):课程包含了数据结构这一块的内容,不全,但都是精华部分,所以必看史上最强最细腻的 linux 嵌入式 C 语言学习教程【李慧芹老师】_哔哩哔哩_bilibili (opens new window)
《大话数据结构》(高性价比): 我没看过,但是听说对于新手比较友好。
印度老哥的课(不必要): 在 b 站比较火,但我没看过【强烈推荐】深入浅出数据结构 - 顶尖程序员图文讲解 - UP 主翻译校对 (已完结)_哔哩哔哩_bilibil (opens new window)
浙大数据结构(重要不必要): 学院派,喜欢的可以看看,我之前就是看这么入门的,但是感觉可能对新人不算特别友好。浙江大学数据结构 陈越_哔哩哔哩_bilibili (opens new window)
邓俊辉:数据结构与算法(不必要):邓公出品,偏算法,打过ACM的小伙伴可能听说过他,难度拉满,感兴趣的可以尝试,享受被大佬智商无情碾压的快感吧~清华大学邓俊辉数据结构与算法【完】_哔哩哔哩_bilibili (opens new window)
数据结构入门以后,主要就是刷题(以及方便理解其他学科的代码),所以另外推荐几个刷题相关的链接:
代码随想录(重要且必要):按照上面的教程,跟着刷就完了代码随想录 (opens new window)
剑指 Offer (重要且必要): 必刷
Leetcode Hot100(重要且必要) : 必刷 LeetCode 热题 100 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台 (opens new window)
codetop(高性价比) : 面向就业刷题,高性价比:CodeTop 面试题目总结 (opens new window)
刷题不要贪多,常见题能快速写出来即可,时刻提醒自己,你不是在打比赛,不会的题 10min 内想不出来,立马看题解,抄,然后标记一下,后续二刷。保证刷题的效率。
如果你觉得,这个和背代码有什么区别?
你别说,你还真别说,就是背。 背到你看见一道题,就知道它考的是什么知识点,然后开始套该知识点的解题模板。差不多就成了。熟能生巧,ACM选手也是要背很多板子的。 面向就业的刷题 更是如此,用最短的时间,刷最多的题,才是王道,你花半小时,一小时想一道题,还做不出来,不如花同样的时间多“抄”几道类似题目的题解。
一家之言,如果你有自己的想法,那就是你对。
注意: 不要沉迷刷题! 适当即可!
# 计算机网络
郑烇 &《计算机网络自顶向下》:课程配套书籍(重要且必要): 主要是有课堂氛围,体验非常好中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第 7 版,James F.Kurose,Keith W.Ross)》课程_哔哩哔哩_bilibili (opens new window)
湖科大教书匠(不必要):如果 1 看不下去,就看这个计算机网络微课堂(有字幕无背景音乐版)_哔哩哔哩_bilibili (opens new window)
# 操作系统
王道 OS(重要且必要) :经典永不过时,入门绝佳,初学者看这个就够了王道计算机考研 操作系统_哔哩哔哩_bilibili (opens new window)
书籍:《OSTEP》(重要不必要):开源神书,感兴趣可以去看看,不过我读了一半就去干其他事情去了。。。
# 数据库
- 尚硅谷 MySQL(重要但不必要) : 为什么说不必要呢?因为 C++ 很多方向。。和数据库就不打交道。。。如果是后端选手,那就必学哈。MySQL 数据库入门到大牛,mysql 安装到优化,百科全书级,全网天花板_哔哩哔哩_bilibili (opens new window)
# 提高篇
如果前两个篇章都学完,那么恭喜你,算是入门了(但是可能根本找不到工作~), 接下来的提高篇其实就是对当中的每一块内容的深化,到这里就没有什么必须要看的内容啦,选择感兴趣的进行学习即可。同时我会穿插推荐一些我珍藏已久的宝藏项目,做完一个就能开始愉快的找工作啦(大概 ~)。
在这个篇章,主要就是面向你心仪的就业岗位学习了,针对岗位需求,深入学习这个岗位必须的技术栈,或者学习这个岗位独有的技术。 同时,也要开始着手准备练手项目了(笑死,学了半天发现啥都做不了~)
关于如何选取合适的项目,以及如何跑通开源项目,我会单开一个篇章来讲述,本章节中只会提几个非常经典的入门demo,为后续篇章做个铺垫。
# C++
侯捷:C++ 内存管理机制、C++Startup 揭秘 (高性价比): 重要,很重要,但不是必刷,因为其他的课程环节已经包含了一部分这块的内容了。(大家凭本事找课)
语言新特性项目:C++20 简易协程库(高性价比):利用新特性语法的demo级项目,全程视频教学,对新人友好,且不算太烂大街,可以快速填充你贫瘠的简历 ~【C++20】从 0 开始自制协程库,有手就行(上)_哔哩哔哩_bilibili (opens new window)
关于协程,C++20提供的协程是无栈协程,协程的基础知识,你可以关注一下这个up等疾风 (opens new window)
# 数据结构
纯刷题,没什么好说的
# 计算机网络
CS144 Lab 手搓 TCP 协议(高性价比):理论知识看初学者篇中的课程就好了,这里不需要重复看课,直接跟着文档或视频上手做,超高性价比课设,让你深入TCP协议的同时,也收获到了一个小项目。网络相关的八股也学到了,项目也有了,齐活。(只需要搓出 TCP 即可,后面的 Lab 性价比不高)。
CS144. 计算机网络实验. Lab0. 热身_哔哩哔哩_bilibili (opens new window)
# 操作系统 & 系统编程
《CSAPP》(高性价比): 神书,有时间一定要看,一定要看,一定要看,没时间最好也看看别人的读书笔记,面试官很爱问里面的内容,对应有一门课程视频:2015 CMU 15-213 CSAPP 深入理解计算机系统 课程视频_哔哩哔哩_bilibili (opens new window)
还有一些辅助视频:[原创] 深入理解计算机系统 - CSAPP 重点导读(更新完毕)_哔哩哔哩_bilibili (opens new window)
【CSAPP-深入理解计算机系统】1-1.计算机系统漫游_哔哩哔哩_bilibili (opens new window)
李慧芹 《APUE》(高性价比):是的又是她,已经不知道多少次推荐了,从基础到提高都有她的身影。课讲的真得非常好,无脑推荐,看完你会爱上这个女人的 ~ (整个系统编程课程使用的教材也是最经典的《APUE》)。
链接视频的后半段:史上最强最细腻的 linux 嵌入式 C 语言学习教程【李慧芹老师】_哔哩哔哩_bilibili (opens new window)
系统编程(上面视频后半段单独拿出来)Linux 系统编程(李慧琴)_哔哩哔哩_bilibili (opens new window)
南大 jyyOS 课(高性价比):国内最好的 OS 课,如果你能cover的住,在初学篇就可以开始跟着看了,看过的都说好,看不懂就多看几遍。
S6.081(重要不必要) : OS神课,并附带一个课程 Lab ,能当作项目,但是其实对于非 sys 选手来说,也并不是一定要做。。。(主要是做的人太多了,太多人都在简历上写上这门课,导致含金量下降)
6.S081 / Fall 2020 (opens new window)
【操作系统工程】精译【MIT 公开课 MIT6.S081】_哔哩哔哩_bilibili (opens new window)
# 网络编程
项目:WebServer (高性价比):C++后端人手一个的项目,烂大街可不代表其质量不行,烂大街的另一种说法叫“经典咏流传”, 所以你的简历上可以不写这个项目,但你不能研究一遍这玩意。。。
huixxi.github.io (opens new window)
GitHub - qinguoyi/TinyWebServer: 🔥 Linux 下 C++ 轻量级 WebServer 服务器 (opens new window)
项目:Muduo 网络库(高性价比) :学习该项目的前置条件是需要过一遍 APUE或者比较了解WebServer,不然你一定会一头雾水,经典中的经典,我想我不用过多介绍,直接贴点以前收藏的链接。
# 分布式
S6.824(高性价比):学分布式,就没有不看这门课的。b 站上有相关的课,网上资料也很多,这里我贴一个之前感觉写的比较好的博客,相当于是课程的文字版。
如果提高篇中的每个模块的内容你都比较熟悉,并且有着一到两个练手项目,八股背的也还不错,那么恭喜你,市面上大部分Linux C++ 相关的岗位你投递,都有一定面试机会了,运气比较好的话甚至也可以拿到一些还不错的offer。
但是如果想冲击核心部门,或者SSP,本篇章提到的内容可能还不够,没关系,- C++自救指南-资源分享篇中,我会补充这么些年我收集到的优质资源,选择你感兴趣的部分进行研究,祝你冲击SSP。