有哪些 Java 源代碼看了後讓你收穫不少,代碼思惟和能力有較大的提高?

轉載:https://www.cnblogs.com/jiagou/p/9270070.html

 

有哪些 Java 源代碼看了後讓你收穫不少,代碼思惟和能力有較大的提高?

 

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

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

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

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

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

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

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

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年前看的時候對於我的的編程和人生起了必定的改善做用,若是你以爲對你有用也能夠嘗試看看,以上是個人一些我的看法。

做者:Asens

來源:知乎

最先看的 架構探險 從零開始寫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自己一樣很優秀,可是更重要的是實現的思想

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

 

 

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

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

相關文章
相關標籤/搜索