保姆级 C++ 学习路线

上周有小伙伴留言求安排一手C/C++学习路线,这周一份保姆级的C++语言安排上!

图片

以前就写过C语言的学习路线:可能是北半球最好的零基础C语言学习路线,这次把C++的学习路线也安排上,专门花了一个多月写了这篇学习路线,全文超过8000字,文章润色了好久,配套的资料全部找齐了。

1、先唠两句

本篇学习路线主要有五个阶段组成,每个阶段我都推荐的有对应的书籍和视频,对于其中的内容也进行了标注,分为必看选看两种。

有些内容是必看的,这个一定要看,不可以省略跳过;有些内容是选看的,有时间就看吧,没有时间可以后期记得再补上!并不代表我没写上去的就是不需要看的,这是不对的哈!

2、学习路线

说回正题,这篇学习路线我真的写了一个月左右。

不要怀疑,是真的一个月,主要是因为最近部门老大又接了一些新项目,我们也在加班加点干活。

所以我就只能利用各种碎片化时间写出来的这篇学习路线,这篇文章主要是面向一些小白和非科班选手,如果你是转行,可以按照现在的这篇学习路线来学。

这篇C++学习路线主要是面向求职,认真走完前三阶段绝对能帮助你找到一个不错的工作了。

走完全部五个阶段,你可以说自己是一名合格的C++研发工程师了。

对于本文中推荐的书籍,当当、JD上均有售相应的纸质版,对应的免费电子版PDF可以在下面这两个仓库找到,如果你无法访问github,可以访问一下码云:

github地址:https://github.com/GrindGold/pdf

码云地址:https://gitee.com/grindgold/pdf

除此之外,本文也会推荐一些视频,我已经放在公众号后台了,获取方式或者视频地址都在对应的推荐视频下面了,大家可以留心一下即可。

下面是本文主要大纲:

图片

C++学习路线(求职版)

第一阶段、入门

我一直建议一些小白选手在入门最开始不要直接去啃书,特别是不要在最开始的时候就去啃一些黑皮书!

这些书籍好吗?

,但暂时不适合现在还是个小白的你。

如果你在小白阶段就直接去啃这些内容,妥妥的劝退。

1、郝斌老师的C语言教程(选看)

图片

2433224

地址:https://www.bilibili.com/video/BV1os411h77o

如果你有别的语言基础,比如Java、Python等,那么郝斌老师的C语言教程就直接跳过吧。

如果你没有别的语言基础,还是看一下郝斌老师的教程吧。

如果你没有最基本的C语言基础,可能连指针是什么内容都不清楚。

那么你在学习C++的时候,比如智能指针那一块会很萌,觉得有些内容看起来云里雾里,前言不搭后语,摸不着头脑。

2、黑马培训班的C++教程(必看)

图片

地址:https://www.bilibili.com/video/BV1Tb411j7uM

这个必看!我看的是2017版的黑马C++,现在还有小伙伴在我2019年下的留言回复我。。

图片

最好也跟着视频中一起敲,可能你最开始敲的时候速度很慢,对其中的某些内容也不甚其解,没关系,跟着敲就是了。

就好像我以前在看这门视频的时候一样,一个字一个字的敲。

图片

黑马C++笔记

关于看一些编程类视频的方法,我以前也分享过自己是如何看视频的,感兴趣的可以看看。

文章地址:看视频的一点小建议

第二阶段、上升

这是整个C++学习路线中最重要的一个阶段,依然是从书籍和视频两个方面入手。

如果说第一阶段是带你入门,那么第二阶段就是帮你打好基础,让你在后期的学习中如履平地、不至于根基不稳。

1、《C++ Primer 第五版》或者《C++ Primer Plus 第六版》

这是两本完全不一样的书。

前者,也就是《C++ Primer 第五版》适合一些有基础的选手,封面如下;

图片

