百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

经验分享:熬夜肝了这一份C++开发学习路线

mhr18 2025-01-26 23:23 20 浏览 0 评论

写之前先来回答几个问题

1、C++ 后台开发有哪些岗位?

C++ 后台开发的岗位还是很多的,例如游戏引擎开发,游戏服务端开发,音视频服务端/客户端开发,数据库内核开发等等,而且 C++ 也能用来写深度学习,做硬件底层这些。

总之,C++ 后台开发的岗位,还是很丰富的,大家不用担心找不到合适的岗位。

2、C++ 后台开发岗位需求量大吗?

一般大公司大需求量会多一些,小公司需求量较少。

说到岗位需求量,那肯定是 Java 的岗位需求量是最大的,当然,学 Java 的人也是最多的(太卷了),假如你要学习 C++,那我觉得你要定位大公司可能会好一点,进大公司反而会比 Java 容易。

下面跟大家说一说 C++ 后台开发学习路线,为了方便大家做规划,每一个模块的学习,我都会说下大致的学习时间


一、C++ 基础(3-6个月)

假如你有 C 语言基础,那么这块感觉花个三四个月就能拿下了,假如你是零基础的,估计还得学两三个月的 C 语言,也就是说,得花半年时间才行。

C++ 这块,重点需要学习的就是一些关键字面向对象以及STL 容器的知识,特别是 STL,还得研究下他们的一些源码,下面我总结一下一些比较重要的知识(其实是根据面试结果来挑选)。

指针与引用的区别,C 与 C++ 的区别,struct 与 class 的区别

struct 内存对齐问题,sizeof 与 strlen 区别

面向对象的三大特性:封装、继承、多态

类的访问权限:private、protected、public

类的构造函数、析构函数、赋值函数、拷贝函数

移动构造函数与拷贝构造函数对比

内存分区:全局区、堆区、栈区、常量区、代码区

虚函数实现动态多态的原理、虚函数与纯虚函数的区别

深拷贝与浅拷贝的区别

一些关键字:static, const, extern, volatile 等

四种类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast

静态与多态:重写、重载、模板

四种智能指针及底层实现:auto_ptr、unique_ptr、shared_ptr、weak_ptr

右值引用

std::move函数

迭代器原理与迭代器失效问题

一些重要的 STL:vector, list, map, set 等。

容器对比,如 map 与 unordered_map 对比,set 与 unordered_set 对比,vector 与 list 比较等。

STL容器空间配置器

等等。

根据书来学就可以了,然后学到一些重点,可以重点关注一下。

书籍推荐:

1、《C++Primer》,这本书内容很多的,把前面基础的十几章先看一看,不用从头到尾全啃,后面可以字典来使用。

2、《STL 源码剖析》,必看书籍,得知道常见 STL 的原理,建议看个两三遍。

3、《深度探索C++对象模型》,这本主要讲解面向对象的相关知识,可以帮你扫清各种迷雾。

视频推荐:可以在 B 站侯捷老师讲的视频,不适合初学者,讲的大部分都是进阶


二、计算机网络(1-2个月)

无论你是从事啥岗位,无论是校招还是社招,计算机网络基本都会问,特别是腾讯,字节,shopee,小米等这些非 Java 系的公司,问得更多。这块认真学,一个半月就可以搞定了。

计算机网络就是一堆协议的构成,下面是一些比较重要的知识点,学的时候可以重点关注下。

物理层、链路层

MTU,MAC地址,以太网协议。

广播与 ARP 协议

网络层

ip 地址分类

IP 地址与 MAC 地址区别

子网划分,子网掩码

ICMP 协议及其应用

路由寻址

局域网,广域网区别

传输层(主要就是 TCP)

TCP首部报文格式(SYN、ACK、FIN、RST必须知道)

TCP滑动窗口原理,TCP 超时重传时间选择

TCP 拥塞控制,TCP 流量控制

TCP 三次握手与四次挥手以及状态码的变化

TCP连接释放中TIME_WAIT状态的作用

SYN 泛洪攻击

TCP 粘包,心跳包

UDP 如何实现可靠传输

UDP 与 TCP 的区别

UDP 以及 TCP 的应用场景

应用层

DNS 原理以及应用

HTTP 报文格式,HTTP1.0、HTTP1.1、HTTP2.0 之间的区别

HTTP 请求方法的区别:GET、HEAD、POST、PUT、DELETE

HTTP 状态码

HTTP 与 HTTPS 的区别

数字证书,对称加密与非对称加密

cookie与session区别

输入一个URL到显示页面的流程(越详细越好,搞明白这个,网络这块就差不多了)

书籍推荐:零基础可以先看《图解HTTP》,当然,也可以直接看《计算机网网络:自顶向下》这本书,这本书建议看两遍以及以上,还有时间的可以看《TCP/IP详解卷1:协议》。


三、操作系统(1-2个月)

