創做不易,點贊關注支持一下吧,個人更多原創技術分享,關注公衆號「後端技術學堂」第一時間看!linux
最近在知乎常常被邀請回答相似如何學習C++和C++後臺開發應該具體儲備哪些基礎技能的問題。ios
自己我從事的的C++後臺開發的工做,目前在騰訊從事軟件開發工做,因此寫這篇文章,分享本身的C++後臺開發學習路徑和點過的技能樹,但願能給想從過後臺開發的同窗一點參考,若能幫你少走些彎路就更好。程序員
工欲善其事必先利其器,好的書籍能讓學習事半功倍,因此每一個技能點以後我會推薦一些書,都是我讀過且口碑不錯的書,供參考。面試
分享的是個人學習路徑,若是你也能順着這個學習路徑認真學一遍,我想在後臺開發技術上你已經有一個很不錯的技術積累,加上項目練習經過大部分大廠面試是沒有問題的。redis
考過CS或者軟件工程研究生的同窗可能對這個標題不陌生,是的,我說的就是專業課代號408的計算機基礎綜合。這門專業課包含:數據結構、計算機組成原理、計算機網路、操做系統。算法
爲何提起這門課程呢,由於基礎知識過重要了!這是科班區別於培訓班的最大不一樣,理論知識不必定立刻能用於項目上,但當與人討論起某個技術問題時你可以知道它深層次的緣由,看問題的角度會更加全面和系統。shell
打個比方,你可能聽過堆棧的名詞,但知道它的具體結構和不一樣嗎?學完數據結構就明白了;你知道計算機會算加減乘除,但具體是如何實現的呢?組成原理會告訴你;知道程序執行的時候怎麼區分指令地址和數據地址的嗎?操做系統會告訴你答案。數據庫
因此若是你大學不是計算機相關專業,或者是本專業可是沒有徹底吃透基礎的話,強烈建議你務必抽時間好好學習這幾門課程。編程
計算機基礎綜合推薦看大學的計算機專業教材就能夠:數據結構、計算機組成原理、計算機網路、操做系統。小程序
2.輔導書:《算法與數據結構考研試題精析(第二版)》機械工業出版社
輔導書:
《計算機組成原理考研指導》徐愛萍 清華大學出版社
教材:《計算機操做系統(修訂版)》湯子瀛 西安電子科技大學出版社
輔導書:《操做系統考研輔導教程(計算機專業研究生入學考試全真題解) 》電子科技大學出版社
《操做系統考研指導》清華大學出版社
教材:《計算機網絡(第五版)》謝希仁 電子工業出版社
輔導書:《計算機網絡知識要點與習題解析》哈爾濱工程大學出版社
看上面的課本教程估計很是枯燥,下面是我以爲講的不錯的國內大學公開課我聽過一部分,講的都是計算機專業的基礎內容,若是你沒有系統的學過或者學的很差,都是很是建議刷一遍視頻課的。
這一小節寫的有點多,由於基礎實在是過重要了!科班和非科班的差距不是誰學的編程語言多,也不是誰框架用的溜,本質區別是理論知識儲備差異和用CS思惟獨立思考分析解決問題的能力。
語法是一門語言的基礎,C++的基礎語句和語法和C是很像的,最大的不一樣在class和異常處理機制,還有模板的應用,因此有C基礎語法學起來是很快,沒有C基礎也不要緊,啃完下面推薦的書也差很少,光說不練假把式,看完以後趁熱把課後習題敲一遍而且本身編譯經過纔算看完。
《C++ Primer 中文版(第 5 版)》 經典的入門書籍,不要拿大學教材XX強來對比,不是一個等級。
STL提供了豐富的算法庫支持和各類容器,C++標準庫提供了包括最基礎的標準輸入輸出iostrem
、各類容器vector、set、string
,熟練掌握標準庫,不用重複造輪子(練手學習目的的造輪子除外)寫出更C++的代碼。
學完了上面的C++基礎只是會用,要用好還須要不斷學習進階, 站在巨人的肩膀上寫出更健壯高效的代碼,你沒踩過的坑前人已經踩過一遍,關於一些語言細節和更好的編碼習慣,有不少優秀的書籍能夠學習。
《Effective C++》 改善程序與設計的55個具體作法,很是值得一看,老手和新手的差異由此產生!
同一個做者,繼Effective C++以後,Scott Meyers於1996推出這本《More Effective C++(35個改善編程與設計的有效方法)》「續集」。條款變得比較少,頁數卻是多了一些,緣由是此次選材比「一集」更高階,尤爲是第5章。Meyers將此章命名爲技術。
《Inside the C++ Object Model》 這本書還有中文版本,翻譯質量也很高《深度探索C++對象模型》
新標準提供瞭解決現有問題更優雅、更C++的實現。現行的大部分C++軟件仍是C++98的標準,C++98是C++的第一個標準,經歷這麼多年的發展,從前你須要從Boost庫(一個在C++98年代的準C++標準)得到的對C++的擴充支持的大部分功能已經歸入了C++11和甚至C++2X更新的標準當中,與時俱進拿起更先進的生產工具,工具就是效率。
現在幾乎全部的互聯網服務都是跑在linux系統上面的。 對Linux系統一無所知那更加談不上後臺開發了,因此要先學習linux系統操做,不如文件管理,系統命令,文件系統,權限管理,系統服務等。
至於shell script 就相似win的批處理腳本,相信我,你在linux下幹活遲早會須要它,因此趁早系統學起來。
《鳥哥的Linux私房菜基礎學習篇》 這個系列還有一個服務器架設篇,前期學習我的感受不必看
普通用戶只需懂系統操做,軟件開發人員還要懂編程接口。上一階段你已經可以完成熟練操做Linux系統,知道一些常規的系統命令和服務,而且可以利用shell script寫一些小工具提升平常開發效率。
咱們的目標是星辰大海,做爲軟件工程師,還須要更加深刻的掌握linux系統編程技巧,學習系統編程接口、系統調用API、內存管理、進程間通訊(IPC),這是本階段的學習目的。
《UNIX環境高級編程》 這本是linux編程必看的APUE,強烈推薦通讀一遍,後續值得反覆翻閱。
《Linux/UNIX系統編程手冊》 這本書和APUE有點重複,我看完APUE這本就跳着看了,日常能夠看目錄查閱。
在同一臺機器上進程間的通訊(IPC)有多種方式,能夠是經過消息隊列、FIFO、共享內存等方式。網絡編程套接字是指:分佈在不一樣機器上的程序經過系統提供的網絡通訊接口,跨越網絡將不一樣機器上的進程鏈接起來,實現跨機器的網絡通訊。通常有UDP套接字、TCP套接字、Unix Domain,固然,若是你是通訊從業者對SCTP套接字確定也不會陌生。
程序運行數據都在易失性的內存中,須要持久化存儲時就須要數據庫。一個後臺服務系統通常來講都須要考慮數據落地和持久性存儲的問題,這時就會涉及到數據庫選型和應用,數據庫分爲關係型數據庫和非關係型數據庫。
關係型數據庫指採用了關係模型來組織數據的數據庫,表明是MySql。
關係模型指的就是二維表格模型,而一個關係型數據庫就是由二維表及其之間的聯繫所組成的一個數據組織。
非關係型數據庫以鍵值對存儲,且結構不固定,每個元組能夠有不同的字段,每一個元組能夠根據須要增長一些本身的鍵值對,不侷限於固定的結構,能夠減小一些時間和空間的開銷。表明有redis、memcached,騰訊內部組件ckv也是非關係型數據庫。
關於redis還有不少應用,好比基於redis的分佈式鎖的應用,高併發搶紅包模型等,這個後面能夠寫一篇關於分佈式鎖的原理和應用文章。
計算機算法就是利用編程語言編寫出計算機能理解的解決問題的方法。
好的算法能更簡潔高效的解決問題,現在不管是校招仍是社招,大廠筆試都會考察算法,即便不是爲了筆試做爲軟件從業者也應該常常練習算法,保持手感。學習算法是學習解決問題的通用性方法有助於提升邏輯思惟能力。
就我我的經驗來講,不推薦直接啃書的方式學習算法,建議看書的同時結合刷在線編程算法題的方式。
具體的:邊看數據結構或算法導論,同時在牛客或者 leetcode上刷題,由於看書太枯燥很容易失去耐心,在線刷題的好處是你能夠天天定目標,享受每一個題目經過的快感,有正向反饋更容易堅持下來。
架構能力是利用已有知識來設計整個後臺服務系統的能力。不只要求掌握技能的維度還要深度,須要能根據不一樣需求和系統約束,制定不一樣的設計方案。
這時候考慮的東西會更多,包括服務模型的設計:是多進程仍是多線程甚至協程微線程,分佈式仍是集中式;
存儲的選型:考慮數據庫選型用哪一個?須要根據存儲的數據特徵和應用場景來區分,若是是社交應用的數據用非關係型數據庫來存儲可能更好,若是是電商訂單類型的數據,那麼用關係型數據庫來存儲可能更好;
固然,還有後臺系統的其餘方方面面須要考慮,不一一舉例了。
說了這麼多,最最重要的仍是練習練習練習。理論知識儲備是必要條件,移動互聯網時代你們接觸到的碎片化信息太雜太亂,我我的經驗,高濃度的知識精華仍是須要在大師的書本中汲取,因此看書是最正確和快速的學習路徑,沒有捷徑可走。
不過光看書也是不行,編程能力和技術是也是一門現代手藝活,還須要平常不斷的打磨手藝,正如一萬小時定律:
人們眼中的天才之因此卓越非凡,並不是天資超人一等,而是付出了持續不斷的努力。1萬小時的錘鍊是任何人從平凡變成世界級大師的必要條件。要成爲某個領域的專家,須要10000小時,按比例計算就是:若是天天工做八個小時,一週工做五天,那麼成爲一個領域的專家至少須要五年。這就是一萬小時定律。
怎麼打磨提升編程技術能力呢?找項目,找感興趣的東西用代碼去實現它,興趣是最好的老師,這點在編程和技術學習上也徹底適用。
人們總傾向於去作快速得到的愉悅感的事情,好比打一盤遊戲30分鐘就能得到快感。相反,技術碎片的提升是一個長期的過程,三分鐘熱度確定是難以成功的。
因此要用技術作本身感興趣的東西和帶趣味性的編程,好比寫個爬蟲小程序抓取網站數據或者寫個小遊戲,再或者本身造輪子給本身用,並樂此不疲的優化輪子。這樣每走一步都能得到一點成就感,激勵本身繼續走下去,慢慢的必定會有質的飛躍。
這個網站必定要告訴你們,網站就是個C++百科全書,相似Linux的man手冊,日常開發查忘記了函數名或者容器用法直接搜索很是方便,我下載了離線版本。
網址:C++參考: cppreference
一口氣寫下來確定還不夠完善,文章會保持更新和修改,想到了再補充吧文章在公衆號保持更新。
我整理了文中提到和推薦的電子書與視頻教材,都是學習過程收集的,搜索 「後端技術課堂」 回覆 「1024」 免費分享給你們。
我會持續分享軟件編程和程序員那些事,歡迎關注。若你對編程感興趣,我整理了這些年學習編程大約3G的資源彙總,關注公衆號「後端技術學堂」後發送「資料」免費獲取。