程序員修煉之路

前言:程序員修煉之路-(0)前言:在路上, 再上路程序員

在前言中已經對知識體系進行了梳理,主要分爲問題定義、算法與數據結構、系統平臺API、編程語言實現、代碼設計、測試驗證等等。目前集中精力編寫算法與數據結構部分,這可能也是最艱難的一部分。其餘部分以前零零散散有所涉及,以後再慢慢補充。面試

(一)計算機科學

離散數學與具體數學。算法

(二)算法分析設計

對於這一部分的內容編排,主要以《算法設計與分析基礎》《算法》以及LeetCode算法題中的問題分類爲橫向,以《算法設計與分析基礎》中羅列的經典設計技巧爲縱向,貫穿每一小節。由於傳統算法書籍的結構常常是爲了講算法而講,目錄內容分類都很死板。而我想要的是解決這一類問題有哪些算法?都是用什麼技巧和思路設計的?數據庫

1)基礎

《程序員修煉之路-(1)基礎():算法設計》編程

《程序員修煉之路-(1)基礎(中):性能分析》設計模式

程序員修煉之路-(1)基礎(下):正確性證實數組

2)線性表

程序員修煉之路-(2)線性表(上):數組與鏈表瀏覽器

程序員修煉之路-(2)線性表(下):棧、隊列網絡

3)排序

程序員修煉之路-(3)排序(上):基本排序數據結構

《程序員修煉之路-(3)排序():合併和快速排序》

4)搜索

《程序員修煉之路-(4)搜索():線性與二分查找》

《程序員修煉之路-(4)搜索():二叉查找樹》

《程序員修煉之路-(4)搜索():哈希表》

5)字符串

很是重要,單列一章。

6)圖

圖算法也一樣重要,但一來能夠納入排序或搜索中,二來面試時考的很少,能夠不單獨列。

7)設計總結

《如何解題》、窮解、減治、分治、動態規劃、貪心。

附:《算法導論學習筆記》

當年《算法導論》的學習筆記,堅持到動態規劃就淺嘗輒止了,DP挺難……

《<算法導論>第二章 入門》

《<算法導論>第6 堆排序 (1)最大堆與堆排序

《<算法導論>第6 堆排序 (2)優先級隊列》

《<算法導論>第6 堆排序 (3)K路歸併

《<算法導論>第8 線性時間排序 (1)計數排序

《<算法導論>第6 堆排序 (4)Young氏矩陣

《<算法導論>第7 快速排序 (四種變形)

《<算法導論>第9 順序統計學 (1)最小值和最大值

《<算法導論>第9 順序統計學 (2)隨機選擇

《<算法導論>第10 基本數據結構 (2)鏈表

《<算法導論>第11 散列表 (1)直接尋址表

《<算法導論>第11 散列表 (2)散列表

《<算法導論>第11 散列表 (3)開放尋址

《<算法導論>第12 二叉查找樹 (1)遍歷

《<算法導論>第12 二叉查找樹 (2)查找、插入與刪除

《<算法導論>第12 二叉查找樹 (3)基數樹

《<算法導論>第14 數據結構的擴張 (1)動態順序統計

《<算法導論>數據結構的擴張 (2)

《<算法導論>第15 動態規劃 (1)裝配線調度

關於算法學習的總結和感悟

(三)系統平臺

計算機架構(計算機組成原理、彙編語言等)、操做系統(LinuxWindows經常使用系統API等)、編譯連接(編譯和連接的原理)。

1)計算機架構

       《深刻理解計算機系統》,絕對的經典,永遠的CSAPP

六星經典CSAPP筆記(1)計算機系統巡遊

《六星經典CSAPP筆記(2)信息的操做和表示

《六星經典CSAPP筆記(3)程序的機器級表示

2)操做系統

《操做系統概念》9分的好書,不知道與《現代操做系統》相比哪本更好:

《<Operating System Concept>進程基礎知識

《<Operating System Concept>進程調度

Linux C一站式學習》,挺經典的一本書,仍是國產吧:

              《<Linux C一站式學習>第一章 程序的基本概念

《<Linux C一站式學習>第三章 簡單的函數

《<Linux C一站式學習>第七章 結構體

《<Linux C一站式學習>第八章 數組

       學習操做系統特別是LinuxShell也是必不可少,有一陣子還很熱衷寫Shell

              《<Shell腳本學習指南>第一章 背景知識》

              《<Shell腳本學習指南>第二章 學習筆記

《<Shell腳本學習指南>第三章 查找與替換

《<Shell腳本學習指南>第四章 文本處理工具

Windows平臺下的編程實踐:

       《<Windows遊戲編程大師技巧>2、Windows編程模型

       《<Windows遊戲編程大師技巧>3、Windows高級編程

       《<Windows遊戲編程大師技巧>4、GDI、控件和突發奇想

       《<Windows遊戲編程大師技巧>5、DirectX基礎知識和使人生畏的COM

       《<Windows程序設計>第一章 起步

       《<Windows程序設計>第二章 Unicode簡介

       《<Windows程序設計>第三章 窗口和消息

3)計算機網絡

Java網絡編程基礎:

《Java Socket編程(一)TCP/IP簡介》

《Java Socket編程(二)Socket基礎

《Java Socket編程(三)發送和接收深刻

《Java Socket編程(四)Socket進階

《Java Socket編程(五)NIO

4)數據庫

       這一部分目前比較雜,以前看的《數據庫概念》沒有及時整理,待補充。

              《<高性能MySQL>讀書筆記(上)

《10條關於數據庫的技巧和經驗》

《<MongoDB權威指南>入門筆記

5)編譯連接

 

(四)編程實現

C/C++/Java等主流語言,如何實現咱們的設計,包括語言語法、內存分配、封裝抽象、分包引庫等小細節。

       C語言:

《<C程序設計語言> 第一章導言

《<C程序設計語言> 第二章 類型、運算符與表達式

《<C程序設計語言> 第三章 控制流

《<C程序設計語言> 第四章 函數和程序結構

《<C和指針>讀書筆記》

《<C和指針>第14 預處理器》

深刻學習有趣的位運算

附:個人業餘實踐項目

主要是爲了練習C,業餘時間寫了很多代碼,從Web到桌面到遊戲到算法類的,涉獵有些雜了… 但無論怎樣,收穫仍是很大,將來仍是要堅持多實踐,多寫一些實用的小東西!

用Qt開發簡單的瀏覽器(一)用Qt開發簡單的瀏覽器(二)

《PSP應用開發入門

《<Windows遊戲編程大師技巧> T3D遊戲控制檯程序實例及第一部分總結

個人第一個Chrome插件:天氣預報應用

貝葉斯公式與拼寫檢查器《Trie的應用及拼寫檢查器的優化

開發一個小工具重溫C#經典問題

       《Java版的Redis

       用Groovy和JFreeChart生成報表

(五)代碼設計

抽象層次定義、23種設計模式、重構改善設計。

(六)測試驗證

單元測試等技術。

相關文章
相關標籤/搜索