2020 年畢業生,距離現在剛好在公司搬了一年多磚,從提升自己的編程能力 + 職場面試來說,帥地今天跟各位學習學妹講一講 CS 專業的幾門核心課程,我先做一個排序,我覺得如下 5 門課是最值得在校生去死磕的,
1、資料結構與演算法
2、計算機網路
3、作業系統
4、計算機組成原理
5、匯編語言
下面跟大家說一說這些課程的一些重點知識,以防大家漫無目的著學習
1、資料結構與演算法
大學第一學期你入門了某種語言之后,就要開始學習資料結構與演算法,當然,不一定是第一學期,對于非科班的也一樣,也是建議這個學習順序,當然,你有自己的目標,完全可以按照自己的來,
我的文章是主寫資料結構與演算法的,我秋招也是靠著這個優勢拿到 offer 的,所以我認為資料結構與演算法是非常非常重要的,可能你會聽到作業都基本沒用到這些知識啊,或者庫函式都幫我們封裝好了啊,我們干嘛要學,
如果你這樣想的,那你就錯了,對于想要找作業的來說,這方面的知識是必考的,所以你得學;對于已經作業的來說,這方面的知識,可以讓你學習到很多設計思想,所謂 資料結構 + 演算法 = 程式,而且你學了這個,你會發現學習其他知識,上手的特別快,綜上,資料結構與演算法必學,
好吧,上面扯了這么多,就是告訴你,資料結構與演算法的重要性,好了,下面我介紹下入門資料結構必學的有哪些,不過你跟著書本的學習順序來就是了,
1、基礎資料結構的學習
1、時間復雜度、空間復雜度
2、鏈表、佇列、堆疊
3、樹(二叉樹,查找二叉樹、AVL樹,紅黑樹等)
4、圖(圖有好多種演算法,深度/廣度搜索,最短路徑、最小生存樹等)
如果你是科班的,那么這些我覺得你大一第二學期都學完是最好的了,沒學完也問題不大,有些人可能是先教《離散數學》這本課,為資料結構與演算法做鋪墊,
書籍推薦:《大話資料結構》、《資料結構與演算法分析:C語言描述版》,學哪一本?都可以,問題不大,我當時學的是第二本,大家記得根據自己的語言去學,我上面列舉的,都是用 c 語言來實作的,
視頻:我只看過《小甲魚的資料結構與演算法》視頻,你們自己看著辦吧,
2、演算法的學習
在大一大二,真心建議你們把演算法基本功打好,后面就真的沒啥時間刷題之類的了,因為無論你以后要學習哪個方向的,演算法都是實用的,會一些演算法,說話也都自信了,演算法的學習,刷題是必須的了,但不建議盲目刷題,而是先學習一些演算法思想,在找對應的題刷,要學的主要有:
1、十大排序演算法
2、遞回、貪心、回溯、動態規劃、列舉等
推薦書籍:《阿哈演算法》、《演算法設計與分析基礎》適合入門;《演算法第四版》、《演算法導論》、《編程之美》適合進階
視頻:這種還是挺建議看書,我沒看過視頻,,這里就不介紹了,
3、保持演算法的學習
演算法的學習,真的是靠積累的,而刷題是必須的,而且學校都會舉辦一些比賽,這里還是比較建議大家去參見的,這樣也能讓你更加有激情著去學習,當然,每年都會有很多 ACM 編程大賽,要不要參加呢?這個看你了,也不是說參加就一定好,看你自己吧
大家可以在 leetcode 長期保持刷題,一天一兩道,或者一個星期三四道都行,
這里給大家推薦一個大佬的刷題筆記