选择这本书的人最好是有一些C语言基础的,也就是可以跳过第一阶段的郝斌老师的C语言教程,只看黑马教程的那些人。

当然了你如果有其余语言的基础就更好了。

在看这本书的时候记得不要跳过课后练习题,没必要每道题都要仔仔细细的做,但是每小节后的前2-3题绝对需要自己做一下。

不要觉得自己学得挺不错的,就直接跳过课后题了,我以前看这本书的时候也觉得自己都看懂了。

转头去做一下课后题,才知道我看懂个锤子。。。

这本书的前8章是基础部分,需要好好看;第9 - 12章为容器、算法这些知识;第13章-19章为进阶一点的拷贝、重载等等知识点。

对于13-19章之间的内容,你可能第一次理解不了,没关系,后期遇到问题再来接着翻对应的知识点就行。

因为我就是这么过来的,比如拷贝构造函数和智能指针部分,我记得我至少来来回回看了三四遍才理解清楚。。。

我知道还要一本《C++ Primer 5th》对应的练习题集,封面如下:

图片

习题集

很多人都问我这本书有没有必要去买?私以为《C++ Primer 5th》课后的题就足够了。

量不在多,在乎于精,如果有不懂的及时弄懂就行,这本习题集没必要买。

有时候选择太多反而是一种坏事,可选项太多反而会导致不好下手,不知道该选哪个了。

后者,也就是《C++ Primer Plus 第六版》适合小白选手,也就是没有任何语言基础的选手,封面如下:

图片

这里应该是C++PrimerPlus

这本书是完全的小白向书籍,甚至可以说讲的太详细了。

选择这本书的人建议你必须看完第一阶段的《郝斌老师的C语言教程》和《黑马培训班视频》,然后再去买这本书,千万不要去买《C++ Primer 第五版》那本书了。

记得要根据自身的情况来选择不同的书籍。

2、粗看三个侯捷老师的视频

看书是一件比较乏味的事,特别是那些大黑书,看起来比较枯燥,因此课题穿插一些视频。

在第二阶段,我建议先粗看一下第三阶段三个必看视频,也就是侯捷老师的STL泛型编程、C++11新特性、内存管理与分析这三门课程。

侯捷老师的全部课程,公众号后台回复”侯捷“即可获取。

我知道看到这里,可能有同学怀疑我在乱说,甚至直接喷我教坏学弟学妹们,刚开始学习就直接看这么高深的东西。。。

为什么要提前看第三阶段的几个视频?

第一、我是推荐你在第二阶段视频,但不代表你可以在第二阶段直接上来就看书,看这几个视频的前提是至少学完、看完C++的基础知识后,比如《C++ Primer 第五版》的前八章,至少要看完前八章再来粗看视频。

第二、正如上面说的,看书是一件很容易让人感到乏味的事情,换一种接受知识的形式再回头看书的话,效率一般都会大为改善。猪肉大葱的饺子吃习惯了还想吃吃韭菜鸡蛋的呢。。

第三、侯捷老师的这几个视频是每个学习C++的人都应该仔细看几遍下来的,只看一遍是绝对记不住的。

所以可以在第二阶段先大致看看这几个必看的视频,在第三阶段再来仔细看看这几个视频。

我以前跟大家分享过自己在看视频时候的一些方法,就是下面这篇文章:

但侯捷老师的这几个视频不适用这些方法,侯捷老师的这几门课程,你只需要认真看下去即可,如果你有跟着敲的决心也可以,不打算跟着敲也没事,认真看就行。

你在看这三个视频的时候可能会觉得懵,觉得云里雾里摸不着头脑,不要慌,这是正常的。

觉得不懵,反而不正常。。。

视频中的某些知识点看不懂、听不明白,没关系,接着看下去就行。

不需要理解的很透彻,只需要对其中出现的名词有个大概印象即可。

第三阶段、精进

1、必看的2本书和选看的2本书

