C++学习路线

C++的上限非常高,但是分阶段性逐步学习是没有问题的,一步步的学,慢慢领悟,总有一天会熟练掌握的。

C++ 语言的学习其实就三个阶段就好了:

(1) 入门阶段

这个阶段的学习主要是熟悉 C++ 语言的语法知识。

在这个阶段要做到理解对象的思想方法,培养自己的编程思维能力。

目标是可以开发一些像贪吃蛇这种简单的控制台小程序。

(2) 进阶阶段

进阶阶段的学习主要是要掌握 C++ 标准模板库(STL)、设计模式、数据结构基础以及 UI 界面开发、数据库开发等高级技能。

在这个阶段是要达到可以开发复杂的程序,达到工作中 C++ 开发程序员的能力。

(3) 应用阶段

这个是实战阶段,要具备一定的综合性应用软件开发能力。

这个阶段就是多观摩别人的项目,看人家的写法,模仿项目,学习其中的思想,一点点的积累,一步步形成自己的东西,厚积而薄发,慢慢你就会发现你也可以了。

注意!下面都是超极干的干货

一、入门阶段
入门阶段的学习主要是熟悉 C++ 语言的语法知识。

除了基础的变量、常量、关键字、数据类型、运算符、数组、函数、指针、结构体外,还要学习 C++ 的面向对象编程思想、命名空间 namespace、引用、函数扩展、类的封装、构造和析构、继承、多态、异常处理等内容。

语言部分的学习建议不要拖太久,一定要规划好时间,一鼓作气,不然自己容易泄气!

1.视频推荐
此时同学们应该是毫无基础或者稍微有点 C 语言基础的小白。

对于小白来说,不建议上来就看书,因为干看看不懂,容易劝退。

可以先从视频教程开始,教材为辅。

