2018讀書總結

前言

立刻過年了,迫於買了kindle & kindle ultimate,今年看了不少書,看完以後若是不寫點總結有點遺憾,趁週末寫下讀後感。java

我看的書書書書書書書

專業書

《代碼大全》

不要被名字騙了,這本書英文名《Code Complete》,'complete'意爲完整,完成,完備.'code complelte'即完備的代碼,它並非代碼的百科全書,而是教你如何寫出工程化,規範化,遵循最佳實踐的代碼.初入公司時寫出的代碼,emm...屎同樣,如今一直看書+實踐,好了不少。程序員

  1. 恰當的命名十分重要
  2. 智力上的可管理性,隱藏的信息越多同一時間須要考慮的信息就越少.從代碼層面來說就是拆分子函數
  3. 語義的主要性:函數不要帶有反作用,它完成的功能應該符合它的名字
  4. 註釋! 註釋! 註釋!,寫出爲何這麼作,而不是怎麼作的
  5. 修改老代碼前,先作些簡單的重構,我的實踐,十分有效

一本值得反覆閱讀的書,可能明年會翻出來再看一遍正則表達式

《Java併發編程的藝術》

Java併發編程的底層原理和實現,國人寫的書,原本只是由於kindle uiltimate 免費才隨便看看,看到第三章就完全被吸引了.完完整整看了三四遍,推薦觀看,尤爲是第三章,全書的精華算法

  1. 爲了解決硬件速度的不匹配(cpu,內存,硬盤),計算機中存在各類級別的緩存(CPU緩存,線程緩存,內存緩存),這些緩存提升了計算機的運行效率,也致使數據的不一致,引入了同步問題.
  2. 在計算機中,軟件技術和硬件技術的一個共同目標:在不改變程序執行結果的前提下,儘量提升並行.
  3. 鎖的三個層次——偏向鎖,輕量級鎖,重量級鎖。層次越高性能損耗越高,鎖只能升級,不能降級
  4. JSR-133,java內存模型(JMM)的重大更新,volatile的語義加強(如今的volatile和鎖擁有相同的語義),final的修復。引入了happends-before規則,as-if-serial規則,這些規則方便咱們(程序員)理解。
  5. 編譯器的代碼重排序優化,處理器的指令重排序優化.以及爲了正確的執行結果引入的內存屏障
  6. Java是基於共享內存的通訊機制,線程之間的通訊是隱式的,同步是顯式的
  7. 併發容器的基石——CAS和volatile以及Doug Lea

我的強烈推薦,準備買本實體書收藏編程

《重構》

如何安全的改造老代碼? 看它就對了.這本書的內容和《代碼大全》有很大一部分重疊,好比命名和提取子函數,但它更着重於如何安全的改造舊代碼,這一點是不少像我同樣的新手容易忽略的。設計模式

看這本書也是有原由的: 以前有一個功能是我來作的,上線以後雖然能跑,可是邏輯太亂,代碼太爛,就在空閒時間改了不少,交給大佬審獲得的回覆是:你這徹底是重寫,不是重構,以後就一直思考這個問題,直到看到這本書,才明白重構的真正意義:改造代碼使其邏輯更清晰,代碼更整潔是重構的一個目的,改造後的代碼能夠正常運行是更重要的目的,若是不知足第二個條件,恭喜,又一個背鍋俠誕生了緩存

《編寫可讀代碼的藝術》

至關於《代碼大全》的一個子集,比較獨特的是它把可讀代碼的編寫分爲了幾個層級安全

  1. 表面層次的改進——命名和註釋
  2. 簡化循環和邏輯——控制流和表達式拆分
  3. 從新組織代碼——提取子函數
  4. 易於測試的代碼——TDD

印象已經不太深了,能夠做爲代碼大全的進階讀本併發

《高性能MySQL》

只學到了這本書的20%,不過對於開發來講,足夠了app

  1. 沒有索引加持的查詢很慢
  2. null字段弊大於利,如非必要不要使用
  3. 聚簇索引,二級索引的區別
  4. MVCC(multi version concurrent control,多版本併發控制 )——隱藏的兩列,事務版本和刪除版本
  5. 最左前綴索引原則,它的限制真的不少,很難用好
  6. 主從複製的原理——binlog(binary log)
《Maven實戰》

一本很好的工具書,看完以後對maven的原理基本理解了,做者爲了湊字數強加了不少代碼,能夠跳過。必看

  1. 構件(maven中的術語,好比log4j就是一個構件)的定位原理
  2. 依賴管理——scope的含義,依賴傳遞的處理以及依賴衝突的解決辦法,必定多看幾遍,你會用到的
  3. 超級pom:‘兒子,我是你爸爸’——maven一直說約定大於配置,'約定'就在超級pom裏,全部pom都繼承自超級pom,若是有一些默認配置你不清楚,去超級pom裏看下就明白了
  4. 生命週期-resource,compile,test-resource,test-compile,test,jar,install。插件和生命週期的綁定以及插件簡寫是如何解析的(mvn compile 這裏的compile就是插件簡寫)
  5. dependencyManagement——按需對依賴版本進行管理,若是你的項目有多個模塊,記得看下
  6. 模塊的繼承和組合——繼承-爸爸不知道兒子,兒子知道爸爸。組合-爸爸知道兒子,兒子不知道爸爸。
  7. 構件倉庫/插件倉庫&鏡像——在國內不知道怎麼設置鏡像,拉取速度會讓你痛苦的
《深刻理解Java虛擬機》