具体来说必看的两本书,或者说,必看的两本书和一章节是STL源码剖析、Effective C++、深度探索C++对象模型第三章

而选看的两本书:More Effective C++、深度探索C++第三章以外的部分

为什么要看这两本书和一章?

往近了说,面试会问,这是一个很真实的答案,没办法,人家面试官问啊。

是的,面试会问,稍微正规点的C++面试绝对会问STL库的,而且还可能会根据你的回答来看要不要继续深挖下去。

比如Vector扩容机制、unordered_map和map底层数据结构是什么、哈希冲突如何解决?

往远了说

《STL源码剖析》这本书带你走进C++下最知名的库的底层,一探其中奥秘,通过这本书和侯捷老师的STL源码视频,你会对STL有一个完全不一样的认识。

那些容器、库函数,会在你写代码和刷题的时候提供事半功倍的效果,值得看

《Effective C++》正是写给那些自以为“精通”了C++的人看的,相信我,C++绝对是一门高深莫测的语言,这本书只是带你管孔窥豹一点它的奥秘,值得看

《深度探索C++对象》,这是本好书,但内容太冗杂了,最重要的就就是其中第三章虚函数部分。

以前我就分享过,区分C++应聘者的水平高低最好的一个方法就是问他虚函数和STL部分知识点。

这两个部分的知识点,应聘者能答得不错的话,可以说明这个应聘者是学过一些C++的,C++语言的基本功没什么大问题的。

所以第三章虚函数部分,值得看

选看的两本书不是好书吗?不值得看吗?

不是,它们一样是很好的C++书籍,但是优先级可以往后放一放,找到工作再说。

先把最主要的必看的两本书籍看完再说,选看的两本书可以后期再看。

2、必看的三个视频和一个选看的视频

侯捷老师是台湾的C++大师,学习C++的应该没有不知道侯捷老师的。

以前还很有幸看过侯捷老师视频直播哈哈。

扯远了,必看的视频分别是侯捷老师的STL泛型编程、C++11新特性、内存管理与分析

选看的视频则是侯捷老师的程序的生前死后。

侯捷老师的全部课程,后台回复”侯捷“即可获取。

必看的三个视频重要性依次递减,最重要的就是STL泛型编程,最次的就是内容管理与分析。

其中STL泛型编程是帮助你理解《STL源码剖析》这本书;C++11新特性则是帮助你理解《C++ Primer 第五版》中的C++11新特性。

毕竟光看书,纯靠自己理解一些知识点很容易走错路或者钻牛角尖,有人带着会好很多。

第四阶段、实战

其实认真学完前三阶段已经差不多了,再去找个项目好好做做,思考钻研一下。

基本C++语言这块,你是没啥问题了,再了解一些数据结构与算法、操作系统、计算机网络、数据库的知识就可以出去可以出去找工作了。

如果你有志在C++这条路上走下去,那你可以接着往下看下去了。

一个好的C++开发工程师对网络编程一定是十分熟悉和了解的,毕竟学习C++不像学习Java那样,能在学习过程中通过搭建自己的网站或者做一些小Demo来获取自我满足感。

正常来说,你在学习C++的过程中,很长一段时间段内陪伴你的都是一个黑乎乎的命令框,网络编程阶段是为数不多你能够获得一些满足感的阶段。

推荐你在该阶段通过自主开发一个服务器来加深自己对网络编程的理解的认识。

我想很多人都会内心OS:”什么?烂大街的服务器项目?秀哥你没搞错吧,怎么推荐我去学这个?“

其实烂大街的东西,并不代表它不值得去做。

还有就是很多人在简历上写了Web服务器项目,但是实际上都是直接copy的github上的开源项目,可能看都没看懂就说是自己做的项目。

这样的人多了去了。。。

1、两本必看的书、一本选看的书

学习C/C++ Linux相关的网络编程,必看的两本书分别是《TCP/IP 网络编程》和《Linux高性能服务端编程》。

