作者: 守望,Linux應用開發者,目前在公衆号【程式設計珠玑】 分享Linux/C/C++/資料結構與算法/工具等原創技術文章和學習資源。
前言
标題有點誇張了,但是這是我個人強烈推薦的一本書。最開始是在圖書館借的,後來粗略看了第一遍之後,果斷入手了,中文版原價是139元,這本書就是大名鼎鼎的CSAPP(Computer Systems: A Programmer's Perspective ),中文版被翻譯成了《深入了解計算機系統》。
為什麼推薦
目前其中文版的評分為9.8分,可見其優秀程度。那麼這本書有哪些特點呢?在我個人看來,主要有以下幾個方面:
- 有深度,但又點到為止。
- 實踐性強
- 易讀,注意這裡易讀不是簡單,而是讀起來非常順暢
- 第三版印刷品質良心
- 硬體、系統、軟體系統結合,構成一整個架構,讓你對計算機有一個整體的認識
講了什麼
那麼這本書到底講了什麼呢?
作為一個程式員,你平常所接觸到的東西在計算機中處于什麼樣的位置?你對整個計算機系統有整體的認識嗎?本書闡述了一些計算機系統的核心概念。以下問題你能回答嗎:
- 一個hello world從本文内容到運作列印出來hello world經曆了哪些過程?
- 在計算機中,資訊是如何表示的?
- 程式的機器級表示又是怎麼樣的?
- 處理器又是如何處理這些指令的?
- 程式性能應該從哪些角度來優化?
- 存儲器的存儲結構是怎樣的?
- 連結是什麼?為什麼它那麼重要?
- 異常,中斷又是怎麼回事?
- 虛拟記憶體是如何工作的?
- 檔案是如何通路的
- 網絡程式設計需要注意什麼?
- 并發程式的編寫有什麼技巧?
沒錯,本書從計算機的底層,循循善誘,一步步往上介紹,雖然不會面面俱到,但讓你對整個計算機體系有一個整體的概念。
如果你不能回答以上問題,那麼看完本書,至少讓你知道:
- 一個程式需要經曆預處理,編譯,彙編,連結這樣的過程,了解程序,線程,虛拟記憶體,堆,棧,檔案,并行和并發等概念。
- 二進制又是如何建構出現代計算體系,各種資料類型又是如何存儲,為什麼會有大小端等問題?prinf為什麼總遇到一些奇怪的數值問題?
- 計算機執行指令的過程是怎樣的,它們又是如何操縱資料的,那些算術或邏輯操作,條件控制又是如何處理的
- 處理器執行指令有什麼特點,根據執行特點我們可以如何寫出性能良好的程式
- 局部性原理是什麼?為什麼利用它能夠寫出性能優異的程式?實際中又該如何寫才能極大提高性能?
- 高速緩存有什麼用,命中緩存和不命中緩存有什麼差别?
- 你的多個.c編譯後是如何組織在一起的?靜态庫和動态庫有什麼差別?elf檔案又是什麼?
- 程序是如何建立出來的?什麼是上下文切換?信号又是什麼?
- 程式的位址空間是怎樣的?記憶體映射,動态記憶體配置設定,垃圾回收都是怎麼回事?C程式要注意哪些記憶體問題?
- 如何讀寫檔案,重定向是怎麼回事?
- 如何編寫網絡程式?
- 并發程式設計又有哪些實作方式,都有什麼特點?
除了知道上面這些内容,你還可以通過每個章節後面的習題進行提高,最後也提供習題的答案。而書中也還有很多地方會給你一些提示,同時裡面也會告訴你一些小技巧,如指令行輸入man ascii可以得到一張ascii表。
适合哪些人
本書并不适合初學者,而在閱讀本書時,最好有一定的Linux/C/C++基礎,書中的很多例子也都是C語言實作的。同時,如果你完全沒有聽過前面提到的各種概念,那麼你閱讀起來可能也會比較困難,尤其是機器級表示和處理器體系結構章節,對于沒有學習過彙編的人來說會相當困難。不過私以為可先關注其他章節。
而看這些有什麼用呢?說實話,我也說不出來,不過相信你在遇到一些奇奇怪怪的問題的時候會想起它裡面的内容,例如
- 挂死
- 無大檔案,磁盤占滿
- 記憶體耗盡
- 連結出錯
- ……
但是可以肯定的是,你在不同的階段去讀它,都會有收獲。
如何閱讀
看前言。看書,做題,編寫并運作程式。
總結
如果你想成為一個更加優秀的程式員,那麼這本書你不應該錯過。不過如果想要完全搞懂每個章節的内容,那麼你還需要閱讀其他相關書籍進行補充,它并不能面面俱到。不過對于了解整個計算機體系來說,它非常優秀了。
不說了,吹吹灰,感覺還沒有吹夠。
●編号889,輸入編号直達本文
●輸入m擷取文章目錄
推薦↓↓↓

運維
更多推薦《25個技術類公衆微信》
涵蓋:程式人生、算法與資料結構、黑客技術與網絡安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。