- 浏览: 288163 次
- 性别:
- 来自: 北京
最新评论
-
dengfj:
session = sessionFactory. ...
Activiti源码分析 -
xewsk:
CommandContextIntercepter Inter ...
Activiti源码分析 -
XiaoFan012:
关于所谓的缓存,我理解它实际只是在一个session内部的小缓 ...
Activiti源码分析 -
liyonghui160com:
zmf829 写道感觉有个bug, for (Future&l ...
java异步计算Future的使用 -
zmf829:
感觉有个bug, for (Future<String& ...
java异步计算Future的使用
文章列表
通过一段代码来理解URI的构成:
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.URI;
import java.net.URISyntaxException;
public class UriTest {
static void outputGetMethod(Class<? extends Object> c,Object obj){
String get = "get&qu ...
之前很少用到IdentityHashMap,
简单说IdentityHashMap与常用的HashMap的区别是:前者比较key时是“引用相等”而后者是“对象相等”,即对于k1和k2,当k1==k2时,IdentityHashMap认为两个key相等,而HashMap只有在k1.equals(k2) == true 时才会认为两个key相等。
IdentityHashMap有其特殊用途,比如序列化或者深度复制。或者记录对象代理。
举个例子,jvm中的所有对象都是独一无二的,哪怕两个对象是同一个class的对象,而且两个对象的数据完全相同,对于jvm来说,他们也是完全不同的 ...
libtcmalloc.so google的东西,绝对靠谱,使用它可以:
1.替换c++标准的new操作符,来动态分配内存,消除内存碎片
2.heap check:检查内存泄露
3.heap profile:
具体用法:
http://google-perftools.googlecode.com/svn/trunk/doc/heap_checker.html
1.重载的限制:
1)重载后的操作符必须至少有一个操作数是用户自定义的类型,这可以防止用户把标准操作符给重载。
比如 T operator-(double a,double b)//ERROR
2)不能违反原来操作符的句法规则。
3)不能定义新的操作符,否则那就不叫重载了。
4)不能重载下面的操作符;
sizeof
.
.*
::
?:
typeid
const_cast
dynamic_cast
reinterpret_cast
static_cast
除上面的操作符外,其他的都可以被重载。
5)调用重载函数时,左侧的操作数是调用对象,比如:
A = ...
第一、四个用途
用途一:
定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:char* pa, pb; // 这多数不符合我们的意图,它只声明了一个指向字符变量的指针, // 和一个字符变量;以下则可行:typedef char* PCHAR; // 一般用大写PCHAR pa, pb; // 可行,同时声明了两个指向字符变量的指针虽然:char *pa, *pb;也可行,但相对来说没有用typedef的形式直观,尤其在需要大量指针的地方,typedef的方式更省事。
用途二:
用在旧的C的代码中(具体多旧没有查),帮助struct。以前的代码中, ...
C++ STL绝大多数标准容器都提供了Iterator,一些容器,比如priority_queue,因为语意上就不应该允许随便遍历容器中的元素,所以也就没有Iterator了。
23种经典设计模式中就有迭代器模式,java集合框架也实现了这个模式:
package java.util;
public interface Iterator<E> {
boolean hasNext();
E next();
void remove();
}
c++的迭代器要比java更灵活,主要体现在:
1.java ...
c++ 模板分为2类:
1. 函数模板
格式:template <typename 形参名,typename 形参名> 反回类型函数名(参数列表){函数体}
比如:
template <typename T> void swap(T& a, T& b){}
调用时:
int a,b;
swap(a,b);
double d1,d2;
swap(d1, ...
常用的gdb命令
backtrace
显示程序中的当前位置和表示如何到达当前位置的栈跟踪(同义词:where) breakpoint
在程序中设置一个断点 cd
改变当前工作目录 clear
删除刚才停止处的断点 commands
命中断点时,列出将要执行的命令 continue
从断点开始继续执行 delete
好记性不如烂笔头。
1)首先找到系统自带的vim设置的demo。
find . -name vimrc_example.vim
比如是:
/usr/share/vim/vim73/vimrc_example.vim
2)把它copy到当前用户的根目录下:
cp /usr/share/vim/vim73/vimrc_example.vim /home/wenfeng/.vimrc
3)然后根据自己的要求修改.vimrc文件
具体设置方法,baidu一下即可。
我的设置如下:
set nocompatible
set number ...
由于工作需要,要写一段c++代码来调用java的api。下面把实现和调研的过程总结出来。
1. 如何解决?
首选JNI,首先对JNI的原理和使用方法简单调研一下,JNI的权威资料是:
http://java.sun.com/docs/books/jni/html/jniTOC.html
简单点说,JNI可以帮助我们解决两个问题:
1)实现java代码调用其他代码(c,c++,...)
大致的做法:
a)写java 类
class HelloWorld {
private native void print();
public st ...
Activiti是业界很流行的java工作流引擎,关于Activiti与JBPM5的关系和如何选择不是本文要讨论的话题,相关内容可以baidu一下。Activiti从架构角度看是比较优秀的,是很面向对象的,是我所阅读过的代码结构很棒的开源软件,个人认为比Spring,Hibernate的要好。Activiti的基础编程框架
Activiti基于Spring,ibatis等开源中间件作为软件平台,在此之上构建了非常清晰的开发框架。上图列出了Activiti的核心组件。
1.ProcessEngine:流程引擎的抽象,对于开发者来说,它是我们使用Activiti的facade,通过它可 ...
从jdk1.5开始我们可以利用Future来跟踪异步计算的结果。在此之前主线程要想获得工作线程(异步计算线程)的结果是比较麻烦的事情,需要我们进行特殊的程序结构设计,比较繁琐而且容易出错。有了Future我们就可以设计出比较优雅的异步计算程序结构模型:根据分而治之的思想,我们可以把异步计算的线程按照职责分为3类:
1. 异步计算的发起线程(控制线程):负责异步计算任务的分解和发起,把分解好的任务交给异步计算的work线程去执行,发起异步计算后,发起线程可以获得Futrue的集合,从而可以跟踪异步计算结果
2. 异步计算work线程:负责具体的计算任务
3. 异步计算结果收集线程:从发起线程 ...
Jetty设计的很简洁易懂:
Jetty的核心组件及作用如下:
HttpListener:监听客户端请求,有请求,则构建HttpConnection对象,就像建立了一个连接
HttpConnection:HttpConection会构建HttpRequest和HttpResponse对象,完成用户数据的封装,然后调用HttpServer.service(HttpRequest req,HttpResponse res)方法.这个过程非常形象,一次请求的连接建立好之后就触发HttpServer的service方法处理本次请求。
HttpServer:HttpServer可 ...
CountDownLatch:计数门闩,可以用来协调多个线程的协作,使用CountDownLatch的典型场景:某项工作需要多个线程共同来完成,并且其中一个线程(往往是主线程)需要等待其他线程都已经完成了自己的工作时才能继续进行,否则要等待。下面分析CountDownLatch源码:
package java.util.concurrent;
import java.util.concurrent.locks.*;
import java.util.concurrent.atomic.*;
public class CountDownLatch {
/**
...
1 java虚拟机构成
类加载系统 执行引擎 运行时数据区
运行时数据区包括 堆、栈、方法区、本地方法区、pc寄存器。其中堆、方法区是多线程共享的,其它的是线程安全的。
2 java虚拟机链接模型
装载 连接 初始化
装载的产物:
一个堆上的class实例:是连接类实例与方法区数据结构的桥梁,通过class实例,类的实例能够知道类本身的详细构成信息
方法区上的一个数据结构:用来描述一个类的的构成信息。包括:
所有方法的描述(参数,返回类型等等);所有超类的描述(如果有的话);所有实现了的接口列表(如果有的话);所有属性的描述;类加载器的索引。