分享我收集的計算機內功修煉的經典資源
大家好,我在本文中分享了我收集的計算機內功修煉的經典資源,希望對大家提升內功有所幫助,謝謝~
算法
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個習慣:敏捷開發修煉之道》

本書講解了敏捷開發的最佳實踐,從態度、學無止境、交互用戶想要的軟件、敏捷反饋、敏捷編碼、敏捷調試、敏捷協作、走向敏捷 這些方面來展開論述,展示了敏捷開發的過程、實現、方法,使我對“如何成為高校的敏捷人員”有了更深入的認識。
下面是對我啟發較大的內容:
- 第4章-15 提早實現自動化部署。
提出了一開始就自動化部署應用,如:使用戶可以在線看到我們的演示系統。 - 第5章-21 不同環境,就有不同的問題。
提到了“持續集成”。可以用一個持續集成工具,周期性地從源代碼控制系統中取得代碼,并運行代碼。如果有任何測試失敗了,它會通知相關的開發者。 - 第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多路復用、線程這三種不同的構建并發程序的機制,并擴展了一個并發網絡服務器。
介紹了互斥,介紹了生產者-消費者和讀者-寫者模型,介紹了線程不安全函數和競爭、死鎖。
該書介紹了系統底層實現,為我整體理解計算機很有幫助。
浙公網安備 33010602011771號