前者是本很好的书,原因就是手把手教你写代码,这是真的手把手教你写代码。。唯一不好的点就是书中的很多知识讲的太浅了,很多功能和原理都只是一笔带过,远远不如《Linux高性能服务端编程》讲的深。

我记的这本书好像一共24章左右,每章都是一个例子,也许大家可能被一些广告语上的”手把手教你XXX“坑怕了。

不要担心,这本书真的是手把手教你写各种网络通信的例子。。。

我以前在看这本书的时候专门去 github 上找了别人做好的笔记,一边看别人的笔记一边看书,最后又在别人的笔记基础上删删改改形成了自己的笔记,把书中的例子也敲了个遍。

图片

TCPIP网络编程笔记

看完《TCPIP网络编程》后,你应该去看有一下游双老师的《Linux高性能服务端编程》。

这本书讲的相当不错,是每一个从事服务端开发的人必备的一本书,《TCPIP网络编程》那本书告诉了你How,这本书则告诉你Why。

还有一本选看的书,是北师大陈硕老师的《Mudo:Linux 多线程服务端编程》。

这本书好,但是有点高深了,而且工业界用Mudo的也不是很多,如果不是从事服务端研发的同学可以不看这本书或者后期有需要了再来看这本书。

2、选看的一个视频

陈硕老师以前也在博览网录制了一个跟《Mudo:Linux 多线程服务端编程》配套的视频。

陈硕老师的视频,公众号后台回复”陈硕“即可领取。

就如同他的书一样,这个视频的观看门槛一样比较高,如果不是专门从事服务端开发的C++人员,可以不看这个视频的。

3、一个付费专栏

如果你自学能力比较强,能够按照安心啃下来《TCPIP网络编程》和《Linux高性能服务端编程》这两本书也可以。

如果不可以,或者还是习惯通过视频的方式学习,那你可以试试一个牛客网的Linux C/C++服务器的开发专栏,不过是付费的。

网上免费资源有很多,但免费的资源质量良莠不齐,最好看一些经典的或公认的比较好的视频。

相对而言付费的资源质量有保证一些,我以前在牛客网进行求职分享的时候,看过他们的这个Linux C/C++服务器的开发专栏,看了其中的课表和主要内容,该讲的内容基本都涉及到了,基本上把《TCPIP网络编程》和《Linux高性能服务端编程》这两本书汇总最主要的一些知识点都覆盖到了,质量还不错。

最主要的是有人带着你学,比自己蒙头苦学好多了。

地址:https://www.nowcoder.com/courses/cover/live/504?coupon=AcNi2gn

当然了,如果你想要理解的更深,我还是建议你去好好看《TCPIP网络编程》和《Linux高性能服务端编程》这两本书。

第五阶段、大成

1、书籍

第五阶段的东西其实更多时候是在工作中用到的,比如并发编程、模板元等,对应的书籍有《 C++沉思录 》、《 C++ 模版元编程 》以及《C++并发编程实战》。

在求职的时候基本不需要看这些书籍,这些都属于后期,等你真正拿到offer了,确定从事C++相关的工作了再去看这些书籍,尤其是C++并发编程这块,国内目前没什么好的C++并发编程的书籍,《C++并发编程实战》算是矮子里拔将军了。

除此之外,我建议你回归C++这门语言的本源,那就是再从头看一遍《C++ Primer 第五版》或者把它当做一本字典,就放在你的工位上,遇到不确定的当场翻。

2、视频

如果你能学到第五阶段,已经很强了,至少比我强的多了。。。

那我就会把我珍藏的几个优秀视频推荐给你吧,基本都是体系原理、分布式相关的视频,在下面这篇文章中:

我学编程全靠B站了,真香-国外篇(第三期)

结语

好的 C++开发者从来不怕找不到工作,即使你日后从事 Java/Go的工作,由于语言的原理都是相通的,所以你的学习成本会比别人小的多。

