看了後讓你代碼思維和能力提升的 Java 原始碼

對於學習J2EE的框架有很大的幫助,代碼裡使用了各種設計模式、事件機制、Java8語法、代碼量也很小,web服務使用Netty作為支持,對HTTP/網絡想研究的一定是你的必讀品。目前在寫 Blade-In-Action 小書。

我之前也寫過如何實現IOC/MVC框架的簡單博文,可以在這個biezhi/java-bible倉庫裡看到。

也說一下我看過的一些比較不錯的代碼,看了對Java能力一定會有質的提升

有想法提升Java思維能力和Java進階的 加群:863621962

國人寫的模板引擎,代碼質量很高:subchen/jetbrick-template-2x

數據結構和算法類的,同時有測試代碼:buptdavid/datastructure|kdn251/interviews

Java寫的高性能數據庫:jankotek/mapdb

Netty實現的高性能RPC,有寫博文分析:tang-jie/NettyRPC

Java編寫的原子組件庫,內功非常深厚:mindwind/craft-atom

前點評網的一位大牛黃藝華寫的爬蟲框架:code4craft/webmagic

針對Java8的一系列代碼示例,純乾貨無廢話:winterbe/java8-tutorial

Java設計模式的總結以及代碼和文章:iluwatar/java-design-patterns

最優雅的網絡請求庫,一個Java文件:kevinsawicki/http-request

Java程序員一個 交流社區:https://jq.qq.com/?_wv=1027&k=5pkxbG4

以上是我看過質量都還不錯的代碼庫,難度相對不是特別高,但對於編程思想的提升還是有很大幫助,互聯網資源如此豐富的時候我們更需要的是靜下心來安靜學習和思考而不是一味的追求信息大爆炸,所以我只挑選了對於代碼能力有提升的難度不是特別高的分享給各位。

同時也推薦阮一峰的《如何變得有思想》一書,這本書記得在3年前看的時候對於個人的編程和人生起了一定的改善作用,如果你覺得對你有用也可以嘗試看看,以上是我的一些個人見解。

最早看的 架構探險 從零開始寫Java Web框架,黃勇寫的,算是一種啟蒙,作者自己寫了一套ioc和aop框架以及mvc請求分發框架。

跟著寫了一遍,基本明白了Spring 和SpringMVC是怎麼工作的

然後順著思路看了2遍Spring和SpringMVC的源碼,一遍是跟著流程走了一邊,一遍是基於接口和類的功能整體瞭解了一遍架構設計

再後來看了how tomcat works,看了一遍中文的,時隔一年又看了一遍英文的,tomcat的作者親自講解tomcat的進化,怎麼從一個幾十行的弱雞http服務器變成一個servlet容器的,跟著書和各種源碼把tomcat的演變寫了一遍,真正的源碼也過了一遍,但是分支太多了

作為一個Java web 開發者,我覺得從tomcat的啟動到tomcat接受http請求到SpringMVC路由分發請求,到業務代碼處理,到模板渲染,到返回對應的http信息都應該瞭解對應的過程,這樣遇到很多問題都能第一時間判斷出對應的位置,讓一些'很神奇'的問題不再神奇

然後就是netty了,看了一遍異步的事件驅動reactor模型的nio服務器實現,對異步,多線程,nio理解上了一個新的臺階

中間穿插讀了util包的各種類

Spring幾乎已經不需要解釋了,用到的都應該去閱讀一下,無論是設計思想,代碼規範,還是設計模式,接口設計,類加載,都是非常優秀的源碼

tomcat太大了,並不是很推薦閱讀,源碼對於閱讀者也不是很友好,但是how tomcat works還是很值得閱讀的

netty本身同樣很優秀,但是更重要的是實現的思想

總之閱讀源碼有什麼感覺呢,就好像打開了一扇通往更大世界的大門,能看到厲害的代碼技巧,健全的錯誤異常機制,更重要的是對已有問題的解決方案,和解決問題的思路,這些都是一個程序員成長過程中最好的教材

看了後讓你代碼思維和能力提升的 Java 源代碼

jdk就是最好的java源代碼,作者為了性能也是拼了,裡面會考慮對gc友不友好,生成的內存屏障指令要儘量輕量級,為了應對偽共享做填充,能用位移的就用位移,不說了,我繼續看源碼去了。

最近一直有在看JDK 源碼註釋,主要是深入研究下基礎知識和併發編程。結合註釋看源碼,得到的細節非常多。經常可以看到一行代碼上有三十四行註釋,會把一個方法的使用示例,需要注意的問題,方法實現細節說明等等,全都說的很清楚。比如Object 的wait和notify 方法。註釋裡說wait 方法會讓當前線程,被放入到一個set 中,這個set 是和當前對象的監視器關聯的。所以這就說明了為什麼wait 方法為啥需要在syncronizied方法裡調用,因為要獲得對象的監視器嘛。還有就是線程進入等待後,會讓渡出當前對象鎖,這個是和線程睡眠的區別。還說明了線程假醒的問題,因此推薦把wait 方法放在while 循環裡。看完後感覺真是乾貨滿滿,掃除了很多基礎方面的知識盲點,受益良多。


分享到:


相關文章: