簡單說下帥地是如何學習計算機基礎(chǔ)知識的?
《大廠逆襲之路》第一期(更新中....)
慣例瞎扯幾句
計算機基礎(chǔ)的重要性我就不必多說了,「帥地玩編程」這個公眾號也是主打計算機基礎(chǔ) + 算法相關(guān)知識,學習計算機基礎(chǔ),認準「帥地玩編程」。
實不相瞞,前陣子我被我們組的 leader 叫去談話,說是好好學習,快速提升自己,特別是對于計算機的那些基礎(chǔ)知識,也不能丟掉,你們看吧,計算機基礎(chǔ)知識,想不學都不行。
不過說實話,對于計算機基礎(chǔ),帥地在學習的過程中,也沒有運用啥方法論,也沒啥技巧,可能和很多人一樣,就是簡單粗暴著看書,所以這篇文章,我也很難告訴你們學習的騷技巧或者捷徑,所以大家不要有太大的期望,更多的是和大家講一講,我自己是如何學習的計算機基礎(chǔ)知識的,然后供大家一個參考,假如你是學生或者非科班或者計算機基礎(chǔ)很薄弱的工作者,或許可以參考一下。
計算機基礎(chǔ)指哪些?
在微信,還是經(jīng)常有小伙伴問我:你們說的計算機基礎(chǔ)具體是指哪些呢?,這個問題,感覺算起來,已經(jīng)被問過 10+ 次了。
計算機基礎(chǔ)包括哪些?如果要全部都說的話,其實我也不清楚,這個還得看如何定義計算機基礎(chǔ),如果要說很底層的那些基礎(chǔ)的話,可能就涉及到機器碼、電路之類的了,說太多估計就把你嚇跑了,雖然好多我也沒學過,不過,最常見的幾門計算機基礎(chǔ)課,大概就是這幾門了:
1、計算機網(wǎng)絡
2、操作系統(tǒng)
3、計算機組成原理
4、匯編語言
5、編譯原理
其中,計算機網(wǎng)絡和操作系統(tǒng),也是面試中被問的最多的兩門課程,如果你沒有太多的時間來學習這些課程,那么可以優(yōu)先學習計算機網(wǎng)絡和操作系統(tǒng),之后再學習計算機組成原理、匯編語言和編譯原理,當然,如果你還是在校生,那么這些課程都會在大二大三學習到,我希望你能好好學習下,特別是計算機網(wǎng)絡和操作系統(tǒng)這兩門課。
我是如何學習?
對于如何學習這個事情,我覺得我一句話就能回答完了,因為真的沒啥技巧,我基本就是看書為主,視頻為輔,看這些知識有時候容易困,因為有些真的是挺枯燥,特別是編譯原理和計算機組成原理,又難又枯燥。
一種比較有效的學習方式就是從工作中用到的知識點出發(fā),這樣你可能是帶著疑問去學習的,目的性也比較強,學起來會比較有趣,學完之后也會豁然開朗。
但是,假如你是一個學生,那么是很難從工作中遇到的知識點出發(fā)的,特么你都啥也不會,或者說,如果你對計算機基礎(chǔ)知識一竅不通,那么就算你有疑問,你也是很難知道從哪里學起的。
所以,我的建議就是,如果可以,一定要系統(tǒng)學習一下,千萬不要覺得以后工作了,或者等用到了再來學習,一定要從 0 到 1,系統(tǒng)學習起來,所謂系統(tǒng),就是找一本書,從頭看到尾,就是這么簡單粗暴。
講一講我平時是怎么看這些書的
其實我在看這些書的時候還是非常快的,因為我會以最快的速度看一本書,會先從總體上掌握這門知識,不會去死扣某個知識點,一遍看過去,理解了就行了,但如何你問我細節(jié),我可能都忘了,很多只是大概知道是怎么一回事。
一般來說,對于操作系統(tǒng)和計算機網(wǎng)絡,我都看了兩遍,第一遍只求理解,心中知道個大概,看的很快,總體上知道操作系統(tǒng)是怎么一回事,網(wǎng)絡是如何鏈接起來的。
看完第一遍之后,我會看這本書的目錄,看到某個標題時候,自己思考一下是怎么一回事,例如TCP 是如何保證可靠性傳輸的,我會思考一下該如何保證,然后會打開對應的頁面去看看大佬們都是怎么寫的,因為可靠性傳輸,其實會涉及到很多種方法,第一遍看的,雖然當時理解了,但其實很多也都忘了,這時我會在看一遍,再次為大佬們想出的方法臥槽一遍。
不過,我第二次并不會從頭到尾看,而是根據(jù)目錄來看的,第一次看的時候,其實有時候是一邊看一邊犯困的,但是第二次看的時候,會 get 到更多的點,心中不斷著給大佬們點贊,臥槽,我怎么沒想到還能這樣做!
總之就是,先快速且系統(tǒng)著從總體把握這門知識,看的過程中犯困很正常,之后會根據(jù)目錄,一邊思考自己的想法一邊看看書上是如何實現(xiàn)的,因為當你什么也沒學的時候,其實你的想法是很少的,但是當你看了很多人的想法之后,你的腦袋也已經(jīng)有了各種想法,也就是說,在第二遍看的時候,你一定要思考。
還有一種就是,我第一遍有時候是通過看視頻學習的,把視頻快速看完之后,再系統(tǒng)著從頭到尾看書,我也不會一邊看視頻一邊看書,而是瘋狂著,以最快的速度刷完視頻。
無處不在的計算機基礎(chǔ)
我們都說計算機基礎(chǔ)很枯燥,學了也很少用到,但我覺得,正是因為枯燥難學,才有了人與人之間的差距,并且我覺得計算機基礎(chǔ)知識也是處處都存在的,例如你學習 redis 的時候,可能會學到緩存的淘汰算法,如果你學習過操作系統(tǒng)的內(nèi)存置換,那么你一眼就能看懂了。
例如你可能經(jīng)常聽說過重量鎖和輕量鎖,重量鎖很消耗性能,如果你沒有學過操作系統(tǒng)的話,可能你并不清楚重量鎖為啥就消耗性能了?內(nèi)核切換咋就消耗性能了?但是如果你學過操作系統(tǒng)中的進程/線程的話,可能就知道重量級鎖和輕量級鎖的本質(zhì)區(qū)別了。
不過在我看來,學習計算機基礎(chǔ)知識最重要的,就是讓我們學到了各種設(shè)計思想,而這種設(shè)計能力會伴隨我們終生,你在學習的過程中,會學到各種各樣的方法,并且都是你最開始沒有想到的方法,方法積累多了,你就能產(chǎn)生屬于自己的新想法。
說實話,我在學習的過程中,并不覺得很枯燥,相反覺得很有趣,因為我在不停著吸收新知識,吸收前人的精華,例如計算機網(wǎng)絡中的流量控制、擁塞控制、HTTPS 的加密算法等等,我特么就沒想到,還能這樣做,要我,肯定無法設(shè)計出這么嚴謹?shù)乃惴?,所以在看的過程中,真的覺得很過癮。
當然,有時候也會犯困,實不相瞞,犯困往往是因為有點難,看了一大堆描述之后,居然忘了剛才看了啥,然后看著看著就困了就不想看了,我也就先跳過了,之后在回過頭來看。
簡單說下具體都需要學些什么 + 書籍推薦
對于如何學習,貌似我說了好像和沒說一樣,這也沒辦法,因為確實沒什么學習技巧,我說的先快速把握全局,在根據(jù)目錄來深入思考,這是我的方法,適不適合你,其實我也不清楚,下面我簡單說下一些相對重要的知識點,相當于拋磚引玉,看看你掌握了多少
1、計算機網(wǎng)絡
計算機網(wǎng)絡是工作中用的最多的吧,真的無處不在。最常見就是 HTTP 協(xié)議了,這必須學,get 和 post 的本質(zhì)區(qū)別,通過他們報文的定義來區(qū)分就好,不需要死記硬背你之前看過的那些面試題。
HTTPS 是如何解決 HTTP 明文問題的的,數(shù)字證書解決了什么問題?為啥 HTTP 是一種無狀態(tài)協(xié)議?啥是無狀態(tài)協(xié)議?
TCP,UDP 也是必須掌握的了,特別是 TCP,TCP 是如何保證可靠傳輸?shù)哪??啥是擁塞控制和流量控制呢?啥時拆包粘包?這必須掌握。
IP 地址主要用來干啥?為啥還需要子網(wǎng),子網(wǎng)掩碼?世界這么大,IP 這么多,他們怎么尋址?
咋就還有公網(wǎng) IP 和私網(wǎng) IP 了?NAT 轉(zhuǎn)換解決了啥問題?
DNS 除了能進行域名解析,還是解決了啥問題?
……
等等,我說的這些,基本都是重點,你們可以看看自己掌握了多少。
至于視頻的話,我在 B 站看過韓立綱的視頻,地址:https://www.bilibili.com/video/BV17p411f7ZZ?from=search&seid=4498723187261542166
感覺還不錯,33 個小時,1.x倍播放,其實很快就能看完,之后刷了《圖解 http》和《計算機網(wǎng)絡:自頂向下》兩本書,書籍太容易失效了,我就不整理了,你們可以在這個 GitHub 上找到:https://github.com/iamshuaidi/CS-Book
2、操作系統(tǒng)
咋就還有進程和線程之分?為什么要有掛起、運行、阻塞等這么多種狀態(tài)?怎么就還有悲觀鎖和樂觀鎖,他們的本質(zhì)區(qū)別?
進程咋還會出現(xiàn)死鎖,都有哪些處理策略?進程都有哪些調(diào)度算法?
虛擬內(nèi)存解決了什么問題?為啥每個進程的內(nèi)存地址就是獨立的呢?
為啥 cpu 很快而內(nèi)存很慢?磁盤怎么就更慢了?
聽說中國 mooc 有些課程講的不錯,大家可以去找找勒,我主要是看書的,新手可以先看《程序是怎樣跑起來的》,之后看《現(xiàn)代操作系統(tǒng)》或者《深入理解計算機操作系統(tǒng)》,對于書籍在我那個 GitHub 上可以找到。
3、匯編
學了匯編,估計你就更加理解地址是怎么一回事了,順序、分支,循環(huán)、函數(shù)調(diào)用、數(shù)組之類的,是如何通過寄存器來運行的呢?
小小的幾個寄存器,居然還能實現(xiàn)這么多復雜的操作?
如果你能用匯編寫個紅黑樹的話,那就,呵呵了
書籍的話,我看的是王爽寫的《匯編語言》。
4、計算機組成原理
計算是如何用 0 和 1 表示各種數(shù)值的?為啥要有補碼?0 和 1 是如何表示的?
計算機是如何進行加減乘除的?為啥計算機無法精確表示某些浮點數(shù)?
計算機是如何知道內(nèi)存地址的?
計算機組成原理還是有點難度,書籍暫時沒有推薦的,大部分知識,其實《深入理解計算機操作系統(tǒng)》這本書,其實都有包括。
后面的,就不繼續(xù)寫了,你們可以來補充勒。
總結(jié)
對于計算機基礎(chǔ)如何學習,如我剛才所說,我一句話就能說完了,但還是硬生生扯出了這么多,這邊文章既然是講「我是如何學習」的,所以我也不會憑空捏造自己的學習方法,而是真實描述自己的學習方法,可能并不適合每一個人,甚至可能感覺自己看了和沒看一樣,但如果對某些人有用,那么感覺就值了。
因為在寫這篇文章的時候,其實我也沒有把握,真心覺得沒啥學習技巧,更多的還是需要自己去死啃,視頻 + 書籍,死磕一遍,應該就差不多了,之后遇到問題,在去查找對應的文章深入了解。但是,如果你沒學過,比起看文章,我依舊堅持希望你去系統(tǒng)看書學習一遍!
基礎(chǔ)路漫漫,大家加油!
《大廠逆襲之路》第一期(更新中....)
