我是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專案爛大街,但是你真的把裡面的設計原理搞懂了嗎?比如著名的libuv
和redis
的伺服器相關的設計和muduo
的設計完全一致,如果你搞懂了以後看redis原始碼也很輕鬆。其次有時間可以看看libuv
,**量不多,裡面的多執行緒設計也具有參考價值。
如果到此,你還使時間充足,想要衝刺核心部門,那麼可以學習rpc的相關知識。你可以從jsonrpc
開始學習json是怎麼實現的,高階一點你可以看看brpc
的設計方式,比如它的協程是怎麼設計的。
rpc就避免不了序列化協議部分,關於這個常用的有:protobuff
,json
,xml
。
對於協議部分,要明白各個之間的區別、優劣勢。
如果有時間,真的充足!!!可以看看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 請求中附加...