分享我收集的計算機內功修煉的經典資源

YYC發表於2019-07-29

大家好,我在本文中分享了我收集的計算機內功修煉的經典資源,希望對大家提升內功有所幫助,謝謝~

演算法

leetcode

一個線上刷題的演算法題庫,題目分了簡單、中等、困難,每道題幾乎都有很多人的答案和多種解法。

總題數在不斷增加中,我以前刷的時候有500+的題。

我只是把簡單的題刷了,感覺對我的演算法能力的提高有很大的幫助。

另外需要面試的同學也可以刷下題。

線上連結

設計

《計算機程式的構造和解釋》

本書就是大名鼎鼎的SICP,使用Lisp語言,從程式設計思想的角度介紹了構造過程抽象、構造資料抽象、物件導向設計和併發和流等內容,給出了若干設計例項。

本書是一本介紹設計思想的書,重點介紹了抽象的思維,是一本好書啊!能大幅提高抽象能力!

第1章:構造過程抽象。
本章講解了程式導向設計的思想。
第2章:構造資料抽象。
本章介紹了模組化、層次化思想。
第3章:模組化、物件和狀態
本章介紹了物件的結構實現、併發、流等內容。

我只看了本書前3章,並參考網上資料做了1遍前3章的習題(3.5流的習題沒做。“流”這部分我只學習了下思想,沒有掌握)。
第1章很簡單,第二章有難度,第三章簡單(流的習題沒做,有一定難度)。

本書讓我加深了對程式設計的理解,並學習了遞迴的使用。
建議大家把前3章的習題做了,網上有詳細的答案。

《冒號課堂:程式設計正規化與OOP思想》

通過老師與學生對話的方式,非常生動地講解了物件導向的思想。

作為新手第一本學習物件導向思想的書,是很合適的。

《設計模式之禪》

講了5大設計原則和23個設計模式,並給出了多種設計模式的組合使用。

全書非常通俗易懂,書中的案例也非常生動,適合大家上手學習設計模式。

《領域驅動設計》

本書提出了模型驅動設計,圍繞領域建模來展開論述。
本書是一本經典書,對提高設計能力很有幫助!

第1-3章提出了領域建模的注意事項。
第5章介紹了模型的組成部分:Entity、Value Object、Service、Module。
第6章介紹了聚合體AGGREGATE、儲存庫REPOSITORY、工廠。
第7章介紹了對初步的領域模型進行重構細化的過程,展示了將領域模型細化為詳細架構的過程。
第8章展示了初步的領域模型的演化直到獲得突破的過程。
第9章講解了如何實現深層建模,以及將業務規則提出來的思想(提出了SPECIFICATION規格模式)。
第10章提出了一些原則、啟發,參考這些模式能獲得柔性設計。
第四部分從較高的範圍來展開論述。
第14章提出了上下文BOUNDED CONTEXT、持續整合、上下文之間如何聯絡起來CONTEXT MAP、BOUNDED CONTEXT之間的關係(共享核心、客戶/供應商等關係)、選擇上下文的策略以及如何轉換BOUNDED CONTEXT之間關係。
第15章講解了如何提煉出核心模型CORE DOMAIN。
第16章講解了大比例結構。包括進化迭代的思想來重構大比例結構、系統隱喻、分層、KNOWLEDGE LEVEL、可插入式元件框架PLUGGABLE COMPONRNY FRAMEWORK。

通過閱讀該書,我瞭解了領域模型的重要性。領域模型不只是用來轉化為資料庫表,也與實際的架構模型應該對應。也獲得了設計的相關啟示(風格與《敏捷》有點像)。

《軟體架構設計(第二版)》 (作者:溫昱 )

本書系統梳理了架構設計的知識,讓我對架構設計有了更深入的理解,是一本很好的架構設計的參考資料。

書中一共有三個部分,分別講解了軟體架構的概念,架構設計的方法、過程及步驟,模組劃分等專題。

書中的第2部分,介紹了整個架構從需求到設計的流程,並對每個流程展開說明,並給出了例項。

