赠送 12 本 《C++ 服务器开发精髓》
在大多數同學眼里,C/C++ 是一門非常“難學”的編程語言,然而一旦學生,其功無窮。那要如何學習呢?
C/C++ 這門語言與其他高級語言不同,它是離操作系統較近的語言。所以學好 C/C++ 體系的技術棧必須結合操作系統的運行機制來學習。展開來說,就是你必須掌握操作系統層面的幾大基礎知識,他們是匯編、編譯鏈接與運行時體系、狹義的操作系統原理、多線程、網絡編程。
第一個基礎知識是匯編,我們學習匯編不是一定要用匯編來寫代碼,就像我們學習 C/C++ 也不一定單純為了面試和找工作。
對于 C/C++ 的同學來說,匯編是建議一定要掌握的,只有這樣,你才能在書寫 C++ 代碼的時候,清楚地知道你的每一行C++代碼背后對應著什么樣的機器指令,if/for/while 等基本程序結構如何實現的,函數的返回值如何返回的,為什么整型變量的數學運算不是原子的,最終你知道如何書寫代碼才能做到效率最高。掌握了匯編,你可以明白,在 C++ 中,一個棧對象從構造到析構,其整個生命周期里,開發者的代碼、編譯器和操作系統分別做了什么。掌握了匯編,你可以理解函數調用是如何實現的,你可以理解函數的幾種調用方法,為什么printf這樣的函數其調用方式不能是 __stdcall,而必須是 __cdecl。掌握了匯編,你就能明白為什么一個類對象增加一個方法不會增加其實際占的內存空間。
第二個基礎知識是編譯、鏈接與運行時體系知識。作為一個開發者,要清楚地知道我們寫的 C/C++ 程序是如何通過預處理、編譯與鏈接等步驟最終變成可執行的二進制文件,操作系統如何識別一個文件為可執行文件,一個可執行文件包含什么內容,執行時如何加載到進程的地址空間,程序的每一個變量和數據位于進程地址空間的什么位置,如何引用到。一個進程的地址空間有些什么內容,各段地址分布著什么內容,為什么讀寫空指針或者野指針會有內存問題。一個進程如何裝在各個 so 或 dll 文件的,這些文件被加載到進程地址空間的什么位置,如何被執行,數據如何被交換。
第三個基礎知識是狹義的操作系統原理。這里加上“狹義”二字是因為從廣義上來講,以上所說的內容都是操作系統原理的范疇。狹義的操作系統原理這里包括操作系統如何管理進程與線程,虛擬內存與物理內存之間的對應關系,何為內存映射文件,進程之間如何通信等等。
第四個基礎知識是多線程知識。嚴格來說,這點已經包括在第三點之中了,我之所以將其單獨列出來,是因為多線程編程是我們做應用服務最常用的技術之一。最近面試過幾個學歷非常好的同學,對于一個進程中如果某個線程因為內存問題而退出,是否會導致整個進程退出的問題答不好,實在不應該。多線程知識其實不難學,立足于理解與實踐而不是應付面試,可以學的很好。無論是 Windows 還是 Linux 操作系統,操作系統提供的線程同步對象就那么幾種,Windows 常用的有臨界區(關鍵端)、Event、互斥體、信號量等,Linux 有互斥體、信號量、讀寫鎖、條件變量,這些知識點學過則會,不學則不會。這些線程同步原語花上幾天就能搞得清楚,大多數同學不是學不會,而是不愿意學,但是偏偏喜歡在簡歷上寫上自己熟悉多線程編程。面試的時候,被問到條件變量的虛假喚醒機制都說不清楚,非要說自己用過條件變量。這是一些同學犯的很低級的錯誤,如果真用過條件變量,如果不知道虛假喚醒機制,那一定寫的代碼是不對的。市場上目前沒有任何一本圖書對以上知識形成體系的介紹,當然,我的本書填補了這一空缺,你將從本書中獲得從進程與線程的關系,再到常用的線程同步原語的區別與使用場景,再到線程池以及基于生產者消費者模型的消息隊列,以及對協程思想介紹的相關知識。
掌握了常見的多線程同步原語之后,接下來可以找一些帶多線程的項目去學習一下,不管是否帶 UI 的都行。我推薦的一種方式是,使用 gdb 或者 Visual Studio 調試器將你需要學習的多線程程序中斷下來,在多線程面板,看看這個進程一共有多少個正在運行的線程,分析每個線程的作用,然后研究下這些線程在何時何地創建的,為什么需要創建新的線程。嘗試愛過幾個人,面對愛情你會誠實很多;嘗試研究幾個多線程項目,面對多線程你會熟練許多。
第五個是網絡編程,直白地說就是 Socket 編程。操作系統層面提供的 API 會在相當長的時間內保持接口不變,一旦學成,終生受用。理解和掌握常用的基礎 socket API 不僅可以最大化地去定制各種網絡通信框架,更不用說使用市面上流行的網絡通信庫了,最重要的是,它會是你排查各種網絡疑難雜癥堅實的技術保障。操作系統層面提供的網絡模型就那么幾種,無論像 Java/Go/Python 等語言如何封裝,作為技術的源頭,我們有什么理由不去掌握它呢?市面上關于網絡編程的書很多,我在書中結合我這些年的工作經驗總結了二十幾個網絡編程中的重點和難點,現在全部交給你。
以上是基于 C++ 技術棧來說,并沒有包括算法與數據結構、數據庫等方面的基本功,但是這些額外的也是應該需要掌握的。掌握了如上所說的,你就達到了一個熟練工階段。
為了幫助大家學好 C++,我給大家推薦一本書《C++ 服務器開發精髓》:
我聯合了 6 個號主,給大家送 12 本此書,每個號主抽獎送 2 本,一共 12 本。各個號主單獨抽獎,6 個一起參加,中獎幾率更大。
▲打開公眾號回復『?cpp?』參與抽獎
▲打開公眾號回復『?cpp?』參與抽獎
▲打開公眾號回復『?cpp?』參與抽獎
▲打開公眾號回復『?cpp?』參與抽獎
▲打開公眾號回復『?cpp?』參與抽獎
?▲打開公眾號回復『?cpp?』參與抽獎
《C++ 服務器開發精髓》這本書正是一本幫你成為 C/C++ 技術棧的熟練工的書。當然,這本書除了詳細講解了 C++11/14/17 新標準常用的方法以外,只是以 C/C++ 為編程語言來介紹相關的后端開發技術棧,這不是一本講 C/C++ 語言本身的書,講 C/C++ 語言的書太多了,多如過江之鯽。
這本書有什么內容?
這本書中詳細地介紹了除了數據庫以外、要掌握成為一名合格的 C++ 開發者需要掌握哪些知識。通過本書你將獲得:
C++ 開發編譯調試完整技術鏈;
C++ 11/14/17 常用特性和實用方法
多線程編程技術;
作者精心凝煉的二十多個網絡編程重難點知識;
網絡故障排查與定位知識;如何設計可兼容可擴展的通信協議;
如何設計高性能網絡框架;
如何設計高性能服務框架;
如何開發服務常用組件等。
圖書作者是一線開發,所以書中的內容全部是實戰經驗,作者喜歡追求能落地的技術,所以全書雖然很厚,但是每一章節的內容都是實實在在地剖析技術背后的原理,教你知其然更知其所以然。
這本書適合哪些讀者?
如果你是個學生,將來想做 C/C++ 后臺開發,或者你做了幾年 C/C++ 后臺開發后,還沒形成自己的技術體系或者技術認知,強烈推薦這本書,除了數據庫部分沒用,其他部分都介紹的很詳細。本書最大的特點就是用了非常細粒度的示例,娓娓道來,解釋清楚各個技術原理,詳述哪些是重點和難點,且這些示例都來自實際開發。
如果你是非 C/C++ 技術棧的讀者,想了解自己所用的語言(如 Java/Go )的運行時在操作系統接口層面是如何實現的,那么這本書也適合你。
現在還可以在哪里買到?
圖書采用大開本印刷,一共七百多頁,厚度比肩《算法導論》。
原價 168,本號讀者福利—— 半價可入手。
指定的半價商城鏈接:
https://item.jd.com/13312460.html
點擊“閱讀原文”也可以直達購買鏈接。
總結
以上是生活随笔為你收集整理的赠送 12 本 《C++ 服务器开发精髓》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深入理解Linux内核之主调度器
- 下一篇: 这些令人仰望的C++大咖,都是怎样炼成的