學了C++不知道怎么搞后台開發?先看看這份學習路線吧!


作者:AJ

在去年結束的秋季招聘中,后台開發或服務器開發的崗位需求一度火熱,甚至超過了算法崗。不少同學從諸神黃昏的算法崗戰場上退下,轉向更偏向工程能力的后台開發崗,從而造成后台開發崗位競爭的大爆發。

后台開發工程師主流使用的編程語言有C++、Java、PHP以及目前慢慢流行的Golang等。本文就將以C++的角度,講講如何學習和准備后台開發的崗位。

一、語言基礎

無論是C++開發還是Java開發,對於一個碼農而言,最重要的就是對於編程語言的熟悉。同樣,無論從事哪種類型的崗位,首當其沖的就是要掌握好語言基礎。
C++是一門博大精深的編程語言,不僅擁有繼承於C語言的過程化程序設計思想,還包含有面對對象(OOP)的設計理念。強大而又復雜。相對來說,C++的學習成本較高,語言里面的坑較多。語言基礎的學習路線如下:

1 語法基礎

重點掌握:(務必熟悉底層機制原理)

  • 指針和引用的概念
  • 指針與內存關系
  • 程序編譯過程
  • static、const、#define的用法和區別
  • C和C++區別
  • 內存模型
  • 內存中的棧和堆分配
2 面對對象基礎

(務必熟悉底層機制原理)

  • 面向對象理解
  • 析構函數
  • 構造函數
  • 拷貝構造
  • 多態
  • 純虛函數和虛函數
  • 虛函數實現機制
  • 虛函數表
  • 訪問限定符 public、private、protected
  • 繼承原理、虛繼承、菱形繼承
  • 靜態綁定和動態綁定
  • new/delete和malloc/free
  • 重載、重寫和隱藏
3 語法進階

(務必熟悉底層機制原理)

  • 智能指針
  • 左值、右值引用和move語義
  • 類型轉換方式
  • 常用的設計模式
  • 線程安全的單例模式
  • 內存溢出和內存泄漏
  • C++11新特性
  • 靜態鏈接庫和動態鏈接庫

4 STL標准模板庫

(務必能進行源碼剖析)

  • 迭代器、空間配置器理解
  • 常用容器特點、用法以及底層實現vector、list、deque、set、map、unorderedmap
5 推薦書籍
  • C++Primer》可作為工具書,隨手查閱
  • 《EffectiveC++》深入了解C++的程序設計規范
  • 《STL源碼剖析》剖析STL的源碼底層,非常具有學習價值
  • 有精力還可以看《深度探索C++對象模型》《more EffecticeC++》

二、算法與數據結構

對於普通人而言,算法的學習最重要的是能夠形成基本的算法思維,懂得從程序設計的角度對高重復性的操作做優化。這其中基本算法思想的掌握和常用數據結構的理解是必不可少。這方面的學習更傾向於多看多想多練。

1 常見算法類型

(務必能夠手撕代碼)

  • 排序算法(冒泡、插入、選擇、快排、希爾、堆排、歸並、桶排、基數、計數)、字符串操作、數組操作、遞歸、回溯、分治、動態規划等
2 常用數據結構

(務必熟悉底層原理和實現)

  • 鏈表、棧、隊列、樹(二叉樹、平衡二叉樹、紅黑樹、B樹、B+樹、哈夫曼樹、字典樹)、跳表、圖
3 推薦書籍
  • 《大話數據結構》適合入門學習
  • 《劍指offer》必刷66題
  • 《算法導論》盡量看,能啃完就是大神

三、計算機網絡

網絡相關的東西不是很多,關鍵在於對常見網絡協議簇的認識和理解,以及一些常規操作底層設計實現的剖析。比如:

| 輸入www.baidu.com會發生什么
| 微信掃描登錄會發生什么

1 重點掌握知識點
  • OSI七層模型
  • TCP/IP五層模型
  • TCP/IP協議總結
  • TCP、UDP區別
  • TCP三次握手、四次揮手
  • TCP狀態轉換
  • TCP狀態中TIME_WAIT
  • TCP連接建立需要為什么不是兩次握手
  • TCP第三次握手失敗會出現什么
  • TCP長連接和短鏈接及優缺點
  • TCP擁塞控制-慢啟動、擁塞避免、快重傳、快啟動
  • TCP如何保證可靠性傳輸
  • TCP如何解決粘包、拆包問題
  • TCP為什么可靠
  • UDP如何實現TCP可靠傳輸
  • IP地址和子網掩碼
  • ARP解析過程
  • DNS原理
  • HTTP狀態碼
  • HTTP1.0、HTTP1.1、HTTP2.0區別
  • HTTP和HTTPS區別
  • HTTPS加密過程
  • 非對稱加密和對稱加密算法
  • Nagle算法
2 推薦書籍
  • 《計算機網絡自頂向下方法》教材書,可放手邊查閱
  • 《TCP/IP詳解》重點了解TCP、IP、UDP協議實現

四、數據庫

數據庫的一般使用其實不難,但是對於不同數據庫的特性、實現機制、應用場景和性能優化方面卻能夠難倒一大批面試者。同樣數據庫本身也是非常好的項目實例,往往能夠從中學習到許多程序設計的思想和模式。因此,對數據庫要明白怎么用、為什么用、怎么用得好這幾個方面的問題。

