當前位置: 華文問答 > 科學

如果讓你重新開始學電腦,你的學習路線會怎麽選擇?

2022-10-28科學

新問題沒人答,我來 首當其沖

如果重新開始學,我會非常註重電腦基礎的學習,比如這幾類課程:

  • 程式語言
  • 數據結構與演算法
  • 作業系統
  • 電腦網絡
  • 電腦組成
  • 數據庫
  • 這裏推薦下我當初自學的書籍和影片。

    先來說說書籍:

  • 程式語言(c/c++) :【c語言程式設計】->【c++ primer】-> C++ efftive 系列 -> 【C++ STL 源碼剖析】->【深入理解C++物件模型】
  • 數據結構與演算法 :【大話數據結構】->【演算法圖解】->【數據結構與演算法之美】 -> 【劍指offer】 -> LeetCode刷題(至少刷到200多道)
  • 作業系統 :【作業系統導論】->【現代作業系統】
  • 電腦網絡 :【圖解HTTP】->【圖解TCP/IP】->【網絡是怎麽連線的】 ->【電腦網絡自頂向下】->【TCP/IP協定詳解卷1】
  • 電腦組成 :【程式是怎麽跑來的】->【電腦組成原理:軟件/介面與設計】->【深入理解電腦系統】
  • 數據庫 :【SQL必知必會】->【從根兒上理解mysql】->【mysql技術內幕】->【高效能mysql】
  • 編譯原理 :【程式設計師的自我修養】
  • B站也有很多學習的影片,我看過覺得不錯的分享給你:

  • 作業系統影片 :清華大學和哈工大的作業系統都不錯
  • 電腦網絡影片 :電腦網絡微課堂
  • 電腦組成原理 :哈工大的
  • 數據庫 :尚學堂的
  • 數據結構 :浙江大學的
  • 我也整理一套系統化學習 CS 的書籍,這次分享給大家 點選獲取方式 :電腦必讀書籍(含下載方式)數據結構,電腦網絡,數據庫,電腦組成原理,作業系統這些統統都有。

    這些課程並不是要求你大一學完啦,而是伴隨你整個大學四年的。

    大一先掌握一門程式語言,然後學習數據結構,就可以了。

    大二你就可以開始學習演算法,演算法越早學越好,因為演算法對於校招很重要。然後學習電腦網絡、作業系統、電腦組成,這些電腦基礎知識。

    大三學習數據庫,做專案,刷leetcode,備戰校招,爭去大四就可以去大廠實習。

    接下來上萬字長文幹貨,一個一個來具體說!

    一、數據結構與演算法

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

  • 演算法: 動態規劃、回溯演算法、尋找演算法、搜尋演算法、貪心演算法、分治演算法、位運算、雙指標、排序、模擬、數學、……
  • 數據結構: 陣列、棧、佇列、字串、連結串列、樹、圖、堆、哈希表、……
  • 數據結構學習

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

    書的話可以結合【大話數據結構】和【數據結構與演算法之美】一起看。

    這裏也推薦 Leetcode官方出品的 免費教程 Leetbook,網站很細心的按照各個知識點循序漸進地羅列了演算法題。 講解配合實戰,比單純看書效率高多了~


    演算法學習

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

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

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

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

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

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

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

    公司常考題有:

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

    二、電腦組成原理

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

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

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

    【電腦是怎麽樣跑起來】和【程式是怎麽跑起來的】

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

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

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

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

    其中 【程式是怎麽跑起來的】是一個「微縮版本」的電腦組成原理 ,你可以只選擇看這一本。

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

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

    【編碼】

    編碼:隱匿在電腦軟硬件背後的語言 】這本書也很不錯,是本 科普類的書 ,非常適合非科班的同學。

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

    計組 - 深入學習

    【電腦組成與設計:硬件 / 軟件介面】

    想要深入學習電腦組成原理的同學,我首先推薦【 電腦組成與設計:硬件 / 軟件介面 】這本書,

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

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

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

    看書覺得很累,也可以結合影片一起看,這裏推薦 哈工大的【電腦組成原理】影片 ,在 b 站就可以直接看,大家自己去搜尋就可以。

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

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

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

    【深入理解計算系統】

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

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

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

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

    CSAPP 主要包括以下內容:

  • 資訊表示(如何使用二進制表示整型、浮點數等);
  • C 和組合語言的學習(透過組合語言更深入地理解C語言是什麽);
  • 電腦體系結構(儲存階層、局部性原理、處理器體系結構);
  • 編譯連結(C語言如何從文本變成可執行檔、靜態連結、動態連結);
  • 作業系統的使用(異常控制流、虛擬記憶體、多個系統呼叫介紹);
  • 網絡及並行編程(並行的基本概念、網絡相關的系統呼叫的介紹)。
  • 你會發現有部份內容和【 電腦組成與設計:硬件 / 軟件介面 】這本書重合了, 重合的部份就是重中之重的電腦組成原理知識了 ,而且內容都是差不多的,你可以看完一本書的內容,然後跳到另外一本看相同章節的內容,多本書的結合可以讓我們更加容易理解。

    這兩本書有個區別:

  • 【電腦組成與設計:硬件 / 軟件介面】講的指令格式是 RISC 的;
  • 【深入理解計算系統】講的指令格式是 x86 的;
  • 其他重合的計組知識都大同小異。

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

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

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

    三、電腦網絡

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

    也就是說,電腦網絡不會因為器材的不同而不同,大家都遵循這一套「規則」來相互通訊,這套規則就是 TCP/IP 網絡模型。

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

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

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

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

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

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

    接下來,推薦我看過並覺得不錯的電腦網絡相關的書籍和影片。

    入門系列

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

    如果你要入門 HTTP,首先最好書籍就是【 圖解 HTTP 】了,作者真的做到完完全全的「圖解」,小林的圖解功夫還是從這裏偷學到不少,書籍不厚,相信優秀的你,幾天就可以看完了。

    如果要入門 TCP/IP 網絡模型,我推薦的是【 圖解 TCP/IP 】,這本書也是以大量的圖文來介紹了 TCP/IP 網絡模式的每一層,但是這個書籍的順序不是從「套用層 —> 實體層」,而是從「實體層 -> 套用層」順序開始講的,這一點我覺得不太好,這樣一上來就把最枯燥的部份講了,很容易就被勸退了,所以我建議先跳過前面幾個章節,先看網絡層和傳輸層的章節,然後再回頭看前面的這幾個章節。

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

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

    B 站影片地址:https://www. bilibili.com/video/BV1c 4411d7jb?p=1

    深入學習系列

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

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

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

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

    白嫖站點:http://www. tcpipguide.com/free/t_T CPSlidingWindowAcknowledgmentSystemForDataTranspo-6.htm

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

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

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

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

    四、作業系統

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

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

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

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

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

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

    ……

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

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

    我也把電腦經典書籍也整理好了,點選獲取方式 :電腦必讀書籍(含下載方式)數據結構,電腦網絡,數據庫,電腦組成原理,作業系統這些統統都有。

    入門系列

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

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

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

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

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

    B 站哈工大作業系統影片地址:

    深入學習系列

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

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

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

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

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

    現在開源給大家下載:

    五、數據庫

    數據庫是後端程式設計師必須掌握的一個技術棧了,數據庫分為關系型數據庫和非關系型數據庫,常見的就是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 語法。

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

    這裏建議先看【MySQL 是怎麽執行的】,這本書含有很多圖,是小白學習 MySQL 底層知識的最佳書籍。

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

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

    Redis 學習

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

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

    這裏我推薦下B站上面的這個Redis課,講的還是挺清晰的,也把Redis很多重點知識也講了,比如Redis基本數據結構、持久化技術、主從復制、哨兵、集群等等,一套連招下來,就基本入門了。

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

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

    這裏推薦學習 Redis的聖經級別的書——【Redis設計與實作】 ,因為它太經典了!

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

    書本上主要圍繞這幾大知識點: 數據結構、AOF和RDB持久化技術、網絡輸入輸出系統、主從復制、哨兵模式、集群模式

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

    這裏推薦【Redis實戰】這本書。

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

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

    實踐使用 Redis 的另一個難點是如何在大規模的數據環境中使用 Redis , 要解決這個問題就需要對 Redis 進行擴充套件: 目前擴充套件 Redis 常見的技術包括 Redis 內建的復制(replication) 、Sentinel 和 Cluster 功能, 以及 twemproxy 和 codis 等專案, Redis 使用者可以透過這些技術的相關文件來學習如何使用這些技術。

    六、看書心得

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

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

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

  • 帶著程式是如何在電腦裏跑起來的問題,去學電腦組成原理和csapp;
  • 帶著輸入一條 url 期間發生了什麽的問題,去學習電腦網絡;
  • 帶著有哪些高效的排序演算法的問題,去學習演算法
  • 我曾經在知乎也分享過,我看書的心得,現在這個回答已經快3000+贊了,幫助到了很多同學。

    七、融匯貫通

    看到這, 很多小夥伴會說了,學了這麽多電腦基礎, 怎麽將這些知識點融會貫通呢?

    我之前在知乎也分享過自己的看法,現在已經超過 700+ 贊了。