- 浏览: 21598 次
- 性别:
- 来自: 广州
最新评论
-
yangguo:
1.确实是二叉树。不是平衡。2.跟comparaTo返回什么没 ...
二叉树 -
limi1986214:
不错 回寝室再仔细看下
使用xml和annotation实现类似spring依赖注入和自动扫描类的功能 -
qingwengang:
不错不错,写份5000字的报告交给我!!!
使用xml和annotation实现类似spring依赖注入和自动扫描类的功能 -
五月天:
duben 写道
很好很强大,学习了...!
一起努力!加油 ...
使用xml和annotation实现类似spring依赖注入和自动扫描类的功能 -
duben:
很好很强大,学习了...!
使用xml和annotation实现类似spring依赖注入和自动扫描类的功能
文章列表
深入理解jstack日志
- 博客分类:
- java基础
在分析线上问题时常使用到jstack <PID>命令将当时Java应用程序的线程堆栈dump出来。面对jstack 日志,我们如何查看?
首先要清楚线程的状态线程的状态有:new、runnable、running、waiting、timed_waiting、blocked、dead线程状态变迁图:
各状态说明:New: 当线程对象创建时存在的状态,此时线程不可能执行;Runnable:当调用thread.start()后,线程变成为Runnable状态。只要得到CPU,就可以执行;Running:线程正在执行;Waiting:执行thread.join( ...
大家知道,spring依赖注入可以通过xml和annotation两种方式实现,还提供了自动扫描类的功能,这样大大简化了开发。今天也闲着没事,也实现了类似的功能。废话少说,直接上码:
先说明下要使用到的jar包:dom4j.jar和jaxen.jar(读取配置文件),junit.jar(单位测试),log4j.jar和commons-logging.jar(日志记录)。
1,类似spring的@Service注解
/**
* 自动扫描类到容器中
* @author zcl
*
*/
@Target(ElementType.TYPE)
@Retention(Retent ...
jbpm4学习之任务分配
- 博客分类:
- jbpm
在jbpm4中,必须给任务分配参与者(assignee),我总结了下,有以下的几种方法
一,直接在jpdl.xml文件中指明参与者,如:
<task name="review" g="280,146,92,52" assignee="zcl">
<transition name="to wait" to="wait" g="-25,-25"/>
</task>
这样在程序中就可以直接使用zcl作为用户的id了。 ...
/**
* 折半查找
* author: zcl
*/
public class BinarySearch {
public static int search(int[] arrays, int target) {
int start = 0;
int end = arrays.length - 1;
int pos;
while (start <= end) {
pos = (start + end) / 2;
if (arrays[pos] == target) {
return pos;
} e ...
**
* 实现的简单链表
* @author zcl
*
*/
public class LinkedList {
public class Node {
private String nodeName;
private Node next;
public Node(String name) {
nodeName = name;
}
public Node(String name, Node next) {
this(name);
this.next = next;
}
/ ...
策略模式是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
策略模式的类图:
抽象策略角色可以由java接口或抽象类实现,若有一些公有的行为,则应该使用抽象类。抽象类应该的角色应该足够“重”。
下面举个例子来说明策略模式的用意和作用。
现在有个需求要对一组数据进行排序,但由于各种原因,排序的方法很多,效率也不同,实用的场合也不同,因此可以利用策略模式来实现,将算法封装到具体的类中,需要哪个算法直接到类传进去就可以了,相当于回调机制。
/**
* 抽象策略
*/
publi ...
大家都知道,要对一个对象进行排序可以利用java提供的Comparable<T>接口和Arrays工具类实现。
在实现Comparable<T>接口时要实现下面的方法
public int compareTo(T t);
此方法返回1,0和-1。返回1表示升序,-1表示降序。0表示相等。
为什么要这样定义?出于好奇,我查看了源代码,发现此方法是利用了数据结构里面的平衡二叉树的排序原理。
为了巩固以前学过的数据结构知识,我现在通过java来实现下Binary Tree.
/**
* 二叉树
*/
public class BinaryTree< ...
PO :persistent object持久对象 1 .有时也被称为Data对象,对应数据库中的entity,可以简单认为一个PO对应数据库中的一条记录。 2 .在hibernate持久化框架中与insert/delet操作密切相关。 3 .PO中不应该包含任何对数据库的操作。 -------- ...
类加载器(class loader)用来加载 Java 字节码到 java虚拟机中,即类加载器负责读取 Java 字节代码,并转换成 java.lang.Class 类的一个实例。每个这样的实例用来表示一个 Java 类。
在java虚拟机中可以安装多个类加载器,系统默认三个主要类加载器:
BookStrap, ExtClassLoader, AppClassLoader
类加载器也是java类,所以java类加载器本身也要被其它类加载器加载,显然必须有第一个类加载器不是java类,这正是BootStrap.
java虚拟机中所有的类装载器采用具有父子关系的树形 ...
InputStream,OutputStream,Reader,Writer 1. InputStream 和OutputStream,两个是为字节流设计的,主要用来处理字节或二进制对象, 2. Reader和 Writer.两个是为字符流(一个字符占两个字节)设计的,主要用来处理字符或字符串. 字符流处 ...
抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,创建多个产品族的产品对象。
类图如下:
一个例子:由于业务需求,我公司引进了一个使用机器绘图,可以很方便绘制不同的几何形状,如圆形,方形和三角形。但是有时还得需要手动绘图,每个几何图形都要有画图draw()和擦去erase()两个方法,请使用抽象工厂来解决此问题
先实现定义抽象产品
public interface Shape {
public void draw();
public void erase();
}
public interface Circle e ...
工厂方法模式是是简单工厂的进一步抽象和推广。由于使用了多态,工厂方法保持了简单工厂模式的优点,而且克服了它的缺点。
工厂方法模式的类图:
在一个真实的系统中,会有多于一个的产品等级结构,此时可以将工厂方法应用到这个系统中,按照产品等级结构设计一个同结构的工厂等级结构。
一个例子:请使用工厂方法设计创建一个不同几何形状,如圆形,方形和三角形实例的描图员(Art Tracer),针对于圆形有圆形的描图员,对于方形有方形的描图员。。。系统。每个几何图形都要有画图draw()和擦去erase()两个方法
抽象产品:
/**
* 抽象出来的工厂类
*/
public interfa ...
简单工厂模式,或称静态工厂方法模式,是类的创建模式,由一个工厂对象决定创建出哪一种产品类的实例。
一个例子,要求设计一个创建不同几何形状,如圆形,方形和三角形实例的描图员系统。每个几何图形要有画出draw()和擦去erase()两个方法。
类图如下:
Shape接口
public interface Shape {
//画图形
public void draw();
//擦去
public void erase();
}
几个具体实现类:
public class Circle implements Shape {
@Override ...