• C/C++后端开发学习路线总结(附带实习学习经历分享)


    大家好哇,九月份了;不知道大家的工作或者实习都安排的怎么样了?反正狮作为一个过来人只能在各种论坛上面看到都是哀鸿遍野;暗自惊心感慨现在年轻人不好混啊~

    然后呢,狮最近后台收到不少C/C++后端怎么学的邀请回答;那这里就再发一次关于C/C++后端开发学习路线总结及实习经历分享


    除了知乎呢,还有某DN,某破站上也有太多的读者询问我这样的问题:新手怎么学?要学到什么样子才能找工作?有什么学习资料推荐?


    其实学习路线一类的文章网络上也有不少,但我看了很多,大部分都是罗列了许多的课程和知识点,却缺少一个类似时间轴的东西,告诉大家按照什么样的节奏来推进,所以呢,我希望补上这一个重要的信息。


    这份学习路线,包含了从新手到工作分阶段所需要学习的内容、详细的知识点、可以参考的书单、电子书资源等等。给大家看C/C++后端开发的,最后一段附带我一个小老弟的实习与学习经历,发车~
    路线图
    开局一张图,内容全靠编,没错,咱们先来看一张全局图,先从总体上有个宏观的认识。

    这张图有点大,由于微信对图片压缩的厉害,如果想要高清版的,可以私信狮:C++自动获取。

    基础部分到处都能学,这里就不做过多赘述了;如若是想转行或者转岗C/C++后端的,狮之后也会写一个更加详细基础的分享;这里就先将学习路线分为十个板块来进行。

    一、精进基石

    1.数据结构与算法

    • 随处可见的红黑树
    • 磁盘存储链式的B树与B+树
    • 海量数据去重的Hash与BloomFilter,bitmap

    2.设计模式

    • 创建型设计模式
    • 结构型设计模式

    3.c++新特性

    • stl容器,智能指针,正则表达式
    • 新特性的线程,协程,原子操作,lamda表达式

    4.Linux工程管理

    • Makefile/cmake/configure
    • 分布式版本控制git
    • Linux系统运行时参数命令

    二、高性能网络设计

    1.网络编程

    • 网络IO与select,poll,epoll
    • reactor的原理与实现
    • http/https服务器的实现
    • websocket协议与服务器实现

    2.网络原理

    • 服务器百万并发实现
    • redis,memcached,nginx网络组件
    • Posix API与网络协议栈
    • UDP的可靠传输协议QUIC

    3.协程框架NtyCo的实现

    • 协程设计原理与汇编实现
    • 协程调度器实现与性能测试

    4.用户态协议栈NtyTcp的实现

    • 用户态协议栈设计实现
    • tcp/ip定时器与滑动窗口
    • 手把手设计实现epoll

    5.高性能异步io机制io_uring

    • 与epoll媲美的io_uring
    • io_uring的使用场景

    三、基础组件设计

    1.池式组件

    • 手写线程池与性能分析
    • 内存池的实现与场景分析
    • 异步请求池的实现
    • mysql连接池的实现

    2.高性能组件

    • 原子操作CAS与锁实现
    • 无锁消息队列实现RingBuffer
    • 定时器方案红黑树,时间轮,最小堆
    • 手写死锁检测组件
    • 手写内存泄漏检测组件
    • 手把手实现分布式锁

    3.开源组件

    • Libevent/Libev框架实战的那些坑
    • 异步日志方案log4cpp
    • 应用层协议设计ProtoBuf/Thrift

    四、中间件开发

    1.redis

    • redis相关命令详解及其原理
    • redis协议与异步方式
    • 存储原理与数据模型
    • 主从同步与对象模型

    2.MySQL

    • SQL语句,索引,视图,存储过程,触发器
    • MySQL索引原理以及SQL优化
    • MySQL事务原理分析
    • MySQL缓存策略

    3.Kafka

    • Kafka使用场景与设计原理
    • Kafka存储机制

    4.gRPC

    • gRPC的内部组件关联
    • 基于http2的gRPC通信协议

    5.nginx

    • nginx反向代理与系统参数配置conf原理
    • nginx过滤器模块实现
    • nginx Handler模块实现

    五、开源框架

    1.skynet

    • skynet设计原理
    • sky net网络层封装以及lua/c接口编程
    • sky net重要组件以及手撕游戏项目

    2.分布式API网关

    • 高性能web网关Openresty
    • Kong动态负载均衡与服务发现

    3.DPDK

    • DPDK环境与testpmd/I3fwd/skeletion
    • DPDK的用户态协议栈
    • 千万级流量并发的dns处理
    • 高性能数据处理框架vpp
    • DPDK的虚拟交换机框架OVS

    4.高性能计算CUDA

    • gpu并行计算cuda的开发流程
    • 音视频编解码中的并行计算

    六、云原生

    1.Docker

    • Docker风光下的内核功能
    • Docker容器管理与镜像操作
    • Docker网络管理
    • Docker云与容器编排

    2.Kubernetes

    • K8S环境搭建
    • Pod与Service的用法
    • K8S集群管理
    • K8S二次开发与K8S API

    七、性能分析

    1.性能与测试工具

    • 测试框架gtest以及内存泄漏检测
    • 性能工具与性能分析
    • 火焰图的生成原理与构建方式

    2.观测技术bpf与ebpf

    • 内核bpf的实现原理
    • bpf对内核功能的观测

    3.内核源码机制

    • 进程调度机制
    • 内核内存管理运行机制
    • 网卡nic与网络协议栈的关系
    • 文件系统组件

    八、分布式架构

    1.RocksDB

    • 不一样的kv存储RocksDB的使用场景
    • RocksDB的特殊操作

    2.云原生分布式数据库TiDB

    • TiDB存储引擎的原理
    • TiDB集群方案与Replication的原理

    3.分布式服务

    • 内核级支持的分布式存储Ceph
    • 注册服务中心Etcd

    九、项目实战

    1.图床共享云存储

    • fastdfs架构分析和配置
    • fastdfs存储原理
    • 分布式fastdfs存储集群部署
    • 高负载nginx/fastcgi
    • 文件传输和接口设计
    • 产品上云公网发布/测试用例

    2.微服务即时通讯

    • IM即时通讯项目框架分析和部署
    • IM消息服务器/文件传输服务器
    • 消息服务器/路由服务器
    • 数据库代理服务器设计
    • 文件服务器和docker部署
    • 产品上云公网发布/公网测试上线

    十,配套参考书籍资料

    1. MySQL:《高性能MySQL 第3版》

    2.Nginx: 《深入理解Nginx:模块开发与架构分析(第2版)》(陶辉)

    3.Redis:Redis设计与实现 (黄健宏)

    4.Linux内核:《深入理解Linux内核架构》 (郭旭 译)

    5.数据结构与算法:《算法导论》(第3版)

    6. 性能分析:《性能之巅 洞悉系统、企业与云计算》 8

    7.MongoDB:《MongoDB权威指南》

    8.Ceph:《Ceph分布式存储学习指南》(Ceph中国社区)

    9.Docker:《Docker容器与容器云(第2版)》。

    10.TCP/IP:《Tcp/1p详解卷一卷二卷三》 8

    11.Linux系统编程:《Unix环境高级编程》

    12.计算机:《深入理解计算机系统》

    13. DPDK:《深入浅出DPDK》 8

    14.k8s:《Kubernates权威指南》龚正等编著

    15.bpf:《BPF之巅 洞悉Linux系统和应用性能》


    总结

    以上就是做C/C++后端开发,从新手入门到工作所需要学习的内容整理了,可能并不全面,但掌握以上这些内容足以胜任大部分的岗位要求了。

    除了学习路线,我还整理了这个过程中学习的大量学习资料,配合上面的学习路线使用:


    适宜工程师人群

    1.从事业务开发多年,对底层原理理解不够深入的在职工程师

    2.从事嵌入式方向开发,想转入互联网开发的在职工程师

    3.从事Qt/MFC等桌面开发的,薪资多年涨幅不大的在职工程师

    4.从事非开发岗位(算法岗,运维岗,测试岗),想转后台开发岗位的在职工程师

    5.工作中技术没有挑战,工作中接触不到新技术的在职工程师

    6.自己研究学习速度较慢,不能系统构建知识体系的开发人员

    7.了解很多技术名词,但是深入细问又不理解的工程师

    8. 计算机相关专业想进入大厂的在校生(本科及以上学历,有c/c基础)


    这里就拿一个学弟的实习经历举个例子(跟我关系比较好,啥都带他)实习面试基本情况,参与面试的公司:CVTE搜狐东方财富美团腾讯字节跳动阿里巴巴

    CVTE:笔试-技术面1-技术面2-hr面-offer(第一次面试,他是说挺顺利的)

    阿里巴巴提前批:技术面1-挂(当时没复习,问他啥,啥不会,其实阿里面的真不难)

    东方财富:技术面1-HR面-挂(HR面把他挂了,看不懂)

    字节跳动:技术面1-技术面2-技术面3-hr面-offer(字节3面面试官拖了他快半个月才面,当时心态很差,同学都拿了大厂offer)

    百度:技术面1-技术面2-技术面3(一个下午面完的,但是玩了一上午,百度打过来的2个电话没接到,然后就没了)

    腾讯:技术面1-技术面2-技术面3-hr面(也挺顺利,被我逼着复习了一顿,感觉跟阿里差不多)

    后面其他公司笔试面试邀请都拒了。

    然后是他的学习经历,原话:

    2020年3~8月:疫情在家大概3月份开始准备学习C++,因为在家效率极低,玩三天学一天,到7、8月份也只是会用C++,然后写了个MFC的小项目练了练手。

    2020年9月:前半个月学习计算机网络,后半个月学习深入理解计算机系统(当然第一遍只看懂个大概)

    2020年10月-12月:写多线程服务器项目(即改编muduo),这个过程中伴随学习网络编程、操作系统、C++各种知识(之前C++只学了皮毛)

    2021年1月-2月:学习数据结构与算法刷题,刷了不到200题。(其中寒假在家玩了半个月)

    2021年3月:开启海投模式,先投了一批小公司,基本都简历挂,总算有几个小厂给了面试机会,边面试边复习。3月中旬开始投大厂,除了美团一面挂,字节、腾讯百度面试都很顺利,没挂过,清明之前拿到了字节的口头offer。

    2021年4月:字节的正式offer邮件。

    (说实话我的学习效率不是很高,因为我喜欢睡懒觉。)

    ps:他睡懒觉我是发现了,天天上午叫不动...


    结语


    不管是转岗还是实习选方向的兄弟们,一个合格的 C++开发者从来不怕找不到工作的,即使你日后从事 Java或者Go的工作,由于语言的原理都是相通的,所以你的学习成本会比别人小的多。


    我仔细想了想自己这些年的语言史:大学写了一年的C语言和VB,三年的C#;研究生写了一年的Python,两年的C++;工作了开始写JavaScript、Go以及Vue、React这些框架。


    你要问我最喜欢哪门语言?
    毫无疑问,绝对是是C++!
    不为什么,就是喜欢它的严谨!

    C++天下第一!!!


    种一棵树的最好时间是十年前,其次就是现在,真心希望学弟学妹们以及一些想要转计算机的小伙伴们加油!

    别辜负了自己这么多年苦读与工作经历;好好工作好好生活,想要相关资料或者学习路线图的都可以私信狮,大庇天下寒士俱欢颜!!!

    拜拜了您嘞~

  • 相关阅读:
    基于uni-app与图鸟UI打造的各领域移动端模板大赏
    前K个高频元素[小根堆和大根堆的使用]
    Android 动画
    第二章:字节码指令集与解析案例
    MybatisPlus 1 MybatisPlus 入门案例与简介 1.1 入门案例
    <Linux>进程地址空间
    字符集的一些疑惑
    2023 Visual Studio Code 插件推荐:18 个提高开发效率的常用插件
    持续集成(CICD)- Jenkins+Git+gogs综合实战(笔记一)
    人和AI不可能把所有的情况都考虑到
  • 原文地址:https://blog.csdn.net/m0_58687318/article/details/126667506