C Linux 後端之進BAT的學習路線

2021-10-20 07:44:34 字數 2602 閱讀 9487

我是2023年8月全面開始學習c++,之前只是有一點c++的基礎,僅看過《c++ prime plus 第六版》,2023年參加7月參加校招,並且取得幾個大廠的offer,下面是我幾個月的學習路線。

cpper雄起!!!

《c++ prime 第五版》

關於《c++ prime 第五版》與 《c++ primeplus第六版》的選擇問題:如果只能選擇一本,個人建議選《c++ prime 第五版》。

《c++ primeplus第六版》:這本書,講解比較連貫,沒有跳躍性。但是主體基本是以c++98/03進行講解,而關於c++11的知識大都在附錄,且屬於一筆帶過存在,講解的不夠透徹。當時自己看完這本書,後來又重新買了本《c++ prime 第五版》,看完才算c++入門了。

注意,如果時間不充足,看書不用按照順序看,可以先把重要的知識點看完,再看別的小的點。

下面這三本書,主要是關於c++的物件模型、c++的使用建議、stl底層實現等方面,用於提公升c++內功:

到此,c++知識基本已經完結,可能有人覺得還沒涉及到c++模板的知識。但是在上面的推薦的知識中,已經包含了常用的模板使用技術,更加深入的元程式設計屬於黑魔法級別,不會有公司使用的。

當然,如果對模板、元程式設計非常有興趣,可以看看:

那麼下面就要進入語言基礎之外的體系了。

對於c/c++程式設計師,更加推薦 兩本書:《深入理解計算機系統》 和 《程式設計師的自我修養-鏈結、裝載》。這兩本書能站在編譯器的角度看待c/c++語言規則,校招問的也比較多,比如new是在底層是怎麼乙個過程?如果校招準備時間不夠,可以不看 《程式設計師的自我修養-鏈結、裝載》。

如果時間有餘,則可以進一步看《作業系統精髓與設計原理 第8版》,如果是非科班可以和王道考研-作業系統一起食用更佳。

好嘞,到這裡真正開始進入到linux後端開發了。需要先學習linux的系統程式設計、網路程式設計知識,毫無疑問兩本書:

但有個難題,這兩本書太厚了,對於初學者不友好,一開始看可能陷入無法理解的細節中。自己的方法是:

至於搭建linux環境,有兩個方法:

如果只是日常開發,建議選擇wsl,比較方便,除錯網路之類的選擇虛擬機器。

如果上面都已經看完,則表示已經具備 c++ & linux 後端開發的基礎了,那麼下面可以開始學習伺服器開發了:

遊雙老師的《linux高效能伺服器程式設計》,這本書剖析了設計乙個伺服器的各個要點,其中的點面試也經常考,比如epoll的et模式能使用阻塞io嗎?這本書強勢推薦。

補充:有人可能覺得,muduo專案爛大街,但是你真的把裡面的設計原理搞懂了嗎?比如著名的libuvredis的伺服器相關的設計和muduo的設計完全一致,如果你搞懂了以後看redis原始碼也很輕鬆。其次有時間可以看看libuv,**量不多,裡面的多執行緒設計也具有參考價值。

如果到此,你還使時間充足,想要衝刺核心部門,那麼可以學習rpc的相關知識。你可以從jsonrpc開始學習json是怎麼實現的,高階一點你可以看看brpc的設計方式,比如它的協程是怎麼設計的。

rpc就避免不了序列化協議部分,關於這個常用的有:protobuff,jsonxml

對於協議部分,要明白各個之間的區別、優劣勢。

如果有時間,真的充足!!!可以看看redis的原始碼,redis原始碼,個人覺得可以分為三個部分來看:

伺服器設計:這部分的主要內容就是:1)redis怎麼接受客戶端的輸入、解析成指令;2)執行指令;3)怎麼將指令結果返回給客戶端。

aeeventloop的設計和 《linux高效能伺服器程式設計》講解的總體類似,輸入輸出緩衝區的設計和muduo講解的基本一致,也有應用層的流量控制。

資料結構設計:各個資料結構的設計,怎麼融合到aeeventloop中,成為伺服器的一部分,實現了各個指令功能。

分布式設計:1)主從同步replication;2)sentinel模式:用於解決主從同步中的主服務宕機怎麼辦,故障轉移等;3)集群。

兩本側重點不同,前者側重講解原理,分析的比較清楚,只是**是python的偽**。後者結合redis的原始碼。結合看比較好。

最後,學習redis不能光看書和**,要先學會使用!!!再去看,有幾個**可以看看

redis指令官網:官網,實時更新,如果上面中文網頁沒有的知識,可以來這看。

如果你的時間充足:

是否要購買leetcode會員,能把前面的300道題目寫完足夠。如果300道寫完,可以到牛客網繼續刷真題,因為面試時的面試題是要處理輸

入輸出的,秋招時很多人因為不能熟練處理輸入輸出導致無法ac。如果還想買,建議和同學一起買,更加便宜。

如果你時間充足,可以看看《tcp/ip 卷一》,時間不充足就不要看了。因為上面的書籍上、**裡都包含了常用的tcp/ip知識。

建議掌握以下linux 命令,幫助你分析網路通訊:

學會使用,cmake、gdb。

gdb:建議學學,不僅有利於秋招,也能幫助自己學習源**、除錯

最後幾點建議:

iOS開發小技巧之 WeakSelf巨集的進化

我們都知道在防止如block的迴圈引用時,會使用 weak關鍵字做如下定義 weak typeof self weakself self 1後來,為了方便,不用每次都要寫這樣一句固定 我們定義了巨集 define weakself weak typeof self weakself self 1之後...

Node之簡單的前後端互動 例項講解

node是前端必學的一門技能,我們都知道node是用的js做後端,在學習node之前我們有必要明白node是如何實現前後端互動的。這裡寫了乙個簡單的通過原生ajax與node實現的乙個互動,剛剛學node的朋友可以看一看。一方面理解服務端與客戶端是如何互動的,一方面更熟悉node開發。先貼 有興趣的...

Python 3 6 之 urlopen方法的學習

1.urlopen的使用原始碼 def urlopen url,data none,timeout socket.global default timeout,cafile none,capath none,cadefault false,context none 其中重要引數 data 請求中附加...