- 博客(219)
- 收藏
- 关注
mvc-HandlerMapping
ng)顶层抽象:AbstractHandlerMapping:支持sort,默认handler,handler interceptors;关联ApplicationContext ;封装HandlerExecutionChainURL匹配:AbstractUrlHandlerMapping:支持注册url->hander的映射(直接,模糊);handerName->handlerBean;AbstractDetectingUrlHandlerMapping:支持
2017-06-03 23:13:22 143
原创 cache 清除算法 LRU & LFU & FIFO
!LinkedHashMap扩展如下方法即可: protected boolean removeEldestEntry(Map.Entry<K,V> eldest) { return false; } LFU:实现思路:HashMap + PriorityQueue下面是个根据Key的自然数据排序的案例(类似,可以把Key包装成一个可排序的包装类型,根据访问次数确定顺序): import java.util.H
2017-06-01 16:03:49 216
原创 guava-cache-本地缓存(收藏)
S)04 .removalListener(MY_LISTENER)05 .build(06 new CacheLoader<Key, Graph>() {07 public Graph load(Key key) throws AnyException {08
2017-05-22 20:00:41 130
AQS-预备-背景
一个线程可以操作资源,根据业务的需要,对应能够或者允许操作资源的线程可以得到继续执行,不能拿到资源的线程要进行等待(park),直到其他线程释放资源的时候,等待的线程可以尝试获取资源,拥有后可以继续执行。 为了记录没有拿到资源的线程,我们可以定义一个数据组或者一列表来记录,一旦有其他线程释放资源的时候,我们可以unpark这些(或者第一个)等待的线程。一种非常糙的仅仅为了说明这种效果的实现是:/** * @author xinchun.wang */ public stati
2017-05-20 18:16:25 104
原创 LockSupport
public native void unpark(Thread jthread); public native void park(boolean isAbsolute, long time); isAbsolute参数是指明时间是绝对的,还是相对的。 仅仅两个简单的接口,就为上层提供了强大的同步原语。先来解析下两个函数是做什么的。unpark函数为线程提供“许可(permit)”,线程调用park函数则等待“许可”。这个有点像信号量,但是这个“许可”是不能叠
2017-05-19 22:15:15 82
原创 Synchronized&AbstractQueuedSynchronizer[摘抄]
队列容纳所有的阻塞线程,而对该队列的操作均通过Lock-Free(CAS)操作,但对已经获得锁的线程而言,ReentrantLock实现了偏向锁的功能。更本质上说:队列的这种方式是思想,底层还要依赖于LockSupport对线程的禁用(park)和许可(unpark)的逻辑 synchronized: 底层也是一个基于CAS操作的等待队列,但JVM实现的更精细,把等待队列分为ContentionList和EntryList,目的是为了降低线程的出列速度;当然也实现了偏向锁,从数据结构来
2017-05-19 21:29:28 210
CountDownLatch/CyclicBarrier
续执行。 CountDownLatch维护一个状态 count值,这个值可以通过调用countDown 方法让它递减,直到为0在count为0之前,所有调用await的方法全部挂起。 内部实现:依赖于AbstractQueuedSynchronizer 框架,让调用await的方法的线程挂起park,直到countDown 操作,改变count的值,unpark 对应的线程。 应用场景:比如一个A服务,需要调用B,C两个服务 并merge他们的结果进行返回 1、A服务线程
2017-05-19 20:59:37 93
Thread-wait/notify
WaitNotify { private static StringBuffer lock = new StringBuffer(); public static void main(String[] args) throws Exception { // testWaitAfterNotify(); //testWaitBeforeNotify(); testWaitAfterNotifyV2(); } /** * 先notify 后wait,不能正常工
2017-05-19 11:59:05 144
原创 AQS-预备-FIFOMutex
rentLinkedQueue;import java.util.concurrent.atomic.AtomicBoolean;import java.util.concurrent.locks.LockSupport;public class FIFOMutex { private final AtomicBoolean locked = new AtomicBoolean(false); /** * 线程先进先出队列 */ private final Queue
2017-05-18 20:25:18 269
原创 垃圾回收算法详解
法用来判定一个对象是否为垃圾。1. 引用计数算法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。优点是简单,高效,现在的objective-c用的就是这种算法。缺点是很难处理循环引用,比如图中相互引用的两个对象则无法释放。这个缺点很致命,有人可能会问,那objective-c不是用的好好的吗?我个人并没有觉得objective-c好好的处理了这个循环引用问题,它其实是把这个问题抛给了开发者。2. 可达
2017-05-17 16:42:39 141
原创 java-jvm-jhat
#instances #bytes class name---------------------------------------------- 1: 38445 5597736 <constMethodKlass> 2: 38445 5237288 <methodKlass> 3: 3500 374
2017-05-14 21:04:57 134
原创 mysql-索引的类型的实践
int(20) NOT NULL, `max_id` bigint(20) NOT NULL DEFAULT '0', `step` int(11) NOT NULL DEFAULT '3', `batch_size` int(11) NOT NULL DEFAULT '3000', UNIQUE KEY `id` (`id`), UNIQUE KEY `idx_key` (`key`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAU
2017-05-11 21:39:03 156
原创 聚簇索引和非聚簇索引的区别
而非聚簇索引的叶子节点仍然是索引节点,只不过有指向对应数据块的指针。 聚集索引:表数据按照索引的顺序来存储的,也就是说索引项的顺序与表中记录的物理顺序一致。对于聚集索引,叶子结点即存储了真实的数据行,不再有另外单独的数据页。 在一张表上最多只能创建一个聚集索引,因为真实数据的物理顺序只能有一种。"聚集"指实际的数据行和相关的键值都保存在一起聚簇索引的二级索引:叶子节点不会保存引用的行的物理位置,而是保存了行的主键值 注意:数据的物理存放顺序与索引顺序是一致的,
2017-05-10 16:27:37 256
大量异常带来性能的影响
n(String[] args) { long t1 = System.currentTimeMillis(); testParseWithException(100000); System.out.println(System.currentTimeMillis() - t1); t1 = System.currentTimeMillis(); testParse(100000); System.out.println(System.curren
2017-05-09 19:08:40 144
原创 分布式事务-TCC【收藏整理】
行业务。完成所有业务检查(一致性)预留必须业务资源(准隔离性)2、Confirm:确认执行业务。真正执行业务不做任何业务检查只使用Try阶段预留的业务资源3、Cancel:取消执行业务释放Try阶段预留的业务资源 个完整的TCC事务参与方包括三部分:主业务服务:主业务服务为整个业务活动的发起方,如前面提到的组合支付场景,支付系统即是主业务服务。从业务服务:从业务服务负责提供TCC业务操作,是整个业务活动的操作方。从业务服务必须实现Try、Confir
2017-05-09 15:05:50 108
原创 分布式事务
,简称事务库。TRY尝试执行,比如对数据进行校验,检查事务是否可以进行等。并且在事务库里创建一条记录。此时记录中的状态字段记录为PENDINGCONFIRM如果所有事务参与者的TRY都返回则表示可以进行,则提交事务。提交事务时在同一个本地事务里修改TRY阶段创建记录的状态为CONFIRMCANCEL如果有任何一个事务参与者TRY阶段失败则发起CANCEL操作,并且在同一个本地事务里修改事务记录为CANCEL事务冲突在分布式环境中,可能对同一个数据进行并发操作,这样就会
2017-05-09 12:00:48 59
原创 由 B-/B+树看 MySQL索引结构【转载】
同的一点是B-树允许每个节点有更多的子节点。下图是 B-树的简化图.B-树有如下特点:所有键值分布在整颗树中;任何一个关键字出现且只出现在一个结点中;搜索有可能在非叶子结点结束;在关键字全集内做一次查找,性能逼近二分查找;B+ 树B+树是B-树的变体,也是一种多路搜索树, 它与 B- 树的不同之处在于:所有关键字存储在叶子节点出现,内部节点(非叶子节点并不存储真正的 data)为所有叶子结点增加了一个链指针简
2017-05-03 20:09:46 87
http-post-upload 格式
上传,http协议通过定义:boundary=---------------------------7e131a1ade2200 来实现每个字段域直接的分割针对普通的文本域,比如:username,password等 -----------------------------7e131a1ade2200Content-Disposition: form-data; name="username"xinchun.wang--------------------
2017-05-03 16:48:27 274
原创 iotop&iostat (load高 IO高的问题排查)
执行cpu us sy 显示都不高,并且wa 占用高,说明系统在等待大量的io操作 1、安装iotopsudo yum install iotop 2、top命令显示 从top命令可以看出,系统load 6.43,对于4 cpu的系统来说,已经是超载,另外 wa 60%,可以确定系统的线程在等待io操作其中 线程 2492 比较可疑top -H -p 2492 3、iostatiostat ALL :可以查阅 那个磁盘读写频繁 4、sudo i
2017-04-27 20:40:41 737
socket-server-http
import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;/** * @author xinchun.wang */public class HttpServer { private static final int PORT = 9111; public static void main(String[
2017-04-25 14:50:32 87
原创 mysql-执行计划 (整理转载)
如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行 id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行 select_type【6项数据】 表示查询中每个select子句的类型(简单 OR复杂) a.SIMPLE:查询中不包含子查询或者UNIONb.查询中若包含任何复杂的子部分,最外层查询则被标记为:PRIMARYc.在SELECT或WHERE列表中包含了子查询,该子查
2017-04-25 11:57:56 121
socket-client-http-post
Connection: closeContent-Length:42username=xinchun.wang&password=123456..... 响应数据:HTTP/1.1 200 OKServer: Apache-Coyote/1.1Set-Cookie: JSESSIONID=613C816BEC2DB87DB7A043574B68AA57; Path=/Content-Type: text/html;charset=ISO-8859-1
2017-04-25 11:08:48 86
socket-client-http-get
.168.237.230Connection: close response:HTTP/1.1 200 OKServer: Apache-Coyote/1.1Set-Cookie: JSESSIONID=2D3FE2C8EA372E3ACC69C48E12348B44; Path=/Content-Type: text/html;charset=ISO-8859-1Content-Length: 288Date: Tue, 25 Apr 2017 03:06:57
2017-04-25 11:03:55 99
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人