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++天下第一!!!
種一棵樹的最好時間是十年前,其次就是現在,真心希望學弟學妹們以及一些想要轉計算機的小伙伴們加油!
別辜負了自己這么多年苦讀與工作經歷;好好工作好好生活,想要相關資料或者學習路線圖的都可以私信獅,大庇天下寒士俱歡顏!!!
拜拜了您嘞~
總結
以上是生活随笔為你收集整理的C/C++后端开发学习路线总结(附带实习学习经历分享)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每日新闻人声朗读器
- 下一篇: s3c2440移植MQTT