我仔细想了想自己这些年的语言史:大学写了一年的C语言和VB,三年的C#;研究生写了一年的Python,两年的C++;工作了开始写JavaScript、Go以及Vue、React这些框架。

你要问我最喜欢哪门语言?

毫无疑问,绝对是是C++!

不为什么,就是喜欢它的严谨!

图片

C++天下第一!!!

种一棵树的最好时间是十年前,其次就是现在,真心希望学弟学妹们以及一些想要转计算机的小伙伴们加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/124865.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL sever中表管理

目录 一、创建表: 1.1语法格式: 1.2示例: 二、修改表: 2.1语法格式: 2.2示例: 三、删除表: 3.1语法格式: 3.2示例: 四、查询表: 4.1语法格式&…

Mybatis的关联关系映射以及自定义resultMap三种映射关系

目录 经典面试题: 一,关联关系映射 二,具体步骤: 总结 前言: 今天我们来学习Mybatis的关联关系映射以及自定义resultMap三种映射关系,希望这篇博客可以帮助大家的学习工作!!&…

uniapp里textarea多行文本输入限制数量

uniapp里textarea多行文本域实现输入计数 <template><view class"inputs"><textarea class"text1" maxlength50 placeholder请输入... input"sumfontnum"></textarea><text class"text2">{{fontNum}}/…

对时序数据进行分类与聚类

我在最近的工作中遇到了一个问题&#xff0c;问题是我需要根据银行账户在一定时间内的使用信息对该账户在未来的一段时间是否会被销户进行预测。这是一个双元值的分类问题&#xff0c;只有两种可能&#xff0c;即会被销户和不会被销户。针对这个问题一般来说有两种解决策略。 …

【算法刷题-栈与队列篇】

目录 1.leetcode-232. 用栈实现队列2.leetcode-225. 用队列实现栈3.leetcode-20. 有效的括号&#xff08;1&#xff09;代码1&#xff08;2&#xff09;代码2 4.leetcode-1047. 删除字符串中的所有相邻重复项5.leetcode-150. 逆波兰表达式求值6.leetcode-239. 滑动窗口最大值7.…

2023高教社杯 国赛数学建模A题思路 - 定日镜场的优化设计

1 赛题 A 题 定日镜场的优化设计 构建以新能源为主体的新型电力系统&#xff0c; 是我国实现“碳达峰”“碳中和”目标的一项重要 措施。塔式太阳能光热发电是一种低碳环保的新型清洁能源技术[1]。 定日镜是塔式太阳能光热发电站(以下简称塔式电站)收集太阳能的基本组件&…

卡牌类游戏推荐,卡牌类三国手游排行榜

以下是小编要推荐给大家的关于卡牌类三国手游排行榜的内容。这里有来自各个历史阶段的名将和美女&#xff0c;让你体验最真实的三国战役。你可以将各种战略思维运用到其中&#xff0c;感受步步为营的喜悦&#xff0c;最终赢得战火纷飞的三国&#xff0c;如果想了解每个游戏的具…

【Leetcode刷题】哈希

本篇文章为 LeetCode 哈希模块的刷题笔记&#xff0c;仅供参考。 哈希表是一种使用哈希函数组织数据&#xff0c;以支持快速插入和搜索的数据结构。哈希表通过哈希函数通过将任意类型的数据映射到固定大小的数据&#xff0c;以实现快速查找和存储数据。C 中的无序容器 unorder…

YOLOv5改进算法之添加CA注意力机制模块

目录 1.CA注意力机制 2.YOLOv5添加注意力机制 送书活动 1.CA注意力机制 CA&#xff08;Coordinate Attention&#xff09;注意力机制是一种用于加强深度学习模型对输入数据的空间结构理解的注意力机制。CA 注意力机制的核心思想是引入坐标信息&#xff0c;以便模型可以更好地…

iOS App上架新规解析:如何进行App备案

