为学弟学妹熬夜的一份零基础 C++ 开发学习路线
大家好,我是帅地。
之前写过几篇学习路线的文章
前端开发学习路线
Java 后端开发学习路线
一般开发岗主流的就是 Java 后台开发,前端开发以及 C++ 后台开发,现在 Go 开发也是越来越多了,今天把 C++ 后台开发学习路线补上。
写之前先来回答几个问题
1、C++ 后台开发有哪些岗位?
C++ 后台开发的岗位还是很多的,例如游戏引擎开发,游戏服务端开发,音视频服务端/客户端开发,数据库内核开发等等,而且 C++ 也能用来写深度学习,做硬件底层这些。
总之,C++ 后台开发的岗位,还是很丰富的,大家不用担心找不到合适的岗位。
2、C++ 后台开发岗位需求量大吗?
一般大公司大需求量会多一些,小公司需求量较少。
说到岗位需求量,那肯定是 Java 的岗位需求量是最大的,当然,学 Java 的人也是最多的,假如你要学习 C++,那我觉得你要定位大公司可能会好一点,进大公司反而会比 Java 容易。
假如你觉得自己实力很一般,够不着大公司,那我觉得你可以考虑学习 Java,因为大部分小公司,Java 岗位多一些。
但是呢,假如你是应届生,那么语言其实也不是特别重要,只要你 把计算机基础和算法学好,就算你是学 Java 的,也可以去面 C++;学 C++ 的也可以去面 Java。
我当时是学 Java 的,不过秋招那会还面了几个 C++ 岗位,直接和面试官说我不会 C++ 就可以了,他会问你其他的知识。
下面跟大家说一说 C++ 后台开发学习路线,为了方便大家做规划,每一个模块的学习,我都会说下大致的学习时间
一、C++ 基础(3-6个月)
假如你有 C 语言基础,那么这块感觉花个三四个月就能拿下了,假如你是零基础的,估计还得学两三个月的 C 语言,也就是说,得花半年时间才行,没有 C 语言基础的看这个 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 站侯捷老师讲的视频,不适合初学者,讲的大部分都是进阶,大家 B 站搜索侯捷就行
面试题:学完之后可以通过面试题复习,这里整理了:15万字C++开发面试手册出炉(C++和计算机基础全有)
二、计算机网络(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:协议》。
书籍下载看这里:少走弯路,必读计算机经典书籍推荐(含下载方式)
帅地也写过一个极简入门教程:www.iamshuaidi.com/359.html
三、操作系统(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技术内幕》
具体可以看我写的 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个月左右)
项目是必须要做的了,Java 的项目教程满天飞,不过 C++ 的会少一些,至少没那么多培训机构视频可以白嫖,不过大家可以跟着书,或者 github 上找或者自己花点钱买一个付费视频吧。
推荐自学项目:实现 http服务器( github 一堆源码、音视频服务器(慕课网))、实现一个聊天系统(这块有些书就有附带)
八、学习顺序
我建议有时间的,可以先入门下 C++ ,然后就是开始学习数据结构与算法,算法这块长期保持刷题,然后一边深入学习 C++,之后学习计算机网络,操作系统,在之后学习网络编程,项目这块放到最后面。
如果时间比较紧的,算法这块可以放松一点,C++ 和项目可以优先,计算机基础可以突击学习,通过视频或者别人总结的笔记突击,这里又个视频:计网+OS+计组入门教程
总之,这一套学下来,感觉需要一年了,当然,这个不好衡量,还得看你自己掌握了哪些基础。
九、总结
学了之后要验证自己学得如何,可以来帅地的网站看看这些面试题,通过面试题查漏补缺
小破站网址:www.iamshuaidi.com,后续会越来越完善,包括各种算法也都会更新,建议大家收藏。
另外,文中涉及到的书单,可以这里下载:www.iamshuaidi.com/753.html
总之,关于校招,学习路线,面试题等等,很多我在网站都更新了,包括个人经历,大家迷茫没事做时,可以多打开看看。
最后,大家加油,努力学两年,争取日后那个好的 offer.
为学弟学妹熬夜的一份零基础 C++ 开发学习路线相关推荐
- 自学python到什么程度就可以工作-零基础学到什么程度可以找一份python工作?Python学习路线规划...
目前信息化产业发展势头很好,互联网就成为了很多普通人想要涉及的行业,因为相比于传统行业,互联网行业涨薪幅度大,机会也多,所以就会大批的人想要转行来学习Python开发.目前来讲市场上需要的Python ...
- 程序员的奋斗史(四十六)——大学断代史(十)——给学弟学妹们的忠告——终结篇
文/温国兵 「写在前面」 大学断代史终于要完结了,就像一条再长的路总有终点一样.该系列文章前前后后写了一两个月,也该收尾了,至于收尾的文章,想了想,决定写写自己对学弟学妹的忠告.本篇文章以话题的形式呈 ...
- 写给学弟学妹的一些话
很是荣幸,前两天的实习感悟写完后被德喜看到,他说你为什么不写一篇大学的感悟呢,顺带给学弟学妹们分享分享经验干货什么的,以及之前之后也有幸和一些学弟们聊过关于大学生活的方向,刚好又是周末,闲来无事那就写 ...
- 写给准备参加秋招的学弟学妹们~一定要来看哦~
一. 写在前面 这两天找工作不易,由衷感慨,很多书都没早看,所以希望学弟学妹们能多看点书,特别是我们qtech的ACMer们,我们这种acm弱校的ACMer走出来的,acm水平都不行,如果再像我当年那 ...
- 不选择互联网行业,学弟学妹可以选择这些新兴科技行业发展!
本篇文章为博主阅读<中华人民共和国国民经济和社会发展第十四个五年规划和2035年远景目标纲要>后对目前互联网行业就业压力大的问题,为学弟学妹整理的新发展社会前沿科技方向. 原文地址:htt ...
- 【自我感悟致学弟学妹】大三上的感悟,何为真正优秀的人
突然发现半年前写的小博客,不知道为什么被设置为私密了..还是放出来吧.. 我是计算机专业的,但是这篇文章不针对某个专业的同学,而是针对所有人. 明天就要考计算机三级和四级了,然而几乎没有复习的我已经放 ...
- 计算机学院特色迎新标语,有创意的迎新,计算机学院用代码写迎新条幅,学弟学妹表示一脸懵...
有创意的迎新,计算机学院用代码写迎新条幅,学弟学妹表示一脸懵 现在正是各大高校迎新的日子,来自全国各地的学生都到了自己的母校,相信有很多新生的第一件事就是逛校园,毕竟要先熟悉一下自己的校园,不然走错路 ...
- 给计科专业的学弟学妹们的一封信
学弟.学妹,你们好! 这是给所有已经选择或者即将选择计科专业的学弟学妹们的一封信. 学习计算机科学与技术,无疑需要浓厚的兴趣以及强大的耐心,当然,我相信所有工科专业都是如此.选择计算机科学与技 ...
- 一个08届毕业的学长写给即将毕业的09届的学弟学妹们
写给即将毕业的09届的学弟学妹们 作为一个12年毕业,在社会游荡半年有余的底层劳动人民,毕竟多少有点经验,仅以此警醒初入社会的你们. 1.不要轻易把自己的"初次"给了企业,要知道, ...
最新文章
- 噪声调频 matlab,如何用matlab编写噪声调频干扰信号
- linux 内存监控工具,系统运维|你值得拥有 —— 25 个 Linux 性能监控工具
- 学习总在继续......
- [转]分析MySQL数据类型的长度【mysql数据字段 中length和decimals的作用!熟悉mysql必看】...
- hdu4746 Mophues
- velocity 获取list对象_Redis专题2:认识list、Zset与BitMaps
- https认证和httpclient远程调度https的接口的方法
- 了解java虚拟机mdash;串行回收器(6)
- paip.设置鼠标灵敏度API
- OpenCV人脸识别
- 走进计算机病毒-基础知识
- 个人防骗大全精选(1)
- 苹果手机滑动光标怎么设置_苹果手机移动的光标怎么设置出来
- 无人机航模电池上面有20C 30C,这是放电倍率
- 黄健翔激情解说--修改版
- 【数据分析】python带你分析122万人的生活工作和死亡数据
- PS 不能使用移动工具 因为目标图层被隐藏怎么办
- 平面最近点对问题求解—基于Java语言
- Apache ab 测试报告详解
- 2019前端面试总结
热门文章
- 计算机简史ppt全英文,计算机开发简史ppt
- C++原生游戏引擎开发棒子打老鼠游戏!
- CorelDRAW Graphics Suite2022最新版新增功能及增强内容介绍
- T-Flash卡热插拔案例分析
- WebP图片制作GUI工具
- kicad 自动生成封装库_【工具】KiCad版本嘉立创SMT贴片库及问题说明
- 2022张宇考研基础30讲 第十二讲 二重积分
- HTML5七夕情人节表白网页制作【结婚倒计时】HTML+CSS+JavaScript html生日快乐祝福网页制作
- 编译原理的FIRST、FOLLOW、FIRSTVT、LASTVT的求法总结
- Python代码自动排版工具(PEP8风格),autopep8