C++服務器開發完整學習路線(含免費學習資料下載地址)
相信大部分同學剛畢業或者想轉行做c++服務端開發的時候都很迷茫不知道從哪裏開始學習,這篇文章的目的就是爲了幫助更多想入行或者想轉行做c++服務器的新人避免走更多的彎路,最終能夠順利的掌握相關知識找到心儀的工作。
所有資料可以加羣:783153655 (一線互聯網架構交流羣)獲取。
一. 基礎階段
-
c/c++編程語言
-
linux基礎
-
數據結構與算法
-
設計模式
-
腳本語言(可選)
二. 入門階段
-
linux系統編程
-
linux網絡編程
三. 進階階段
-
數據庫mysql
-
分佈式緩存redis
-
網絡庫
四. 項目實踐階段
-
編寫簡單FTP服務器
五. 高級階段(可選)
-
nginx
-
zookeeper
-
消息隊列
-
skynet
-
boost
-
負載均衡
-
容器
-
rpc
-
微服務
……
一. 基礎階段
1. c/c++編程語言
-
c語言必備的入門書籍就是這本《C程序設計語言》
-
另外推薦一本比較經典的c語言書籍,可以選擇性看一下《C陷阱與缺陷》
-
既然是C++的學習路線,那麼《C++ Primer》這本書肯定是必學不可的
學了c++基礎後,爲了寫出更高效的c++代碼,那麼就須要看這本書《Effective C++》
-
個人認爲STL的原理非常重要,我推薦《STL源代碼剖析》 -
另外推薦一本比較經典的c++書籍,可以選擇性看一下《深度探索C++對象模型》 -
2. linux基礎
-
linux系統安裝和命令、工具使用
c++服務器程序基本都是運行在linux系統下面,所以對於linux的系統安裝、命令工具等的使用要學會。
推薦《鳥哥的Linux私房菜-基礎學習篇》
makefile編程 -
在軟件開發中,make通常被視爲一種軟件構建工具。該工具主要經由讀取一種名爲“makefile”或“Makefile”的文件來實現軟件的自動化建構。它會通過一種被稱之爲“target”概念來檢查相關文件之間的依賴關係,這種依賴關係的檢查系統非常簡單,主要通過對比文件的修改時間來實現。在大多數情況下,我們主要用它來編譯源代碼,生成結果代碼,然後把結果代碼連接起來生成可執行文件或者庫文件。
推薦《跟我一起學makefile》
3. 數據結構與算法
-
入門推薦《大話數據結構》這本書,它的最大的特點是把理論講得很有趣,不枯燥。而且每個數據結構和算法,作者都結合了生活中的例子,能讓你有非常直觀的感受。雖然這本書有 400 頁,但是花兩天時間讀完應該是沒問題的。所以,如果你之前完全不懂數據結構和算法,可以先從這本書看起。
-
你也可以學習《數據結構和算法分析》。國內外很多大學都拿它當作教材。因爲這本書非常系統、全面、嚴謹,而且又不是特別難,適合對數據結構和算法有些基本瞭解,並且掌握了至少一門編程語言的同學。而且,這個作者也很用心,他用了三種語言,寫了三個版本,分別是:《數據結構與算法分析 : C 語言描述》、《數據結構與算法分析 : C++ 描述》、《數據結構與算法分析 : Java 語言描述》。
4. 設計模式
設計模式是一套被反覆使用、多數人知曉的、經過分類的、代碼設計經驗的總結。
使用設計模式的目的:爲了代碼可重用性、讓代碼更容易被他人理解、保證代碼可靠性。 設計模式使代碼編寫真正工程化;設計模式是軟件工程的基石脈絡,如同大廈的結構一樣。
5. 腳本語言(可選)
做c++開發很多情況下會和其他腳本語言做混合編程,特別是遊戲公司以c++配合lua腳本編程作爲主流,也有一些用python, 所以建議大家學一下這兩門腳本語言
-
lua書籍推薦,包括入門書籍《lua程序設計》和深入原理書籍《lua設計與實現》
-
python書籍推薦 《python核心編程》
二. 入門階段
1. linux系統編程
linux下的編程你首先要學會文件和目錄、標準I/O庫、系統數據文件和信息、進程環境、進程控制、進程關係、信號、線程、線程控制、守護進程、各種I/O、進程間通信、網絡IPC等方面的內容。
推薦《unix環境高級編程》
2. linux網絡編程
網絡編程可以編寫網絡通訊程序,比如聊天程序、數據傳輸程序、文件傳輸程序等到;可以讓你對網絡通訊有更深的理解,當你遇到網絡通訊方面的問題時,會有很深入的分析;爲學習湧現很多分佈式應用系統打下堅實的基礎。
推薦《unix網絡編程》(共兩卷)
三. 進階階段
1. 數據庫mysql
-
入門推薦《MySQL必知必會》這是最好的數據庫入門書,在Amazon上長期排在數據庫銷售榜首,建議想快速瞭解數據庫原理和MySQL的新手閱讀。快餐性質,簡潔明快,小開本,而且很薄,比較好讀。
-
怎麼說,每個行業都有幾本被翻來翻去的“街書”,而《mysql技術內幕》就是MySQL的“街書”。從源代碼的角度深度解析了InnoDB的體系結構、實現原理、工作機制,並給出了大量最佳實踐,能幫助你係統而深入地掌握InnoDB
-
《高性能mysql》作者推薦的工具、實戰案例及經驗過的診斷技術,可大大提高性能急救技能,以及加深對MySQL本質的理解。而且本書將數據庫結構的客觀方面納入思考,此外還增補了MySQL高可用性及雲特性
2. 分佈式緩存redis
-
《Redis 設計與實現》一書全面而完整地講解了 Redis 的內部運行機制, 對 Redis 的大多數單機功能以及所有多機功能的實現原理進行了介紹, 展示了這些功能的核心數據結構以及關鍵的算法思想。 通過閱讀本書, 讀者可以快速、有效地瞭解 Redis 的內部構造以及運作機制, 從而學會如何更高效地使用 Redis。
《redis實戰》本書深入淺出地介紹了Redis的5種數據類型,並通過多個實用示例展示了Redis的用法。除此之外,書中還講述了Redis的優化方法以及擴展方法。 -
3. 網絡庫
linux c/c++網絡庫比較多,有boost.asio、libevent、libev、libuv、muduo、ace等, 建議找一個代碼比較少夠精簡的來反覆學習,琢磨內部原理,有效提升網絡編程能力。我自己反覆研究了muduo網絡庫幾遍收穫不少,你們可以選libevent、libev、libuv、muduo中的一個學習即可,其中libev和muduo最爲精簡,容易學習。
-
libevent學習資源
Libevent源碼分析專欄:https://blog.csdn.net/luotuo44/column/info/libevent-src/2
libevent-book -
muduo學習資源
Linux多線程服務端編程:使用muduo C++網絡庫
muduo使用手冊
四. 項目實踐階段
1. 編寫簡單FTP服務器
2. 加羣 783153655
五. 高級階段(可選)
1. nginx
-
Nginx是一款自由的、開源的、高性能的HTTP服務器和反向代理服務器;同時也是一個IMAP、POP3、SMTP代理服務器;Nginx可以作爲一個HTTP服務器進行網站的發佈處理,另外Nginx可以作爲反向代理進行負載均衡的實現。
推薦書籍《深入理解nginx模塊開發與架構解析》
2. zookeeper
-
ZooKeeper是一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要組件。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。
3. 消息隊列
-
當前使用較多的消息隊列有RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、MetaMq等, 我推薦兩本kafka的書籍, 入門書籍《kafka權威指南》和深入的書籍 《Kafka技術內幕:圖文詳解Kafka源碼設計與實現》
-
4. skynet
-
Skynet是一個基於C跟lua的開源服務端併發框架, 現在很多遊戲公司都在用它,特別是中小型的公司,棋牌公司,越來越多公司採用, 想往遊戲方面發展建議認真學一下原理。
skynet wiki:https://github.com/cloudwu/skynet/wiki
skynet作者博客:https://blog.codingnow.com/eo/skynet/
skynet框架應用文章:https://blog.csdn.net/qq769651718/article/category/74802075.
未完待續
MongoDB
memcache等等