自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(97)
  • 问答 (2)
  • 收藏
  • 关注

Spring 源码学习 - ClassPathXmlApplicationContext

众所周知,Spring以其强大而又灵活的IoC管理功能著称。IoC本质上是通过依赖注入DI的方式实现组件之间的解耦。其实在DI模式下,一个关键性的角色是装配器(assembler)。应用程序的组件A在引用别的组件B的时候不用通过new来创建,而是依赖一个第三方的装配器创建好B,然后再通过setter或者constructor来注入给A,这样A只管用B的接口,而不需要知道B的存在,从而实现了A与B的...

2012-05-06 11:47:39 185

从appfuse开始学习Spring和Hibernate - (2)Spring启动log

分析appfuse的详细的启动日志来看看Spring的启动过程。1. 装载app上下文[code="java"]main INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization started。。。。。。。。。。main INFO org....

2012-05-05 21:35:16 150

从appfuse开始学习Spring和Hibernate - (1)构建项目

千里之行,始于足下。结合例子学习概念,比较靠谱。本文介绍如何开始从appfuse开始学习Spring和Hibernate。如果你还没有安装mysql,请先安装。同时也建议你安装一个workbench来方便管理数据库。1. 利用Maven构建appfuse项目万能的Maven提供了很多丰富的Archetype让你可以轻松构建一个包含了你想使用的框架的基本项目,而避免让你从零开始。你可...

2012-05-05 15:54:37 282

Spring 事务在多线程环境下的传播

