計算機基礎最全自學指南如下:
1、數據結構與算法
程序=數據結構+算法。
數據結構經常與算法放在壹起,在有些高校,會存在“數據結構”和“算法設計與分析”這樣兩門課。
這就造成很多同學懵圈,數據結構與算法有什麽區別?甚至有些同學認為這就是壹種。
其實吧:
數據結構主要講解數據的組織形式。就是我們要怎樣把這些數據存儲起來,所以有數組、鏈表、棧、隊列、樹、圖,這是數據結構的重點。
算法,則註重的是思想。比如數組裏的元素怎麽排序、怎麽找到最大的數和最小的數等等。說白了就是解決現實中問題的思想。所以才會有貪心、動態規劃等這些算法。
數據結構與算法,不管妳怎麽想,壹定要認真學!不管面試還是考研都是必考!
下面總結壹些重要的知識點吧,這樣才能有針對的學。
復雜度分析
時間復雜度
空間復雜度
學習數據結構與算法的第壹課,我永遠都選復雜度分析,在我看來,這是數據結構與算法中最重要的知識點,且不接受任何反駁。
文章推薦:
保姆級教學!徹底學會時間復雜度和空間復雜度
數據結構
數組(Array):數組是壹種聚合數據類型,它是將具有相同類型的若幹變量有序地組織在壹起的集合。
鏈表(Linked List):鏈表是壹種數據元素按照鏈式存儲結構進行存儲的數據結構,這種存儲結構具有在物理上存在非連續的特點。
棧(Stack):棧是壹種特殊的線性表,它只能在壹個表的壹個固定端進行數據結點的插入和刪除操作。
隊列(Queue):隊列和棧類似,也是壹種特殊的線性表。和棧不同的是,隊列只允許在表的壹端進行插入操作,而在另壹端進行刪除操作。
散列表(Hash table):散列表源自於散列函數(Hash function),其思想是如果在結構中存在關鍵字和T相等的記錄,那麽必定在F(T)的存儲位置可以找到該記錄,這樣就可以不用進行比較操作而直接取得所查記錄。
堆(Heap):堆是壹種特殊的樹形數據結構,壹般討論的堆都是二叉堆。
樹(Tree):樹是典型的非線性結構,它是包括,2個結點的有窮集合K。
圖(Graph):圖是另壹種非線性數據結構。在圖結構中,數據結點壹般稱為頂點,而邊是頂點的有序偶對。
操作數據結構
查找:數據結構裏查找滿足壹定條件的節點。壹般是給定壹個某字段的值,找具有該字段值的節點。
插入:往數據結構中增加新的節點。
刪除:把指定的結點從數據結構中去掉。
修改:改變指定節點的壹個或多個字段的值。
排序:把節點按某種指定的順序重新排列。例如遞增或遞減。
數據結構書籍推薦
《大話數據結構》、《數據結構與算法分析》
《大話數據結構》這本書與市場上的同類數據結構圖書相比,內容更加趣味易讀,算法講解細致深刻。
是壹本非常適合自學的讀物。
這本書通篇以壹種趣味方式來敘述,大量引用了各種各樣的生活知識來類比,並充分運用圖形語言來體現抽象內容,對數據結構所涉及到的壹些經典算法做到逐行分析、多算法比較。
如果妳還是看不懂,可以看我寫的圖解,不過有點慢,但是絕對通俗易懂:
數組:蛋蛋慘遭數組滑鐵盧,面試官建議回村養豬。
鏈表:鏈表,畫幾下就整明白了!
棧和隊列:呔!“棧”住,隊列!
字符串:關於字符串,妳知道這些麽?
算法
學習算法的套路很簡單,多看、多寫、多上機。
回溯算法
分治算法
枚舉算法
貪心算法
動態規劃
查找算法
二分查找
散列表查找
樹結構查找
字符串匹配
暴力匹配
KMP算法
10大排序算法
冒泡排序
選擇排序
插入排序
希爾排序
歸並排序
堆排序
快速排序
計數排序
基數排序
桶排序
算法書籍推薦
《算法圖解》
示例豐富,圖文並茂,這是壹本像小說壹樣的算法入門書。
無論妳是專業程序員,還是編程愛好者,亦或是需要重溫算法的計算機專業學生,這本書都是妳不二的選擇。
書中的前三章將幫助妳打下基礎,帶妳學習二分查找、大O表示法、兩種基本的數據結構以及遞歸等。
余下的篇幅將主要介紹應用廣泛的算法,具體內容包括:面對具體問題時的解決技巧,比如,何時采用貪婪算法或動態規劃;散列表的應用;圖算法;Kzui近鄰算法。
《算法(第4版)》
算法領域的經典參考書,包含了經過幾十年演化而成的算法核心知識體系。
書中講解了多種算法和數據結構,讓妳能夠在各種計算機環境下實現、調試並應用它們。
作為算法領域經典的參考書,全面介紹了關於算法和數據結構的必備知識,並特別針對排序、搜索、圖處理和字符串處理進行了論述
第4版具體給出了每位程序員應知應會的50個算法,提供了實際代碼。
視頻教程推薦
《數據結構》,浙大陳越和何欽銘教授聯合授課,課程非常棒體系完整,上課體驗不錯,同時難度系數在線,質量也很好。能夠學到很多的思維方法和技巧,想學好數據結構的同學們千萬不要錯過。
《數據結構與算法》,這門課程的最大特點是理論和實踐的結合,妳將學習到解決各種計算問題的算法技巧,並實現大約100個算法編碼問題。
網站推薦
如果還是覺得學起來很吃力,可以借助下面這個網站來學習。
VisuAlgo,數據結構和算法動態可視化網站。
刷題
數據結構與算法的學習,往往要伴隨著“刷題”,如果沒特殊情況,我建議大家刷LeetCode就好。
針對LeetCode,題的解法有很多,我們往往追求的是最優解,這裏有壹份清華學長整理的LeetCode最優解,強烈推薦:
兩者配合起來應該非常舒爽。
2、計算機組成原理
計算機組成原理,即“計算機”“組成”的“原理”。
我覺得它是所有計算機基礎課程中最難學的壹門課,整個課程的核心就是使用數字邏輯電路和觸發器搭建壹個可以運行匯編指令的機器。
書籍推薦
《計算機是怎樣跑起來的》、《程序是怎樣跑起來的》。
正是因為計算機組成原理難學,所以對於初學者來說,比起其他幾門,這門課的入門書籍選擇就更得友好。
《計算機是怎麽樣跑起來》和《程序是怎麽跑起來的》,這是兩本很薄,作者用大白話的方式來闡述知識,圖文並茂,對初學者來說相當nice。
相比學習的心態,更多是帶著好奇心的心態去讀。
《計算機是怎樣跑起來的》
本書倡導在計算機迅速發展、技術不斷革新的今天,回歸到計算機的基礎知識上。通過探究計算機的本質,提升工程師對計算機的興趣,在面對復雜的最新技術時,能夠迅速掌握其要點並靈活運用。
《程序是怎麽跑起來的》
本書從計算機的內部結構開始講起,以圖配文的形式詳細講解了二進制、內存、數據壓縮、源文件和可執行文件、操作系統和應用程序的關系、匯編語言、硬件控制方法等內容,目的是讓讀者了解從用戶雙擊程序圖標到程序開始運行之間到底發生了什麽。
視頻推薦
視頻首推卡內基梅隆大學的《深入理解計算機系統》系列課程,英語不好?沒關系,有中英文字幕,看完這套視頻,知識+六級順利拿到手。
看這個視頻的配套教材是《深入理解計算機系統》。
3、操作系統
無論妳學習什麽語言,都避免不了和操作系統打交道。所有語言的最後執行,都是靠操作系統。比如妳學習Java,用到多線程技術,實際上操作系統才是負責管理進程和線程的。
不懂操作系統,妳在未來學習編程語言的高級特性,涉及到線程進程調度,內存分配,或者是學習Linux相關的知識時,都會壹頭霧水。
只有學會了操作系統,才能夠更好地學習其他語言和技術。所以,操作系統是程序員進階必會的知識。
書籍推薦
入門推薦:《操作系統導論》、《現代操作系統》。
深入系列:《深入理解計算機系統》,以程序員的視角理解計算機系統。
這是壹本入門級別的書,這本書其實並不“深入”,它談論的內容還是相對比較淺的。
“覆蓋面廣”,其實就是這本書的最大優點。它告訴我們計算機是如何設計和工作的,操作系統有哪些重點,它們的作用又是什麽。
看看這本書後,我們就可以對計算機系統各組件的工作方式有了理性的認識。在壹定程度上,其實它是在鍛煉思維方式——計算思維。
視頻推薦
操作系統,說實話,在剛開始學的時候不建議直接悶頭看書。因為書看起來是真沒意思。
這裏推薦清華大學的操作系統課程,分上下。看視頻的時候可以結合著上面的書籍推薦。
看(上)的時候可以搭配《操作系統導論》,看(下)的時候可以搭配《現代操作系統》。
4、計算機網絡
計算機網絡的相關知識在工作時使用的頻率較多的。
學習計算機網絡,妳需要懂得Socket編程,知道TCP/IP網絡模型,了解OSI七層網絡架構,知道壹個數據包是如何層層包裝,再層層拆包,從客戶端發送到服務端。
但是計算機網絡好學的多,因為計算機網絡不抽象,在現實生活中,都能找的到例子。
書籍推薦
《圖解HTTP》
圖文並茂,簡單易懂,很適合入門。把壹本書寫薄還好讀並且覆蓋主要的知識範圍並不是壹件容易的事情。這本書做到的,而且從對HTTP知識的覆蓋程度到易讀性都做得相當好。
本書的特色為在講解的同時,輔以大量生動形象的通信圖例,更好地幫助讀者深刻理解HTTP通信過程中客戶端與服務器之間的交互情況。
《計算機網絡》
絕大部分都在用謝希仁的這本《計算機網絡》,講的很好,淺顯易懂,同樣也是考研408的常用教材。
視頻推薦
首先必須強推湖大教書匠的計算機網絡微課堂,壹個動圖做的最好的計算機網絡視頻課程,老師講課邏輯清晰而且特別容易懂。
5、數據庫
數據庫就是存儲數據的地方,但也不只是這麽簡單。
學習數據庫,不僅要懂得SQL語句,表設計結構這些基礎部分,還要懂索引、慢查詢優化,配置參數調優。
再深入點兒還要學習SQL優化、備份與恢復、架構優化等等進階內容。
書籍推薦
入門系列:《SQL基礎教程》、《SQL學習指南》、《數據庫系統概論》。
這本書介紹的節奏的更加平緩,並且用圖示和關鍵字加粗更加生動地介紹知識,適合零基礎的學生。
對於零基礎的朋友來說Mick的《sql基礎教程》更容易看懂學會,非常適合入門者學習。
深入系列:《MySQL技術內幕——InnoDB存儲引擎》、《Redis設計與實現》。