我当初 C++ 视频是在 b 站看的黑马程序员的 C++ 课程(我不是他们的托儿

从 0 到 1 教 C++,三百多个小节,每个小节时间都不是很长,除了个别几个在二十多分钟,其余的基本上都在几分钟到十几分钟之间。

每一个阶段都会有相应的小项目教学,对初学者来说是很友好的。

看视频的时候不是看看就过去了,编程毕竟是门一门手艺活,孰能生巧。

建议一边看,一边将视频中的示例或者小项目教学自己也实现一下,刚开始不会可以照着敲,比只看不动手强一百倍。

此外,我最近发现深蓝学院出品的「C++ 基础与深度解析」课程也很不错,深入基础,讲解语法细节。从基础语法讲到 Modern C++,从面向过程开发到新编程范式,对大家学习 C++ 很有帮助。

2.书籍推荐
入门阶段的书籍为辅,怎么为辅呢?

就是视频看完一个阶段,然后就可以去看书上对应阶段的内容,这样看书,一方面看书的时候会很快,容易理解,另一方面可以印证自己在看视频的时候一些不太理解的地方。

入门阶段推荐两本书,一本薄的,一本厚的,都是超级经典的书籍。

《Essential C++》

《Essential C++》是一本内容不多但很实用的 C++ 入门书籍,这本书强调的是快速上手与理解 C++ 编程。

主要围绕一系列逐渐复杂的程序问题,以及用以解决这些问题的语言特性展开讲解。

你不只学到 C++ 的函数和结构,也会学习到它们的设计目的和基本原理。

《C++ Primer Plus》&《C++ Primer》

很多人 C++ 入门的时候会推荐《C++ Primer Plus》,很多人 C++ 入门的时候会推荐《C++ Primer Plus》,我当年先看的也是这本书,当年 C 语言除了学校的教材,我看的就是《C Primer Plus》。

这本书怎么说的,讲的超级全面,甚至有点过于全面了,书中的例子和课后习题循序渐进,不夸张的讲所有的知识点可能都囊括进去了,作者可能为了怕大家学不明白,讲的巨细,甚至我感觉都有点啰嗦,造成这本书巨厚,字又巨小,看完感觉近视又加了几度。

当时我学习的时候《C++ Primer》还是第 4 版,现在都到第 5 版了!

《C++ Primer》堪称 C++ 语法学习的最权威书籍,非常全面地讲解了C++的语法以及C++11的各种新特性,看完之后真的帮助特别大!

如果有时间建议至少看两遍以上!时面向 C++ 语言的初学者,是一本很友好的自学教材!而且例程和习题丰富,相信认真读过之后,可以完成 C++ 语言入门这个目标!!

如果你在这个阶段觉得差不多了,可以尝试找一些在线的练习题做下,如果你不知道去哪找,那可以去下面这个初学者练习编程巩固语法的绝佳去处。

它有专门的 C++ 入门编程练习题,专门练习语法和大家的编程逻辑,从变量、数据类型这些基础语法,到数组、字符串这种复合类型,再到函数、面向对象,以及在 C++ 中很重要的 STL,最后再来点综合练习,差不多 70 多道题,够你练的。


除了编程练习以外,如果你想知道你自己的知识点掌握的如何,也可以做一下专项练习。

以类似试卷的形式,可以很好的检验自己的学习成果,不管是对之后应对考试,或者应付笔试面试都很有帮助。

二、进阶阶段
在进阶阶段,你已经对 C++ 有一定的认知了。

这个时候我们可以深入学习 C++ 标准模板库(STL)、设计模式、数据结构基础以及 UI 界面开发、数据库开发等高级技能。

1.书籍推荐
《C++标准程序库》

关于 STL,可以先读这本侯捷老师翻译的《C++ 标准程序库》。

通过这本书对STL有个基本认识,学会使用 STL。


《STL源码剖析》

读完 《C++ 标准程序库》,就可以来读这本侯捷老师编写的《STL源码剖析》了。

这本书建议必读!

这本书讲解了 C++ 底层实现,主要包括 C++ 底层内存管理、各种容器的数据结构实现、常见算法的实现等。

可以帮助深入理解C++底层,同时也是对数据结构的复习和巩固。

《Effective C++》

《Effective C++》讲了 C++ 编程的 55 条准则,提高你的 C++ 编程质量,也是侯捷老师翻译的!

这本书有助于梳理在编写 C++ 程序时的一些常见错误和注意事项,也是面试常考的。

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

《深度探索C++对象模型》这本书讲解了C++面向对象特性的底层实现机制。

侯捷老师翻译的,看完这本书,对C++面向对象的理解帮助极大,建议必读!

2.视频推荐
不知道大家注意了没,上面我推荐了四本书,都和一个人有关:侯捷老师。

书要么是他翻译的,要么是他写的,C++ 领域 YYDS!同意吧?

侯捷老师当然也有讲课,针对书都有对应内容的视频课程!

三、应用阶段
其实编程语言就是要多练,怎么多练,就是代码量。

自己多写,然后多观摩别人的项目,看人家的写法,模仿项目,学习其中的思想,一点点的积累,一步步形成自己的东西,厚积而薄发,慢慢你就会发现你也可以了。

面经可以参考c++面经 总结的很详细
全部评论
学历背景不好尽量不要搞cpp
1 回复 分享
发布于 2024-12-09 21:18 黑龙江

相关推荐

一、初识零声​本人对linux/C/C++的技术栈比较感兴趣,在视频平台,社交软件上刷到相关话题时,都会顺带点击观看一段。直到某一天晚上在bilibili上刷到了有两个人坐在一个虚拟背景前面,视频界面上醒目的内容简约介绍,还是关于C/C++方向的内容,我自然会顺手点开观看。观看几个视频后,我认为这种高信息浓度的视频非常符合我的口味,视频中没有什么多余的元素,背景板简约大气,视频大部分内容都是king老师在给出自身的看法,虽然是一家之言,但是对于我这个对行业没什么了解的在读大学生来说,已经是一种很方便的信息获取方式了,而且视频内容的干货和一些中肯建议也不在少数,在短短几分钟到十几分钟的时间内,可以了解到某个行业的某些方向目前的情况,了解到走出学校进入职场的转变,以及最为重要的计算机学习建议,(同时两位老师坐在摄像头前回答问题这种朴素的视频界面设计,也感觉更有亲和力,还可以从老师的一些肢体动作,微表情等方面推测出一些额外信息),这些因素都建立了我个人对零声的初步好印象。二、进入零声​大二下学期开学时,由于大三要为实习做准备,加上大二上学期做过的一些小尝试,java后端,unity游戏开发等小demo都做过,所以我一开始是打算自学,并不打算报培训班。虽然万物皆可自学,但是对我来说计算机自学难度还是太大。在bilibili上看完了JUC并发编程,Maven入门,JVM等视频,并跟着视频敲了一遍代码后,准备开始学习springboot框架,做一个项目试试水。然而bilibili上的免费教学视频固然很多,但是很多都不成体系,我不知道我学了这些东西究竟能用在哪,项目示例也基本烂大街,跟着敲一遍很容易,但是做完脑子还是空空的,感觉仅限于敲了一遍,把代码混了个眼熟。发现似乎几个月的时间好像没有什么产出,想上Github上找一个开源项目做一做,发现连环境都要配好几天,大量的代码也无法在短期内梳理完毕,学完了很多课程,发现面对实战的时候依然手足无措,我相信这也是很多自学人士的痛苦。​从那时候不得不思考这种学习方式是否正确,是否适合我。但是时间不等人,我意外从我同学处了解到他报名了一个培训班,说效果还不错,课程内容有点难,但是很有收获,技术栈也是跟C/C++相关,这很符合我当时的期望,一是时间紧迫,二是喜欢使用C/C++语言,我便向他询问了课程,发现就是零声教育,没有某硅谷,某黑马等培训班那种铺天盖地的广告和夺目的海报,零声的大纲和宣传里全是朴素的字,有一种去惯了高档餐厅最后进了一家路边小馆的感觉,加之之前在b站上的印象,我认为是一个可以信任的机构。在此机缘下我加入了零声教育。三、零声学习感受零声服务的模式是视频课程+项目实践+阶段模拟面试视频课程感受​视频为录播方式,对于我个人来说,录播其实远比直播划算,跟着直播手敲代码,思路肯定没有老师清晰,重点在于学,这会导致一旦节奏对不上,代码就敲不完,这时候是补代码呢?还是接着听呢?无论哪种方式,都需要直播课后继续看录播花时间学习理顺思路,那还不如直接看录播,按照自己的节奏看。​对于视频内容,时常基本在2h左右,目前主要学习了一些mysql连接,DNS协议与请求,HTTP请求,TCP服务器,并发调试等,主要集中在高性能网络部分。课程内容基本是实操,由老师手把手教学,从配置环境到调试完bug,这是一个很好的学习通路,至少不至于在学到一半突然自己卡壳,削减学习热情。课程里使用的某些技术也会被使用到后续的项目里,可以说是设计的恰到好处了。项目实践​目前已实现了一个自研KV存储系统(键值对存储系统,仿Redis),项目实践阶段,也会由老师带入门,先打造好基础框架,保证最基本的功能可以运行。真正的挑战在于后续的迭代,项目迭代过程中,老师会在阶段交付的时候提出需求,给出交付时间,再验收,再迭代......而每次的需求都可能包含以前课程学过的东西,也可能是比较陌生的需求,这也是一个极好的锻炼,而且在有限的时间内,面对新的技术点,必须改变学生学习的思维,即先把资料看完,然后再动手做一个小demo,然后再运用于项目中这种完美主义式的学生思维。学以致用,乃至用以致用。在做项目期间,我认为重点有两个,一是学到了什么新东西,二是有没有产出。king老师在b站上,每当被问到关于学习方法的问题,总会一再强调一个产品化的概念,把一个想法做成一个产品,逐步迭代,逐渐学习。而这个KV存储系统让我能深刻感受到这句话的含金量。从项目第一次验收,king老师评价我的成果不像一个产品,像一个demo,到现在已经逐渐可以作为一个微型系统直接使用,性能也相对平稳。​期间面临的挑战也极多,比如网络连接,是一请求一线程的方式,还是用IO多路复用让性能腾飞?即使使用了io_uring或者epoll,也会出现性能瓶颈,怎么知道性能瓶颈在哪?是凭直觉还是用火焰图?知道了瓶颈,怎么优化,如果批量提交IO请求,那面对单个IO网络可能阻塞怎么办,对于每个连接的上下文,接收发送缓冲区如何管理?是用libc的malloc/free还是tc_malloc/je_malloc等成熟的内存池,是对每个缓冲区都重复分配再释放,还是要引入一个连接池管理内存,实现复用?而且我们知道,redis是一个高性能的中间件,那么如此高性能的操作与响应,数据传输用UDP还是TCP还是用用户态协议栈,大文件传输怎么提高效率?RDMA优势是什么?RDMA的异步操作是一大特点,如何调整逻辑保证在异步调用的场景下数据收发正常?为什么单次POST请求有极高的风险跑出错误的预期,为什么流水线RECV/POST的方式却可以正确传输?对于底层存储引擎,选用哪种数据结构比较合适?比如hash表如何解决hash冲突?hash表扩容策略如何选择,是选择直接一次性搬运所有数据,造成延迟尖峰,还是选用rehash,平稳过渡?对于数据的持久化,分布式系统如何保证数据安全性和一致性,如何高效加载内存数据?主从同步直接传文件还是传指令?主节点有源源不断的用户流量,同步操作如何不阻塞用户流量进行?主从同步过程中,异步传输如何保证数据的完备性?ebpf是什么技术?为什么ebpf转发性能比使用传统UDP/TCP性能好?resp协议的优点是什么?如何解析resp协议?如何支持多指令操作?如何支持pipeline模式?解析的数据如何传递给指令执行函数?测试案例怎么写?这些内容课程中不可能讲的明明白白面面俱到,但是老师的服务就在于给出方向(这些技术点方向以前可能都闻所未闻),剩下的可以看课程,网络冲浪搜集资料,借助ai等方式,加深自己对技术点的理解,学习新的技术点。​可以说,大到一个模块功能的并入系统,可能运行不了,甚至会影响其他功能的正常使用,小到绞尽脑汁算计如何榨取性能,哪怕优化几处strcmp,优化几个strcpy为memcpy,删去几个strlen的使用,都是一次性能的进步。模拟面试以项目实践的模拟面试为例,一般是演示成果。老师站在客户的角度,有可能要求的演示方式与我们开发时的测试方式不同,便会暴露出系统的不完善,从中也可以了解到项目问题的优先级,哪些是直接影响使用,优化刻不容缓?哪些是可以等并入新功能再逐步调整?有时也会询问某个功能实现的大致思路,为什么这么实现?可以说这个模拟面试,就是在为将来的正式面试脱敏,熟悉面试的场景,调整技术表达.........总结​对于付费学习的问题自然是仁者见仁智者见智,在零声学习的这几个月中,收获颇丰,在项目实践中,可以很明显地感觉到,真正把一个想法产品化,期间的技术点,策略,乃至架构设计,自身都会得到很大的提升,而且也会发现实践和书本知识完全不是一回事,书本会告诉你epoll,io_uring性能好,但不会告诉你如何调整逻辑以适配自己的应用场景,解决性能瓶颈,书本会告诉你hash表的查找时间复杂度是O(1), 但不会告诉你即使是O(1),也被某些昂贵的系统调用拖慢速度,如何舍弃掉这些昂贵的系统调用。这是大学生走出课堂要上的第一节课,逐步与工业界接轨。付费课程,买的就是人工的服务,买的就是成体系的课程设计,至少在零声的学习中,我不必焦虑接下来学什么,学完究竟有没有用,如何产出,有引路人规划学习路线,这是一份极大的安心,安心专注于学习技术,增加产出,专业的事情应该交给专业的人做。
点赞 评论 收藏
分享
评论
5
56
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
4471次浏览 48人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
16917次浏览 137人参与
# 米连集团26产品管培生项目 #
7385次浏览 226人参与
# 沪漂/北漂你觉得哪个更苦? #
1616次浏览 41人参与
# 你的实习产出是真实的还是包装的? #
3230次浏览 54人参与
# 春招至今,你的战绩如何? #
16140次浏览 146人参与
# 巨人网络春招 #
11543次浏览 228人参与
# HR最不可信的一句话是__ #
1107次浏览 32人参与
# AI面会问哪些问题? #
971次浏览 24人参与
# 你做过最难的笔试是哪家公司 #
1306次浏览 23人参与
# AI时代,哪个岗位还有“活路” #
2930次浏览 53人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152945次浏览 889人参与
# 简历第一个项目做什么 #
32180次浏览 363人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
8029次浏览 43人参与
# XX请雇我工作 #
51164次浏览 171人参与
# 简历中的项目经历要怎么写? #
311119次浏览 4271人参与
# 投格力的你,拿到offer了吗? #
178382次浏览 891人参与
# 你最满意的offer薪资是哪家公司? #
77008次浏览 375人参与
# AI时代,哪些岗位最容易被淘汰 #
64819次浏览 891人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187635次浏览 1123人参与
# 你怎么看待AI面试 #
180882次浏览 1318人参与
# 正在春招的你,也参与了去年秋招吗? #
364407次浏览 2642人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务