有时候需要使用多线程来提高对于CPU,尤其是多核CPU的利用率,来提高性能。Spring的bean一般都是无状态的,单例的。所以也就是线程安全的。那么对于声明式的事务,在多线程环境下又是怎么处理的呢?看看下面的例子:[code="java"]ClassA.java@Transactionalpublic void methodA(){ Execut...

2012-05-04 21:42:16 2520

关于Hashtable和HashMap, Vector和ArrayList

在功能上讲Hashtable和HashMap, Vector和ArrayList有着几乎相同的功能。他们的主要区别在于:Hashtable和HashMap的区别,先看put方法的源代码Hashtable[code="java"]public synchronized V put(K key, V value) { // Make sure the value is not nu...

2012-05-01 09:41:01 107

JVisualVM还真是不错

最近再看Java 性能的问题。一直都习惯使用Jconsole和Jstack。今天偶然发现一个更好的东东JVisualVM。这个工具功能更强大而且有很多插件可以扩展,相信后面插件会越来越丰富。如此一来一些简单的profiling和monitoring需求都可以满足了,而不必使用JProfile和YourKit了。JVisualVM是JDK自带的一个使用工具。如果你的path里面包含java的...

2012-04-27 21:38:35 105

Java String 详解 - String Literal

为了性能和内存资源上的考虑,JVM对String类型的数据做了特殊的处理。也就是大家都知道的String是immutable的或者是constant。其实很多面试或者笔试里面都会考到。有时觉得没事找事,确实,对于一般的系统,不需要考虑到底创建了几个string,只管用就是,似乎JVM会处理,至少会GC他们的。其实不然。对于大型项目,或者运行很长时间的项目,或者使用到大量字符串的项目来说,Strin...

2012-04-08 14:23:00 2378

Java Management Extensions (JMX) 学习笔记- 程序管理和监控

在学习Tomcat 7 的源代码的时候发现,大量运用到了JMX, MBeans,所以决定先学习一下。[size=medium]介绍[/size]JMX是Java 5开始引入的API。这个API意在帮助管理和监控资源: applications, devices, services, and the Java virtual machine. 你可以用JMX API来:[list][...

2012-04-07 20:25:30 149

原创 Tomcat 7 源码分析 - 初始化 class loader

Bootstrap 在启动的时候初始化了三种class loader:common,server和shared。在它的createClassLoader方法里面,通过:[code="java"]String value = CatalinaProperties.getProperty(name + ".loader");[/code]来得到属性文件catalina.properties里面...

2012-04-07 19:24:52 111

原创 Tomcat 7 源码分析 - 启动概览 bootstrap

先大致浏览一下整个启动过程吧。下面是org.apache.catalina.startup.Bootstrap的main函数。我在eclipse调用的是start的命令,也就是传入main的参数是start// 初始化, 构建org.apache.catalina.startup.Catalina实例,并赋值给catalinaDaemonbootstrap.init();// 把刚...

2012-04-07 14:57:14 94

Tomcat 7 源码分析 - 下载 tomcat source code 并导入eclipse

准备好好研究学习一下tomcat 7 的源代码,那么第一步就是下载,导入eclipse并且运行。[size=small]1. 下载源代码[/size]tomcat 7 的源代码在svn上,所以你需要svn的安装。创建一个目录tomcat7,并用命令行进入这个目录,之后用下面的命令下载[code="java"]svn co http://svn.apache.org/repos/as...

2012-04-07 09:23:25 144

Java Generic 学习

泛型是Java 5开始引入的一个语言级别的特性,目的是为了让你的程序更为可靠(reliable)。 程序总是有bug,而bug分为编译时bug和运行时bug,编译时bug是比较令人舒服的bug,因为大部分的IDE比如eclipse,就能让你在写代码的时候就能发现并及时fix。但是运行时bug就很难受了,必须在运行时的某个条件下才能出现,当你想去找它的时候还不一定那...

2012-04-06 19:34:38 91

Java 执行过程详解 - JVM 生命周期

Java的执行过程也就是JVM从启动到退出的过程。JVM的运行是一个进程单元,可以用jps工具列举出正在运行的JVM 进程。在一个JVM进程中可以运行多个线程。[size=medium]1. JVM 启动[/size]当用java工具运行一个编译好的class文件的时候,比如下面的命令,我们就通过调用Test的main函数启动了一个JVM进程。并且传给main函数一个字符串数组{"rebo...

2012-04-04 12:01:05 178

Java System 类详解 - properties and environment variables

在环境配置中我们经常需要知道或者设置系统属性值和环境变量。系统属性值是在同一个Java process里面有效的全局变量。而环境变量则是对于整个操作系统中所有进程都可见的,就如同你在OS里面设置的一样。因此除非必要,或者你确实需要环境变量,比如classpath和path,一般推荐使用properties。比如log4j的属性文件的使用。下面的代码可以打印出所有的系统变量和环境变量:[...

2012-04-04 11:32:54 151

原创 Java System 类详解 - arraycopy

System类提供了数组copy函数: public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int l...

2012-04-04 11:01:52 150

Java System 类详解 - in, out, err

几乎所有的都用过这个System类吧,因为大家学习的第一个语句大概就是[code="java"]package jdk.lang;public class SystemInspection { public static void main(String[] args) throws Exception { System.out.println(“Hello Worl...

2012-04-04 07:46:24 192

关于 sun.misc.Unsafe

今天在看java.util.concurrent.atomic包的源代码的时候看到原来这个包的底层都调用了sun.misc.Unsafe这个类,这个类其实是个native的实现类,他的神奇之处就在于它可以直接访问内存地址。如果你能直接调用它,那么就意味着你可以绕开一切lock而直接操作地址,虽然危险却有相当的性能吸引力。( 源代码)  它十分高效,因为它的实现基于CAS (Compare An...

2012-04-03 15:31:59 92

如何提高代码质量

本文是写给开发人员的建议,不会涉及很多QA方面的讨论。我觉得有三个方法可以提高软件质量,根据重要性和有效性一次为:Code Review, Refactor和Unit Test。这三个方法不是三个阶段,而是同时交叉进行的。[b]1. Code Review - 逻辑分析[/b] 当需要开发或者新增一些功能的时候,首先就是设计实现方案,然后开始编码实现。我觉得在开始...

2012-04-02 20:08:58 107

在Java中什么是 Primitive 和 Reference 类型

Java虽然是个面向对象的语言,也声称“Everything is object”- 一切都是对象。但是,我觉得还不够纯粹和彻底,和ruby或者python比较一下就知道了。在Java中,数字和布尔类型就不被看做对象,而是被称为primitive类型。不过也不见的就不好,本文也不是想对此评论和分析。本文是想阐述Java的数据类型。[b]Java的数据类型[/b]Java的数据类型分...

2012-03-24 23:14:01 1124

Java 并发编程 - Programming Concurrency on the JVM

这几个月一直在做性能调优的工作,以前总是进行功能的开发,从来不考虑性能的问题,经过这几个月的工作,发现从性能和扩展性的角度去看软件开发,还真是大不一样。在和朋友聊天的时候,提及Java程序是否能充分利用多核cpu的问题的时候,朋友给我推荐了这本书《Programming Concurrency on the JVM》。几天看下来,还真觉得很应景,建议做Java开发的朋友试着阅读一下。我简单记录下我...

2012-03-24 23:08:33 153

如何进行Java EE性能测试与调优

[b]性能测试的目标[/b]性能测试不同于功能测试,不是对与错的检验,而是快与慢的衡量。在进行真正的性能测试之前要先搞清楚目标:1. 在确定的硬件条件下,可以支持的并发数越大越好,响应时间越快越好。具体需要达到的并发数是多大,要求的响应时间是多快,由产品经理来提出。2. 在确定的硬件条件下,测试得到最大并发数和相应的响应时间之后。如果增加硬件投入,可以得到怎样的性能提升回报...

2012-03-24 20:51:27 72

java 异常的运用之道

异常是一个很普通,但是很难把握和运用的工具。首先看看异常的种类:The basic philosophy of Java is that "badly formed code will not be run."基于很多原因,我们的程序中可能会发生一些错误,有可能是外界的输入错误导致的,有可能是程序内部编写错误导致的。好在现在的IDE比如Eclipse能帮我们进行一些关键字,程序格式以及类型...

2011-09-18 21:03:46 55

版本控制系统 - version control system - git

几乎每个开发者每天都在用版本控制系统,那么为什么我们要用它呢?[size=medium][color=blue][b]为什么需要版本控制系统(VCS)[/b][/color][/size]最基本最重要的原因当然是版本回复reversion。随着开发,代码不断地在演化。如果你在写代码的时候发现一秒钟前错误的删除了一行代码,你会很快的用ctrl+z来撤销修改,从而回复你错删的代码。但是如果你经...

2011-04-02 10:18:09 253

Rails 架构学习笔记

Rails给web应用的结构上强加了很多约束,而正是这些约束使得应用的开发变得很容易。也许是因为无规矩不成方圆,也许是因为规定好了道路是的开发者不用在选择面前纠结和徘徊,也许是从框架上植入了最佳实践,是的新手不那么容易犯前人的错误。。。[size=medium][color=blue]Models, Views, and Controllers[/color][/size]MVC是一个...

2011-03-31 10:32:05 99

RoR开发环境搭建 - Windows radrails2

[size=medium][color=darkblue]1. 安装Ruby [/color][/size]1)下载RubyInstaller: http://rubyforge.org/frs/download.php/74298/rubyinstaller-1.9.2-p180.exe 2)运行rubyinstaller-1.9.2-p180.exe,根据向导安装,我是安装到c盘: [...

2011-03-30 09:55:01 126

Rails 入门学习笔记

[quote]Ruby on Rails is a framework that makes it easier to develop, deploy, and maintain web applications.[/quote]Rails显然是一种基于ruby的web实现框架,原生的MVC模式支持。有着很多奇特的地方:[size=medium][color=blue]Rails Simp...

2011-03-29 14:44:27 124

Ruby 入门学习笔记

[quote]Ruby is designed to make programmers happy.[/quote]Ruby的设计理念就是让开发者用的舒心。先看看Ruby有什么特别之处,感如此自信。在学习概念之前,得先准备一个环境,好是我能亲身体验。安装环境似乎不是那么容易,简单起见不如用ruby提供的在线解释器:http://tryruby.org/[size=medium][c...

2011-03-28 14:24:25 133

同步时间服务器 - ntp & crontab

服务器经常时间不准,运行一段时间后偏差还会很大,这对一些应用来说很不利。Linux提供了ntp,也就是Network Time Protocol。你可以检查是否安装了:[code="java"][root@yourhost ~]# rpm -qa | grep ntpchkfontpath-1.10.1-1.1ntp-4.2.2p1-9.el5_3.2[/code]确认安装...

2011-03-28 13:27:03 198

学习maven - 标准的目录结构

[color=blue][b]约定大于配置[/b][/color]使用约定,有很多好处:1. 可以节约很多配置2. 可以从用best practice3. 新人可以快速熟悉项目,有家的感觉[color=blue][b]Maven的约定[/b][/color][quote]src/main/java Application/Library sourcessrc/m...

2011-03-18 15:42:13 77

为什么要用maven - 2

本文是接着前面的一片继续记录maven的学习笔记:[url]http://jackycheng2007.iteye.com/blog/923791[/url][size=medium][color=blue][b]法宝2. POM 项目对象模型 - 继续[/b][/color][/size][color=blue][b]Project Inheritance - 项目继承[/b][...

2011-03-18 10:57:25 89

原创 深入学习 Java concurrent - 多线程

我觉得要清理一下关于进程和线程的基本概念。[size=medium][color=blue][b]首先就是进程。[/b][/color][/size]什么是进程呢?简单的说就是cpu的一个执行过程,在这个过程中,os为它分配独立的内存空间,这样就保证不被别的进程影响。单任务的os就是说多个进程间只能顺序的执行,也就是说多个事情只能一件一件的做。那么多任务的os支持多个进程交叉同时执...

2011-03-09 21:32:48 97

如何做好本职工作

如何做好本职工作?我们都有Manager或Leader,有的人(Leader)还有下属(Team Member)。日常工作总结起来,有一下几个方面:1. 任务 (Task)2. 汇报 (Report)3. 沟通 (Communication)我们经常会拿到老板给的一个任务。你如何开始这项工作呢?[color=blue][b]1. 搞清楚这个任务的目标到底是什么[...

2011-03-05 20:24:29 174

Java IO 深入学习

IO可算是jdk的一个很基本的东西了,所以打算整理一下我对IO的学习和理解。IO,当然就是Input和Output的简写,分别代表了读和写两个方面。流的引入,使我们可以形象的认为数据就像流水一般在各种是被间流走,而不必理会沟渠是怎么铺设的。我们只要关注怎么控制这些字节或者字符的流动就好了。[size=medium][color=blue][b] InputStream & Outp...

2011-03-05 20:19:37 108

学习 java.lang.System 类

java.lang.System类应该说是JDK提供的一个很好的工具类。这个类设计成final,就是不让你继承。不提供构造函数,就是说不让你实例化。它却给我们提供了很多有用的方法和属性。[size=medium][color=blue][b]System 类提供了标准输入(in),输出(out)和错误(err)流。[/b][/color][/size]什么是标准输入输出流?这是一个Un...

2011-03-03 22:13:40 92

Java中函数参数的传递

一般谈到函数的参数传递的时候都会想到值传递和引用传递。看看本文的例子就会很清楚了。[code="java"]public class MethodParameter { public static void main(String[] args) { String str = "Hello"; char[] c = new char[] { 'W', 'o', 'r',...

2011-02-28 22:29:12 108

Maven Dependency Mechanism - 依赖管理机制

[b]Dependency Mechanism[/b]Java项目开发中肯定需要大量的jar文件,也就是说你要依赖很多已经开发好的jar包。尤其是你要依赖很多开源的东东。有没有感到很迷糊,经常不知道要用到哪些,干脆全部拿来。多么希望用多少来多少,还不用我自己指定。再加上版本的问题,头大。maven号称有奇招。我们来看看maven的依赖管理机制吧。[code="java"] ...

2011-02-25 14:59:22 184

为什么要用maven - 1

都说maven很好很强大,我就在想为什么呢?今天不妨认识一下她。maven本身的意思是“专家”,大概是告诉人们我很牛。哈哈。我们先看看这个专家的想法:[b]Philosophy, 哲学[/b]一提到maven,你准想到ant,老想和这个build元老级工具比一比谁牛。可以maven却不想和ant比肩。他的目标更远大。ant确实是一个很强大的build工具箱,而maven不想成为第二个。...

2011-02-24 17:04:40 162

不可变类(immutable class)

不可变类,顾名思义就是说类的实例是不可被修改的。实例的信息是在创建的时候提供,并且在整个生命周期中都不可改变。大家都知道Java的String类是immutable。其实primary的包装类都是immutable的。那么如果让你设计和immutable的class要怎么做呢?immutable 也就是不变的意思。不可改变的。怎么样让一个类的对象不变呢?第一你肯定想到,这个类不能被继承...

2011-02-24 16:33:29 834

HIbernate 缓存机制

Cache主要是为了提高系统的性能的。HIbernate由于直接JDBC的一个方面就是因为它的缓冲机制。Hibernate有两级缓存。第一级缓存就是事务级缓存。很重要也是必须的。这一级缓存的对象是在persistence context中缓存的持久化对象。这级缓存可以保证对应于数据库同一行的对象只有一个实例。因此不存在并发的问题。第二级缓存是进程级别的缓存。这里缓存的对象为同一个sessi...

2011-02-22 22:48:24 69

原创 ORM with Hibernate - 对象状态剖析

ORM其实有两个方面,一个是静态的mapping,也就是结构化的关系。一个对象与一张或者多张表怎么样对应。还有一个方面就是动态关系。在应用中创建,查询,修改一些对象的时候,这些变化如何同步到到DB里面去,反过来,DB的数据如果变了,怎么样反映到应用中的对象中来。换句话说,是内存中的对象是如何与DB里面的数据同步的。关于如何mapping,使用hibernate的人都应该懂得,只是另...

2011-02-22 17:50:18 80

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除