下載鏈接:BAT大佬的刷題筆記太經典
把這份筆記突擊學習一下,很多演算法考察,基本都穩了
另外,再給大家推薦一份某大佬的 leetcode 刷題筆記,匯聚了上千道 leetcode 題解,并且代碼都是 beat 100%:
下載鏈接:leetcode 分類題解(最優解)
上面提到的書籍可以在這個 GitHub 上下載:常用計算機類書籍匯總
2、計算機網路
在我們用的程式中,99% 都離不開網路,作為一個程式員,我覺得了解計算機網路是必須的,在大學的課程中,一般也都會開設這一門課,
在我學習這門課之前,我就特別好奇,一臺電腦是怎么把訊息發給另外一臺電腦的呢?例如:
1、兩臺電腦啥線路也沒有相連,怎么就能把訊息發送給他呢?
2、世界上的電腦那么多,咋就能找到那臺特點的電腦呢?有人說我們可以 MAC 或者 IP 來唯一標識啊,可是,我就有點疑惑了,世界那么大,電腦那么多,有了這個標識,我們該怎么找到他呢?遍歷所有電腦?
3、多個程式同時發訊息給一臺電腦,電腦是如何準確把這些訊息拿給這些不同程式的呢?
4、發送的訊息丟失了怎么辦?
總之,一大堆疑問,看了計算機網路之后,才豁然開朗,
所以這里,我是強烈建議大家學一下的,在面試中,計算機網路也是高頻考點,這里我大致總結一下一些必學協議以及面試高頻考點:
1、http協議,包括:封裝格式,常見回應碼,不同版本的區別,常見請求方法,存在哪些安全隱患,啥是無狀態協議等,
2、https協議:http 是明文傳輸,https 是加密安全的,需要知道 https 是如何加密的、數字證書如何形成,啥的對稱加密、非對稱加密,
3、TCP協議:三次握手、四次揮手、如何保證可靠傳輸、流量控制、擁塞控制,
4、UDP:這個大致了解即可,好像內容比較少
5、DNS、ICMP、ARP、DHCP(我就不一個一個寫了)
上面寫的這些協議,我覺得是比較重要的,特別是在面試中,我公眾號文章也寫了好幾篇這些協議的,大家可以去計算機基礎那個模塊找,
對于新手推薦視頻:可以看韓老師講的視頻,在嗶哩嗶哩搜索韓老師就可以找到 韓老師講高校《計算機網路原理》,
推薦書籍:《計算機網路:自頂向下》、《圖解http》
上面提到的書籍可以在這個 GitHub 上下載:常用計算機類書籍匯總
3、作業系統
作業系統也是一門非常重要的知識,在面試中也是問的非常多(當然,看公司,有些公司技術堆疊是 Java 的,可能問的比較少),對于作業系統,要學的也挺多,例如:
啥是行程,啥是執行緒,他們的本質區別?我們運行一個程式時,資料放在哪里?代碼放在哪里?咋就還要分堆和堆疊?執行緒切換時是背景關系是啥意思?
虛擬地址是什么鬼東西?執行緒需要那么多種狀態干啥子?什么是樂觀鎖、悲觀鎖?死鎖是怎么造成的?解決死鎖的策略有哪些?等等
有人說學作業系統太他媽枯燥了,確實挺枯燥,不過說實話,我還是學的挺有意思的,感覺可以學到很多種策略,一種比一種好,每次看完都是:我去,咋我就想不到呢,我覺得,對于前期,我們需要多參考別人的策略,看多了,有了一定的基礎,慢慢形成自己的策略,總之,看這些書,不單要掌握這些知識點,更重要的是一種思維邏輯的提升
對于作業系統,我總結了下面一些比較核心,面試相對容易被考到的,
1、行程的通信方式
2、行程、執行緒究竟是由什么組成的?有哪些資料?
3、記憶體管理,包括:虛擬記憶體(重點)、分頁、分段、分頁系統地址映射、記憶體置換演算法(重點),
4、死鎖的處理策略(死鎖預防、死鎖檢測與恢復、死鎖避免)
5、行程調度演算法
6、磁盤尋道演算法
上面說的這些,我認為是比較重要的,如果你沒學過,我相信學了之后,你可以學到很多東西,知識點只是其中之一,
推薦視頻:這個我沒看過視頻,所以想學的,我推薦去中國mooc大學找各大高校的課,也可以去國外找對應的課,
推薦書籍:我看過的書籍是《作業系統—精髓與設計原理(第八版)》,不過大佬們都推薦《深入理解計算機作業系統(原書第三版)》,我看過目錄,感徑訓不錯,這里也推薦這一本,不過對于零基礎的,我建議可以先看一本專門給小白看的書:《程式是如何跑起來的》,
五、匯編
我覺得,如何有時間,學習下匯編是必須的,學習了匯編,能夠更好著幫助我們知道計算機是如何處理程式代碼的,例如暫存器和記憶體是如何使用的?回圈、函式呼叫、陣列是如何實作的?地址是怎么一回事?等等,
很多二進制代碼是可以反編譯成匯編的,如何你會匯編,那么可以幫助我們更好著去理解一些東西,所以這里建議大家學習下匯編,并且要動手寫一些程式,
對于匯編的資料,我可能沒啥好推薦的,自己看的不多,看過兩本書,對于入門的,我建議看 王爽的那本書《匯編語言(第三版)》,不過這本只適合入門,如果想繼續,可以看《匯編程式設計》
另外,計算機基礎的部分視頻,可以在這里下載
計算機基礎三門課視頻下載、
如果覺得有幫助,也要記得來個贊啊,只收藏不點贊都是刷流氓,嘻嘻
作者簡潔
作者:大家好,我是帥地,從大學、自學一路走來,深知演算法,計算機基礎知識的重要性,目前專注于寫這些底層知識,提升我們的內功,帥地期待你的關注,和我一起學習,點擊了解我四年大學學習之路 轉載說明:未獲得授權,禁止轉載
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/281634.html
標籤:其他
下一篇:光學演算法——Zernike擬合
