C++ & Linux后端进大厂学习路线

我是2019年8月全面开始学习C++,之前只是有一点C++的基础,仅看过《C++ prime Plus 第六版》,2020年参加7月参加校招,并且取得几个大厂的Offer,下面是我几个月的学习路线。


C++,相对别的语言学习门槛会高一点,主要原因是学习路线不明确,没有像Java那么多资料。但在大厂里C++岗位不比java少多少,比如腾讯、百度、阿里云、网易、华为等。下面介绍下自己学习C++ & Linux 后端的路线,以及自己的看书方式,供参考。

Cpper雄起!!!

C++基础

如果刚接触C++,建议去B站搜C++视频辅助《C++ prime 第五版》一起学习。

  • b站黑马程序员的C++学习视频
  • 《C++ prime 第五版》

关于《C++ prime 第五版》与 《C++ prime Plus 第六版》的选择问题:如果只能选择一本,个人建议选《C++ prime 第五版》。

  • 《C++ prime 第五版》:这本书对于刚入门的学生可能有点难,因为有些章节的知识存在一些跳跃性。但是讲解的比较透彻、深入,因此需要配合视频一起学习。但是,看完一遍后就可以将其作为字典、工具书,以后遇到不懂的地方来看,总是能给你启发。
  • 《C++ prime Plus 第六版》:这本书,讲解比较连贯,没有跳跃性。但是主体基本是以C++98/03进行讲解,而关于C++11的知识大都在附录,且属于一笔带过存在,讲解的不够透彻。当时自己看完这本书,后来又重新买了本《C++ prime 第五版》,看完才算C++入门了。

根据自身喜好选一本,无论哪本都建议配合视频,因为光看书太枯燥了。而且如果时间不充足,不建议逐章节阅读,比如你之前有C语言基础,那么就可以直接从C++部分开始。

C++11

C++11对C++进行了较大的更新,不仅能帮助你更安全、更方便地使用C++,而且校招考察的也较多,建议看看、学习下。关于C++11的知识建议阅读下面三本书:

  • 《深入理解C++11:C++11新特性解析与应用》
  • 《Effective Modern C++》
  • 《modern C++ tutorials》

注意,如果时间不充足,看书不用按照顺序看,可以先把重要的知识点看完,再看别的小的点。

C++进阶

下面这三本书,主要是关于C++的对象模型、C++的使用建议、STL底层实现等方面,用于提升C++内功:

  • 《深度探索C++对象模型》

    这本书虽然是很早的书,但是里面的内容依然适用,能极大地提升C++的内功。时间不够,可只看前四章。

  • 《effective c++》/ 《more effective C++》

    可以让你知道怎么正确并且更好地使用C++技术。

  • 《STL源码剖析》

    建议看看,能让你深入了解STL的实现原理,不仅仅是各个数据结构是怎么实现的,还涉及到一些设计模式、模板的知识。

上面有些知识过于硬核,也都是侯捷老师翻译的,如果觉得枯燥了点,可以搭配侯捷老师的视频一起学习:

到此,C++知识基本已经完结,可能有人觉得还没涉及到C++模板的知识。但是在上面的推荐的知识中,已经包含了常用的模板使用技术,更加深入的元编程属于黑魔法级别,不会有公司使用的。

当然,如果对模板、元编程非常有兴趣,可以看看:

  • 《C++模板 第二版》(目前还没有中文版)

那么下面就要进入语言基础之外的体系了。

OS

对于C/C++程序员,更加推荐 两本书:《深入理解计算机系统》 和 《程序员的自我修养-链接、装载》。这两本书能站在编译器的角度看待C/C++语言规则,校招问的也比较多,比如new是在底层是怎么一个过程?如果校招准备时间不够,可以不看 《程序员的自我修养-链接、装载》。

  • 《深入理解计算机系统》:重点章节:2,3,5,7,9
  • 《程序员的自我修养-链接、装载》

如果时间有余,则可以进一步看《操作系统精髓与设计原理 第8版》,如果是非科班可以和王道考研-操作系统一起食用更佳。

  • 《操作系统精髓与设计原理 第8版》: 时间不足章节选看

Linux

好嘞,到这里真正开始进入到Linux后端开发了。需要先学习Linux的系统编程、网络编程知识,毫无疑问两本书:

  • APUE -- 《UNIX环境高级编程》 重点章节:3,4,5,7,8,10,11,12。
  • UNP --《UNIX网络编程》前面8章及11,14,16,26。整个书只看 TCP/UDP

但有个难题,这两本书太厚了,对于初学者不友好,一开始看可能陷入无法理解的细节中。自己的方法是:

  • 先看上面列举出的重点章节,其余章节用到了再看;
  • 配合视频:我自己看的是黑马Linux全套视频Linux网络编程视频,我也是跳着看的。后者音质可能不太好,看自己能不能接受。

