一名合格的程式猿修煉手冊

陈风破浪的帆發表於2024-05-12

一名合格的程式猿修煉手冊📖 😄💯

Github 有個「清華大學計算機系課程攻略」的倉庫。💻

img

倉庫地址

我看了下清華大學的計算機系課程表,我這裡簡單列一下跟計算機相關的課程,其實還有很多文化課、圖形學、數位電路、高數等等。

  • 大一:C/C++語言;

  • 大二:Java語言、資料結構、組合語言;

  • 大三:計算機組成、計算機網路、編譯原理、作業系統、資料庫系統

然後,我覺得計算機專業最重要的5門課是:

  1. 資料結構與演算法

  2. 計算機組成原理

  3. 作業系統

  4. 計算機網路

  5. 資料庫

之所以把這五個作為最重要的課,其實包含一點功利之心,因為校招面試大廠的時候,這五門基礎課問的最多的,至於其他的編譯原理、組合語言、數學基礎課程不是說不重要,只是相對於校招面試這些課程問題的比較少。

接下來,我就跟大家分享下,我看過資料結構與演算法、計算機組成、作業系統、計算機網路、資料庫這些課程的書和影片,都是從入門再到進階的路線。

這裡推薦下我當初自學的書籍和影片。

先來說說書籍:

  • 資料結構與演算法:《大話資料結構》->《演算法圖解》->《資料結構與演算法之美》 -> 《劍指offer》 -> LeetCode刷題(至少刷到200多道)

  • 作業系統:《作業系統導論》->《現代作業系統》

  • 計算機網路:《圖解HTTP》->《圖解TCP/IP》->《網路是怎麼連線的》 ->《計算機網路自頂向下》->《TCP/IP協議詳解卷1

  • 計算機組成:《程式是怎麼跑來的》->《計算機組成原理:軟體/介面與設計》->《深入理解計算機系統》

  • 資料庫:《SQL必知必會》->《從根兒上理解mysql》->《mysql技術內幕》->《高效能mysql》

    我也把計算機經典書籍(資料結構與演算法、作業系統、計算機組成、計算機網路、Linux、資料庫等)也整理好了,點選獲取方式計算機必讀書籍(含下載方式)資料結構,計算機網路,資料庫,計算機組成原理,作業系統這些統統都有。

一、資料結構與演算法

很多人同學在大一的時候,就學會了一門程式語言,大機率都是 C 語言,有了一定的程式設計能力,就可以開始學習資料結構與演算法。

資料結構與演算法這方面的話是非常非常非常重要的,想要衝大廠的同學們如果這方面不過關可能連筆試都過不去,更別談面試的手撕演算法了。

  • 演算法:動態規劃、回溯演算法、查詢演算法、搜尋演算法、貪心演算法、分治演算法、位運算、雙指標、排序、模擬、數學、……
  • 資料結構:陣列、棧、佇列、字串、連結串列、樹、圖、堆、雜湊表、……

資料結構學習

強烈推薦浙江大學的演算法與資料結構課程,該課程非常系統,也很經典,適合小白入門演算法,程式碼是基於C語言來講解的,B 站影片連結

img

現在大多數高階語言都會有容器,就是把一些常見的資料結構封裝成了容器,然後使用起來就比較方便,但是不利於我們理解底層的資料結構是怎麼變換和操作的,所以這門課還是很有意義的。

書的話可以結合《大話資料結構》和《資料結構與演算法之美》一起看。

這裡也推薦 Leetcode官方出品的免費教程 Leetbook,網站很細心的按照各個知識點循序漸進地羅列了出來。講解知識 + 實戰演練,學習起來會比看書效率高。

img

演算法學習

在我看來,筆試能力在校招中要佔據 60% 的重要程度。

首先筆試不過,你根本沒有面試的展示機會。其次面試中也會反覆讓你手寫程式碼,以位元組為例,每一輪面試都是1-2道程式設計題,有時候不怎麼聊簡歷;百度每一輪面試有一道程式設計題。現在公司的面試模式就是這樣,如果程式碼沒搞出來,大機率會被淘汰。並且最窒息的是這些程式碼題都不簡單,一般都是 leetcode中等到hard難度。

刷題主要可從以下三個渠道:
劍指offer:https://www.nowcoder.com/ta/coding-interviews
leetcode: https://leetcode-cn.com/problemset/algorithms/
近期面試中常考題:https://www.nowcoder.com/activity/o

