親身體驗!后端工程師學習路徑、書籍、視頻推薦
最近有小伙伴問我,一名后端工程師的學習路線是什么?其實現在很多程序員都不是科班出生的,包括我自己,大學壓根沒學過什么計算機相關的課程。非科班出生的程序員的劣勢在于基礎會稍差,比如計算機基礎、計算機網絡等都了解的不多,不過沒關系,只要你利用業余時間系統的來學習,照樣可以做到后來居上。但是問題是,我們的學習路徑是什么?該如何學,網上課程那么多,我到底該看哪一個?打開自己的夾,數不清的資料全部在吃灰,到頭來一個也沒學。
其實同類型的資料我們保存1-2個就足夠了,然后一段時間內專心學習一門知識,猥瑣發育,最后驚艷所有人。
ok,廢話不多說,我今天要分享的就是后端工程師的學習路徑和相關的書籍、視頻,由于后端語言居多,所以本文不會分享語言相關的內容。
計算機組成原理
首先要講的自然就是計算機組成原理相關的知識了,當然這并不是和你單單的介紹計算機是什么組成的,不是教你如何組裝電腦,而是告訴你比如計算機是如何運算我們的數據的、CPU這個大腦是如何高效處理我們的邏輯的、CPU又是如何與內存之間通信的,加快執行我們的程序在CPU維度有哪些優化以及我們運行程序的時候如何解決CPU和內存、內存和磁盤之間的速度鴻溝等等...
這里我和大家推薦 《計算機組成與設計 硬件/軟件接口》 這本書
學習這本書你可以獲取以下知識:
計算機是怎么從大型設備逐漸發展到今天的個人PC機,以及計算機系統結構中的8個偉大的思想:面向摩爾定律的設計、抽象的簡化設計、加速大概率事件、通過并行提高性能、通過流水線提供性能、通過預測提供性能、存儲器層次、通過冗余提高可靠性。
如何判斷一個CPU的性能?最直白的反應就是CPU夠不夠快,也就是我們的程序要跑多久,這個響應時間我們一般稱之為CPU執行時間,這里需要注意的是CPU執行時間并不包含程序執行期間涉及的IO,再細分的話,又可以分為用戶CPU時間和系統CPU時間
有無符號數和無符號數是如何表示的?CPU如何進行比較運算、分支判斷、循環執行的?我們的代碼其實是要經過編譯、匯編、鏈接這樣幾個流程的,加法、減法、乘法、除法以及浮點數相關的運算在計算機層面是如何被實現的。
CPU是如何進行數據冒險,控制冒險的?流水線技術是如何提供吞吐的,處理器的數據通路和控制同路是如何設計的。
再接下來就是存儲器相關的知識了,比如虛擬內存技術、程序分段技術、分頁技術,當發生缺頁后如何找到磁盤頁的,以及為了提升地址的查詢速度,做了哪些優化,頁表的好處與壞處是什么?TLB的好處與壞處是什么?
總之,學習了計算機組成之后,內功絕對可以大增。如果覺得書本知識枯燥難以閱讀的話,我這里再給你推薦個視頻:計算機科學速成課(https://www.bilibili.com/video/BV1EW411u7th)
非常生動形象的課,一共40集,每集大概10分鐘,全部看完7個小時足矣,非常適合入門,這個視頻配上書籍,簡直完美。
操作系統
學習計算機組成原理之后,我們會了解計算機各個硬件之間是如何協調工作的,那么接下來就是肝操作系統了,操作系統是處于計算機硬件與軟件資源之間的程序。從程序員的角度來看,學習操作系統可以幫助我們更好的了解程序是如何被調度的等等。操作系統需要處理如管理與配置內存、決定系統資源供需的優先次序、控制輸入設備與輸出設備、操作網絡與管理文件系統等基本事務,操作系統也提供一個讓用戶與系統交互的操作界面。這里和大家推薦 《現代操作系統》 這本書
通過學習這本書你可以獲得以下知識:
進程是什么、進程的模型、進程的創建、進程的終止、進程的層次結構、進程的實現、多道程序的設計模型
線程是什么、線程模型、用戶空間的線程、內核空間的線程、單線程與多線程的優缺點
進程間可以通過哪些方式來通信,什么是進程間的競爭條件、臨界區
調度過程涉及到的算法,比如先來先服務、短作業優先算法、最短剩余時間優先以及比較公平的時間片輪轉調度
常見的頁面置換算法有哪些,比如最優頁面置換算法、最近未使用頁面置換算法以及最近最少使用頁面置換算法等等
文件系統的了解,比如有關文件的構造、命名、訪問、使用、保護、實現和管理是怎么設計的
IO設備的了解,比如如何讀寫IO設備的內容,常見的有內存映射IO、直接存儲器存取
了解什么是死鎖,造成死鎖的條件以及解決死鎖的經典方法,如何預防死鎖等等
如果覺的書本知識難以閱讀的話,這里也推薦個視頻操作系統-清華大學(https://www.bilibili.com/video/BV1wq4y1M7qf)
這是由清華大學的老師講的操作系統視頻課,簡單、通俗易懂,每段視頻的時長也不長,大概就10來分鐘。
TCP/IP
當具備了計算機組成、操作系統的基礎知識后,接下來就可以看看網絡相關的內容了,計算機網絡中面試官最喜歡問的就是TCP/IP相關的知識了,關于這方面的知識,我推薦一本書 《圖解》TCP/IP
我這里還推薦一本掘金小冊 《深入理解 TCP 協議:從原理到實戰》
這本小冊,我記得當時花了2-3天就看完了,整個閱讀體驗非常絲滑,也是非常通俗易懂的書籍,如果想要應付面試,這本小冊絕對是個不錯的選擇。總之通過以上兩本書,你可以獲得以下知識:
網絡的分層模型
TCP協議為什么是可靠的協議
什么叫面向連接、基于字節流、全雙工的協議
數據包是如何被拆分的,MTU和MSS分別是什么,位于哪一層
為什么TCP、IP的握手需要三次,揮手要四次,揮手三次行不行
三次握手太慢,有沒有更快的方式
TIME_WAIT是什么狀態?TIME_WAIT是哪一方的狀態,為什么TIME_WAIT那一方需要持續2個MSL的時間
不知道你有沒有遇到過"Connection Reset" 或者"Connection refused" ,它們代表什么意思
發送方沒收到接收方的ACK怎么辦,發送方重傳的機制是怎么樣的,多久重傳才合適
如果接收方沒有能力接受大量的數據怎么辦,這就引入了滑動窗口的概念,滑動窗口是如何控制數據窗口大小的
一開始發送方并不知道接收方能接收多少數據,那如何發送數據呢,每次發一點太慢,每次發很多對方又接收不了
總之,如果你的工作不是搞網絡的,又不想花費大量時間來閱讀TCP相關的知識,那么上面兩本書個人覺得足夠了。
數據結構與算法
這方面我看的書比較少,所以不打算推薦書籍,數據結構與算法可能大家更加注重的算法,BAT等大廠的面試離不開算法,以前聽到小道消息,據說字節跳動的面試官一般算法題都會從leetcode上挑選原題,并且也不會太難,所以這方面的知識,我還是直接建議大家動手練寫,直接去leetcode上刷題,比如每日2道,一個月下來就是60道
如圖所示,具體的算法分類大概這么多,大家刷題的時候,注意不要把精力全部都放在一種類型上,盡量廣一點,當然有很多冷門的類型,個人覺得也不必花費太多時間,像熱門的算法如數組、字符串、動態規劃、圖、鏈表等可以多花點心思。
這里再推薦一個學習數據結構的有趣網站 visualgo(https://visualgo.net/zh)
這個網站通過動圖的方式幫助你了解各種數據結構是怎么樣的形式。
比如對于這個二叉搜索樹來說,每次走到哪個節點,對應的代碼還給你展示出來,確實很生動。
MySQL
MySQL應該是每個后端工程師必備的技能,當然這里說的不是簡單的CURD,而是稍微高級點的,比如索引知識、架構模式、高可用等等,由于現在MySQL基本都是使用InnoDB存儲引擎,因此我推薦 《MySQL技術內幕 InnoDB存儲引擎》
通過這本書,你可以了解到以下知識:
MySQL幾種存儲引擎的介紹與比較
InnoDB的架構模式
插入緩沖、兩次寫、自適應哈希、異步IO、刷新鄰接頁分別是為了解決什么問題
日志類型,比如錯誤日志、慢查詢日志、二進制日志等
索引相關知識,為什么用b+樹索引,聚集索引和輔助索引的區別,b+樹索引的分裂與管理,什么情況下用聯合索引,覆蓋索引為什么好
鎖相關的知識,InndoDB會涉及哪些鎖,行鎖有哪些算法,死鎖怎么避免
什么是臟讀、幻讀,如何解決
事務相關的知識,這個是重中之重了,比如redo log、undo log是干什么的,事務的隔離級別有哪些,它們有什么區別?XA事務是在什么地方體現的,長事務會有什么問題
自古MySQL就是后端同學面試中的必考技能,并且隨著互聯網卷的程度越來越高了,MySQL問的姿勢也多了,因此這方面是需要多花時間學習的。
當然如果條件允許的話,也推薦看林曉斌老師的《MySQL45講》,但是這門課不適合新手小白,適合有一定MySQL基礎的從業人員,看完絕對收獲滿滿。
Redis
說了數據庫,就得說緩存了,說到緩存,那就是當下最流行的NoSQL數據庫Redis,Redis面試的重要程度不亞于MySQL,我這里和大家推薦 《redis的設計與實現》
通過這本書,你可以獲得以下知識:
基本的底層數據結構以及優缺點,比如SDS、整數集合、跳躍表、壓縮列表
哈希表是如何解決沖突的
持久化相關的,AOF和RDB的區別,它們的優缺點是什么,AOF和RDB的過程會阻塞主進程嗎
redis的過期鍵是如何刪除的
redis的事件模型,文件事件和時間事件分別是什么
serverCron函數是干嘛的
主從復制模式下,舊版和新版的復制模式有什么區別
哨兵、分片
lua腳本解決原子性的問題
這本書側重原理與實現,閱讀起來也是通俗易懂,適合新手小白和需要進階的工程師。
最后
TCP/IP 視頻
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。