您好,欢迎访问全国教育考试教材网
商品分类

经验分享:熬夜学习这条C++开发学习路线

写之前,先回答几个问题。

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

C++后端开发的岗位还是很多的,比如游戏引擎开发、游戏服务器开发、音视频服务器/客户端开发、数据库内核开发等,C++还可以用来写深度学习、做底层硬件。

总之,C++后端开发的职位还是很多的,不用担心找不到合适的职位。

2、C++后端开发职位需求量高吗?

一般来说,大公司的需求会多一些,小公司的需求会少一些。

说到岗位需求,Java的岗位需求肯定是最大的。当然,学习Java的人数也是最多的(太复杂了)。如果你想学习C++,那么我认为你的目标可能是大公司更好。有一点,进入大公司会比Java更容易。

下面我给大家介绍一下C++后台开发的学习路线。为了方便您规划,我会给您每个模块的大概学习时间。

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

如果你有C语言的基础知识,那么你需要三四个月才能掌握它。如果你的基础知识为零,你可能还需要再学习两三个月的C语言。换句话说,你必须学习C语言。需要半年时间。

在C++中,重点要学的就是一些关键字、面向对象和STL容器知识,尤其是STL。您还需要研究他们的一些源代码。下面我就总结一下一些比较重要的知识(其实是根据面试结果选的)。

指针和引用的区别、C 和C++ 的区别、struct 和class 的区别

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

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

类访问权限:私有、受保护、公共

类的构造函数、析构函数、赋值函数、复制函数

移动构造函数和复制构造函数的比较

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

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

深拷贝和浅拷贝的区别

一些关键字:static、const、extern、volatile 等。

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

静态和多态:覆盖、重载、模板

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

右值引用

std:move函数

迭代器原理及迭代器失败问题

一些重要的STL:向量、列表、映射、集合等。

容器的比较,例如map与unordered_map、set与unordered_set、vector与list等。

STL容器空间配置器

ETC。

照着书上学就行了,学完之后就可以重点关注一些重点了。

书籍推荐:

1.《C++Primer》。这本书包含很多内容。我们先来看看基础的十章。您不必从头到尾阅读它们。您可以稍后使用该词典。

2、《STL 源码剖析》,必读之书。要了解常用STL的原理,建议看两三遍。

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

视频推荐:可以看B站侯杰老师教的视频,不适合初学者。大多数视频都是高级的。

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

不管你在什么岗位,无论是校招还是社招,计算机网络基本都会问你,尤其是腾讯、字节、虾皮、小米等非Java公司,问的比较多。如果你仔细研究这个,一个半月就可以完成。

计算机网络由一堆协议组成。下面是一些比较重要的知识点。学习时你可以专注于它们。

物理层、链路层:

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

广播和ARP 协议

网络层

IP地址分类

经验分享:熬夜学习这条C++开发学习路线

IP地址和MAC地址的区别

子网划分, 子网掩码

ICMP协议及其应用

路由寻址

局域网和广域网的区别

传输层(主要是TCP)

TCP头报文格式(SYN、ACK、FIN、RST必须已知)

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

TCP拥塞控制、TCP流量控制

TCP三路握手和四路挥手以及状态码变化

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

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.管道和消息队列的比较

10.线程上下文切换过程

11.进程上下文切换过程

12.进程调度算法

13. 阻塞IO和非阻塞IO

经验分享:熬夜学习这条C++开发学习路线

14.同步和异步的概念

15.静态链接和动态链接的过程

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

17、MMU地址转换的具体过程

18、缺页处理流程

19、页错误替换算法:最长未使用算法、先进先出算法、最佳替换算法

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

四、MySQL(一个月左右)

主流数据库是MySQL和Oracle,但是建议大家学习MySQL,因为大多数公司都使用MySQL,这是面试必问的问题,而MySQL又是工作中接触最多的。毕竟,工作中的琐事是很正常的。

以下是我认为比较重要的知识点:

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、手工创建最简单的服务端服务器(socket、bind、listen、accept这四个API必须非常熟练)

3. 线程池

4. 事件驱动反应器模型

5. 边沿触发和水平触发的区别

6. 非阻塞IO和阻塞IO的区别

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

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

