當前位置: 華文星空 > 知識

大學如何自學電腦科學與技術?

2020-06-27知識

首先,強烈推薦你在 B 站看這個影片【 電腦科學速成課 】,對於題主這種文科專業的人來說,尤為合適。

這門課程透過生動形象的講解方式,向普通人介紹了電腦科學相關的基礎知識。同時,一些熱心的網友還制作了中文版字幕,完全不用擔心看不懂。

透過這門課程,你可以看到一部電腦是如何從硬件上搭建起來的、電腦指令/程式碼是如何產生、如何執行、如何生效的;也可以看到有了程式碼、人們又是如何使用程式碼實作檔、作業系統、網絡、演算法…

影片時長挺合適的,花半個月左右的零零散散時間基本上能看完,然後 歡迎進入電腦的世界

後面,你需要打好基礎,在武俠小說裏面,往往都會強調內功的重要性,擁有了紮實的內功基礎,學什麽武功都很快,電腦編程亦是如此。

學習此專業所需要的教材(書本等方面會自行甄選購買)

想要系統的打好基礎,不妨看看下方給你總結的內容,同時提供了一些書籍參考。

(PS:感謝大家耐心的閱讀,演算法是程式設計師的重中之重,必須攻克,大廠面試必考,順便送一份阿裏大佬刷Leetcode總結的演算法筆記,如果你能吃透,那我相信80%的技術面試都會不在話下:

BAT大佬寫的Leetcode刷題筆記,看完秒殺80%的演算法題!

這本書的目錄,非常經典:

1、電腦組成原理

2、電腦作業系統

3、電腦編譯原理

4、數據結構與演算法

5、電腦網絡

一、電腦組成原理

電腦組成原理這門課很好地向我們闡述了電腦是如何工作的,妹子咨詢你電腦問題的時候,答案就藏在這門課程裏面(大霧)。

二、電腦作業系統

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

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

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

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

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

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

……

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

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

入門系列

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

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

B 站清華大學作業系統影片地址:https://www. bilibili.com/video/BV1j s411b7vg?from=search&seid=2361361014547524697

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

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

B 站哈工大作業系統影片地址:https://www. bilibili.com/video/BV1d 4411v7u7?from=search&seid=2361361014547524697

我一直認為讀書是世界上性價比最高的成長方式,書很便宜但分量很重,是讓我們擺脫平庸走向卓越的方式之一。

對於電腦專業的學生而言,讀電腦經典書籍不光能讓你快速提升知識和能力,更會讓你在校招之際如虎添翼。

書籍下載:電腦必看經典書籍(含下載方式)

深入學習系列

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

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

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

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

三、 電腦編譯原理

首先正式一個問題: 編譯原理並非隨隨便便就能入門的

換言之,需要準備一些基礎知識在學習。

編譯原理的學習和實踐通常基於對電腦編譯過程、電腦基本工作原理、甚至一定的數學知識有一定積累,這些知識分別分布並套用在了編譯原理的不同階段。沒有這些基本知識的積累,很快就會在某個階段由於功底不夠而無法再繼續後面的學習。

所以,先認認真真的積累上述的一和二在入門學習吧。

四、數據結構與演算法

相信無論是已經畢業的同學還是正在學校學習的同學,都或多或少地被數據結構與演算法這門課給折磨過。數據結構與演算法這門課開篇就講了一個非常重要的概念: 程式 = 數據結構 + 演算法 ,對於初學者可能還不能完全地理解這句話,不過對於已經工作兩三年的同學相信對這句話是深信不疑的。

對於數據結構與演算法的學習,我個人認為應該分層三個步驟:首先先大致了解什麽是演算法,可以透過一些科普讀物來入門,這個過程我稱之為 入門階段 ;接著可以嘗試實作一些比較容易的數據結構和演算法,這樣可以更加深對數據結構和演算法的了解,這個過程我稱之為 實踐階段 ;最後去了解數據結構與演算法背後的相關數學原理等,這個過程我稱之為 原理階段。

具體的學習過程可以閱讀我之前的一篇回答:

不管你認為數據結構與演算法重要與否,你都必須有所了解,因為在面試環節肯定會問的!

書籍推薦:

入門系列

入門的同學,我建議你不要過度追求上去就看經典書。

不要一來就拿著【演算法導論】開始啃,初學就去啃這些書肯定會很費勁。你一旦啃不下來,挫敗感就會很強。

然後就放棄學演算法了。

所以,入門的同學,我建議你找一些比較容易看的書來看,比如【大話數據結構】和【演算法圖解】。

不要太在意書寫得深淺,重要的是能不能堅持看完。

【大話數據結構】 這本書最大的特點是,它把理論講得很有趣,不枯燥。而且每個數據結構和演算法,作者都結合生活中的例子進行了講解, 能讓你有非常直觀的感受。

雖然這本書有 400 多頁,但是花兩天時間讀完,應該是沒問題的。

如果你之前完全不懂數據結構和演算法,可以先從這本書看起。

【演算法圖解】 跟【大話數據結構】走的是同樣的路線,就像這本書副標題寫的那樣,「像小說一樣有趣的演算法入門書」,主打「圖解」,通俗易懂。它只有不到 200 頁,所以內容比較少。

作為入門,看看這本書,能讓你對數據結構和演算法有個大概的認識。

當然,這些入門書共同的問題是,缺少細節,不夠系統,也不夠嚴謹。

所以,如果你想要系統地學數據結構和演算法,看這兩本書肯定是不夠的。

基礎系列

透過基本入門演算法書的調教,你已經逐漸體會到了演算法的魅力,現在正是時候踏入基礎系列演算法的領域!!!

這些書籍需要你費點心思去閱讀。

很多同學在學習的過程中,看到一篇演算法科普文章經常會有這樣的想法。

哎呀,要是文章的程式碼是 Java 語言就好了呀。

哎呀,要是文章的程式碼是 Python 語言就好了呀。

雖然程式碼並不會很嚴重影響閱讀,但還是有很多強迫癥的同學喜歡看到文章的解釋程式碼是自己擅長的。

我這裏推薦【數據結構和演算法分析】,這本書非常系統、全面、嚴謹,而且又不是特別難,適合對數據結構和演算法有些了解,並且掌握了至少一門程式語言的同學。而且,這個作者也很用心。

他用了三種語言,寫了三個版本,分別是:【數據結構與演算法分析 :C 語言描述】【數據結構與演算法分析:C++ 描述】【數據結構與演算法分析:Java 語言描述】。

面試實戰系列

大家都知道,對於程式設計師來說很大程度上演算法就是為了應付面試的。

所以,推薦三本有益於面試的書籍,分別是:【劍指 offer】【編程珠璣】【編程之美】。

【劍指 offer】這本書的目的非常明確,就是為了面試。

這本書幾乎包含了所有常見的、經典的面試題。如果能搞懂這本書裏的內容,應付一般公司的面試應該不成問題。

我做了一個 圖解【劍指 offer】的小程式,應該能幫助你學習,感興趣的可以在微信搜尋 圖解劍指offer。

我也在 B 站錄制了一些圖解劍指 offer 的免費影片課程,感興趣的也可以看看,每個影片控制在5分鐘以內。

【編程珠璣】這本書的豆瓣評分非常高,有 9 分。

這本書最大的特色就是講了很多針對海量數據的處理技巧。這個可能是其他演算法書籍很少涉及的。面試的時候,海量數據處理的問題也是經常會問的,特別是校招面試。不管是開拓眼界,還是應付面試,這本書都很值得一看。

書籍 PDF 下載地址:

連結: https:// pan.baidu.com/s/1aK6sk0 Qt2x4FKncoQEdkEg 密碼: tf56

【編程之美】這本書有多位作者,其中絕大部份是微軟的工程師,所以書的質素很有保證。不過,這裏面的演算法題目稍微有點難,也不是很系統,這也是我把它歸到面試這一部份的原因。如果你有一定基礎,也喜歡鉆研些演算法問題,或者要面試 Google、Facebook 這樣的公司,可以拿這本書裏的題,先來自測一下。

書籍 PDF 下載地址:

連結: https:// pan.baidu.com/s/17SHDUK _9bSFsRXebts1Dqg 密碼: fmom

五、電腦網絡


部份內容參考來源

作者:小林
原文連結:小林coding:大學四年我是怎麽寫作業系統和電腦網絡的?掏心掏肺的分享!
原文連結:https:// mp.weixin.qq.com/s/yopn 5PqC7ESQcxWOj0eBoQ

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

也就是說,電腦網絡不會因為器材的不同而不同,大家都遵循這一套「規則」來相互通訊,這套規則就是 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 c/rfc1644/

實戰系列

在學習書籍資料的時候,不管是 TCP、UDP、ICMP、DNS、HTTP、HTTPS 等協定,最好都可以親手嘗試抓數據報,接著可以用 Wireshark 工具看每一個資料包的資訊,這樣你會覺得電腦網絡沒有想象中那麽抽象了,因為它們被你「抓」出來了,並毫無保留地顯現在你面前了,於是你就可以肆無忌憚地「扒開」它們,看清它們每一個頭資訊。

那在這裏,我也給你推薦 2 本關於 Wireshark 網絡分析的書,這兩本書都是同一個作者,書中的案例都是源於作者工作中的實際的案例,作者的文筆相當有趣,看起來堪比小說一樣爽,相信你不用一個星期 2 本都能看完了。

我一直認為讀書是世界上性價比最高的成長方式,書很便宜但分量很重,是讓我們擺脫平庸走向卓越的方式之一。

對於電腦專業的學生而言,讀電腦經典書籍不光能讓你快速提升知識和能力,更會讓你在校招之際如虎添翼。

書籍下載:電腦必看經典書籍(含下載方式)

再給大家送上點幹貨!

下面這是一個 高贊回答合集 ,建議大家 點贊&收藏 ,Mark住別丟了, 大學期間絕對用得上

1、怎麽學好數據結構,看下面這個回答,已經獲得了 21000+ 的贊和 50000+的收藏。

2、如何系統地學習演算法,看下面這個回答,已經獲得了 11000+ 的贊和 26000+的收藏。

3、新手該如何使用 GitHub,看下面這個回答,如果在大學期間就知道使用 GitHub ,那麽能力遠超同齡人。

4、想成為一名優秀的程式設計師,那麽這些程式設計師平時都喜歡逛的論壇怎麽說你也得收藏一些吧。

5、無論別人怎麽說,我都是堅定不移的選擇電腦專業。

6、如何系統地學習 C++ ,這個回答能幫你找到路線。

7、想要準備 Java 面試,那麽這些面試題必須掌握。

趕緊點贊和收藏吧~