JVM方面這本算是必備書,針對JDK7。有些內容如新生代老年代不太適用目前版本的JDK。大體有這幾塊

  1. JVM中的內存劃分
    • 共享——堆,方法區
    • 私有——虛擬機棧,本地方法棧,程序計數器
  2. GC
    • 對象還活着嗎?——引用計數法和可達性分析算法
    • Java卡頓的緣由-GC時stop the world
    • GC算法——標記-清理,複製,標記-整理
    • 新生代——大多數對象朝生夕死,使用複製算法快速回收
    • 老年代——少數對象生存時間長,使用標記-整理標記-清理回收
    • 新生代收集器——Serial,ParNew,Parallel Scavenge
    • 老年代收集器——Serial Old,Parallel Old,CMS(目前最經常使用)
    • JDK7時的前沿收集器——G1,可預測的停頓並行分代整理。總體基於「標記-整理」算法,局部(兩個Region)基於複製算法
  3. 類加載
    • 加載流程——加載,驗證,準備,解析,初始化,使用,卸載。以上階段可能交替進行
    • 雙親委派機制,以及對雙親委派機制的破壞-線程上下文類加載器
    • 類加載器——引導(Bootstrap)類加載器,拓展(Extension)類加載器,系統(System)類加載器
  4. JVM的各類神優化
    • 編譯期優化——在源碼翻譯到字節碼時起做用,舉個比較有趣的:解語法糖,詬病已久的以擦出爲基礎的範型的底層原理,foreach在字節碼中表示,已經自動裝箱拆箱。
    • 運行期優化—— 解釋運行和編譯運行,編譯運行的不一樣級別C1C2.JIT(just in time)即時編譯器和熱點代碼
    • 各類優化術語——延遲編譯,分層編譯,棧上替換,樂觀判斷,分支預測,公共子表達式消除,逃逸分析,鎖消除。。。。等等,第一次看到這些名詞可能不明覺厲,不要懼怕,認真讀一遍,不少技術後面的思想都是很簡單的(這並不表明實現很簡單)

有興趣能夠看下我以前寫的幾篇相關文章JVM專題

《Go語言實戰》

Go很火,本身私下也使用過,找了這本書,看了一遍,結合對底層原理的理解終於明白:Go火起來時有道理的

  1. 線程模型——kernel threads, user threads, and fibers。Java目前使用的主要是Kernel threads(或者說kernel thread的高級抽象LWP),Go用的是user threads,這時Go並行的基礎,也直接決定了它們使用的內存模型
  2. 內存模型——共享內存和信息傳遞,Java用的共享內存,Go用的消息傳遞
  3. Go的不足之處——糟糕的異常機制,過多的約束

參見以前寫過的一篇Go語言之思

《精通正則表達式》

正則表達式基礎,介紹了正則表達式的流派和它背後的原理,看過兩個月後80%的內容都忘了,印象最深入的就是環視,推薦快速過一遍,瞭解下原理就能夠,之後用到知道往哪方面找。

《敏捷軟件開發(原則模式與實踐)》

經典,過了一遍,第一次以爲結對編程是真實存在而且有效的,快速設計,快速反饋,快速修改以及TDD,領略到了不同的風采。

《Java8實戰》

十分有用,lambda,Stream,Optional更是重點,以前Stream用的挺多,大都是filter,map,collect一把梭,用的很爽然而沒有什麼提高。看這本書期間正好在作一個版本,現學現賣,都用了上去,代碼量減了很多,語義也更清晰,之前想試下設計模式,奈何都要搞一個繼承體系(如模版方法),得不償失,有了lambda終於試了一下,感受良好。

  1. lambda的語法—— ([ArgType arg...])->[{[return] }],lambda中不少語法組成都是可選的,這也是lambda的目標:儘量的簡潔
  2. lambda的匹配規則——鴨子類型,若是它走起來像鴨子,叫起來像鴨子(實現了接口要的方法),它就是一隻鴨子(能夠被賦值給接口的值),這點和Go挺像的 3.Stream的高階使用——分組,多級分組,partitionBy,collect()的自定義使用。若是使用恰當,代碼能夠從幾十行縮減到1行,而且語義更清晰。
  3. 不要濫用parallel,參見不要濫用parallel
  4. Optional,null的另外一種解決方案,提高代碼的流暢度,對於代碼語義真的意義重大

有興趣能夠再看下這篇工做覆盤,有一部分講了怎麼實踐的


閒書

《自控力》

我的學到最重要的:學會原諒本身&及時行樂。

《非暴力溝通》

emm,挺有意思的一本書,相比於書中的語言,咱們平時溝通確實算的上暴力溝通

《男人來自火星,女人來自金星》

男女之間有些差別很神奇!做者研究的很透徹,從他的對男人的描述中,能夠看到本身的影子,惋惜的是,看完以後,仍是不知道怎麼哄女友。

《無聲告白》

be yourself!live for your own。

《系統之美》

簡單點說,強迫本身看的,只能說不太適合我,惟一get到的就是正反饋和負反饋。

《人間失格》

致鬱系的書,看了一章,看着很扎心。

《給投資新手的極簡股票課》

兩個小時看完,對股票沒那麼多的誤會了(沒區別,我又不會買股票,23333)

《碼農翻身》

劉欣劉大的書,用故事講技術,通俗易懂又不失深度,強推。


明年準備看的書

  1. 《CSAPP》大三看到第三章停了,不求全理解,只但願能過一遍
  2. 《算法4》 算法一直是心中之痛,一直不得其法,完整看一遍,把基本算法記下來
  3. 《SICP》 Lisp,讓我體會一下函數式編程的魅力吧

後記

終身學習。

相關文章
相關標籤/搜索