至于搭建linux环境,有两个方法:

  • windows里下载wsl2,然后 vscode下载个Remote-WSL插件,vscode直接登录到wsl里,好用到爆炸!!!
  • 但是wsl2有几个缺陷,和调试网络有关的功能用不了,比如tcpdump等。那么此时可以开启一个虚拟机,vscode下载Remote SSH插件远程登录即可。

如果只是日常开发,建议选择wsl,比较方便,调试网络之类的选择虚拟机。

后端

如果上面都已经看完,则表示已经具备 C++ & Linux 后端开发的基础了,那么下面可以开始学习服务器开发了:

游双老师的《Linux高性能服务器编程》,这本书剖析了设计一个服务器的各个要点,其中的点面试也经常考,比如epoll的ET模式能使用阻塞IO吗?这本书强势推荐。

而陈硕老师的muduo项目,其设计上也符合《Linux高性能服务器编程》上的设计,b站有老师逐行代码讲解了muduo,不过这个视频噪音大了一点,我坚持看完了收获颇大。

补充:有人可能觉得,muduo项目烂大街,但是你真的把里面的设计原理搞懂了吗?比如著名的libuvredis的服务器相关的设计和muduo的设计完全一致,如果你搞懂了以后看redis源码也很轻松。其次有时间可以看看libuv,代码量不多,里面的多线程设计也具有参考价值。

后端进阶

RPC

如果到此,你还使时间充足,想要冲刺核心部门,那么可以学习RPC的相关知识。你可以从jsonrpc开始学习json是怎么实现的,进阶一点你可以看看brpc的设计方式,比如它的协程是怎么设计的。

RPC就避免不了序列化协议部分,关于这个常用的有: protobuff, jsonxml

  • protobuf:可以看看 protobuff 怎么使用。
  • json:可以自己写个解析器,json-tutorials详细分解了json的设计流程,看完基本就懂了。

对于协议部分,要明白各个之间的区别、优劣势。

Redis

如果有时间,真的充足!!!可以看看redis的源码,Redis源码,个人觉得可以分为三个部分来看:

  1. 服务器设计:这部分的主要内容就是:1)redis怎么接受客户端的输入、解析成指令;2)执行指令;3)怎么将指令结果返回给客户端。

    aeEventLoop的设计和 《Linux高性能服务器编程》讲解的总体类似,输入输出缓冲区的设计和muduo讲解的基本一致,也有应用层的流量控制。

  2. 数据结构设计:各个数据结构的设计,怎么融合到aeEventLoop中,成为服务器的一部分,实现了各个指令功能。

  3. 分布式设计:1)主从同步replication;2)sentinel模式:用于解决主从同步中的主服务宕机怎么办,故障转移等;3)集群。

Redis整个设计大致如上,如果想在秋招之前学习下,建议看下第一部分。第二部分时间仍然有剩余可以看下。推荐的书籍:

  • 《Redis设计与实现》
  • 《Redis 5设计与源码分析》

两本侧重点不同,前者侧重讲解原理,分析的比较清楚,只是代码是python的伪代码。后者结合redis的源码。结合看比较好。

最后,学习redis不能光看书和代码,要先学会使用!!!再去看,有几个网址可以看看

数据结构与算法

算法

如果你的时间充足:

  • 《算法》
  • 清华大学邓俊辉老师的《数据结构与算法》。

leetcode 刷题

  • Leetcode,时间充足刷前300道,至少200道,建议把《Leetcode精选TOP面试题》刷完
  • 剑指offer 至少2遍,要非常熟悉里面的题目,因为这真能让你获得offer

是否要购买Leetcode会员,能把前面的300道题目写完足够。如果300道写完,可以到牛客网继续刷真题,因为面试时的面试题是要处理输
入输出的,秋招时很多人因为不能熟练处理输入输出导致无法ac。如果还想买,建议和同学一起买,更加便宜。

计算机网络

如果你时间充足,可以看看《TCP/IP 卷一》,时间不充足就不要看了。因为上面的书籍上、代码里都包含了常用的TCP/IP知识。

建议掌握以下Linux 命令,帮助你分析网络通信:

  • tcpdump
  • lsof
  • netstat
  • netcat

工具

学会使用,cmakegdb

  • cmake:如果你看了muduo的讲解视频,里面在讲解muduo的同时了怎么使用cmake
  • gdb:建议学学,不仅有利于秋招,也能帮助自己学习源代码、调试

最后几点建议

最后几点建议:

  • 要学会markdown 的使用,记录笔记
  • 创建github账号,更新你的项目

更多硬核的 C++ & Linux 将继续更新,欢迎关注、一起交流。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容