共計12h前端
181107: 2h
181108: 0.25h+3h
181112: 1h+1.5h+1.5h
小計:9.5h ~ 10hpython
181112:2hlinux
本書2003年出版,2015年5月譯版第1版
若是僅僅把技術看成一個黑盒, 只把時間花在學習其表面上, 而並無探索到其本質, 就毫不應該認爲本身已經「懂」 了。
即使面對的是複雜的最新技術,一旦把它們迴歸到計算機的基礎知識上, 就變得能夠輕鬆理解了。
本書目的是爲了瞭解有關計算機技術的知識範圍,掌握其基礎中的基礎知識。
全文共計12章:程序員
181107:2149:所謂編碼,就是把信息數字化成計算機可以理解的數字,根據不一樣的編碼方式,計算機存儲須要的字節數不一樣;用於表示字符的數字就是「字符編碼」,用於表示顏色的數字就是「顏色編碼」;編碼就是一種數字化的標準or方式,好比單漢字GBK下2字節,UTF-8下3字節;若是說Linux系統中全部都是文件的話,那麼計算機中全部都是數字;計算機=輸入+運算+輸出;程序=指令+數據;指令和數據都是數字,一組指令能夠理解爲函數,數據能夠理解爲變量;所謂編譯,就是把各類不一樣編程語言寫的代碼轉換成計算機可以理解的機器語言(原生語言-數字);計算機進化的方向是爲了與人類愈來愈接近,擯棄計算機中不符合人類思惟習慣的地方;面向過程編程->兩種編程方法,面向組件編程CBP和麪向對象編程OOP(更接近人類的思惟習慣)。算法
181107:2238:這章講的大部份內容基本都是以前沒看過的,偏底層硬件,只看到了各類引腳連線,把CPU、內存、I/O給串起來,可是到底怎麼串的,以及各類物理電學常識都忘了。經過手工繪製電路圖連線,對整個CPU的構造有了一些瞭解,很是細緻,經過撥動CPU上的按鍵開關手動輸入機器語言一行一行的輸入代碼。機器語言的語法十分簡單,就是指令+數據,指令和數據則是根據存儲的內存地址+指令or數據自己,告訴CPU在哪兒作什麼。對於不作硬件的來講,要深刻理解的主要還就是二進制,時鐘信號,0/1,Hz是用來表示驅動CPU運轉的時鐘信號的頻率,1秒鐘發出1次時鐘信號就是1Hz。數據庫
進階書:計算機組成原理(是時候複習一下了)編程
181108:0958:總的來講這一章的知識比上一章容易理解,主要是以前上了計算機組成原理的課,對於寄存器、彙編語言有必定的瞭解,這章把機器語言清晰的解釋了一遍,更理解底層的實現機制了,很不錯,不過掌握程度不是很高;每一個彙編符號都是在CPU的資料中可以找到,每一個指令都有對應的機器語言二進制代碼,以及對應執行該指令須要的時鐘週期,每一個CPU的Hz頻率表示的就是每秒可以執行多少個時鐘週期,經過對指令須要的時鐘週期進行累加,就可以計算程序所消耗的時間。彙編語言的語法只有一個,把標籤、操做、操做數寫在一行中,標籤的目的是爲該行代碼對應的內存地址取一個名字;程序的執行重點是幾種寄存器,其中PC寄存器存儲着下一行指令的內存地址,是控制整個程序運行流程的重要寄存器;(2)表示地址編號;彙編語言的一行指令可以翻譯成多少字節的機器語言取決於指令種類和操做數的個數(其實也就是CPU資料上怎麼寫就怎麼對應)windows
進階書:編譯原理(這書說實話雖然買了但幾乎沒看,太偏底層而如今業務開發不多直接用到,但若是想要了解底層實現各類感受仍是要好好看一下)、程序員的自我修養——連接、裝載與庫(對各類靜態、動態編譯瞭解不深入,這本書貌似很經典,想看)後端
181108:2107:程序的流程到根本只有3種:順序、條件、循環,若是看到更底層的硬件層面,其實能夠把循環和條件歸爲一類,條件是跳轉到另外一個地址,而循環則是跳轉到以前出現過的地址;寫程序以前能夠先簡單畫大概的流程圖,其實就等價於算法,不過算法可能還須要更加細緻;流程圖主要使用的就是圓角矩形表示開始結束、矩形表示操做、菱形表示條件、箭頭和連線表示執行的順序流程;所謂程序塊就是代碼的集合;所謂結構化程序設計,就是隻具備順序、條件、循環,而沒有goto等所謂跳轉,由於goto這種跳轉命令用得很差就會致使整個程序執行的邏輯複雜、難以理解,而僅僅根據已有的3種流程已經可以組合出全部想要的程序需求了;幾乎全部的程序均可以分爲初始化處理+循環處理+收尾處理這三個過程;兩種特殊的流程,中斷和事件驅動,嚴格的說他倆都是條件的一種,中斷忽然相似來了個電話,解決以後又再回到本來的任務中來,事件驅動則是相似通知,接收到某個通知以後,改變當前的狀態;事件驅動主要用於GUI程序的編寫,更適合使用狀態轉換圖or狀態轉換表來進行描述。設計模式
進階書:程序設計相關——代碼大全&代碼整潔之道&代碼之美(很經典,並且貌似很細緻,想看)、HeadFirst設計模式(講解了多種設計模式,看名字感受對小白也比較有愛)、設計模式之禪(聽說很經典,想看)、領域驅動設計(聽說很經典、想看)
181108:2133:所謂哨兵就如字符串的末尾用\0表示,鏈表的末尾用-1表示的這種特殊的數據,以前見過一些使用哨兵的技巧,可是不知道這就是哨兵;計算機程序的算法必須是步驟明確且有限的;計算機只能機械的解決問題,雖然有時候解決問題的方法比較複雜,但考慮到計算機的運行速度極快,利用好了也能夠執行很是簡單的算法;一些主要的典型算法是必需要掌握的:展轉相除法(求最大公約數,求最小公倍數就用二者相乘除以最大公約數)、埃拉託斯特尼篩法(求某個數是不是素數,直接直覺的從2除到該數的平方根便可)、查找搜索的順序、二分、哈希,排序的冒泡、快排;解決同一個問題可能有多種算法,而其中執行速度快的、佔用空間少的算法固然更爲優秀,要善於利用編程技巧(如哨兵)、數字規律(公式or特殊規律)等來優化算法,減小執行時間;善於使用流程圖or僞代碼先把算法寫出來,想清楚以後再開始編碼。
進階書:算法導論(講算法中堪比聖經了吧,不過貌似比較難理解)、算法第4版(聽說這個做爲算法入門比較不錯)
181108:2156:這章能夠說是本身第1個可以把3個問題所有回答出來的章節了,總體就是在講數據結構的東西,數組、棧、隊列、鏈表、二叉樹,這幾種基本的數據結構,算是簡單的複習了一遍,還有C結構體的概念;其中棧和隊列有個特性是說,常常用於不能當即處理的數據,進行緩存,感受就是消息隊列kafka的核心了。數組是最基礎的數據結構,其餘的數據結構都是基於數組進行的變種,由於數組這種分配連續一塊內存空間地址的方式,與計算機物理分配內存一致。這章還算比較友好,不過相對的學到的新東西其實也少了。
進階書:數據結構(能夠複習複習,其實數據結構和算法密不可分,看上面的基本就OK)
181108:2234:算是複習了一下面向對象編程和麪向過程編程的最大的不一樣點和特性,主要就是類、繼承、封裝、多態,繼承顧名思義就是繼承類,封裝則是把類中的屬性和函數設置爲private不讓外面調用,造成一個封閉的盒子,多態則是對於同一個消息,不一樣的對象可以進行不一樣的操做;類和對象的關係,類是對象的定義,對象是類的實例;裏面比較新的是對UML統一建模語言的介紹,九大圖,以前有看到過,可是沒有去搜,這裏看到了很不錯把面向對象編程做爲一種能提高編程效率、寫出易於維護的代碼的編程方法, 在適當的場合實踐面向對象編程;使用類有3種狀況:一個是繼承該類定義新類、一個是調用該類持有的個別成員(函數)、一個是在類的定義中使用其餘類。考慮python,它既是一種解釋型腳本語言,也可以支持使用面向對象編程的思想,重點是在什麼狀況下使用面向過程,什麼狀況下使用面向對象。
進階書:面向對象相關(和前面程序設計相關結合看,基本上講程序設計的都會說到面向對象編程)
181108:2302:數據庫這個,以前也是上過課的,總體來講,因爲這本書03年寫的,確定有一些技術有點滯後,特別是對近幾年火的非關係型數據沒有進行探討,不過這裏對關係型數據庫的介紹還算不錯,如何對關係型數據庫進行拆表、主鍵、外鍵、CRUD、數據庫事務的原子性操做、SQL語句,Visual Basic 6.0中之前用過的ADO數據對象,用於處理和數據庫的交互的類;任何語言都有可以和數據庫交互的數據對象,基本操做就是:程序開始時創建連接,進行CRUD操做,結束時關閉連接。
進階書:關係型數據庫(MySQL、Oracle)、非關係型數據庫(MongoDB、GraphDB、Redis、NoSQL精粹)、分佈式數據庫。(這部分的書暫時尚未找好,不過根據想要了解的某種數據庫,比較經典的書應該也是比較好找的)
181112:1019:所謂協議,就是一種通訊標準,對信息發送方式的規定or約束;從底往上,網卡(LAN內的MAC地址在網卡上)-網卡驅動程序-IP層(LAN外的IP地址)-TCP層-應用程序(FQDN,主機名+域名);LAN中,MAC到IP的轉換,由ARP地址轉換協議規定,路由器經過廣播詢問某個IP的MAC地址是誰,該主機應答後,在路由器中記下ARP緩存表,定時詢問更新緩存;LAN中IP地址地址的分配,包括路由器的IP地址的分配由DHCP協議(服務器)搞定,服務端記錄可用的IP池,客戶端申請時自動分配可用的IP地址給主機;LAN中,FQDN和IP的轉換,則由DNS服務器搞定,實際上內網中各自主機的轉發用不到DNS,若是路由器發現數據包目的IP就在LAN內,則直接轉發,若是目的IP和源IP不在同一個LAN內,則須要經過路由器轉發;網絡中的傳輸都是經過IP來標識數據包尋址的,域名只有上升到應用程序的時候才考慮,但其實每一個LAN都有一個域名,每一個LAN內的主機也有一個主機名,組合起來的FQDN就是域名,也能夠惟一標識一臺主機;MAC地址由兩部分構成,製造廠商的編號+廠商內部的編號;子網掩碼的做用是爲了標識IP地址的網絡地址部分和主機地址部分。windows下查看一些信息的命令(linux可能也有同名命令):
進階書:計算機網絡(經典課本,感受能夠複習複習)、圖解TCP/IP第5版(這本書講解風格比較容易理解,適合入門,以前沒看完)、TCP/IP詳解卷1-3(差很少是相似聖經,經典必看了,裏面的內容比較深刻、底層,把代碼的實現細節都寫出來了,感受理解起來有必定難度)、UNIX網絡編程卷1-2(一直很想看完的書,可是一直沒看完……)、HTTP權威指南(也是經典必看,作網絡必需要深刻了解HTTP協議原理)、Linux鳥哥私房菜基礎學習篇+服務器架設篇(考慮到大多數網絡服務器都是在Linux系統下,並且有不少網絡相關的命令,深刻了解Linux也是作網絡的必備工夫)
181112:1626:總體來講這章的內容仍是比較淺顯,只是對對稱加密和非對稱加密稍微講了講,介紹了下數字簽名,是公私鑰對的簡單應用。仍是比較簡單,若是涉及到證書驗證之類的可能會比較難一些。不過也從側面說明這部分本身掌握得還算不錯吧。合理的密鑰應該知足以下條件: 長短適中、 能夠反覆使用、 能夠經過某種通訊手段交給接收者, 而且通訊雙方之外的其餘人難以用它來解密。
進階書:加密與解密(一直想看,結果沒看)、HTTPS/SSL/證書相關(書還沒找,但一直想深刻了解其原理,如今作網絡繞不開加密了,加密流量愈來愈多,很是須要深刻了解,進一步可能須要瞭解一下區塊鏈技術)
181112:1707:XML實際上是一種標記語言的源語言;標準的XML由3部分組成:XML聲明+DTD/XML schema+XML主體,聲明定義這是一個XML文檔,相似文件頭部,DTD/XML schema嚴格定義XML文檔中可以使用的標籤及數據及數據位數類型等,主體則是XML傳輸的數據內容;XML能夠應用到任何領域,只要是想要爲信息標記含義的應用場景;可是XML是通用的,但並非萬能的,在例如互聯網or分佈式計算等須要多個不一樣標準格式的主機之間傳輸數據時,做爲通用的數據格式,XML很是有用,可是若是全部的主機都是同一個廠商的,其實使用廠商內部定義的格式更爲高效並節約內存;相對於XML,csv格式的文件沒有定義數據信息,而是隻傳輸了數據自己,更爲節省內存,另外csv文件格式傳輸字符串的時候使用雙引號包含起來,可能內部的逗號就不會被認爲是分隔符;因爲XML可使用於多個領域,並且標籤是可擴展的(即任意指定),確定會存在同形異義的狀況,因此有xmlns屬性做爲命名該標籤的命名空間,明明空間的指定通常使用URI,這樣可以全世界惟一標識該XML使用的命名文件,這樣若是存在標籤的同形異義,就不會誤會了(命名空間的名稱其實能夠任意寫);用於解析XML的程序有不少,DOM、SAX其實都是一種解析標準,不少編碼語言都已經實現了XML的解析庫,直接調用便可。這裏也是沒有介紹新技術HTML5,畢竟2003年HTML5尚未出現。
進階書:數據傳輸格式貌似沒什麼可進階的,不過若是考慮到XML大量應用於Web開發的話,Web開發相關的進階技術棧就很是多了;以前作過一些網頁前端開發的東西,對HTML/CSS/JS/XML/DOM等相關的技術有必定了解,不過並不深刻,後續有須要的話可能會進一步學習,不過感受仍是對後端更感興趣一些。
181112:1741:這裏說的SE系統工程師,感受是把產品經理和技術經理結合起來了,或者說就是在人少時候的技術經理,須要懂一點技術,並且可以和客戶溝通需求,既要求溝通能力也要求技術能力;簡單介紹了軟件開發時最簡單的瀑布模型,基本就是按照順序進行的階段,每一個階段具備其具體的輸出文檔;所謂設計就是拆解(最好使用面向對象進行拆解,這樣當現實世界進行變化的時候,能夠經過只改變那一個對象而進行順利過渡),所謂編碼就是集成(經過從小到大的編寫模塊單元測試,最終集成成一個系統進行集成測試);拆解的程序設計方法,根據拆解時候關注的事物不一樣,能夠有不一樣的方法,可是究其根本的原則,仍是順延計算機的三大原則,輸入運算輸出、符合計算機處理方式的設計原則,更適合計算機程序設計;系統的可用率計算,當多配置一臺機器,其設備可用率就可以從90%上升到99%,這個在數學之美里面也看到過,很神奇,但數學就是這樣。
進階書:若是從技術的角度,這部分的進階應該就是軟件架構相關了。軟件架構的藝術(聽說很經典)、大型網站技術架構:核心原理與案例分析(以前看過,可是影響不深入,並且這本書可能已經比較舊了)、大規模分佈式系統架構與設計實現(一直很想了解分佈式相關的東西,想看)
181112:1749:總體花了近10h看完這本書,雖然實際上是一些很基礎的知識介紹,可是也有一些說實話是以前都沒有了解過的徹底全新的內容,差很少佔10%左右,還有一些內容是以前瞭解過,可是並非很熟練而後至關因而複習加固了一遍,感受仍是不錯的。這是整理編程書籍以後看的第一本書,但願今年可以把計算機的基礎從新複習加固一遍,不少東西其實本身真的沒有掌握很好的,不管怎樣,打好基礎是很重要的。
這本書的優勢是講解十分淺顯易懂,感受即便是徹底的小白也可以理解大概;可是缺點是有些內容可能有點點過期,經典的原則、那些基礎中的基礎固然具備漫長的聲明週期,可是有些新技術其實應該加入到裏面來的,而沒有加入,做爲打基礎感受欠缺了一些新技術的介紹。
不管是想要複習的、新學習的方向進階書都太多了, 準備仍是先把基礎看完、整理、複習OK以後再慢慢往上。
暫定閱讀計劃順序:
這些是已經下載好準備看的計算機基礎概念相關的書了,不知道19年以前能看到第幾本,爭取堅持天天看2h吧。