《劍指 offer》 作為大經典,是一定要刷兩遍以上的,很多題都是面試時的原題。裡面包含了很多筆試常用的思想方法。反覆看,反覆研。我一開始每天10題,過兩遍以後,要求自己每天快速過劍指一遍。

leetcode 由於題目十分之多,刷完是不可能的。我的意見是 leetcode作為你弱項的專項練習。 leetcode右側有標籤分類,如下圖:

img

另外在鞏固完弱項的情況下,建議將leetcode前300題刷熟練,國內大廠面試出的程式碼題 80% 都是這個範圍內的。

另外,我在刷題的時候看了《labuladong總結的演算法小抄》,對演算法的理解很有幫助。

公司常考題有:

  • 連結串列類(連結串列反轉類題目)
  • 二叉樹類(二叉樹的遍歷型別題,最大公祖先類題目)
  • 字串操作題目,
  • dfs/bfs,
  • 動態規劃(這個考的基本都是leetcode上的或者是揹包問題,對於動態規劃問題其實有很多種類,比較見到的就是一維動態和二維動態),另外還有區間排程型別的題目(貪心演算法,也屬於動態規劃的一種特殊情況。

其實也沒有什麼技巧,多刷題,多理解就好了。

二、計算機組成原理💻

先極力推薦 b 站的《電腦科學速成課》,這個課程是國外錄製的,內容真的是好,影片的動畫很精美,講課的時候不會很死板,反正就是不看後悔、相見很晚系列。

img

對於入門計算機組成,可以先看前 10 個影片,看完這 10 個影片也就不到 2 個小時,看完前 10 個影片對計算機的工作方式就有一個基本的瞭解了。

看完前 10 個影片就可以開始看書了。

《計算機是怎麼樣跑起來》和《程式是怎麼跑起來的》

講真,不太建議小白一上來就看那些厚的不行的計算機組成原理的黑皮書,這些書是經典的沒錯,也正是由於它們是經典的,所以這些書的知識體系很全、很多、很厚。

但是這樣很容易讓初學者迷失在裡頭,可能剛興致勃勃看幾十頁就放棄了,於是這些厚的不行的書就成為了你們的墊書神器知識沒學多少,頸椎病倒是治好了。

對於初學者,我推薦兩本書《計算機是怎麼樣跑起來》和《程式是怎麼跑起來的》,這兩本很薄而且圖文並茂,作者都是用大白話的方式來闡述知識,這點對初學者非常友好。

這兩本不用 1 個月就能看完,因為在看這兩本書的時候,你會看的很順暢,相比學習的心態,你更多的是會帶著「好奇心」的心態去讀。

其中《程式是怎麼跑起來的》是一個「微縮版本」的計算機組成原理,你可以只選擇看這一本。

img

從這本書的名字也可以知道,它是從計算機是怎麼執行程式的視角來講的,然後把涉及到的計算機硬體和它們之間是如何協作的一點一點的給大家帶出來,讓大家能瞬間明白這些計算機硬體的作用。

這本僅僅是入門級別,主要的作用是讓初學者明白計算機組成原理這門課是學什麼的,以及梳理主要的知識體系,用了這本書的概念後,在去深入計算機組成的時候,就不會雨裡霧裡的。

《編碼》

編碼:隱匿在計算機軟硬體背後的語言》這本書也很不錯,是本科普類的書,非常適合非科班的同學。

img

主要講是計算機工作的原理(二進位制編碼、加減法運算、計算機部件、浮點數定點數、處理器等),也就是跟計組息息相關的知識,它的內容很有趣味性,並不想教科書那樣晦澀難懂,絲毫不會讓你感到生硬,讀起來很暢快。

計組 - 深入學習

計算機組成與設計:硬體 / 軟體介面》

想要深入學習計算機組成原理的同學,我首先推薦《計算機組成與設計:硬體 / 軟體介面》這本書,

img

這本書確實很厚,差不多 500 多頁,但是書從來沒有人規定一定要從頭讀到尾,一頁頁的讀的。重要的不是看完一本書,而是從書上學到多少,解決了什麼問題。

大家可以挑這幾個章節看,跟開發者關係比較大的章節:

  • 第一章:計算機抽象以及相關技術,這個章節主要是介紹了計算機組成的思想,可以簡單快讀看,不用重點讀;
  • 第二章:指令,大體上講的是計算機是如果識別和執行指令的,以及程式碼到指令的過程;
  • 第三章:計算機的算數運算,介紹的是計算機是如何進行加減乘除法的,以及浮點數的運算;
  • 第五章:層次化儲存,講的是計算機的儲存層次結構,而且重點講的是 CPU Cahe。

計算機組成原理影片課程

看書覺得很累,也可以結合影片一起看,這裡推薦哈工大的《計算機組成原理》影片,在 b 站就可以直接看,大家自己去搜尋就可以。

img

看書和看影片可以相互結合的,比如你看影片看了計算機指令的內容,然後你可以不用繼續往下看,可以回到一本書上,看書上對應這個章節的內容,這是個很好的學習方法,影片和書籍相輔相成。

你要是覺得哈工大的計組課程太難,你可以看王道考研的計算機組成原理的影片課程,同樣 b 站就可以看。

img

這個影片雖然是針對考研的,但是也是可以作為學習計組的資料,講的內容不會太深,適合你快速建立計算機組成原理體系,和梳理計組知識的脈絡。

《深入理解計算系統》

另外,在推薦一本《深入理解計算系統》這本書,人稱 CSAPP。

img

可能大家以為這本書是講作業系統的,我最開始也以為是這樣。後面當我開始啃這本書的時候,發現我大錯特錯,它遠不止我想的那樣。

這本書是從程式設計師的角度學習計算機系統是如何工作的,透過描述程式是如何對映到計算機系統上,程式是如何執行的,以及程式效率低下的原因,這樣的方式可以讓大家能更好的知道「程式與計算機系統」的關係。

CSAPP 涵蓋的內容非常多,有計算機組成 + 作業系統 + 彙編 + C語言 + Linux系統程式設計,涉獵的領域比較多,是一本綜合性的書,更是一本程式設計師修煉內功的指引書。

CSAPP 主要包括以下內容:

  • 資訊表示(如何使用二進位制表示整型、浮點數等);

  • C 和組合語言的學習(透過組合語言更深入地理解C語言是什麼);

  • 計算機體系結構(儲存層次結構、區域性性原理、處理器體系結構);

  • 編譯連結(C語言如何從文字變成可執行檔案、靜態連結、動態連結);

  • 作業系統的使用(異常控制流、虛擬記憶體、多個系統呼叫介紹);

  • 網路及併發程式設計(併發的基本概念、網路相關的系統呼叫的介紹)。

你會發現有部分內容和《計算機組成與設計:硬體 / 軟體介面》這本書重合了,重合的部分就是重中之重的計算機組成原理知識了,而且內容都是差不多的,你可以看完一本書的內容,然後跳到另外一本看相同章節的內容,多本書的結合可以讓我們更加容易理解。

這兩本書有個區別:

  • 《計算機組成與設計:硬體 / 軟體介面》講的指令格式是 RISC 的;
  • 《深入理解計算系統》講的指令格式是 x86 的;

其他重合的計組知識都大同小異。

CSAPP 的影片課程是國外老師錄製的,但是在 b 站已經有好人幫我們做了中文字幕,看了這影片,相當於在國外上了一門計算機課的感覺。

img

如果你是在校生,有了一定 C 語言基礎後,非常建議你就開始看這本書,有精力也可以做做 CSAPP 的 lab。越早開始看,你的收益就越大,因為當計算機體系搭建起來後,你後面再深入每一個課程的時候,你會發現學起來會比較輕鬆些。

對於已經工作了,但是計算機系統沒有一個清晰認識的讀者,也可以從這本書開始一點一點學起來,這本書是很厚,但是並不一定要把書完完看完,每個章節的知識點還是比較獨立的,有關硬體的章節我們可以選擇跳過。

三、計算機網路🥅

計算機網路相比作業系統好學非常多,因為計算機網路不抽象,你要想知道網路中的細節,你都可以透過抓包來分析,而且不管是手機、個人電腦和伺服器,它們所使用的計算網路協議是一致的。

也就是說,計算機網路不會因為裝置的不同而不同,大家都遵循這一套「規則」來相互通訊,這套規則就是 TCP/IP 網路模型。

img

TCP/IP 網路參考模型共有 4 層,其中需要我們熟練掌握的是應用層、傳輸層和網路層,至於網路介面層(資料鏈路層和物理層)我們只需要做簡單的瞭解就可以了。

對於應用層,當然重點要熟悉最常見的 HTTP 和 HTTPS,傳輸層 TCP 和 UDP 都要熟悉,網路層要熟悉 IPv4,IPv6 可以做簡單點了解。

我覺得學習一個東西,就從我們常見的事情開始著手。

比如, ping 命令可以說在我們判斷網路環境的時候,最常使用的了,你可以先把你電腦 ping 你舍友或同事的電腦的過程中發生的事情都搞明白,這樣就基本知道一個資料包是怎麼轉發的了,於是你就知道了網路層、資料鏈路層和物理層之間是如何工作,如何相互配合的了。

搞明白了 ping 過程,我相信你學起 HTTP 請求過程的時候,會很快就能掌握了,因為網路層以下的工作方式,你在學習 ping 的時候就已經明白了,這時就只需要認真掌握傳輸層中的 TCP 和應用層中的 HTTP 協議,就能搞明白訪問網頁的整個過程了,這也是面試常見的題目了,畢竟它能考察你網路知識的全面性。

重中之重的知識就是 TCP 了,TCP 不管是建立連線、斷開連線的過程,還是資料傳輸的過程,都不能放過,針對資料可靠傳輸的特性,又可以拆解為超時重新、流量控制、滑動視窗、擁塞控制等等知識點,學完這些只能算對 TCP 有個「感性」的認識,另外我們還得知道 Linux 提供的 TCP 核心的引數的作用,這樣才能從容地應對工作中遇到的問題。

接下來,推薦我看過並覺得不錯的計算機網路相關的書籍和影片。

入門系列

此係列針對沒有任何計算機基礎的朋友,如果已經對計算機輕車熟路的大佬,也不要忽略,不妨看看我推薦的正確嗎。

如果你要入門 HTTP,首先最好書籍就是《[圖解 HTTP](https://www.zhihu.com/search?q=圖解 HTTP&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={"sourceType"%3A"answer"%2C"sourceId"%3A2224035702})》了,作者真的做到完完全全的「圖解」,小林的圖解功夫還是從這裡偷學到不少,書籍不厚,相信優秀的你,幾天就可以看完了。

img

如果要入門 TCP/IP 網路模型,我推薦的是《[圖解 TCP/IP](https://www.zhihu.com/search?q=圖解 TCP%2FIP&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={"sourceType"%3A"answer"%2C"sourceId"%3A2224035702})》,這本書也是以大量的圖文來介紹了 TCP/IP 網路模式的每一層,但是這個書籍的順序不是從「應用層 —> 物理層」,而是從「物理層 -> 應用層」順序開始講的,這一點我覺得不太好,這樣一上來就把最枯燥的部分講了,很容易就被勸退了,所以我建議先跳過前面幾個章節,先看網路層和傳輸層的章節,然後再回頭看前面的這幾個章節。

img

另外,你想了解網路是怎麼傳輸,那我推薦《網路是怎樣連線的》,這本書相對比較全面的把訪問一個網頁的發生的過程講解了一遍,其中關於電信等運營商是怎麼傳輸的,這部分你可以跳過,當然你感興趣也可以看,只是我覺得沒必要看。

img

如果你覺得書籍過於枯燥,你可以結合 B 站《計算機網路微課堂》影片一起學習,這個影片是湖南科技大學老師製作的,PPT 的動圖是我見過做的最用心的了,一看就懂的佳作。

img

B 站影片地址:https://www.bilibili.com/video/BV1c

深入學習系列

看完入門系列,相信你對計算機網路已經有個大體的認識了,接下來我們也不能放慢腳步,快馬加鞭,藉此機會繼續深入學習,因為隱藏在背後的細節還是很多的。

對於 TCP/IP 網路模型深入學習的話,推薦《計算機網路 - 自頂向下方法》,這本書是從我們最熟悉 HTTP 開始說起,一層一層的說到最後物理層的,有種挖地洞的感覺,這樣的內容編排順序相對是比較合理的

img

但如果要深入 TCP,前面的這些書還遠遠不夠,賦有計算機網路聖經的之說的《TCP/IP 詳解 卷一:協議》這本書,是進一步深入學習的好資料,這本書的作者用各種實驗的方式來細說各種協議,但不得不說,這本書真的很枯燥,當時我也啃的很難受,但是它質量是真的很高,這本書我只看了 TCP 部分,其他部分你可以選擇性看,但是你一定要過幾遍這本書的 TCP 部分,涵蓋的內容非常全且細

img

要說我看過最好的 TCP 資料,那必定是《The TCP/IP GUIDE》這本書了,目前只有英文版本的,而且有個專門的網址可以白嫖看這本書的內容,圖片都是彩色,看起來很舒服很鮮明,小林之前寫的 TCP 文章不少案例和圖片都是參考這裡的,這本書精華部分就是把 TCP 滑動視窗和流量控制說的超級明白,很可惜擁塞控制部分說的不多。

img

白嫖站點:http://www.tcpipguide.com/free/t_T

當然,計算機網路最牛逼的資料,那必定 RFC 文件,它可以稱為計算機網路世界的「法規」,也是最新、最權威和最正確的地方了,困惑大家的 TCP 為什麼三次握手和四次揮手,其實在 RFC 文件幾句話就說明白了。

TCP 協議的 RFC 文件:https://datatracker.ietf.org/do

就這樣學成計算機網路後,我在知乎共輸出了 20 多篇圖解網路系列的文章,總字數高達 15W 字,並且手繪的圖共有 500 張,收穫了很多讀者的認可和支援,不少讀者跑來感激我,說我的圖解網路在面試中幫助到他們,不少人拿到了阿里、騰訊、位元組等大廠的Offer。

img

為了幫忙閱讀我把圖解網路整理成了PDF,大家可以作為面基突擊的手冊,開源給大家下載

四、作業系統🚩

作業系統真的可以說是 Super Man,它為了我們做了非常厲害的事情,以至於我們根本察覺不到,只有透過學習它,我們才能深刻體會到它的精妙之處,甚至會被電腦科學家設計思想所震撼,有些思想實際上也是可以應用於我們工作開發中。

作業系統比較重要的四大模組,分別是記憶體管理程序管理檔案系統管理輸入輸出裝置管理。這是我學習作業系統的順序,也是我推薦給大家的學習順序,因為記憶體管理不僅是最重要、最難的模組,也是和其他模組關聯性最大的模組,先把它搞定,後續的模組學起來我認為會相對輕鬆一些。

學習的過程中,你可能會遇到很多「虛擬」的概念,比如虛擬記憶體、虛擬檔案系統,實際上它們的本質上都是一樣的,都是向下遮蔽差異,向上提供統一的東西,以方便我們程式設計師使用。

還有,你也遇到各種各樣的排程演算法,在這裡你可以看到資料結構與演算法的魅力,重要的是我們要理解為什麼要提出那麼多排程演算法,你當然可以說是為了更快更有效率,但是因什麼問題而因此引入新演算法的這個過程,更是我們重點學習的地方。

你也會開始明白程序與執行緒最大的區別在於上下文切換過程中,執行緒不用切換虛擬記憶體,因為同一個程序內的執行緒都是共享虛擬記憶體空間的,執行緒就單這一點不用切換,就相比程序上下文切換的效能開銷減少了很多。由於虛擬記憶體與實體記憶體的對映關係需要查詢頁表,頁表的查詢是很慢的過程,因此會把常用的地址對映關係快取在 TLB 裡的,這樣便可以提高頁表的查詢速度,如果發生了程序切換,那 TLB 快取的地址對映關係就會失效,快取失效就意味著命中率降低,於是虛擬地址轉為實體地址這一過程就會很慢。

你也開始不會傻傻的認為 read 或 write 之後資料就直接寫到硬碟了,更不會覺得多次操作 read 或 write 方法效能會很低,因為你發現作業系統會有個「磁碟高速緩衝區」,它已經幫我們做了快取的工作,它會預讀資料、快取最近訪問的資料,以及使用 I/O 排程演算法來合併和排隊磁碟排程 I/O,這些都是為了減少作業系統對磁碟的訪問頻率。

……

還有太多太多了,我在這裡就不贅述了,剩下的就交給你們在學習作業系統的途中去探索和發現了。

還有一點需要注意,學作業系統的時候,不要誤以為它是在說 Linux 作業系統,這也是我初學的時候犯的一個錯誤,作業系統是集合大多數作業系統實現的思想,跟實際具體實現的 Linux 作業系統多少都會有點差別,如果要想 Linux 作業系統的具體實現方式,可以選擇看 Linux 核心相關的資料,但是在這之前你先掌握了作業系統的基本知識,這樣學起來才能事半功倍。

我也把計算機經典書籍也整理好了,點選獲取方式計算機必讀書籍(含下載方式)資料結構,計算機網路,資料庫,計算機組成原理,作業系統這些統統都有。

入門系列

對於沒學過作業系統的小白,我建議學的時候,不要直接悶頭看書。相信我,你不用幾分鐘就會打退堂鼓,然後就把厚厚的書拿去墊顯示器了,從此再無後續,畢竟直接看書太特喵的枯燥了,當然不如用來墊顯示器玩遊戲來著香。

B 站關於作業系統課程資源很多,我在裡面也看了不同老師講的課程,覺得比較好的入門級課程是《作業系統 - 清華大學》,該課程由清華大學老師向勇和陳渝授課,雖然我們上不了清華大學,但是至少我們可以在網上選擇聽清華大學的課嘛。課程授課的順序,就如我前面推薦的學習順序:「記憶體管理 -> 程序管理 -> 檔案系統管理 -> 輸入輸出裝置管理」。

img

B 站清華大學作業系統影片地址

該清華大學的影片教學搭配的書應該是《現代作業系統》,你可以影片和書籍兩者結合一起學,比如看完影片的記憶體管理,然後就看書上對應的章節,這樣相比直接啃書相對會比較好。

img

清華大學的作業系統影片課講的比較精煉,涉及到的內容沒有那麼細,《作業系統 - 哈工大》李治軍老師授課的影片課程相對就會比較細節,老師會用 Linux 核心程式碼的角度帶你進一步理解作業系統,也會用生活小例子幫助你理解。

img

[B 站哈工大作業系統影片地址:(https://link.zhihu.com/?target=https%3A//www.bilibili.com/video/BV1d4411v7u7%3Ffrom%3Dsearch%26seid%3D2361361014547524697)

深入學習系列

《現代作業系統》這本書我感覺缺少比較多細節,說的還是比較籠統,而且書也好無聊。

推薦一個說的更細的作業系統書 —— 《作業系統導論》,這本書不僅告訴你 What,還會告訴你 How,書的內容都是循序漸進,層層遞進的,閱讀起來還是覺得挺有意思的,這本書的記憶體管理和併發這兩個部分說的很棒,這本書的中文版本我也沒找到資源,不過微信讀書可以免費看這本書。

img

當然,少不了這本被稱為神書的《深入理解計算機系統》,豆瓣評分高達 9.8 分,這本書嚴格來說不算作業系統書,它是以程式設計師視角理解計算機系統,不只是涉及到作業系統,還涉及到了計算機組成、C 語言、組合語言等知識,是一本綜合性比較強的書。

img

它告訴我們計算機是如何設計和工作的,作業系統有哪些重點,它們的作用又是什麼,這本書的目標其實便是要講清楚原理,但並不會把某個話題挖掘地過於深入,過於細節。看看這本書後,我們就可以對計算機系統各元件的工作方式有了理性的認識。在一定程度上,其實它是在鍛鍊一種思維方式 —— 計算思維。

我學成作業系統後,也寫了圖解作業系統系列文章,現在已整理成PDF。

img

現在開源給大家下載

五、資料庫 〽️

資料庫是後端程式設計師必須掌握的一個技術棧了,資料庫分為關係型資料庫和非關係型資料庫,常見的就是MySQL和Redis,接下來分別說下他們的學習心得。

MySQL 學習

MySQL 入門的話是瞭解 SQL 語法,進階的話是深入底層實現原理。

千萬不要一上來就看《高效能 MySQL 》,我曾經先讀《高效能 MySQL 》然後一路暴雷…,因為這本不是入門的書籍!

我先介紹下 MySQL 的重點知識,也是面試常面的知識點:

  • 基本語法:select/delete/insert/update、limit、join等

  • 索引:B+樹,聚族索引,二級索引,組合索引,最左匹配原則,索引失效、慢查詢

  • 事務:事務四大特性ACID,事務隔離級別,MVCC

  • 鎖:全域性鎖、表級鎖、行級鎖、快照讀、當前讀、樂觀鎖、悲觀鎖、死鎖

  • 日誌:重做*日誌*(redo log)、回滾*日誌*(undo log)、二進位制*日誌*(binlog)

  • 架構:讀寫分離、主從架構、分庫分表、資料庫和快取雙寫一致性

    MySQL 入門推薦《SQL必知必會》,這一本很薄的書,主要是講資料庫增刪查改的 SQL 語法。

img

學完 SQL 語法,我們不能止步,要深入去了解 MySQL 底層知識。

這裡建議先看《[MySQL 是怎麼執行的](https://www.zhihu.com/search?q=MySQL 是怎麼執行的&search_source=Entity&hybrid_search_source=Entity&hybrid_search_extra={"sourceType"%3A"answer"%2C"sourceId"%3A2224035702})》,這本書含有很多圖,是小白學習 MySQL 底層知識的最佳書籍。

img

MySQL 用的最多的就是 InnoDB 引擎了,所以進一步學習 InnoDB 是很有必要的,這裡推薦《MySQL技術內幕》,這本書可以結合《MySQL是怎麼樣執行的》一起看。

img

好了,看完上面的,你對 MySQL 已經有相當多的認識了,MySQL 還有一本高效能的書,非常的經典,這本書比較厚,索引章節大家可以去看看,看完後你對索引的認識又會重新整理一遍。

img

Redis 學習

要入門Redis,就要先知道這東西怎麼用,說白了,最開始就是先學習操作Reids的相關命令,就像我們入門MySQL的時候,都是先學習SQL語言。

入門Redis命令這一塊我當時沒有去專門買書看,而是直接看影片,因為我覺得命令的使用實操性還是比較強的,跟著老師敲命令學習會比較快一些。

這裡我推薦下B站上面的這個Redis課,講的還是挺清晰的,也把Redis很多重點知識也講了,比如Redis基本資料結構、持久化技術、主從複製、哨兵、叢集等等,一套連招下來,就基本入門了。Redis6 入門到精通超詳細_嗶哩嗶哩

官網也有一整套的命令詳解,遇到需要或者不會的地方可以查一下:Redis 命令參考 - Redis 命令參考

img

影片是幫助我們快速入門,但是並不能至於影片,因為一些細節的知識點影片上並沒有提及,這時候我們就要回歸書本。

這裡推薦學習Redis的聖經級別的書——《Redis設計與實現》,因為它太經典了!

img

這本書不是教你如何使用Redis,而是講解跟你講Redis是怎麼實現,怎麼設計的,也就說原始碼級別的學習,但是書上並沒有大段貼程式碼,作者是用虛擬碼的方式來講解,所以讀起來不會太難的。

書本上主要圍繞這幾大知識點:資料結構、AOF和RDB持久化技術、網路輸入輸出系統、主從複製、哨兵模式、叢集模式

到這裡你已經是入門Redis了,不僅會了Redis基本命令,還懂Redis的實現。剩下的就是學習如何在實戰中運用Redis。

這裡推薦《Redis實戰》這本書。

img

《Redis實戰》一書是 Redis Group 討論組中的熱門發言者 Josiah Carlson 所作, 該書透過實際的例子, 展示了使用 Redis 構建多種不同的應用程式的方法。 處於進階階段的 Redis 學習者可以透過閱讀該書來學習如何使用 Redis 去構建實際的應用, 然後舉一反三, 把書中介紹的程式和方法應用到自己遇到的問題上。

除了《Redis實戰》之外, 國內外的很多公司(比如twitter、新浪微博等)都在網上公佈了他們使用 Redis 的方法、心得和經驗, Redis 學習者可以透過這些分享中瞭解到更多使用 Redis 的例子, 以及這些公司在使用 Redis 過程中遇到的問題、困難和陷阱, 從而學會如何在實際中更好地使用和管理 Redis 。

實踐使用 Redis 的另一個難點是如何在大規模的資料環境中使用 Redis , 要解決這個問題就需要對 Redis 進行擴充套件: 目前擴充套件 Redis 常見的技術包括 Redis 自帶的複製(replication)SentinelCluster 功能, 以及 twemproxycodis 等專案, Redis 使用者可以透過這些技術的相關文件來學習如何使用這些技術。

六、看書心得📖

接下來,分享我看書的心得。

沒有人規定看書一定要一頁一頁的全部看完,我們要知道看書的目的是什麼?

無非不就是收穫知識,和解決問題嘛。所以最好的看書方式是帶著問題去翻閱,比如:

  • 帶著程式是如何在計算機裡跑起來的問題,去學計算機組成原理和csapp;
  • 帶著輸入一條 url 期間發生了什麼的問題,去學習計算機網路;
  • 帶著有哪些高效的排序演算法的問題,去學習演算法

我曾經在知乎也分享過,我看書的心得,現在這個回答已經快3000+讚了,幫助到了很多同學。

img

相關文章