`
jiangwenfeng762
  • 浏览: 286143 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
文章列表
通过一段代码来理解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实例,类的实例能够知道类本身的详细构成信息 方法区上的一个数据结构:用来描述一个类的的构成信息。包括: 所有方法的描述(参数,返回类型等等);所有超类的描述(如果有的话);所有实现了的接口列表(如果有的话);所有属性的描述;类加载器的索引。  
Global site tag (gtag.js) - Google Analytics