別在學習框架了,那些讓你起飛的計算機基礎知識。
我之前裡的文章,寫的大部分都是與計算機基礎知識相關的,這些基礎知識,就像我們的內功,如果在未來想要走的更遠,這些內功是必須要修煉的。框架千變萬化,而這些通用的底層知識,卻是幾乎不變的,瞭解了這些知識,可以幫助我們更快著學習一門知識,更加懂得計算機的執行機制。當然,在面試中也經常會被問到,特別是對於應屆生,對於春秋招,也可以看看我前陣子寫過的文章歷經兩個月,我的秋招之路結束了!。也有讀者經常問的計算機基礎知識究竟是指啥?學習順序?推薦書籍?
我公眾號的讀者學生以及非科班的應該挺多的,所以我今天這篇文章就寫一寫,我學過的計算機基礎知識,看過的書以及我學過的順序
當然,以下是我個人的一些經驗,並且學過的一些知識,僅供參考,也歡迎大家進行補充
一、計算機網路
在我們用的程式中,99% 都離不開網路,作為一個程式設計師,我覺得了解計算機網路是必須的,在大學的課程中,一般也都會開設這一門課。
在我學習這門課之前,我就特別好奇,一臺電腦是怎麼把訊息發給另外一臺電腦的呢?例如:
1、兩臺電腦啥線路也沒有相連,怎麼就能把訊息傳送給他呢?
2、世界上的電腦那麼多,咋就能找到那臺特點的電腦呢?有人說我們可以 MAC 或者 IP 來唯一標識啊,可是,我就有點疑惑了,世界那麼大,電腦那麼多,有了這個標識,我們該怎麼找到他呢?遍歷所有電腦?
3、多個程式同時發訊息給一臺電腦,電腦是如何準確把這些訊息拿給這些不同程式的呢?
4、傳送的訊息丟失了怎麼辦?
總之,一大堆疑問,看了計算機網路之後,才豁然開朗。自己也寫了一篇評價不錯的文章:一文讀懂一臺計算機是如何把資料傳送給另一臺計算機的
所以這裡,我是強烈建議大家學一下的,在面試中,計算機網路也是高頻考點,這裡我大致總結一下一些必學協議以及面試高頻考點:
1、http協議,包括:封裝格式,常見響應碼,不同版本的區別,常見請求方法,存在哪些安全隱患,啥是無狀態協議等。
2、https協議:http 是明文傳輸,https 是加密安全的,需要知道 https 是如何加密的、數字證照如何形成,啥的對稱加密、非對稱加密。
3、TCP協議:三次握手、四次揮手、如何保證可靠傳輸、流量控制、擁塞控制。
4、UDP:這個大致瞭解即可,好像內容比較少
5、DNS、ICMP、ARP、DHCP(我就不一個一個寫了)
上面寫的這些協議,我覺得是比較重要的,特別是在面試中。我公眾號文章也寫了好幾篇這些協議的,大家可以去計算機基礎那個模組找。
對於新手推薦視訊:可以看韓老師講的視訊,在嗶哩嗶哩搜尋韓老師就可以找到 韓老師講搞笑《計算機網路原理》。
推薦書籍:《計算機網路:自頂向下》、《圖解http》
我是先看了視訊,在看這兩本書的(文末我會給出電子版)。
大家也可以關注我的微信公眾號:苦逼的碼農,第一時間獲取我的文章以及一些資料
二、作業系統
作業系統也是一門非常重要的知識,在面試中也是問的非常多(當然,看公司,有些公司技術棧是 Java 的,可能問的比較少)。對於作業系統,要學的也挺多,例如:
啥是程式,啥是執行緒,他們的本質區別?我們執行一個程式時,資料放在哪裡?程式碼放在哪裡?咋就還要分堆和棧?執行緒切換時是上下文是啥意思?
虛擬地址是什麼鬼東西?執行緒需要那麼多種狀態幹啥子?什麼是樂觀鎖、悲觀鎖?死鎖是怎麼造成的?解決死鎖的策略有哪些?等等
有人說學作業系統太他媽枯燥了,確實挺枯燥,不過說實話,我還是學的挺有意思的,感覺可以學到很多種策略,一種比一種好,每次看完都是:我去,咋我就想不到呢。我覺得,對於前期,我們需要多參考別人的策略,看多了,有了一定的基礎,慢慢形成自己的策略,總之,看這些書,不單要掌握這些知識點,更重要的是一種思維邏輯的提升
對於作業系統,我總結了下面一些比較核心,面試相對容易被考到的。
1、程式的通訊方式(我寫過一篇很不錯的文章:記一次面試:程式之間究竟有哪些通訊方式? ---- 告別死記硬背)
2、程式、執行緒究竟是由什麼組成的?有哪些資料?
3、記憶體管理,包括:虛擬記憶體(重點)、分頁、分段、分頁系統地址對映、記憶體置換演算法(重點)。
4、死鎖的處理策略(死鎖預防、死鎖檢測與恢復、死鎖避免)
5、程式排程演算法
6、磁碟尋道演算法
上面說的這些,我認為是比較重要的,如果你沒學過,我相信學了之後,你可以學到很多東西,知識點只是其中之一。
推薦視訊:這個我沒看過視訊,所以想學的,我推薦去中國mooc大學找各大高校的課,也可以去國外找對應的課。
推薦書籍:我看過的書籍是《作業系統—精髓與設計原理(第八版)》,不過大佬們都推薦《深入理解計算機作業系統(原書第三版)》,我看過目錄,感覺還不錯,這裡也推薦這一本。不過對於零基礎的,我建議可以先看一本專門給小白看的書:《程式是如何跑起來的》。
作業系統的學習,還是挺枯燥的,不過,只有把最難的啃過去,才能變的更加強大
資料庫(這裡我用 MySQL)
在大學的課程裡,一般都會開設一門資料庫的課程,不過這門資料庫是沒有針對某一種資料庫語言的(例如 MySQL、Oracle)。不過我這裡只講 MySQL的學習,別問為什麼,問就是我逃了二十分之十九的課。
把MySQL學好,還是特別重要的,千萬不能停留在會用的層面上,而是應該要了解一下原理,特別是對於要面試的同學,會問挺多原理,我每次被問到 MySQL 我都會信心大增,因為我雖然不大好寫 SQL,但是,知道挺多原理,記得騰訊、shopee面試時,面完 MySQL,面試官好像對我刮目相看了。好了,不吹了,說這些也是強大 MySQL 的重要性。下面就說我學過的一些知識以及推薦的學習資料吧。
對於 MySQL,需要學的還挺多的,例如,
1、一條 sql 語句是如何執行的?進行更新時又是怎麼處理的?
2、索引是如何實現的?多種引擎的實現區別?聚族索引,非聚族索引,二級索引,唯一索引、最左匹配原則等等(非常重要)
3、事務相關:例如事務的隔離是如何實現的?事務是如何保證原子性?不同的事務看到的資料怎麼就不一樣了?難道每個事務都拷貝一份檢視?MVCC 的實現原理(重要)等等。
4、各種鎖相關,例如表鎖,行鎖,間隙鎖,共享鎖,排他鎖。這些鎖的出現主要是用來解決哪些問題?(重要)
5、日誌相關:redolog,binlog,undolog,這些日誌的實現原理,為了解決怎麼問題?日誌也是非常重要的吧,面試也問的挺多。
6、資料庫的主從備份、如何保證資料不丟失、如何保證高可用等等。
還有一些常用命令也要知道。
我覺得,只要你瞭解了以上的原理,那麼對資料庫調優的幫助是非常大的,上面除了第六點,其他五點,在應屆生的面試中,極其高頻。
推薦書籍:連 sql 都不會寫的,推薦《SQL必知必會》,接著推薦《MySQL技術內幕:InnoDB儲存引擎》。
這裡我必須推薦下極客時間的一個專欄:《MySQL實戰45講》,講的非常好,看完應付面試,我覺得夠了,我每次面試 MySQL 幾乎都加分,離不開這個專欄。如何你想要購買,可以在我的公眾號回覆**『資料庫』**,我會給你發對應的購買連結(注意,這個可不是廣告哈,大家買不買看自己)
文章首發公眾號『苦逼的碼農』,更多原創,可搜尋關注
四、資料結構與演算法
資料結構與演算法,我就不想多說了,看我文章的都知道,我寫的文章 80% 是資料結構與演算法相關的,重要性不用說。我秋招最大的優勢估計就是資料結構與演算法的掌握了。上面三門課程的學習,基本也都是離不開資料結構的,對於如何學習資料結構與演算法,我覺得可以在寫一篇文章了,所以資料結構與演算法的學習,我這裡不寫了,可以關注我的文章,我明天會寫一篇與演算法相關的。
論面試,我覺得 作業系統+計算機網路+資料庫 + 演算法 這三個是問的最多的,所以我寫的比較詳細,對於學習計算機基礎,不為了面試的話,我覺得下面的也及其重要。我分出來說,是為了那些要急著面試的人,可以重點學習下上面這四個。我的公眾號『苦逼的碼農』也會經常寫這些知識的文章
五、彙編
我覺得,如何有時間,學習下彙編是必須的,學習了彙編,能夠更好著幫助我們知道計算機是如何處理程式程式碼的,例如暫存器和記憶體是如何使用的?迴圈、函式呼叫、陣列是如何實現的?地址是怎麼一回事?等等。
很多二進位制程式碼是可以反編譯成彙編的,如何你會彙編,那麼可以幫助我們更好著去理解一些東西。所以這裡建議大家學習下彙編,並且要動手寫一些程式。
對於彙編的資料,我可能沒啥好推薦的,自己看的不多。看過兩本書,對於入門的,我建議看 王爽的那本書《組合語言(第三版)》,不過這本只適合入門,如果想繼續,可以看《彙編程式設計》。
編譯原理
說實話,編譯原理還挺難,反正我覺得很難,不過有時間我覺得可以學學,學了這個你可以知道我們的編譯器如何分析我們的程式碼的,例如詞法分析,語法分析,語義分析等等。當然,你未來可能會自己寫個特定分析程式碼的編譯器也不一定,這個時候,就更加需要學了。
對於學習的資料,我覺得可以看視訊 + 書。視訊的話中國 mooc 大學搜尋即可,書的話,說時候,我也看的不多,只看過學校指定的教材,所以這裡給不了多少建議,自己噹噹自行搜尋,哪本熱門賣哪本勒。
總結
暫時先介紹這麼多吧,說實話,學了這些,不單單是多學了一門知識,更重要的是可以提升你的羅輯思維,給你帶來更多的 idea。在之後我的公眾號裡,我也是主要寫計算機基礎 + 演算法。而這些,是值得每一個程式設計師去學習的,無論你是什麼崗位。而且知識知識學了之後,你去學習其他知識,我相信可以上手的更快滴。
上面涉及到的書籍,我也去給你們搜尋來了電子版的,百度雲連結很容易失效,如果你想獲取這些書籍,也可以關注我的公眾號:苦逼的碼農,後臺回覆『計算機基礎』即可獲取,文章會首發於我的公眾號,如果想第一時間看我的文章,也歡迎關注哦。
看完有收穫?那麼希望老鐵給我個三連擊
1、點贊,可以讓更多的人看到這篇文章
2、關注我的原創公眾號『苦逼的碼農』,第一時間閱讀我的文章。
3、也歡迎關注我的部落格哦
作者info
作者:帥地,一位熱愛寫作的小夥
原創公眾號:『苦逼的碼農』,已寫了150多篇文章,專注於寫 演算法、計算機基礎知識等提升你內功的文章,期待你的關注。
轉載說明:務必註明來源(註明:來源於公眾號:苦逼的碼農, 作者:帥地)
相關文章
- 【核心整理】那些讓你起飛的計算機基礎知識:學什麼,怎麼學?計算機
- 計算機基礎知識複習計算機
- 計算機基礎知識(自我的理解)計算機
- 計算機基礎知識很重要計算機
- 計算機網路——基礎知識(一)計算機網路
- 公共基礎知識-計算機組成計算機
- 機器學習基礎知識1機器學習
- 計算機系統結構的基礎知識計算機
- 計算機基礎知識擴充套件篇計算機套件
- 計算機組成原理基礎知識(一)計算機
- 計算機buffer和cache的區別?linux運維學習知識計算機Linux運維
- Android基礎知識學習Android
- 什麼值得讀 ? 計算機基礎知識速成課計算機
- 面試-JS基礎知識-變數型別和計算面試JS變數型別
- 基礎知識學習筆記筆記
- 學習React之前你需要知道的的JavaScript基礎知識ReactJavaScript
- 第一講 你應該瞭解這些簡單的計算機基礎知識計算機
- 機器學習中那些必要又困惑的數學知識機器學習
- 計算機網路基礎知識點快速複習手冊計算機網路
- JavaSE基礎知識學習—–多型Java多型
- JavaSE基礎學習知識整理大全Java
- RxJava 學習筆記 -- 基礎知識RxJava筆記
- 怎麼學習基礎知識啊?
- go語言學習-基礎知識Go
- JVM學習之JVM基礎知識JVM
- 雲端計算學習路線,沒基礎想做IT運維工程師該學習哪些知識?運維工程師
- 學習爬蟲必須學的基礎知識爬蟲
- 大學計算機基礎計算機
- 計算機網路基礎知識總結計算機網路
- 使用AngularJS學習MVC的基礎知識分享AngularJSMVC
- 圖解機器學* | 機器學*基礎知識圖解
- 02.統計學基礎知識
- 學習計算機程式設計需要什麼基礎?計算機程式設計
- 小白程式設計師想走後端方向,該怎麼學習計算機基礎知識?需要做什麼?程式設計師後端計算機
- 程式設計必備基礎 計算機組成原理+作業系統+計算機網路,計算機基礎——更適合程式設計師的程式設計必備基礎知識作業系統計算機網路程式設計師
- 計算機基礎知識對程式設計師來說有多重要?計算機程式設計師
- MySQL 基礎知識梳理學習(四)—-GTIDMySql
- iOS 基礎知識學習目錄索引iOS索引