1 重點掌握
  • 數據庫類別
  • 關系型數據庫和非關系型數據庫區別
    MySQL:
  • SQL常見語句
  • MySQL內鏈接,外鏈接(左鏈接、右鏈接、全鏈接)
  • MySQL索引類型和原理
  • MySQL事務實現原理ACID
  • MySQL數據存儲引擎
  • MySQL主從復制原理、作用和實現
  • MySQL日記系統redo log、binlog、undo log
  • MVCC實現原理
  • Sql優化思路
  • 范式理論
  • 數據庫高並發解決方法
    Redis:
  • Redis支持的數據類型
  • Redis持久化
  • Redis 架構模式
  • 主從復制
  • 一致性哈希算法
2 推薦書籍
  • 《高性能 Mysql》能夠加深對Mysql的理解和使用
  • 《Redis設計與實現》比較全面的書,可以多看看

五、操作系統

操作系統的問題會集中在進程和線程,但是這一類的問題往往會以開放題的形式出現。主要考察的是對操作系統組件以及運行過程的理解。比如:

| 開機登錄系統發生了什么?
| 復制粘貼是怎樣操作的?

1 重點掌握
  • 物理內存和虛擬內存
  • 緩存IO和直接IO
  • 作業調度算法
  • 線程和進程
  • 進程和線程的調度
  • 線程的創建和結束
  • 線程狀態
  • 線程間通信與線程同步機制
  • 互斥鎖和信號量
  • 線程池
  • 消費者和生產者
  • 死鎖
  • 並發和並行
2 推薦書籍
  • 《深入理解計算機系統》很全面的書,這一本就夠用了

六、Linux系統

對Linux系統的熟練使用是后台開發/服務器開發的必備技能點。這年頭,不會幾個Linux指令都不好意思說自己是敲代碼的。(客戶端和前端的同學表示不服)不管怎樣,對於Linux系統的掌握無論在哪個方向上,都會有用武之地的。

1 Linux系統操作和命令
  • top命令
  • ps命令
  • netstat命令
  • awk命令
  • find命令
  • grep命令
  • wc命令
  • sed命令
  • head和tail命令
  • 正則表達式
  • 如何查找出現頻率最高的100個IP地址
  • linux如何統計文件中某個字符串出現的頻率
  • linux啟動的第一個進程
  • linux查看端口占用
  • linux查看CPU和內存使用
  • Linux查看系統負載命令
  • Linux調試程序
  • Linux硬鏈接和軟連接
  • core dump
  • cmake和makefile
  • Shell腳本基本語法和使用
2 推薦書籍
  • 《鳥哥私房菜》入門足夠了,多敲多寫才能更快掌握

七、Linux網絡編程

后台開發是離不開網絡編程的,甚至簡單來說,后台開發就是用厲害點的電腦去處理大規模的網絡請求。所以作為一名合格的后端開發人員,對Linux網絡編程的熟悉是必不可少的。

1 重點掌握
  • 孤兒進程、僵屍進程和守護進程
  • 進程間通信方式signal、file、pipe、shm、sem、msg、socket
  • 線程同步機制線程:互斥量、鎖機制、條件變量、信號量、讀寫鎖
  • fork返回值
  • 五大IO模型:阻塞I/O、非阻塞I/O、I/O復用、信號驅動I/O、異步I/O
  • IO復用機制
  • epoll與select/poll
  • LT水平觸發和ET邊緣觸發
  • Reactor和Proactor模式
  • 反向代理、負載均衡
2 推薦書籍
  • 《UNIX環境高級編程》APUE 比較難啃,可以挑着看
  • 《Unix網絡編程》UNP 同樣比較難啃,可以挑着看
  • 《Linux多線程服務器端編程》Muduo網絡庫,推薦看看源碼實現
  • 《深入理解Nginx》深入了解基於C的web服務器實現

八、項目准備

如果以上的東西你都已經准備好了,那么相信你已經了具備C++后台開發能力。但是要記得,一個大型線上項目的開發,從來都不純粹是單一語言的設計和實現。

因此用C++或者用Java或者用Golang或者用Python的區別或許沒那么大,它們都有擅長的地方,畢竟存在即真理。所以,如果你真的有精力的話,不妨還可以了解一下更深層次的技術:

  • 海量日志處理和並行計算開發
  • 分布式技術框架、中間件等 Dubbo、Spring Cloud 、Zookeeper 、Kfaka
  • 流媒體分發技術CDN
  • ...

當然,這些都不是非常必要的。但是絕對是亮點!此外,你可以准備一些基礎向的相關項目:

  • 網絡庫,可參考Muduo或者Nginx實現
  • web服務器/http服務器,可實現基本的http響應請求和處理
  • 簡易版STL庫,展現C++的綜合代碼能力
  • 局域網聊天室開發,涉及到網絡編程實現在線群聊
  • 分布式日志系統
  • 簡易版數據庫設計
  • 可參考一些C++常用庫,造一些輪子或者做些有趣的小工具。

本文所介紹的整體學習路線可覆蓋絕大多數大廠的面試題目和考察范圍,如今學習資料太多,選擇路線清晰的適合自己的才最重要。資料不必多,能理解掌握才是最關鍵的。根據上述學習路線,我總結出一份復習文檔。關注微信搜索業余碼農即可獲得全套答案總結。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM