- 浏览: 158763 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (210)
- java (44)
- javascript (5)
- 网摘 (21)
- 程序人生 (19)
- hibernate (21)
- spring (7)
- struts (1)
- jquery (2)
- mssql (3)
- mysql (3)
- oracle (7)
- 学习日记 (10)
- PowerDesigner (1)
- android (4)
- 调试 (1)
- tomcat (3)
- webapp (1)
- context (2)
- jsp (2)
- 学习 (18)
- 态度 (4)
- 坚持 (4)
- jsf (1)
- ui (1)
- css (1)
- seam (0)
- 转载 (5)
- JNDI (1)
- 创业 (1)
- 公司 (1)
- 方向 (1)
- ETL (1)
- Datastage (1)
- 数据整合 (1)
- 心情,感触 (1)
- 开发 (2)
- 测试 (1)
- 需求 (1)
- 湿身 (1)
- 网购,分类 (1)
- 驾校,转载 (1)
- 中秋,露营 (1)
- 域名 (1)
- 空间 (1)
- 网站程序 (1)
- SolrCloud (1)
- Solr (6)
- 全文库 (1)
- HBase (1)
- Hadoop (1)
- 网络应用 (1)
- 数据结构 (1)
- NoSQL (1)
- jQueryEasyUI (1)
- 面试 (1)
- 三十六计 (1)
- S2S3H4 (1)
- jar (1)
- war (1)
- web 项目 (1)
- Subversion (1)
- TortoiseSVN (1)
- MyEclipse (1)
- eclipse svn插件 (1)
- SQL2005 (1)
- ASP (1)
- 笔记 (2)
- 虚拟器、centOS、jdk、tomcat、nginx (1)
- memcached (1)
- nginx (1)
- telnet (1)
- nfs (1)
- zookeeper (2)
- window (1)
- linux (3)
- cronolog (1)
- web (1)
- mybatis (3)
- 设计模式 (1)
- 测试覆盖率 (1)
- EclEmma (1)
- tomcat7 (1)
- sore (1)
- 时间 (1)
- fackbook (0)
- facebook (1)
- IK (2)
- PKUSUMSU (1)
- openoffice (1)
- pdf (1)
- memcache (1)
- 动态词库 (1)
- 动态同义词 (1)
- centos7.3 (2)
- maven (4)
- 111 (0)
- nexus (2)
- 23种设计模式 (1)
- springboot (1)
- shiro (1)
- redis (1)
- rabbitMQ (1)
- native (1)
- dll (1)
- jasperReports (1)
- ireport (1)
最新评论
-
zhongfenglin:
学车的经历 -
Tiny_小小:
...
网购的选择 -
jrjr200411:
楼主写的好!
面对大公司和小公司的选择 -
feelboy:
说的很好。
每周四十小时,你有多少是在为自己干活?
刚才在论坛不经意间,看到有关源码阅读的帖子。回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动。
源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心。
说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃《Core Java》,你是很难从中吸收到营养的,特别是《深入Java虚拟机》这类书,别人觉得好,未必适合现在的你。
虽然Tomcat的源码很漂亮,但我绝不建议你一开始就读它。我文中会专门谈到这个,暂时不展开。
强烈的求知欲,我认为是阅读源码的最核心驱动力。我见到绝大多数程序员,对学习的态度,基本上就是这几个层次(很偏激哦):
1、只关注项目本身,不懂就baidu一下。
2、除了做好项目,还会阅读和项目有关的技术书籍,看wikipedia。
3、除了阅读和项目相关的书外,还会阅读IT行业的书,比如学Java时,还会去了解函数语言,如LISP。
4、找一些开源项目看看,大量试用第三方框架,还会写写demo。
5、阅读基础框架、J2EE规范、Debug服务器内核。
大多数程序都是第1种,到第5种不光需要浓厚的兴趣,还需要勇气:我能读懂吗?其实,你能够读懂的。
耐心,真的很重要。因为你极少看到阅读源码的指导性文章或书籍,也没有人要求或建议你读。你读的过程中经常会卡住,而一卡主可能就陷进了迷宫。这时,你需要做的,可能是暂时中断一下,再从外围看看它:如API结构、框架的设计图。
我就说说如何读Java源码,以及我曾经的阅读感悟。
Java源码初接触
如果你进行过一年左右的开发,喜欢用eclipse的debug功能。好了,你现在就有阅读源码的技术基础。
我建议从JDK源码开始读起,这个直接和eclipse集成,不需要任何配置。
可以从JDK的工具包开始,也就是我们学的《数据结构和算法》Java版,如List接口和ArrayList、LinkedList实现,HashMap和TreeMap等。这些数据结构里也涉及到排序等算法,一举两得。
面试时,考官总喜欢问ArrayList和Vector的区别,你花10分钟读读源码,估计一辈子都忘不了。
然后是core包,也就是String、StringBuffer等。
如果你有一定的Java IO基础,那么不妨读读FileReader等类。我建议大家看看《Java In A Nutshell》,里面有整个Java IO的架构图。Java IO类库,如果不理解其各接口和继承关系,则阅读始终是一头雾水。
Java IO 包,我认为是对继承和接口运用得最优雅的案例。如果你将来做架构师,你一定会经常和它打交道,如项目中部署和配置相关的核心类开发。
读这些源码时,只需要读懂一些核心类即可,如和ArrayList类似的二三十个类,对于每一个类,也不一定要每个方法都读懂。像String有些方法已经到虚拟机层了(native方法),如hashCode方法。
当然,如果有兴趣,可以对照看看JRockit的源码,同一套API,两种实现,很有意思的。
如果你再想钻的话,不妨看看针对虚拟机的那套代码,如System ClassLoader的原理,它不在JDK包里,JDK是基于它的。JDK的源码Zip包只有10来M,它像是有50来M,Sun公司有下载的,不过很隐秘。我曾经为自己找到、读过它很兴奋了一阵。
Java Web开发源码
在阅读Tomcat等源码前,一定要有一定的积累。我的切实体会,也可以说是比较好的阶梯是:
1、写过一些Servlet和JSP代码。注意,不是用什么Struts,它是很难接触到Servlet精髓的。用好Struts只是皮毛。
2、看过《Servlet和JSP核心编程》
3、看过Sun公司的Servlet规范
4、看过http协议的rfc,debug过http的数据包
如果有以上基础,我也不建议你开始读Tomcat源码。我建议你在阅读Tomcat源码前,读过Struts源码,Struts源码比WebWork要简单得多。这个框架是可以100%读懂的,至少WebWork我没有100%读懂。我曾经因为读懂了Struts源码,自己写过一个Web框架。
当然,在读Struts框架前,最好看过它的MailReader等demo,非常非常不错的。
如果你做过一些Struts项目,那么读它时就更得心应手了。
在读Struts前,建议看看mvnforum的源码,它部分实现了Struts的功能,虽然这个BBS做得不敢恭维。
如果你读过Struts,再开始考虑Tomcat源码阅读吧。
不过,我还是不建议直接读它,先读读onJava网站上的系列文章《How Tomcat Works》吧,它才是Tomcat的最最简易版。它告诉你HttpServletRequest如何在容器内部实现的,Tomcat如何通过Socket来接受外面的请求,你的Servlet代码如何被Tomcat容器调用的(回调)。
学习JSP,一定要研读容器将JSP编译后的Servlet源码。
为什么我总是称呼Tomcat为容器,而不是服务器?这个疑问留给大家吧。
如果你一定要读Tomcat,那么就读Jetty吧。至少它是嵌入式,可以直接在eclispe里面设置断点debug。虽然Tomcat也有嵌入式版本。
Java数据库源码阅读
我建议,先读读Sun的JDBC规范。
我想你一定写过JDBC的代码,那么这时候可以开始阅读源码了。
如果了解JDBC规范(接口),那么它的实现,JDBC Driver就一定要开始了解,我的建议是,读读mysql的jdbc驱动,因为它开源、设计优雅。在读mysql的JDBC驱动源码时,建议看看mysql的内幕,官方正好有本书,《Mysql Internals》,我五年前读过一部分。比如你可以知道mysql的JDBC驱动,如何通过socket数据包(connect、query),给这个C++开发的mysql服务器交互的。
通过上面的阅读,你可以知道,你的业务代码、JDBC规范、JDBC驱动、以及数据库,它们是如何一起协作的。
如果你了解这些内幕,那么你再学习Hibernate、iBatis等持久化框架时,就会得心应手的。
读过JDBC驱动,那么下一步一定要读读数据库了。而正好有一个强大的数据库是用Java开发的,Hsqldb。它是嵌入式数据库,比如用在桌面客户端软件里,如Mail Client。
我四年前为此写过一篇小文,就不介绍了。
Java通讯及客户端软件
我强烈推荐即时通讯软件wildfire和Spark。你可以把wildfire理解成MSN服务器,Spark理解成MSN客户端。它们是通过XMPP协议通讯的。
我曾经在一个项目中,定制过Spark,当然也包括服务端的一些改动。所以它们的源码我都读过。
我之所以推荐它们。是因为:
1、XMPP够轻量级,好理解
2、学习Socket通讯实现,特别是C/S架构设计
3、模块化设计。它们都是基于module的,你既可以了解模块化架构,还可以了解模块化的技术支撑:Java虚拟机的ClassLoader的应用场景。
4、Event Driven架构。虽然GUI都是Event驱动的,但Spark的设计尤其优雅
这么说吧,读它们的源码,你会为做一名程序员而自豪,因为无论是他们的架构设计还是代码,都太漂亮了。
Java企业级应用
当然了,就是Hibernate、Spring这类框架。
在读Spring源码前,一定要先看看Rod Johnson写的那边《J2EE Design and Development》,它是Spring的设计思路。注意,不是中文版,中文版完全被糟蹋了。
在读Hibernate源码前,一定要读读Gavin King写的那本《Hibernate in Action》,同时,应该再读读Martin Fowler写的《企业应用架构模式》,它专门谈到持久化框架的设计思路。当你觉得这两本书读透了,再去看它们源码吧。
而且,在读源码前,你会发现它们用到很多第三方Jar包,二三十个,你最好把那些Jar包先一个个搞明白。
说到企业应用,一定会涉及到工作流。我当年读过jBPM的源码,网上有介绍jBPM内核的文章(银狐)。我感觉它的内核也就两千行,不要害怕。我曾经阅读jBPM源码的博客。
当然了,读工作流源码,前提是一定要对其理论模型有深入的了解,以及写过一些demo、或做过一些项目。
我上面介绍的这些,是我自己读过的,也适合一般人阅读。
我也读过一些非Java源码,感觉不错,也推荐给大家:
dojo源码 它的架构设计得很优雅,仿Java的import和extends。但实际应用起来一塌糊涂。我们当年基于这个开发了自己的框架,不过我不是主力。
Flex源码 Flex 08年底刚刚开源后,我就用它做过一个中型项目,应该说是国内的技术先行者。当时市面没有有深度的书,也没有开源项目。我纯粹是看Flex的Help文档和源码,把项目搞定的。两三年过去了,现在觉得系统设计得蛮优雅的。
好了,先介绍到这里。
上面说到的这些Java源码,我都是4年前、甚至更早读过的。技术变化这么快,像互联网的高速发展,催生很多高性能、分布式数据库,如hadoop。我一看,发现自己已经落伍了。
这几年,想必已经出现了很多优秀的框架,大家不妨分享出来。
发表评论
-
JAVA设计模式总结之23种设计模式
2019-01-29 11:18 452网摘:https://www.cnblogs.com/po ... -
框架底层直接用控制器调用dao的笔记
2018-12-20 15:18 416公司框架操作数据库用到三个核心类,BaseDao、Hibe ... -
利用openoffice进行各种格式转换为PDF
2018-09-03 17:18 2564参考:https://blog.csdn.net/liumi ... -
springmvc常用注解标签详解
2018-03-13 20:26 3611、@Controller 在SpringMVC 中,控制 ... -
2017-08-15 SpringMVC框架项目国际化学习的笔记
2017-08-15 11:37 420springMVC的国际化开发方案 1.项目分支,在分支 ... -
memcached 安全端口设置
2017-07-09 23:05 403-- 设置memcached防火墙过滤规则 iptabl ... -
java 设计模式自学的笔记的源码
2017-03-22 15:16 324java 设计模式自学的笔记的源码 -
网摘学习知识
2016-02-01 14:28 458用3000个开源项目搜索Java代码:http://www ... -
参数乱码的解决方法
2015-08-09 09:10 450目前收集到4中方法,中文传参一documentPath为例:1 ... -
清楚代码的注释内容
2015-07-17 15:02 517public class ClearComment { ... -
经典!(IT人士群聚喝酒的讲究)
2015-02-16 16:53 415大家喝的是啤酒,这时你入座了…… 你给自己倒了杯可乐,这叫 ... -
Java开发环境搭建详解
2014-09-17 14:48 546一。jdk安装与配置 jdk7于3月份刚刚发布,目前ecli ... -
首富们的22种习惯
2014-08-31 20:51 470说起世界首富们,大家 ... -
Java程序员常用工具类库
2014-07-07 14:49 492参考网址:http://rensanning.iteye.c ... -
OOA/OOD/OOP
2014-02-11 21:42 465OOA Object-Oriented An ... -
如何在康佳电视上看音乐MV
2012-12-23 20:30 1007简单的几个步骤: 操作如下: 1、准备一个U盘 2、下载 ... -
win7 32位装win7 64位系统
2012-11-17 14:49 6111.下载win7 64位系统的镜像文件 2.下载nt6_h ... -
月薪2千 理财帝把钱分成五份活的得有滋味
2012-10-07 21:41 501月薪2000元活得有滋味 ... -
国外程序员推荐:每个程序员都应读的书
2012-06-16 12:52 572“如果能时光倒流,回 ... -
使用 CXF 做 webservice 简单例子
2012-06-16 00:05 812Apache CXF 是一个开放源 ...
相关推荐
Java 源码阅读的真实体会是许多程序员追求的目标,但实际上却很少有人能够真正地阅读和理解源代码。本文旨在介绍阅读 Java 源代码的经验和体会,包括技术基础、强烈的求知欲和耐心三个核心点。 技术基础是阅读源...
Java 源码阅读的真实体会 以下是从给定文件信息中生成的知识点: 一、 Java 源码阅读的三个核心点 * 技术基础:具备基本的编程语言技能,例如 Java 或 C++,并且能够理解《Core Java》和《深入 Java 虚拟机》等...
阅读Java源码是一种深入理解语言本质和技术细节的重要方式,它能帮助开发者提升技术水平,增强问题解决能力。在开始源码阅读之前,有几点是至关重要的: 1. **技术基础**:阅读源码需要一定的编程基础,例如熟悉...
Java源码阅读是一个深入理解Java技术体系的重要途径,它能帮助开发者提升技术水平,增强问题解决能力。以下是对Java源码阅读的一些关键知识点的详细说明: 首先,阅读源码需要一定的技术基础,这包括对Java语言的...
Java源码阅读是一种深入理解语言本质和技术框架的重要途径。它能帮助开发者提升技术水平,增强问题解决能力,并且激发对编程的热爱。以下是一些关于如何有效地阅读Java源码的要点和经验分享。 首先,阅读Java源码...
在实现过程中,使用了Java编程语言,可能涉及到Swing库来构建图形用户界面,JDBC进行数据库连接,以及面向对象编程思想来组织代码结构。每个模块的实现方法描述详细,确保了系统的功能完备性和稳定性。 系统测试是...
* 要对源代码进行不断地完善,要尽可能地实现课题所要求的功能。 * 不断地写程序,实现更多的功能,看到自己编的程序能成功运行,这样自己会更感兴趣,也就会乐此不疲。 知识点5:项目的地位 * 项目的地位非常重要...
为了更好地服务于读者的学习需求,《JAVA项目开发全程实录》的作者可能还提供了压缩包子文件,里面包含了PDF电子书文件、源代码文件夹、以及相关数据文件和配置文件等。这些文件的综合运用,为读者提供了一个更加...
【压缩包子文件的文件名称列表】:CodeCore微博系统,这可能代表了整个项目的源代码目录,其中包含了所有的类文件、配置文件、JSP页面等,初学者可以通过逐个查看这些文件来学习和理解系统的构建过程。 通过这个...
ATM柜员机的Java课程设计报告涉及到一个模拟真实ATM操作系统的应用程序开发。这个项目旨在让学生通过实际编程练习,加深对面向对象编程的理解,并掌握Java语言的应用。 3.1 功能需求分析: - **登录页面**:用户需...
- Java源代码首先被编译成字节码,然后由Java虚拟机解释执行。 - 这种特性使得Java程序可以在不同的操作系统上运行。 5. **Java的平台无关性**: - Java程序在Java虚拟机上运行,只需安装相应的JVM即可在任何...
6. 编辑Java源代码 7. 编译Java程序 8. 运行Java程序 9. 根据classpath环境变量定位类 10. Java程序的组织形式 11. Java源文件的命名规则 12. 初学者容易犯的错误 Java编程基础结构化程序设计简介: 1. 程序的三种...
**题目描述**:有Java源程序`test.java`,内容如下: ```java class test { public static void main(String[] args) { System.out.println("Test String"); } } ``` 现运行`javac test.java`将其编译,但运行...
大型企业级云产品-亿级数据统计分析系统(真实大数据应用,代码企业可直接复用),完整版108讲,附源码+课件;本课程项目是一个综合项目,技术涵盖java web,大数据,虚拟化,linux服务器等 具体包含: spring,...
该系统为用户提供了一个码头船只出行及配套货柜码放管理系统,在系统中可以管理用户、管理船只、管理货柜等等,另外设置了两种权限(管理员和员工),不同权限的用户登录后操作不一样,让用户体会到一个真实的码头...
首先,该项目通过提供一系列的源代码和图片资源,为学习者构建了一个模拟真实环境的实验室。在这样的实验室中,学习者可以亲自动手实践,从而更直观地理解Java Web开发中的各种概念和技术。例如,通过分析Servlet的...
报告格式包括封面、目录、课题介绍、程序功能概述、设计分析、程序结构、模块说明、源代码、操作流程、试验结果和设计体会等部分。具体任务如用菜单和按钮控制绘图,要求实现直线、椭圆、矩形和多边形的绘制,以及...
Java经典入门教程pdf完整版Java私塾跟我学系列JAⅥ篇网址:htp:/www.lavass.Cn电话:010-86835215 3;Java是一种软件运行平台 3.1:什么是软件的运行平台 ...Java虚拟杋是在真实札器中用软件模拟实现的—种想象...
4. 设计模式这个建议多看吧,在阅读源码中体会; 5. linux系统需要掌握常用的linux命令-------部署在windows操作系统上的项目很少吧。 其他就不多说了,大家可以补充。学习上,兴趣是最大的老师;项目驱动也是不错...
该系统为用户提供了一个码头船只出行及配套货柜码放管理系统,在系统中可以管理用户、管理船只、管理货柜等等,另外设置了两种权限(管理员和员工),不同权限的用户登录后操作不一样,让用户体会到一个真实的码头...