Java
文章平均质量分 54
icoder
Java C/C 互联网 电子商务 算法 计算几何 计算机图形学
展开
-
单例Singleton完美版本实现:double-check
public class Singleton { private static Singleton singleton = null; private Singleton() { } public static Singleton getInstance() { if (singleton == null) { synch原创 2013-02-28 16:48:42 · 1108 阅读 · 0 评论 -
Java[设计模式]之美——开篇
设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为原创 2013-04-18 14:04:57 · 1117 阅读 · 0 评论 -
Java[设计模式]之美——单例模式
单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在,并通过这个唯一实例来向系统提供实例行为。这样的模式有几个好处:1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个原创 2013-04-18 14:06:22 · 925 阅读 · 0 评论 -
简析分布式计算框架:Hive HBase Hadoop HDFS
HiveHive是为简化编写MapReduce程序而生的,使用MapReduce做过数据分析的人都知道,很多分析程序除业务逻辑不同外,程序流程基本一样。在这种情況下,就需要Hive这样的SQL似的用户編程接口。Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce,Hive中的表纯逻辑表,就是些表的定义等,也就是表的元数据。使用SQL实现Hive是因为SQL大家都熟悉,转换成本原创 2013-03-29 09:50:50 · 1737 阅读 · 0 评论 -
一种简单无锁队列的实现
Disruptor是内存无锁并发框架,基于一个环数组作为缓冲,详见Disruptor-1.0。下面是自己设计的一个简易版,目前没有发现存在冲突或错误的测试用例。大家可以一起测试下。package tianshui.lockfree.queue;import java.io.Serializable;import java.lang.reflect.Array;import原创 2013-04-09 17:33:07 · 6727 阅读 · 1 评论 -
synchronized(class)、synchronized(this)与synchronized(object)
JAVA中synchronized关键字能够作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。假如再细的分类,synchronized可作用于instance变量、object reference(对象引用)、static函数和class literals(类名称字面常量)身上。synchronizedvoid f() { /* body */ }和void f(原创 2013-03-24 16:48:23 · 2811 阅读 · 0 评论 -
查看java内存情况命令
jinfo:可以输出并修改运行时的java 进程的opts。 jps:与unix上的ps类似,用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。 jstat:一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。 jmap:打印出某个java进程(使用pid)内存内的所有'对象'的情况(如:产生那些对象,及其数量)。转载 2013-07-31 13:43:44 · 2071 阅读 · 0 评论 -
Eclipse的maven插件最新地址
最新地址:http://download.eclipse.org/technology/m2e/releaseshttp://m2eclipse.sonatype.org/sites/m2e 这个地址已经不能用了。原创 2013-09-03 21:24:23 · 23966 阅读 · 7 评论 -
instanceof, isinstance, isAssignableFrom 区别
instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化。如果被测对象是null值,则测试结果总是false。 形象地:自身实例或子类实例 instanceof 自身类 返回true 例:String s=new String("javaisland"); System.out.println(s instanceof String);原创 2013-10-18 10:13:43 · 653 阅读 · 0 评论 -
RETE算法介绍
RETE算法介绍一、 rete概述Rete算法是一种前向规则快速匹配算法,其匹配速度与规则数目无关。Rete是拉丁文,对应英文是net,也就是网络。Rete算法通过形成一个rete网络进行模式匹配,利用基于规则的系统的两个特征,即时间冗余性(Temporal redundancy)和结构相似性(structural similarity),提高系统模式匹配效率。二、 相关概念2.1转载 2013-10-29 22:06:03 · 2221 阅读 · 0 评论 -
Eclipse安装greenUML插件-推荐
greenUML 快速解决Java类转换UML图。非常简单,快捷。Eclipse安装插件更新地址:http://www.cse.buffalo.edu/faculty/alphonce/green使用方式:1 在package包右键,找到 Green UML;2 点击 Add to New Class Diagram;3 点击具体的类,右键点击 Add to L原创 2013-11-26 14:02:06 · 10520 阅读 · 1 评论 -
接口与抽象
选择抽象类还是接口?如果要创建一个模型,且该模型将由紧密相关的对象采用,可以使用抽象类。如果要创建由不相关对象采用的功能,就使用接口。如果必须从多个来源继承行为,就使用接口。如果知道所有类都会共享一个公共的行为实现,就可以使用抽象类,并在其中实现该行为。总结:抽象类是模板;接口是规范。抽象类的功能要远超过接口,但定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是原创 2013-12-06 10:58:45 · 1141 阅读 · 1 评论 -
API通用设计原则
API通用设计原则原创 2013-12-13 10:53:37 · 4074 阅读 · 1 评论 -
Maven之Surefire插件
在编写写Junit脚本后,进行全网回归的时候,肯定会接触Maven的surefire插件。基本配置如下: org.apache.maven.plugins maven-surefire-plugin -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=256m ${basedir}/target/te原创 2013-12-30 17:35:39 · 39259 阅读 · 0 评论 -
BeanFactoryPostProcessor和BeanPostProcessor的区别
BeanFactoryPostProcessor和BeanPostProcessor原创 2014-05-04 16:23:21 · 13778 阅读 · 0 评论 -
Hive中join, outer join, semi join区别
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。最常用的就是多表关联查询,主要讲解下join、outer join和semi join的具体使用。join是最简单的关联操作,两边关联只取交集。outer join分为left outer join、rig原创 2014-05-05 14:12:36 · 16863 阅读 · 1 评论 -
通过ServiceLoader实现链式处理
ServiceLoader与ClassLoader是Java中2个即相互区别又相互联系的加载器.JVM利用ClassLoader将类载入内存,这是一个类声明周期的第一步(一个java类的完整的生命周期会经历加载、连接、初始化、使用、和卸载五个阶段,当然也有在加载或者连接之后没有被初始化就直接被使用的情况)。详情请参阅:详解Java类的生命周期那ServiceLoader又是什么呢?Serv转载 2014-05-16 18:40:31 · 1265 阅读 · 0 评论 -
Velocity模板引擎#set在#foreach中无法赋值null问题
在使用Velocity模板引擎作为Web应用页面渲染引擎,原创 2014-06-21 16:32:59 · 3813 阅读 · 0 评论 -
微博短链接生成算法与简单实现
自从twitter推出短网址(shorturl),国内也有很多互联网公司推出短网址链接,比如微博等。下面是从网上找到了一些算法总结:算法一:最容易想到的算法可能是利用md5类的加密算法,然后针对加密后的字符串进行处理。1)将长网址md5生成32位签名串,分为4段, 每段8个字节;2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作,原创 2013-04-17 19:53:39 · 4097 阅读 · 0 评论 -
一段阻塞队列代码的纠错与优化
下面的代码在某处发现后,立马发现存在问题。public class BlockingQ { private Object notEmpty = new Object(); private Object notFull = new Object(); private Queue linkedList = new LinkedList(); private int maxLength原创 2013-04-16 14:16:17 · 1098 阅读 · 0 评论 -
happens-before原则
在程序顺序中, 线程中的每一个操作, 发生在当前操作后面将要出现的每一个操作之前.对象监视器的解锁发生在等待获取对象锁的线程之前.对volitile关键字修饰的变量写入操作, 发生在对该变量的读取之前.对一个线程的 Thread.start() 调用 发生在启动的线程中的所有操作之前.线程中的所有操作 发生在从这个线程的 Thread.join()成功返回的所有其他原创 2013-02-28 16:55:59 · 523 阅读 · 0 评论 -
JAVA阅读书籍推荐
一、基础类1、《Thinking in java》,入门第一位是建立正确的概念。2、《Core Java》,我没系统读过,这本书更贴近实践,更多API的介绍,同样,更新也更频繁。 二、进阶类1、《Effective Java》,在熟悉语法、API之后,你需要知道最佳实践和陷阱,没有比这本更好的。2、《Java Puzzlers》,通过谜题介绍一些你可能没有注意到的边角料,作转载 2013-02-28 16:28:17 · 6099 阅读 · 0 评论 -
线程池合理配置
合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必须对其原理了如指掌。要想合原创 2013-04-02 14:08:57 · 887 阅读 · 0 评论 -
阻塞算法实现synchronized实现方式
public class NativeSynchronousQueue { boolean putting = false; E item = null; public synchronized E take() throws InterruptedException { while (item == null) wa原创 2013-03-20 12:54:01 · 1041 阅读 · 0 评论 -
阻塞算法Semaphore实现
public class SemaphoreSynchronousQueue { E item = null; Semaphore sync = new Semaphore(0); Semaphore send = new Semaphore(1); Semaphore recv = new Semaphore(0); public E ta原创 2013-03-20 12:55:49 · 926 阅读 · 0 评论 -
设计模式简述
设计模式分为三种类型,共23类。创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。Abstract Factory(抽象工厂模式):提供一原创 2013-03-23 17:31:05 · 1142 阅读 · 0 评论 -
序列化Serializable的理解
序列化:简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。序列化情况:当你想把的内存中的对象状态保存到一个文件中或者数据库中时候。当你想用套接字在网络上传送对象的时候。当原创 2013-03-24 15:14:09 · 796 阅读 · 0 评论 -
sun.misc.Unsafe
sun.misc.Unsafe是jdk并发类库java.util.concurrent包中使用的底层类,该类中的方法都是通过native方法调用操作系统命令。Unsafe类中直接提供操作系统调度命令park、unpark,减少信号量的开销,提高新能。Unsafe unsafe = Unsafe.getUnsafe(); 通过这样的方式获得Unsafe的实力会抛出异常信息,因为在unsafe的源原创 2013-04-07 13:33:04 · 1317 阅读 · 0 评论 -
探秘Java虚拟机——内存管理与垃圾回收
本文主要是基于Sun JDK 1.6 Garbage Collector(作者:毕玄)的整理与总结,原文请读者在网上搜索。1、Java虚拟机运行时的数据区2、常用的内存区域调节参数-Xms:初始堆大小,默认为物理内存的1/64(-Xmx:最大堆大小,默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制-Xmn:新转载 2013-04-08 10:02:46 · 823 阅读 · 0 评论 -
CAP理论十二年回顾:"规则"变了
CAP理论断言任何基于网络的数据共享系统,最多只能满足数据一致性、可用性、分区容忍性三要素中的两个要素。但是通过显式处理分区情形,系统设计师可以做到优化数据一致性和可用性,进而取得三者之间的平衡。自打引入CAP理论的十几年里,设计师和研究者已经以它为理论基础探索了各式各样新颖的分布式系统,甚至到了滥用的程度。NoSQL运动也将CAP理论当作对抗传统关系型数据库的依据。CAP理论主张任何基于转载 2013-04-09 10:36:51 · 1012 阅读 · 0 评论 -
Java内存模型(上)
Jvm中内存分为两种:一种是栈内存,一种是堆内存。栈内存:存放对象,函数中基本类型的变量和对象的引用变量、静态类方法;特点:存在栈中的数据可以共享。堆内存:存放对象,用来存放由new创建的对象和数组;特点:由Java虚拟机的自动垃圾回收器(GC)来管理。Java 内存模型 ( java memory model ):根据Java Language Specification中的说明,j原创 2013-04-08 11:25:40 · 1078 阅读 · 0 评论 -
Java内存模型(下)
顺序一致性内存模型是一个理论参考模型,JMM和处理器内存模型在设计时通常会把顺序一致性内存模型作为参照。JMM和处理器内存模型在设计时会对顺序一致性模型做一些放松,因为如果完全按照顺序一致性模型来实现处理器和JMM,那么很多的处理器和编译器优化都要被禁止,这对执行性能将会有很大的影响。根据对不同类型读/写操作组合的执行顺序的放松,可以把常见处理器的内存模型划分为下面几种类型: 1原创 2013-04-07 14:54:30 · 860 阅读 · 0 评论 -
二进制流实现深复制
public static Object depthClone(Object srcObj) throws IOException, ClassNotFoundException{ Object cloneObj = null; ByteArrayOutputStream out = new ByteArrayOutputStream(); ObjectOutputStream oo原创 2013-04-10 17:34:58 · 813 阅读 · 0 评论 -
无锁同步栈实现
public class ConcurrentStack { private AtomicReference> top = new AtomicReference>(); ConcurrentStack(){ } public void push(E item) { Node newHead = new Node(item)原创 2013-04-10 16:57:27 · 1771 阅读 · 0 评论 -
一种简单线程并发控制的实现
/** * @author 天水 * @date 2013-4-12 下午05:08:49 */public class ConcurrentController implements Runnable { // 并发控制数 private int controlCount; // 并发控制超时时间 (second) private int controlTimeout; //原创 2013-04-12 18:18:08 · 998 阅读 · 0 评论 -
一种高并发流控程序的简单轻量实现
实现一个流控程序,控制客户端每秒调用某个远程服务不超过N次,客户端是会多线程并发调用。import java.util.Date;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Semaphore;import原创 2013-04-16 16:06:04 · 6275 阅读 · 2 评论 -
Java静态内部类
在一个类中创建另外一个类,叫做成员内部类。这个成员内部类可以静态的(利用static关键字修饰),也可以是非静态的。由于静态的内部类在定义、使用的时候会有种种的限制。所以在实际工作中用到的并不多。 在开发过程中,内部类中使用的最多的还是非静态地成员内部类。不过在特定的情况下,静态内部类也能够发挥其独特的作用。 一、静态内部类的使用目的。 在定义内部类的时候,转载 2014-08-11 23:05:28 · 814 阅读 · 0 评论