那些让你代码思维和能力有较大的提升Java源码(转)
对于学习J2EE的框架有很大的帮助,代码里使用了各种设计模式、事件机制、Java8语法、代码量也很小,web服务使用Netty作为支持,对HTTP/网络想研究的一定是你的必读品。目前在写 Blade-In-Action 小书。
我之前也写过如何实现IOC/MVC框架的简单博文,可以在这个biezhi/java-bible仓库里看到。
也说一下我看过的一些比较不错的代码,看了对Java能力一定会有质的提升
国人写的模板引擎,代码质量很高: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
以上是我看过质量都还不错的代码库,难度相对不是特别高,但对于编程思想的提升还是有很大帮助,互联网资源如此丰富的时候我们更需要的是静下心来安静学习和思考而不是一味的追求信息大爆炸,所以我只挑选了对于代码能力有提升的难度不是特别高的分享给各位。
同时也推荐阮一峰的《如何变得有思想》一书,这本书对我个人的编程和人生起了一定的改善作用,如果你觉得对你有用也可以尝试看看,以上是我的一些个人见解。
最早看的 架构探险 从零开始写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 循环里。看完后感觉真是干货满满,扫除了很多基础方面的知识盲点,受益良多。(作者:Asens 部分来源:知乎)
转自: https://mp.weixin.qq.com/s/Hm1d9KeDS_hXZyy6NuRO7g
那些让你代码思维和能力有较大的提升Java源码(转)的更多相关文章
- 鸿蒙内核源码分析(汇编汇总篇) | 所有的汇编代码都在这里 | 百篇博客分析OpenHarmony源码 | v40.03
百篇博客系列篇.本篇为: v40.xx 鸿蒙内核源码分析(汇编汇总篇) | 汇编可爱如邻家女孩 | 51.c.h .o 硬件架构相关篇为: v22.xx 鸿蒙内核源码分析(汇编基础篇) | CPU在哪 ...
- 《编写高质量代码:改善C#程序的157个建议》源码下载
==== 目录 前 言第一部分 语言篇第1章 基本语言要素 / 2建议1:正确操作字符串 / 2建议2:使用默认转型方法 / 6建议3:区别对待强制转型与as和is / 9建议4:TryParse比P ...
- 2018-09-13 代码翻译尝试-使用Roaster解析和生成Java源码
此文是前文使用现有在线翻译服务进行代码翻译的体验的编程语言方面第二点的一个尝试. 参考Which framework to generate source code ? - Cleancode and ...
- 如何0代码实现多人音视频通话?【内附源码/Demo】
3月15日新增"1860+1194",全国进入了抗疫关键时期.响应政策多地采取了社会面清零策略. 3月14日零点,深圳按下了暂停键. 应疫情防控要求,深圳全市暂停生产经营活动,严格 ...
- 曹工说Spring Boot源码系列开讲了(1)-- Bean Definition到底是什么,附spring思维导图分享
写在前面的话&&About me 网上写spring的文章多如牛毛,为什么还要写呢,因为,很简单,那是人家写的:网上都鼓励你不要造轮子,为什么你还要造呢,因为,那不是你造的. 我不是要 ...
- spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)
不多说,直接上干货! 前言 其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...
- storm源码之storm代码结构【译】【转】
[原]storm源码之storm代码结构[译] 说明:本文翻译自Storm在GitHub上的官方Wiki中提供的Storm代码结构描述一节Structure of the codebase,希望对正 ...
- paip.提升用户体验--提升java的热部署热更新能力
paip.提升用户体验--提升java的热部署热更新能力 想让java做到php那么好的热部署能力 "fix online"/在线修复吗??直接在服务器上修改源码生效,无需重启应 ...
- 【原】storm源码之storm代码结构【译】
说明:本文翻译自Storm在GitHub上的官方Wiki中提供的Storm代码结构描述一节Structure of the codebase,希望对正在基于Storm进行源码级学习和研究的朋友有所帮助 ...
随机推荐
- iOS应用内跳转百度高德苹果地图
移动开发经常用到基于位置的一些导航功能,但是对于对导航功能依赖性不强的的应用,我们直接采用应用外跳转地图APP即可. 但是应用间跳转,首先需要设置白名单, 在iOS 9 下涉及到平台客户端跳转,系统会 ...
- js 克隆数据 (数组的深浅拷贝)
var a1 = [1,2,3]; var a2 = a1; a2[0] = 90; console.log(a1[0]) //90 解析:数组是复合的数据类型,直接复制的话,只是复制了指向底层数据结 ...
- Codeforces Round #439 (Div. 2) 题解
题目链接 Round 439 div2 就做了两道题TAT 开场看C题就不会 然后想了好久才想到. 三种颜色挑出两种算方案数其实是独立的,于是就可以乘起来了. E题想了一会有了思路,然后YY出了一种 ...
- [笔记][FPGA]如何使用SignalTap观察wire与reg值
0. 简介 在FPGA程序调试时,我们除了仿真还经常的会用到SignalTap进行板级调试,其可以真实有效的反应某些变量的变化,方便我们理解内在跳转,方便Debug的运行.SignalTap需要制定时 ...
- POJ 2253 Frogger Floyd
原题链接:http://poj.org/problem?id=2253 Frogger Time Limit: 1000MS Memory Limit: 65536K Total Submissi ...
- QBXT T15565 Day4上午道路分组
有向并查集维护连通性 优化: vis数组表示能被节点1到达的点 显然,已经分在一个联通块中的点就没必要在用该点扩展了. #include<cstdio> #include<algor ...
- 3.4 熟练掌握动态规划——状态压缩DP
从旅行商问题说起—— 给定一个图,n个节点(n<=15),求从a节点出发,经历每个节点仅一次,最后回到a,需要的最短时间. 分析: 设定状态S代表当前已经走过的城市的集合,显然,S<=(1 ...
- jquery怎么找到元素下面的第一个子元素
<ul><li>11</li><li>22</li><li>33</li><li>44</li&g ...
- iOS开发之分段控制器(UISegmentedControl)
今天我们来说下iOS中的分段选择控制器UISegmentedControl,这一控件有什么作用呢 每个segment都能被点击,相当于集成了多个button 通常我们会点击不同的segment来切换不 ...
- PS 如何用制作键盘图标
1 键盘可以大致分为笔记本键盘和台式机键盘,颜色一般是黑色或白色.不同的键盘,拍摄角度不同(俯视或者平视)得到的效果也不一样.一般我们根据自己需要得到需要的键盘形式.比如下面别人制作的一套立体键盘,立 ...