操作系统和计算机网络差不多,不过计算机网络会问的多一些,操作系统会少一些,学到时候如果可以带着问题去学是最好的,例如

咋就还有进程和线程之分?为什么要有挂起、运行、阻塞等这么多种状态?怎么就还有悲观锁和乐观锁,他们的本质区别?

进程咋还会出现死锁,都有哪些处理策略?进程都有哪些调度算法?

虚拟内存解决了什么问题?为啥每个进程的内存地址就是独立的呢?

为啥 cpu 很快而内存很慢?磁盘怎么就更慢了?

总结起来大致:

1、进程与线程区别

2、线程同步的方式:互斥锁、自旋锁、读写锁、条件变量

3、互斥锁与自旋锁的底层区别

4、孤儿进程与僵尸进程

5、死锁及避免

6、多线程与多进程比较

7、进程间通信:PIPE、FIFO、消息队列、信号量、共享内存、socket

8、管道与消息队列对比

9、fork进程的底层:读时共享,写时复制

10、线程上下文切换的流程

11、进程上下文切换的流程

12、进程的调度算法

13、阻塞IO与非阻塞IO

14、同步与异步的概念

15、静态链接与动态链接的过程

16、虚拟内存概念(非常重要)

17、MMU地址翻译的具体流程

18、缺页处理过程

19、缺页置换算法:最久未使用算法、先进先出算法、最佳置换算法

书籍推荐:《现代操作系统》


四、MySQL(一个月左右)

数据库一般主流的有 MySQL 和 Oracle,不过建议大家学习 MySQL 了,因为大部分公司都是使用 MySQL,也是属于面试必问,而且工作中 MySQL 也是接触的最多的,毕竟工作 crud 才是常态。

下面这些是我认为比较重要的知识点:

1、一条 sql 语句是如何执行的?也就是说,从客户端执行了一条 sql 命令,服务端会进行哪些处理?(例如验证身份,是否启用缓存啥的)。

2、索引相关:索引是如何实现的?多种引擎的实现区别?聚族索引,非聚族索引,二级索引,唯一索引、最左匹配原则等等(非常重要)。

3、事务相关:例如事务的隔离是如何实现的?事务是如何保证原子性?不同的事务看到的数据怎么就不一样了?难道每个事务都拷贝一份视图?MVCC 的实现原理(重要)等等。

4、各种锁相关:例如表锁,行锁,间隙锁,共享锁,排他锁。这些锁的出现主要是用来解决哪些问题?(重要)

5、日志相关:redolog,binlog,undolog,这些日志的实现原理,为了解决怎么问题?日志也是非常重要的吧,面试也问的挺多。

6、数据库的主从备份、如何保证数据不丢失、如何保证高可用等等。

7、一些故障排查的命令,例如慢查询,sql 的执行计划,索引统计的刷新等等。

对于 2-4 这四个相关知识,面试被问到的频率是最高的,有时候面试会让你说一说索引,如果你知道的多的话就可以疯狂扯一波了,记得我当时总结了一套扯的模版:

先说从 B 树角度说为啥索引会快-》趁机说一下索引的其他实现方式-〉不同引擎在索引实现上的不同-》系统是如果判断是否要使用索引的-〉明明加了索引却不走索引?

只有你对各种数据结构和索引原理都懂,你才能扯的起来,对于事物和锁也是,当时面试官问了我事务是如何保证一致性的,刚好我研究过 ,redolog,binlog,undolog 这些日志,然后和面试官扯了好久。

书籍:《MySQL必知必会》和《MySQL技术内幕》


五、网络编程(一个月左右)

网络编程这块,有些公司还是问的挺多的,特别是 IO 多路复用,同步非同步 IO,阻塞非阻塞啥的,当时面腾讯基本每次都问,,,,学习 C++ 这块还是要重视一下,下面我说一下比较重要的吧。

1、IO多路复用:select、poll、epoll的区别(非常重要,几乎必问,回答得越底层越好,要会使用)

2、手撕一个最简单的server端服务器(socket、bind、listen、accept这四个API一定要非常熟练)

3、线程池

4、基于事件驱动的reactor模式

5、边沿触发与水平触发的区别

6、非阻塞IO与阻塞IO区别

书籍:可以看一看《Unix网络编程》


六、数据结构与算法(3-6+月)

数据结构与算法,我觉得是需要花最多时间的,因为算法这块,很难快速突击,从基础数据结构与各种算法思想到 leetcode 刷题,如果你零基础,那真的需要挺久的,不过你有一些基础,可能会快一点,看你想掌握到什么程度了。

我这里大致说一下学习流程吧

1、先学基础数据结构与算法:链表,队列,栈,哈希表,二叉树,图,十大排序,二分查找。

2、之后了解一下算法思想:递归,深度与广度搜索,枚举,动态规划这些。