数据结构和算法,我觉得花的时间最多,因为算法很难快速攻克,从基础数据结构和各种算法思想到leetcode考试题。如果你零知识的话,确实需要很长时间,但是如果你有一些基础的话,可能会更快,就看你想掌握到什么程度了。

这里我简单说一下学习过程。

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

2.然后学习算法思想:递归、深度广度搜索、枚举、动态规划等。

推荐书籍《数据结构与算法分析:c语言描述版》 作为数据结构入门书籍。在学习过程中,还可以解决问题。一般刷《剑指 offer》+LeetCode两三百就够了。如果没时间就先刷《剑指 offer》吧。

七、项目(2个月左右)

项目是必做的,但是C++的会少一些。至少没有那么多培训机构的视频可以免费购买,但是可以关注书本,在github上找到,或者花点钱买付费视频。

推荐自学项目:实现http服务器(github一堆源码、音视频服务器(MOOC))、实现一个聊天系统(一些关于这个主题的书自带)

八、学习顺序

我建议如果有时间的话可以先入门C++,然后再开始学习数据结构和算法。长期坚持研究算法,然后深入研究C++,再学习计算机网络、操作系统,再学习网络编程,项目放在最后。

如果时间紧张的话,可以在算法上放松一点。优先考虑C++ 和项目。你可以通过视频或者别人总结的笔记快速学习计算机基础知识。

总之,感觉这套技能需要一年的时间才能学会。当然,这个并不容易衡量,要看你掌握了哪些基础知识。

用户评论


孤者何惧

看了这个C++开发学习路线,感觉熬夜学习这条路还挺艰难的,但是为了技术进步,拼一把也值得!

    有5位网友表示赞同!


孤单*无名指

熬夜学习确实累,但是这个路线图看起来挺全的,希望能少走一些弯路。

    有17位网友表示赞同!


寒山远黛

熬夜对身体不好,但是学到真本事才是关键,这条路线我觉得还挺实用的。

    有10位网友表示赞同!


不浪漫罪名

熬夜学习这条路,对我来说太苦了,但还是想试试这个C++开发路线。

    有16位网友表示赞同!


你很爱吃凉皮

熬夜学习确实不易,不过看到这个路线图,我觉得自己有方向了。

    有18位网友表示赞同!


情字何解ヘ

熬夜学习这条C++开发路线,虽然辛苦,但为了成为更好的开发者,我觉得值得。

    有8位网友表示赞同!


我没有爱人i

这条学习路线不错,就是熬夜学习有点怕对身体造成负担。

    有8位网友表示赞同!


刺心爱人i

熬夜学习这条路,对我来说是个挑战,但我会努力跟上这个C++开发路线。

    有14位网友表示赞同!


红尘滚滚

熬夜学习确实不容易,但这个路线图给我很大帮助,谢谢分享!

    有9位网友表示赞同!


采姑娘的小蘑菇

熬夜学习这条C++开发路线,我觉得挺适合初学者的,希望能顺利入门。

    有17位网友表示赞同!


玻璃渣子

熬夜学习这条路不容易走,但为了追求技术梦想,我愿意付出。

    有13位网友表示赞同!


来瓶年的冰泉

这个C++开发学习路线太详细了,熬夜学习也觉得值了。

    有12位网友表示赞同!


沐晴つ

熬夜学习对身体不好,但我还是想试试这条路线,希望能有所收获。

    有10位网友表示赞同!


空谷幽兰

这条C++开发学习路线好详细,熬夜学习虽然累,但为了目标,拼了!

    有9位网友表示赞同!


容纳我ii

熬夜学习这条路不容易,但看到这个路线图,我觉得有希望。

    有16位网友表示赞同!


单身i

熬夜学习对身体不好,但为了技术成长,这条C++开发路线必须尝试。

    有7位网友表示赞同!


拉扯

这个学习路线图太棒了,熬夜学习再累也值得,感谢分享!

    有11位网友表示赞同!


ok绷遮不住我颓废的伤あ

熬夜学习这条路不容易,但为了成为C++高手,我觉得自己可以坚持。

    有17位网友表示赞同!


墨城烟柳

熬夜学习这条C++开发路线,虽然辛苦,但为了职业发展,必须努力!

    有9位网友表示赞同!