经验分享熬夜肝了这一份C开发学习路线
写之前先来回答几个问题
1、C后台开发有哪些岗位?
C后台开发的岗位还是很多的,例如游戏引擎开发,游戏服务端开发,音视频服务端客户端开发,数据库内核开发等等,而且C也能用来写深度学习,做硬件底层这些。
总之,C后台开发的岗位,还是很丰富的,大家不用担心找不到合适的岗位。
2、C后台开发岗位需求量大吗?
一般大公司大需求量会多一些,小公司需求量较少。
说到岗位需求量,那肯定是Java的岗位需求量是最大的,当然,学Java的人也是最多的(太卷了),假如你要学习C,那我觉得你要定位大公司可能会好一点,进大公司反而会比Java容易。
下面跟大家说一说C后台开发学习路线,为了方便大家做规划,每一个模块的学习,我都会说下大致的学习时间
一、C基础(36个月)
假如你有C语言基础,那么这块感觉花个三四个月就能拿下了,假如你是零基础的,估计还得学两三个月的C语言,也就是说,得花半年时间才行。
C这块,重点需要学习的就是一些关键字、面向对象以及STL容器的知识,特别是STL,还得研究下他们的一些源码,下面我总结一下一些比较重要的知识(其实是根据面试结果来挑选)。
指针与引用的区别,C与C的区别,struct与class的区别
struct内存对齐问题,sizeof与strlen区别
面向对象的三大特性:封装、继承、多态
类的访问权限:private、protected、public
类的构造函数、析构函数、赋值函数、拷贝函数
移动构造函数与拷贝构造函数对比
内存分区:全局区、堆区、栈区、常量区、代码区
虚函数实现动态多态的原理、虚函数与纯虚函数的区别
深拷贝与浅拷贝的区别
一些关键字:static,const,extern,volatile等
四种类型转换:staticcast、dynamiccast、constcast、reinterpretcast
静态与多态:重写、重载、模板
四种智能指针及底层实现:autoptr、uniqueptr、sharedptr、weakptr
右值引用
std::move函数
迭代器原理与迭代器失效问题
一些重要的STL:vector,list,map,set等。
容器对比,如map与unorderedmap对比,set与unorderedset对比,vector与list比较等。
STL容器空间配置器
等等。
根据书来学就可以了,然后学到一些重点,可以重点关注一下。
书籍推荐:
1、《CPrimer》,这本书内容很多的,把前面基础的十几章先看一看,不用从头到尾全啃,后面可以字典来使用。
2、《STL源码剖析》,必看书籍,得知道常见STL的原理,建议看个两三遍。
3、《深度探索C对象模型》,这本主要讲解面向对象的相关知识,可以帮你扫清各种迷雾。
视频推荐:可以在B站侯捷老师讲的视频,不适合初学者,讲的大部分都是进阶
二、计算机网络(12个月)
无论你是从事啥岗位,无论是校招还是社招,计算机网络基本都会问,特别是腾讯,字节,shopee,小米等这些非Java系的公司,问得更多。这块认真学,一个半月就可以搞定了。
计算机网络就是一堆协议的构成,下面是一些比较重要的知识点,学的时候可以重点关注下。
物理层、链路层:
MTU,MAC地址,以太网协议。
广播与ARP协议
网络层
ip地址分类
IP地址与MAC地址区别
子网划分,子网掩码
ICMP协议及其应用
路由寻址
局域网,广域网区别
传输层(主要就是TCP)
TCP首部报文格式(SYN、ACK、FIN、RST必须知道)
TCP滑动窗口原理,TCP超时重传时间选择
TCP拥塞控制,TCP流量控制
TCP三次握手与四次挥手以及状态码的变化
TCP连接释放中TIMEWAIT状态的作用
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》,当然,也可以直接看《计算机网网络:自顶向下》这本书,这本书建议看两遍以及以上,还有时间的可以看《TCPIP详解卷1:协议》。
三、操作系统(12个月)
操作系统和计算机网络差不多,不过计算机网络会问的多一些,操作系统会少一些,学到时候如果可以带着问题去学是最好的,例如
咋就还有进程和线程之分?为什么要有挂起、运行、阻塞等这么多种状态?怎么就还有悲观锁和乐观锁,他们的本质区别?
进程咋还会出现死锁,都有哪些处理策略?进程都有哪些调度算法?
虚拟内存解决了什么问题?为啥每个进程的内存地址就是独立的呢?
为啥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的执行计划,索引统计的刷新等等。
对于24这四个相关知识,面试被问到的频率是最高的,有时候面试会让你说一说索引,如果你知道的多的话就可以疯狂扯一波了,记得我当时总结了一套扯的模版:
先说从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网络编程》
六、数据结构与算法(36月)
数据结构与算法,我觉得是需要花最多时间的,因为算法这块,很难快速突击,从基础数据结构与各种算法思想到leetcode刷题,如果你零基础,那真的需要挺久的,不过你有一些基础,可能会快一点,看你想掌握到什么程度了。
我这里大致说一下学习流程吧
1、先学基础数据结构与算法:链表,队列,栈,哈希表,二叉树,图,十大排序,二分查找。
2、之后了解一下算法思想:递归,深度与广度搜索,枚举,动态规划这些。
入门数据结构推荐《数据结构与算法分析:c语言描述版》这本书,学的过程中,也可以配合刷题,一般刷《剑指offer》LeetCode刷个两三百就差不多了,没时间到就先刷《剑指offer》吧。
七、项目(2个月左右)
项目是必须要做的了,不过C的会少一些,至少没那么多培训机构视频可以白嫖,不过大家可以跟着书,或者github上找或者自己花点钱买一个付费视频吧。
推荐自学项目:实现http服务器(github一堆源码、音视频服务器(慕课网))、实现一个聊天系统(这块有些书就有附带)
八、学习顺序
我建议有时间的,可以先入门下C,然后就是开始学习数据结构与算法,算法这块长期保持刷题,然后一边深入学习C,之后学习计算机网络,操作系统,在之后学习网络编程,项目这块放到最后面。
如果时间比较紧的,算法这块可以放松一点,C和项目可以优先,计算机基础可以突击学习,通过视频或者别人总结的笔记突击
总之,这一套学下来,感觉需要一年了,当然,这个不好衡量,还得看你自己掌握了哪些基础。
另外的话为了帮助大家,轻松,高效学习C语言C,我给大家分享我收集的资源,从最零基础开始的教程到C语言项目案例,帮助大家在学习C语言的道路上披荆斩棘!可以来我粉丝群领取哦
编程学习书籍分享:
编程学习视频分享:
整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)最重要的是你可以在群里面交流提问编程问题哦!
对于CC感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些CC的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!
宝宝湿疹反复,夜闹频繁兴许和奶粉过敏有关系我儿子目前刚好六个月,刚开始的时候我们初为父母,育儿方面的知识也不多,遇到不懂的东西都是在网上搜索。甚至都因为宝宝在睡觉,到时间了是否要叫醒喂奶这个小事而纠结。一点点摸着石头过……
首台钠离子电池试验车公开亮相【首台钠离子电池试验车公开亮相】财联社2月23日电,在第二届全国钠电池研讨会上,思皓新能源与中科海钠联合打造的行业首台钠离子电池试验车公开亮相。据悉,此次装车试验的思皓花仙子首……
正式任命!广东队队长到广东工业大学任教朱芳雨深谋远虑为了在CBA第三阶段能够取得好成绩,CBA11冠得主广东队,在主教练杜锋的带领下正在进行着有条不紊地训练!在前面两个阶段,广东队虽然是受到了一些困难,遭到了很多质疑,但是,球队……
快充伤电池?别被手机厂商忽悠,苹果技术不如国产才是真相!大家应该听过这样一个说法,认为快充非常伤电池,苹果为了保养手机才不用快充,20W充电是行业最佳解决方案。国产手机为了宣传噱头不顾消费者体验,疯狂卷充电技术,动辄百瓦快充让电池寿……
这是一个关乎14亿多人的大项目!我是逐梦太空的航天员我是拼搏赛场的运动员我是逆行而上的守护者我是大国工程的建设者我意气风发为梦想追寻我昼……
香港对散户开放加密货币交易后国内民众何去何从?香港对散户开放加密货币交易后国内民众何去何从?原创黄伟宏星羽x2023022700:01发表于广西收录于合集财经类,包括数字货币币640个请点击上面作者名加关……
辨别肠胀气,宝宝身上3个信号是关键,早知道越好文余明仁小宝宝在新生期出现肠胀气也很普遍了,那么在新生期宝宝肠胀气的起因也是有很多的,说到宝宝肠胀气还是要得到重视的,因为宝宝的肠胀气出现也直接的影响到宝宝的肠胃,可能会……
八路军太行纪念馆重温红色记忆,传承革命精神八路军太行纪念馆位于山西省长治市武乡县是一座全面反映八路军抗战历史的大型革命纪念馆集旅游观光和博物馆价值为一体的国家一级博物馆和国家AAAA级旅游景区……
为什么生育率断崖式下跌?母婴店买个新生儿奶瓶就全明白了近日,为应对生育率不断下降的趋势,知名经济学家任泽平建议将法定结婚年龄降到18岁,保障单身女性生育权,作为经济学家,说出如此言论也是反应有些过度了,从经济学的角度来看,生育率低……
科学饮茶十不要(一)饮茶不但是传统饮食文化,同时,由于茶中含有多种抗氧化物质与抗氧化营养素,对于消除自由基有一定的效果。因此喝茶也有助防老,具养生保健功能。茶叶中含有多种维生素和氨基酸,喝茶对于清……
春节期间旅游最新通知与提醒1月24日文化和旅游部办公厅发布关于进一步加强春节期间旅游安全工作的通知全文如下:2023年春节假期进入第三天,假日市场迎来客流高峰。近期多地发生……
新春(13)狮象搏兔,皆用全力云衡微语新的一年开开心心过去的有过太多的枝繁叶茂丰富多彩我们见证也被见识万物生长的纷争或许我们无暇顾及四季的起起伏伏潮起潮落但扎在根心……