書中的第3部分,介紹了架構師的關鍵技能:模組劃分。包括水平劃分(分層)、垂直劃分(子系統)、用例驅動設計(自底向上)等內容。這部分可以結合《敏捷軟體開發原則、模式與實踐》中的包設計部分來理解消化。

《一線架構師實踐指南》 (作者:溫昱 )

本書重實踐,《軟體架構設計》重理論。
本書給出了一些實踐經驗,以及具體的例項,可以作為《軟體架構設計》在實踐方面的補充!

建議設計架構時,參考《軟體架構設計》和本書!

工程

《重構:改善既有程式碼的設計》

重構領域的經典書籍。每一小節講了一個重構手法,基本覆蓋了重構的各個方面。

如果你想要你的程式碼更加可讀、易於維護,建議閱讀本書。

《程式碼整潔之道》

有些內容與《重構》的思想相似,也是講解如何改進程式碼的書。

《修改程式碼的藝術》

本書講解了處理遺留程式碼的技術,其中包含了測試的相關討論(如測試私有方法)。

如果你正在接手或重構別人的程式碼,或者正在你之前的專案上繼續開發,本書就是你需要看的。

《測試驅動的Javascript開發》

如果你要開發大型軟體,自動化測試非常重要。雖然前期編寫測試時會花雙倍的開發時間,但是越到後期,越能保證程式碼質量,減少修改bug的時間。

本書講解了如何在開發產品程式碼之前,就先寫測試,用測試來驅動開發。

這樣做的好處之一是可以從使用者的角度,來審視程式碼。通過明確程式碼的輸入輸出,來提高程式碼的設計。

當然,並不是所有地方都適合測試驅動,我覺得像 實現演算法、程式碼相對穩定明確(如不是在實現demo的時候) 的地方可以使用測試驅動。

