- 博客(127)
- 问答 (1)
- 收藏
- 关注
原创 Mysql Join语法解析与性能分析
一.Join语法概述join 用于多表中字段之间的联系,语法如下:... FROM table1 INNER|LEFT|RIGHT JOIN table2 ON conditiona table1:左表;table2:右表。JOIN 按照功能大致分为如下三类:INNER JOIN(内连接,或等值连接):取得两个表中存在连接匹配关系的记录。LEFT JOIN(左连接):取...
2016-09-07 15:11:06 241
原创 记一次线程池的使用
本文介绍多线程在使用时由直接new Thread()到Executors.newCachedThreadPool(),再到直接new ThreadPoolExecutor()的过程。 背景:项目需要在Servlet前加个Filter做数据的转发,只是数据的简单透传,为了不影响用户的体验,而采用多线程来实现。 最简单的实现直接在filter中new Thread来实现,如...
2014-12-12 17:28:08 247
原创 多线程环境下单例模式的一种实现方式
最近在看dubbo的源代码,发现dubbo类ExtensionLoader中有一段代码:private static final ConcurrentMap<Class<?>, ExtensionLoader<?>> EXTENSION_LOADERS = new ConcurrentHashMap<Class<?>, Extensio...
2014-12-04 22:31:51 255
原创 Dubbo框架设计简介
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。关于注册中心、协议支持、服务监控等内容,详见后面描述...
2014-11-25 21:47:51 226 1
原创 RPC框架简单实现
/* * Copyright 2011 Alibaba.com All right reserved. This software is the * confidential and proprietary information of Alibaba.com ("Confidential * Information"). You shall not disclose ...
2014-11-24 21:47:15 138
原创 Heap Buffer和Direct Buffer
1、Heap Buffer堆内存字节缓冲区,可以被JVM自动回收,特点是内存的分配和回收速度快,缺点是如果进行Socket的I/O读写,需要额外的做一次内存复制,将堆内存对应的缓存区复制到内核Channel中,性能会有一定程度的下降。 2、Direct Buffer直接内存字节缓冲区,非堆内存,在堆外进行内存分配和回收,相比于堆内存,它的分配和回收速度会慢一些,但是将它写入或者...
2014-09-18 19:07:58 372
原创 一致性 hash 算法( consistent hashing )(转)
consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在cache 系统中应用越来越广泛;1 基本场景比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object...
2014-06-12 08:21:07 93
Java读取文件中单词进行排序并写到另一个文件中
支持 http://ifeve.com/tao-code-match-1/ ,用fork-join来实现读取一个文件中的单词(使用BufferedReader按行读取),排序(使用fork-join框架快速排序),写到另一个文件中(使用BufferedWriter進行寫入)代码在github上:https://github.com/chenzehe/wordsorter-javaSo...
2013-12-04 11:12:13 860
原创 Java级联调用方法的类设计
在Java方法设计时返回当前对象的引用(this),可以实现级联调用的设计,如StringBuilder类中的append方法: public StringBuilder append(String str) { super.append(str); return this; } 使用时可以sb.append("a")....
2013-11-13 14:10:07 762
原创 Hadoop Eclipse plugin 提交作业异常探究
在配置好Hadoop Eclipse plugin 连接成功后,提交作业时会抛出下面异常:2013-10-31 9:38:04 org.apache.hadoop.security.UserGroupInformation doAs严重: PriviledgedActionException as:admin cause:java.io.IOException: Failed to s...
2013-11-05 10:51:46 152
用反射解析jar文件并执行里面Java代码
1、使用JarFile类读取jar包MANIFEST.MF中的Main-Class,如果没有设置Main-Class则调用方法中指定执行函数2、解压jar文件3、设置classPath4、利用反射取得class和method,并运行该method如下代码Run.java将被打包到jar文件中,使用Maven构建并打包: package com.chenzehe.runj...
2013-10-30 23:25:36 517
Hadoop IPC RPC类中对请求的客户端缓存类ClientCache问题
Hadoop IPC RPC类中对请求的客户端缓存类ClientCache,是一个用HashMap进行对象缓存的类,但是对缓存操作时都使用synchronized关键字来加锁,如果使用ConcurrentHashMap进行进行缓存,在存取时会有更好的性能。ConcurrentHashMap是基于分段的锁分离技术实现,而且使用JUC中的显示锁来保证同步,多线程方面性能比HashM...
2013-09-24 19:52:59 225
原创 Java NIO 使用实例
在JDK1.4之前,Java OutputStream的write方法、InputStream的Read方法和ServerSocket的accept()方法都是阻塞方法,JDK1.4之前Java引入了新的输入输出系统(New Input/Out,NIO),非阻塞是Java NIO实现的重要功能之一 。 1、Buffer缓冲区,传输数据使用,本质是一个数组,Channel...
2013-09-23 20:47:08 189
原创 Comparable Comparator 的区别
注:本文为转载当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序。 一、Comparator public interface Comparator<T> { /** * @return o1小于、等于或大于o2,分别返回负整数、零或正整数。 */ ...
2013-09-03 14:34:13 86
原创 Java 枚举使用实例
Lucene Field类中使用枚举如下:声明抽象方法,在枚举实例中重写该方法。public final class Field extends AbstractField implements Fieldable, Serializable { public static enum Store { YES { @Override pub...
2013-07-01 15:30:31 172
原创 深入浅出 Spring AOP 动态代理 CGLib Aspectj
0、AOP实现原理面向方面编程(Aspect Oriented Programming,简称AOP)是一种声明式编程(Declarative Programming)。AOP的实现原理可以看作是Proxy/Decorator设计模式的泛化,如下为Proxy模式的简单例子:Proxy { innerObject; // 真正的对象 f1() { ...
2013-05-29 17:50:14 155
原创 BoneCP源码——BoneCP中使用的队列
BoneCP中用于保存连接对象的队列为TransferQueue,该接口为jsr166y中的接口,继承BlockingQueue:TransferQueue<ConnectionHandle> connectionHandles;public interface TransferQueue<E> extends BlockingQueue<E> ...
2013-03-28 18:39:40 124
原创 BoneCP源码——BoneCP中使用的第三方包 jsr166y、 LinkedTransferQueue队列、fork-join框架...
BoneCP主要使用了下面几种第三方包:1、Google Guava library The Guava project contains several of Google's core libraries that we rely on in our Java-based projects: collections, caching, primitives support...
2013-03-18 19:06:02 359
原创 BoneCP源码——BoneCP中使用的多线程
1、asyncExecutor 可缓存线程池,用于异步的创建一个Connection对象,返回Future类型对象 /** Executor service for obtaining a connection in an asynchronous fashion. */ private ExecutorService asyncExecutor; /** * Construct...
2013-03-16 17:53:10 258
原创 BoneCP源码——从Manual configuration说起
BoneCP官网上有其配置的使用文档,看最基本的Manual configuration: Class.forName("org.hsqldb.jdbcDriver"); // load the DB driver BoneCPConfig config = new BoneCPConfig(); // create a new configuration object ...
2013-03-11 20:59:43 204
原创 BoneCP源码——概述
BoneCP是一个开源的Java数据库连接池,其内部使用了JDK1.5的并发包java.util.concurrent来保证同步,而且采用分段思想,避免单点加锁的竞争(ConcurrentHashMap也是使用这种思想来实现的),具有以下特点(官网): Highly scalable, fast connection poolCallback (hook interceptor...
2013-03-11 19:10:24 192
原创 数据库连接池原理
一般情况下,在使用开发基于数据库的WEB程序时,传统的模式基本是按以下步骤: 1. 建立数据库连接 2. 进行SQL操作,取出数据 3. 断开数据库连接 使用这种模式开发,存在很多问题。首先,我们要为每一次WEB请求(例如察看某一篇文章的内容)建立一次数据库连接,对于一次或几次操作来讲,或许你觉 察不到系统的开销,但是,对于WEB程序来讲,即使在某一较短的时间段内,其操作请求...
2013-03-11 17:54:20 92
原创 面试题——在一个文本里有N多个数据,使用多线程最快求和
思路:把所有数据分组,每组使用一个线程去计算结果,计算完后再把结果汇总具体实现如下:1、用数据模拟文本里的数据2、声明一个线程池和实现一个可返回结果的Callable接口3、把果返回结果Future放到CopyOnWriteArrayList中用于结果集计算4、此算法的缺点有待改进的地方是结果汇总时是被动去检测,而不是某个结果计算完成后主动去汇总,既然是分段计算,如果数据量...
2013-03-08 13:51:57 425
原创 Java垃圾回收:GC在什么时候对什么做了什么
GC在什么时候对什么做了什么? 要回答这个问题,先了解下GC的发展史、jvm运行时数据区的划分、jvm内存分配策略、jvm垃圾收集算法等知识。 先说下jvm运行时数据的划分,粗暴的分可以分为堆区(Heap)和栈区(Stack),但jvm的分法实际上比这复杂得多,大概分为下面几块: 1、程序计数器(Program Conute...
2013-02-27 20:23:50 309
原创 Java虚拟机工具
1、jdk工具在linux中的安装,有些系统只安装了jre,并没装JDK,所以就没有jvm工具,一般安装目录在/usr/java或/usr/local/java目录下,可以使用下面方法查看:[root@b2b ~]# whereis javajava: /usr/bin/java[root@b2b ~]# ls -l /usr/bin/javalrwxrwxrwx 1 root...
2013-02-26 18:38:20 151
原创 面试题——在多线程环境下如何保证一个List集合中的元素不超过15个
这是有一次去面试被问到的,当时只知道用synchronized来保证同步,但面试官说除了此方式的其它实现,现在写下它的各种实现:1、JDK1.5之前的内置锁synchronized实现 模仿JDK1.5之前同步集合SynchronizedList的实现,内部使用synchronized对一个对一个List的封装,如下代码:/** * @description * * ...
2013-02-22 19:16:40 578
原创 阻塞队列BlockingQueue
1、队列Queue介绍Queue是JDK1.5引入的接口,继承Collection接口,是Collection框架的新成员,是种先进先出(FIFO)的队列。public interface Queue<E> extends Collection<E>{ boolean add(E e); boolean offer(E e); E ...
2013-02-04 15:16:44 79
原创 Java 并发集合ConcurrentHashMap
ConcurrentHashMap是JDK1.5并发包中提供的线程安全的HashMap的实现,其包结构关系如下:public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> implements ConcurrentMap<K, V>, Serializable {}...
2013-02-01 18:00:21 85
原创 Java 并发集合CopyOnWriteArrayList
1、Java在JDK1.5之前基本上对所有集合都实现了线程同步版本synchronized*,用集合工具类Collections即可得到,如下都为Collections中的方法:static <T> Collections<T> synchronizedCollection(Collection<T> c) 返回指定 col...
2013-01-30 21:22:37 181
原创 Java集合框架 Map接口
1、HashMapHashMap是Map接口最常见的实现,HashMap是非线程安全的,其内部实现是一种基于一个数组和链表的结合体,如下table为HashMap中存储数据的字段:transient Entry[] table; static class Entry<K,V> implements Map.Entry<K,V> { f...
2013-01-30 18:34:48 77
原创 Java集合框架 Collection接口
1、ArrayListArrayList是List接口最常见的实现,其实现是基于数组的方式实现,无容量的限制,ArrayList是非线程安全的。如下代码为ArrayList的构造函数,当没有确定的容量大小时,默认长度为10:private transient Object[] elementData; public ArrayList(int initialCapacit...
2013-01-29 17:49:07 105
原创 Java集合框架
集合是Java中是最常用的包,最常见的有Collection和Map两个接口的实现,Collection用于存放多个单对象,而Map用于存放Key-Value形式的键值对。 Collection中常见的又分两种常见类型的接口:List和Set,List支持存放重复的对象,而Set则不支持。List接口中常见的实现类有:ArrayList、LinkedList、Vector、和...
2013-01-25 20:19:50 68
原创 携带结果的任务Callable和Future
Executor框架使用Runnable作为基本的任务表示形式,但是Runnable有一定的局限性:不能返回一个值或抛出一个受检查的异常。实际中很多任务都是存在延迟的,如执行数据库查询、从网络上获取资源或执行复杂计算先进,对于这样的任务,Callable是一种更好的抽象:它认为入口(call)将返回一个值并并可能抛出一个异常。Callable 定义:package j...
2013-01-21 21:37:38 103
原创 线程池的使用
线程池实现类ThreadPoolExecutor ExecutorService接口扩展了Executor接口,添加了一些用于生命周期的管理方法,ThreadPoolExecutor继承了AbstractExecutorService,而AbstractExecutorService又实现了ExecutorService接口。 ThreadPoolExecutor的通...
2013-01-17 18:23:17 80
原创 Executor框架和线程池
简介 在JDK5后主要提供的多线程处理都在java.util.concurrent包中,多线程的主要抽象不是Thread,而是Executor,Executor为接口,定义在java.util.concurrent包下,只定义了一个方法:public interface Executor { void execute(Runnable command);}它提供...
2013-01-15 21:08:25 137
原创 同步工具类之Exchanger
Exchanger<V>,java.util.concurrent包下,用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据,V - 可以交换的对象类型。构造方法public Exchanger()创建一个新的 Exchanger。 方法摘要 V e...
2013-01-11 17:11:12 104
原创 同步工具类之CyclicBarrier循环的barrier
CyclicBarrier在java.util.concurrent包下,是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。Cyclic...
2013-01-11 15:39:40 123
原创 同步工具类之CountDownLatch倒数计数器
CountDownLatch类在java.util.concurrent包下,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。犹如倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当计数到达0时,则所有等待者或单个等待者开始执行。这直接通过代码来说明CountDownLatch的作用,可以实现一个人(也可以是多个人...
2013-01-10 20:59:51 169
原创 同步工具类之Semaphore 信号量
Semaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。 Semaphore实现的功能就类似厕所有5个坑,假如有十个人要上厕所,那么同时能有多少个人去上厕所呢?同时只能有5个人能够占用,当5个人中的任何一个人让开后,其中在等待的另外5个人中又有一个可以占用了。另外等待的5个人...
2013-01-10 17:24:34 122
原创 Java锁机制
内置锁 Java提供了一种内置的锁机制来支持原子性:同步代码块(synchronized 关键字 ),同步代码块包含两部分:一个作为锁的对象的引用,一个作为由这个锁保护的代码块。synchronized { //代码块} 每个Java对象都可以用做一个实现同步的锁,这些锁被秒为内置锁(Intrinsic Lock)或监视锁(Monitor Loc...
2013-01-09 20:26:11 217
空空如也
python 列表解析问题
2010-08-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人