C++学习路线

本篇只讲述我的经验,有不同看法的大伙一起评论区讨论
1. 学徒阶段:C++语法,包括C++11重要特性,比如线程、智能指针之类的。此阶段前面的基础语法,就是条件语句、指针、结构体、类等那些一定要扎实,可以多练习语法题来巩固,比如牛客网上就可以练习,后面的新特性智能指针、线程之类的可以简单有个印象即可。对应资料我推荐b站码农论坛。

2. 入门阶段:这一阶段需要学习数据结构、计算机网络、操作系统。学习数据结构的时候配合刷题来加深自己对数据结构的理解,通过前期扎实的语法基础,实现基本的数据结构。计算机网络和操作系统大家可以同步进行学习,有能力的可以训练对应的代码,比如计算机网络对应网络编程,操作系统对应Linux系统编程,这个阶段你将对网络有一个大概的认知,对学徒阶段的线程会有新的理解,对进程也会有新的理解。这一阶段主要是开始刷题(算法题),并且对计算机有一个初步的认识。(这些内容我看了很多教程,也跟着学校认真学了,就不推荐了,大家只要认真学就可以了,忘了回头补充一下即可)

3. 实习门槛阶段:这一阶段需要学习网络编程、Linux系统编程,学会写makefile或者cmake,使用gdb等。也许还会要求看对应的书籍,比如游双的那本高性能服务器,APUE等。这一阶段就是需要写代码练习,熟悉各种api如何操作,深挖一些细节。比如网络编程那几个api的细节,进程线程的区别、进程通信、线程通信等。可以参考一些面经找到一些答案。对于编写makefile或者cmake时,需要你熟悉计算机组成原理的编译和链接,希望大伙对于这方面要弄清楚,编译四个阶段做了什么事情之类的(这个很重要)。我还是推荐b站码农论坛。

4. 跨越实习门槛阶段:这一阶段在我看来就是代表你已经有了不错的基础知识了,可以开始做项目,并且之后可以拿到offer了。这一阶段主要的事情就是做项目,要把之前所有的知识串起来,可以增添数据库等内容在你的项目之中,可以让你对后台软件开发有了一个大概的认知。或者也可以做一些轮子项目,比如学习网络编程的时候深入各种模式,什么阻塞同步、阻塞异步、非阻塞异步之类的,可以学习陈硕大佬的muduo网络库。webserver就是游双大佬那本高性能服务器里的东西,只不过作为项目来说太儿戏了,学习熟悉api还可以。(项目大伙自己找吧,就不推荐了,要不说我是卖课的了)

5. 扩展阶段:经历以上四个阶段,你手上有2 - 3个项目,你就已经达到找工作的要求了。如果你还有时间就可以补充相关行业知识了,比如你可以学习一下Qt、音视频、嵌入式之类的,了解一下你感兴趣行业的知识。

最后再多说一句,后台开发是通用路线,公司大多不会要求你很多特定领域知识,基础一定是最重要的,八股很重要,大家要深入理解,不是去背,弄懂它,如果又想进的公司需要特定知识,你就按照扩展阶段去补充就可以了。当然这只是我的经验,如果你一开始就打定主意要干什么行业,你可以参考b站程序员老秦给出的学习路线去学习。各位加油!
全部评论
佬我现在27届大二在读大一玩了一年目前才刚刚学新特性好绝望一天就学2 3小时感觉自己效率低又爱玩好焦虑
3 回复 分享
发布于 2024-10-21 15:33 福建
学习完linux 基础命令 要学什么呢 从sokcte到epoll吗 好迷茫呀 大佬 路线还不是很明白 现在学了cpp基础和stl c11的特性 准备学还有利奴
1 回复 分享
发布于 2025-11-28 14:09 江西
你好,码农那个30多点c++课程入门够了吗?还需要看C++ primer plus吗?
1 回复 分享
发布于 2024-11-16 11:51 广东
C++走后端开发死路一条
1 回复 分享
发布于 2024-11-05 17:42 广东
想问一下c++项目有什么推荐吗
1 回复 分享
发布于 2024-10-21 11:32 山东
佬 能看看我主页吗 我接下来应该怎么做😭
点赞 回复 分享
发布于 01-30 01:25 广东
大佬我感觉码农论坛他的项目代码好多都写不出来,但是能理解,自己写就是写不出来,好多都是跟着敲的?该怎么提升呀?感觉自己像在抄代码一样
点赞 回复 分享
发布于 2025-08-13 20:49 新加坡
26届刚开始搓 muduo 来得及吗
点赞 回复 分享
发布于 2025-04-20 22:08 广东
什么乱七八糟的,你这纯C++后端路线,岗位屈指可数。其他方向你是一句也不说呗
点赞 回复 分享
发布于 2024-12-07 23:44 上海
佬 现在研2 我们实验室都是python找算法岗 但是算法一般都要双9 今年几乎全军覆没 准备开始学c++ 把c++ primer跟着黑马看完了 接下来不知道是搞嵌软还是去搞后端开发
点赞 回复 分享
发布于 2024-11-19 11:42 湖北
请问码农论坛的那两个项目够用吗,特别是实现reactor服务器那个,投后台开发或者基础架构别的方向够不够有亮点,佬学长给点建议吧
点赞 回复 分享
发布于 2024-11-09 21:43 陕西
投了200家了,没几个面试的,真不给双非机会啊😭😭😭
点赞 回复 分享
发布于 2024-10-21 14:23 辽宁
哥,推荐点网课
点赞 回复 分享
发布于 2024-10-20 18:40 黑龙江
大伙还想知道什么,如果我知道的话,后续我可以继续出
点赞 回复 分享
发布于 2024-10-19 20:02 广东

相关推荐

一、初识零声​本人对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),也被某些昂贵的系统调用拖慢速度,如何舍弃掉这些昂贵的系统调用。这是大学生走出课堂要上的第一节课,逐步与工业界接轨。付费课程,买的就是人工的服务,买的就是成体系的课程设计,至少在零声的学习中,我不必焦虑接下来学什么,学完究竟有没有用,如何产出,有引路人规划学习路线,这是一份极大的安心,安心专注于学习技术,增加产出,专业的事情应该交给专业的人做。
点赞 评论 收藏
分享
评论
37
209
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务