《敏捷軟體開發原則、模式與實踐(C#版)》

本書講解了敏捷設計、類設計原則和包設計原則、UML、設計模式、薪水專案的設計與實現以及打包等內容,對我學習迭代開發和設計很有幫助,不愧是經典書籍。

以下章節對我幫助很大:
第6章(採用TDD開發保齡球比賽程式(C#))、第20章(咖啡機的物件導向設計與實現)、第26章(薪水專案的物件導向設計的過程與思路)、第28章(包和元件的設計原則)、第30章(薪水專案的包分析)、第37章(測試資料層)

《xUnit測試模式:測試碼重構》

本書是一本關於如何解決測試中遇到的問題的實戰經驗書籍,給出了測試相關的概念、術語、經驗、味道以及模式和例項。

第1部分總體介紹了測試的模式和相關知識,包括測試的味道、目標、基本觀點、原則、策略,以及提出夾具的管理、結果驗證、測試替身、組織測試、資料庫測試等內容。

第2部分介紹了三大類測試味道:程式碼味道、行為味道、專案味道,對每種味道進行了詳細分析,並介紹瞭解決方案模式。

第3部分介紹了測試的模式。對應第1部分,給出了具體例項,是對第1部分的補充。

本書內容組織的方式類似於《重構》一書,同樣也應用於實戰,來源於實戰。

閱讀本書後,在實際應用中如果遇到測試相關的問題,可以迅速地知道該問題在該書中對應的術語、模式以及解決方案。

因為我有一些測試的實戰經驗,所以看本書時就比較順利,同時也深入了我對平時遇到的測試問題的理解。

所以建議先積累一些實戰經驗,然後再看該書,然後再應用於實戰中。

開發經驗

《人月神話》

本書講了一些實際開發軟體的經驗,如 :
增加更多的人來開發,並不能提高開發速度,反而有可能會下降。因為人越多,溝通成本就越高;
沒有銀彈,沒有能通吃一切應用場景的解決方案;
避免陷入焦油坑;

《軟體隨想錄》

本書適合要做專案管理的同學,講解了釋出軟體的經濟學分析等內容,其中專案管理的知識(如“循證式日程規劃”)很有啟發。

《創業必經的那些事 1》

講解了為什麼創業失敗,企業發展的三個階段,如何經營企業等內容,對學習創業的思想很有幫助。

《創業必經的那些事 2》

本書是該系列的第2本書,與第1本書有些相同的觀念,如三種角色(國王、管理者、技師),創新、量化、統一等。

本書的核心觀念就是:作為管理者,要像企業家那樣,把公司當成自己的公司,強調要有自我意識,注重換位思考。

本書強調要管理系統,而不是管理人,因為人是不可管理的,因此需要建立一個願景,一套流程,每個人都能在流程中快速上手,認同企業文化。

“創業”系列書籍的觀點與眾不同,耐人尋味,在創業之前需要認真品讀。

《程式設計師修煉之道》

本書講解了如何成為更好的程式設計師,涉及到了成為優秀程式設計師的方方面面,注重實踐經驗。

本書讓我更加了解了如何成為優秀的程式設計師,學習了一些最佳實踐。

《高效程式設計師的45個習慣:敏捷開發修煉之道》

本書講解了敏捷開發的最佳實踐,從態度、學無止境、互動使用者想要的軟體、敏捷反饋、敏捷編碼、敏捷除錯、敏捷協作、走向敏捷 這些方面來展開論述,展示了敏捷開發的過程、實現、方法,使我對“如何成為高校的敏捷人員”有了更深入的認識。

下面是對我啟發較大的內容:

  1. 第4章-15 提早實現自動化部署。
    提出了一開始就自動化部署應用,如:使使用者可以線上看到我們的演示系統。
  2. 第5章-21 不同環境,就有不同的問題。
    提到了“持續整合”。可以用一個持續整合工具,週期性地從原始碼控制系統中取得程式碼,並執行程式碼。如果有任何測試失敗了,它會通知相關的開發者。
  3. 第5章-22 自動驗收測試。
    提到了FIT,即整合測試框架。它可以更容易地使用HTML表格定義測試用例,並比較測試結果資料。
    使用FIT,客戶可以定義帶有新功能的使用樣本。客戶、測試人員和開發人員(根據樣本)都可以建立表格,為程式碼描述可能的輸入和輸出值。開發人員會參照樣本編寫測試程式碼。測試結果成功或者失敗,都會顯示在HTML頁面中,使用者可以很方便地查閱。

底層原理

《HTTP權威指南》

本書是HTTP及其相關核心Web技術方面的權威著作,適合所有想了解HTTP和Web底層結構的人閱讀。
本書包含21章,分為5個邏輯部分(每部分都是一個技術專題),以及8個很有用的附錄,這些附錄包含了參考資料,以及對相關技術的介紹。
第一部分 HTTP:Web的基礎
第二部分 HTTP結構
第三部分 識別、認證與安全
第四部分 實體、編碼和國際化
第五部分 內容釋出與分發
第六部分 附錄
第一部分用4章的篇幅描述了Web的基礎構件與HTTP的核心技術。
第1章簡要介紹了HTTP。
第2章詳細闡述了統一資源定位符(Uniform Resource Locator,URL)的格式, 以及URL在因特網上命名的各種型別的資源,還介紹了統一資源名(Uniform Resource Name,URN)的演變過程。
第3章詳細介紹了HTTP報文是如何傳送Web內容的。
第4章解釋了HTTP連線管理過程中一些經常會引起誤解且少有文件說明的規則和行為。
第二部分重點介紹了Web系統的結構構造塊:HTTP伺服器、代理、快取、閘道器以及機器人應用程式。(當然,Web瀏覽器也是一種構造塊,但在本書的第一部分已經對其進行過很詳細的介紹了。)第二部分包含以下6章。
第5章簡要介紹了Web伺服器結構。
第6章深入研究了HTTP代理伺服器,HTTP代理伺服器是作為HTTP服務與控制平臺使用的中間伺服器。
第7章深入研究了Web快取的問題。快取是通過儲存常用文件的本地副本來提高效能、減少流量的裝置。
第8章探討了閘道器和應用伺服器的概念,通過它們,HTTP就可以與使用不同協議(包括SSL加密協議)的軟體進行通訊了。
第9章介紹了Web上的各種客戶端型別,包括無處不在的瀏覽器、機器人和網路蜘蛛以及搜尋引擎。
第10章講述了仍在研究之中的HTTP協議:HTTP-NG協議。
第三部分提供了一套用於追蹤身份、增強安全性以及控制內容訪問的技術和技巧。包含下列4章。
第11章討論了一些識別使用者的技術,以便向使用者提供私人化的內容服務。
第12章重點介紹了一些驗證使用者身份的基本方式。這一章還對HTTP認證機制與資料庫的介面問題進行了研究。
第13章詳述了摘要認證,它是對HTTP的建議性綜合增強措施,可以大幅度提高其安全性。
第14章說明了因特網的密碼體系、數字證照以及SSL。
第四部分涵蓋HTTP報文主體和Web標準,前者包含實際內容,後者描述並處理主體內容。第四部分包含以下3章。
第15章介紹了HTTP內容的結構。
第16章探討了一些Web標準,通過這些標準,全球範圍內的使用者都可以交換以不同語言和字符集表示的內容。
第17章解釋了一些用於協商可接受內容的機制。
第五部分介紹了釋出和傳播Web內容的技巧。包括以下4章。
第18章討論了在現代的網站託管環境中佈署伺服器的方式以及HTTP對虛擬網站託管的支援。
第19章探討了一些建立Web內容,並將其裝載到Web伺服器中去的技術。
第20章介紹了能夠將輸入Web流量分散到一組伺服器上去的一些工具和技術。
第21章介紹了一些日誌格式和常見問題。
第六部分是一些很有用的參考附錄,以及相關技術的教程。

本書知識點較多,內容廣而淺,沒有難度,可以幫助讀者全面瞭解Web底層結構。

《深入理解計算機系統》

本書從程式設計師的角度介紹了計算機系統,概述了計算機整個系統的實現,幫助讀者建立一個層次性的計算機系統模型。

第1章:計算機系統漫遊
大概介紹了整個計算機系統
第2章:資訊的表示和處理
介紹了儲存單位、整數和浮點數的表示及運算
第3章:程式的機器級表示
介紹了組合語言
第4章:處理器體系結構
介紹了處理器硬體的設計,介紹了指令集、邏輯電路、指令處理的5個階段(取指、譯碼、執行、訪存、寫回),介紹了指令流水線原理,以及使用暫停、轉發等技術處理流水線的資料相關和控制相關。
第5章:優化程式效能
介紹了程式優化策略,優化迴圈的關鍵路徑,包括:
消除連續的函式呼叫
將計算移到迴圈外
消除不必要的儲存器引用(引入臨時變數儲存中間結果)
展開迴圈(增大迴圈步長)
通過使用如多格累積變數利用並行執行
重新結合
用功能的風格重寫條件操作,使得編譯採用條件資料傳送
第6章:儲存器層次結構
介紹了快取記憶體SRAM、主存DRAM、磁碟的實現原理,介紹了儲存器層次結構。
第7章:連結
介紹了
連結器的主要任務(符號解析和重定位)
靜態連結
靜態庫
動態連結
第8章:異常控制流
介紹了4種型別的中斷,使用者模式與核心模式的切換,程式控制和程式間訊號通訊,非本地跳轉。
第9章:虛擬儲存器
介紹了虛擬儲存器,地址翻譯,CPU、MMU和快取、磁碟之間的頁命中、缺頁的執行過程,動態儲存器分配(堆)等內容。
第10章:系統級I/O
介紹了檔案的操作,描述符表->開啟檔案表->v-node表。
第11章:網路程式設計
介紹了集線器、閘道器、路由等,介紹了套接字操作,實現了簡單的web伺服器
第12章:併發程式設計
介紹了程式、I/O多路複用、執行緒這三種不同的構建併發程式的機制,並擴充套件了一個併發網路伺服器。
介紹了互斥,介紹了生產者-消費者和讀者-寫者模型,介紹了執行緒不安全函式和競爭、死鎖。

該書介紹了系統底層實現,為我整體理解計算機很有幫助。

相關文章