入门数据结构推荐《数据结构与算法分析:c语言描述版》这本书,学的过程中,也可以配合刷题,一般刷《剑指 offer》 + LeetCode 刷个两三百就差不多了,没时间到就先刷 《剑指 offer》吧。


七、项目(2个月左右)

项目是必须要做的了,不过 C++ 的会少一些,至少没那么多培训机构视频可以白嫖,不过大家可以跟着书,或者 github 上找或者自己花点钱买一个付费视频吧。

推荐自学项目:实现 http服务器( github 一堆源码、音视频服务器(慕课网))、实现一个聊天系统(这块有些书就有附带)


八、学习顺序

我建议有时间的,可以先入门下 C++ ,然后就是开始学习数据结构与算法,算法这块长期保持刷题,然后一边深入学习 C++,之后学习计算机网络,操作系统,在之后学习网络编程,项目这块放到最后面。

如果时间比较紧的,算法这块可以放松一点,C++ 和项目可以优先,计算机基础可以突击学习,通过视频或者别人总结的笔记突击

总之,这一套学下来,感觉需要一年了,当然,这个不好衡量,还得看你自己掌握了哪些基础。


另外的话为了帮助大家,轻松,高效学习C语言/C++,我给大家分享我收集的资源,从最零基础开始的教程到C语言项目案例,帮助大家在学习C语言的道路上披荆斩棘!可以来我粉丝群领取哦~

编程学习书籍分享:

编程学习视频分享:

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)最重要的是你可以在群里面交流提问编程问题哦!

对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!

相关推荐

SpringBoot 各种分页查询方式详解(全网最全)

一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...

《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略

《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...

LoadRunner(loadrunner录制不到脚本)

一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...

Redis数据类型介绍(redis 数据类型)

介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...

RMAN备份监控及优化总结(rman备份原理)

今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...

备份软件调用rman接口备份报错RMAN-06820 ORA-17629 ORA-17627

一、报错描述:备份归档报错无法连接主库进行归档,监听问题12541RMAN-06820:WARNING:failedtoarchivecurrentlogatprimarydatab...

增量备份修复物理备库gap(增量备份恢复数据库步骤)

适用场景:主备不同步,主库归档日志已删除且无备份.解决方案:主库增量备份修复dg备库中的gap.具体步骤:1、停止同步>alterdatabaserecovermanagedstand...

一分钟看懂,如何白嫖sql工具(白嫖数据库)

如何白嫖sql工具?1分钟看懂。今天分享一个免费的sql工具,毕竟现在比较火的NavicatDbeaverDatagrip都需要付费才能使用完整功能。幸亏今天有了这款SQLynx,它不仅支持国内外...

「开源资讯」数据管理与可视化分析平台,DataGear 1.6.1 发布

前言数据齿轮(DataGear)是一款数据库管理系统,使用Java语言开发,采用浏览器/服务器架构,以数据管理为核心功能,支持多种数据库。它的数据模型并不是原始的数据库表,而是融合了数据库表及表间关系...

您还在手工打造增删改查代码么,该神器带你脱离苦海

作为Java开发程序,日常开发中,都会使用Spring框架,完成日常的功能开发;在相关业务系统中,难免存在各种增删改查的接口需求开发。通常来说,实现增删改查有如下几个方式:纯手工打造,编写各种Cont...

Linux基础知识(linux基础知识点及答案)

系统目录结构/bin:命令和应用程序。/boot:这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。/dev:dev是Device(设备)的缩写,该目录...

PL/SQL 杂谈(二)(pl/sql developer使用)

承接(一)部分。我们从结构和功能这两个方面展示PL/SQL的关键要素。可以看看PL/SQL的优雅的代码。写出一个好的代码,就和文科生写出一篇优秀的作文一样,那么赏心悦目。1、与SQL的集成PL/S...

电商ERP系统哪个好用?(电商erp哪个好一点)

电商ERP系统哪个好用?做电商的,谁还没被ERP折腾过?有老板说:“我们早就上了ERP,订单、库存、财务全搞定,系统用得飞起。”也有运营吐槽:“系统是上了,可库存老不准,订单漏单错单天天有,财务对账还...

汽车检测线系统实例,看集中控制与PLC分布控制

PLC可编程控制器,上个世纪70年代初,为取代早期继电器控制线路,开始采取存储指令方式,完成顺序控制而设计的。开始仅有逻辑运算、计时、计数等简单功能。随着微处理的发展,PLC可编程能力日益提高,已经能...

苹果五件套成公司年会奖品主角,几大小技巧教你玩转苹果新品

钱江晚报·小时新闻记者张云山随着春节的临近,各家大公司的年会又将陆续上演。上周,各大游戏公司的年会大奖,苹果五件套又成了标配。在上海的游戏公司中,莉莉丝奖品列表拉得相当长,从特等奖到九等奖还包含了特...

取消回复欢迎 发表评论: