对于学习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 循环里。看完后感受真是干货满满,扫除了不少基础方面的知识盲点,受益良多。