摘要 本文将以iOS技术博主的身份&#xff0c;解析iOS App上架新规中的App备案要求。通过探讨备案对开发者和市场的影响&#xff0c;介绍备案流程和所需材料&#xff0c;帮助开发者了解如何进行App备案。 引言 近年来&#xff0c;移动应用市场蓬勃发展&#xff0c;但同时也存…

索尼 toio™应用创意开发征文|一步两步三步模拟浇花系统

目录 1.toio™介绍 2、创意分析 2.1 创意设计 2.2 创意落地 3、创意实现 3.1 环境安装 3.2 核心玩法 总结 1.toio™介绍 索尼的toio™是一款启发创意的机器人产品&#xff0c;旨在通过与真实世界的互动&#xff0c;为各年龄段的用户提供娱乐体验。这款产品具有高度的灵…

回归预测 | MATLAB实现PCA-BP主成分降维结合BP神经网络多输入单输出回归预测

回归预测 | MATLAB实现PCA-BP主成分降维结合BP神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现PCA-BP主成分降维结合BP神经网络多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现PCA-BP主成分降维算法结合BP神经网络多输入单输出回…

【完整代码】2023数学建模国赛C题代码--蔬菜类商品的自动定价与补货决策

C 题 蔬菜类商品的自动定价与补货决策 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c;商超通常会根据各商品的历史销售和需 求情况每天进…

Webpack5入门到原理

Webpack5学习 尚硅谷Webpack5新版视频教程 B站直达&#xff1a;https://www.bilibili.com/video/BV14T4y1z7sw 百度网盘&#xff1a;https://pan.baidu.com/s/114lJRGua2uHBdLq_iVLOOQ 提取码&#xff1a;yyds 阿里云盘&#xff1a;https://www.aliyundrive.com/s/UMkmCzdWsGh&…

如何免费获取CDH集群技术支持

CDH拥有全球70% 的Hadoop用户&#xff0c;在国内也拥有庞大的用户群体。由于Cloudera 和Hortonworks 合并后厂商政策调整&#xff0c;不再更新、不再免费、不再提供服务&#xff0c;众多企业用户生产集群面临着进退两难的窘境和未知的技术风险。 社区版不再更新。Cloudera所有…

移动硬盘或U盘无法弹出的解决方法

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 最近在红米本win11中总遇到“该设备正在使用中”而无法弹出硬盘的问题。 解法该问题的思路&#xff1a;先定位占用该设备的进程&#xff0c;然后结束该进程。 定位进程 既然设备被占用&#xff0c;那肯定…

ubuntu下Anaconda安装与使用教程

前言 好久没用anaconda了&#xff0c;还记得之前用anaconda的欢乐时光。pytorch和paddlepaddle(飞浆)&#xff0c;怀念&#xff0c;可生活&#xff08;换了ubuntu系统之后&#xff09;教会了我残忍&#xff08;可能很难有机会再用windows的anaconda了&#xff09;。找个时间&a…

Java高并发系列: 使用wait - notify实现高效异步方法

1. 背景 在项目开发中, 通常会有异步执行操作, 例如: 提交一个异步清空一系列数据库中ID ${_id} 的记录, 这个时候通常的做法是主线程将任务添加到一个异步队列中, 后台维护一个线程不断地循环扫描这个队列, 如果有需要执行的任务, 则执行相应的逻辑. 如下图所示: 2. 一个简…

qt day 6

登录界面 #include "window.h" #include<QDebug> #include<QIcon> Window::Window(QWidget *parent) //构造函数的定义: QWidget(parent) //显性调用父类的构造函数 {//判断数据库对象是否包含了自己使用的数据库Student.dbif(!db.contains(&…

Spring Cloud--从零开始搭建微服务基础环境【二】

&#x1f600;前言 本篇博文是关于Spring Cloud–从零开始搭建微服务基础环境【二】&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;…