自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(219)
  • 收藏
  • 关注

mvc-HandlerMapping

ng)顶层抽象:AbstractHandlerMapping:支持sort,默认handler,handler interceptors;关联ApplicationContext ;封装HandlerExecutionChainURL匹配:AbstractUrlHandlerMapping:支持注册url->hander的映射(直接,模糊);handerName->handlerBean;AbstractDetectingUrlHandlerMapping:支持

2017-06-03 23:13:22 142

原创 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 214

Thread.isInterrupted 的理解

2017-05-24 21:01:35 402

原创 Sharding扩容方案(实现)

2017-05-23 21:24:51 774

原创 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案

2017-05-23 21:15:25 127

原创 Cache应用中的服务过载案例研究

2017-05-22 20:23:14 113

原创 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 129

原创 Condition&(wait,notify)

2017-05-22 10:58:02 146

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 80

原创 Synchronized&AbstractQueuedSynchronizer[摘抄]

队列容纳所有的阻塞线程,而对该队列的操作均通过Lock-Free(CAS)操作,但对已经获得锁的线程而言,ReentrantLock实现了偏向锁的功能。更本质上说:队列的这种方式是思想,底层还要依赖于LockSupport对线程的禁用(park)和许可(unpark)的逻辑  synchronized: 底层也是一个基于CAS操作的等待队列,但JVM实现的更精细,把等待队列分为ContentionList和EntryList,目的是为了降低线程的出列速度;当然也实现了偏向锁,从数据结构来

2017-05-19 21:29:28 207

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 91

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 143

原创 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 266

原创 AQS-预备知识 CLH lock queue[摘抄]

2017-05-18 20:07:50 199

原创 垃圾回收算法详解

法用来判定一个对象是否为垃圾。1. 引用计数算法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器为0的对象就是不可能再被使用的。优点是简单,高效,现在的objective-c用的就是这种算法。缺点是很难处理循环引用,比如图中相互引用的两个对象则无法释放。这个缺点很致命,有人可能会问,那objective-c不是用的好好的吗?我个人并没有觉得objective-c好好的处理了这个循环引用问题,它其实是把这个问题抛给了开发者。2. 可达

2017-05-17 16:42:39 141

原创 垃圾回收算法&STOP The World

2017-05-15 11:50:40 805

原创 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

java-jvm-jinfo

2017-05-14 20:57:35 103

原创 jvm-gc 日志解读【转载】

2017-05-14 17:34:33 99

原创 MySQL索引背后的数据结构及算法原理【转载】

2017-05-14 16:47:09 93

原创 mysql-索引和锁(何登成的分享转载)

2017-05-14 16:41:30 223

原创 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

原创 MySQL数据库设计总结[转载]

2017-05-10 15:36:47 65

大量异常带来性能的影响

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 107

原创 分布式事务-可靠性消息&TCC&最大努力通知【收藏】

2017-05-09 13:35:35 922

原创 分布式事务

,简称事务库。TRY尝试执行,比如对数据进行校验,检查事务是否可以进行等。并且在事务库里创建一条记录。此时记录中的状态字段记录为PENDINGCONFIRM如果所有事务参与者的TRY都返回则表示可以进行,则提交事务。提交事务时在同一个本地事务里修改TRY阶段创建记录的状态为CONFIRMCANCEL如果有任何一个事务参与者TRY阶段失败则发起CANCEL操作,并且在同一个本地事务里修改事务记录为CANCEL事务冲突在分布式环境中,可能对同一个数据进行并发操作,这样就会

2017-05-09 12:00:48 59

顺序全局id生成方案-flickr-进阶

2017-05-08 16:09:01 189

原创 顺序全局id生成方案-flickr(转载)

2017-05-08 11:11:11 290

原创 由 B-/B+树看 MySQL索引结构【转载】

同的一点是B-树允许每个节点有更多的子节点。下图是 B-树的简化图.B-树有如下特点:所有键值分布在整颗树中;任何一个关键字出现且只出现在一个结点中;搜索有可能在非叶子结点结束;在关键字全集内做一次查找,性能逼近二分查找;B+ 树B+树是B-树的变体,也是一种多路搜索树, 它与 B- 树的不同之处在于:所有关键字存储在叶子节点出现,内部节点(非叶子节点并不存储真正的 data)为所有叶子结点增加了一个链指针简

2017-05-03 20:09:46 86

http-post-upload 格式

上传,http协议通过定义:boundary=---------------------------7e131a1ade2200 来实现每个字段域直接的分割针对普通的文本域,比如:username,password等  -----------------------------7e131a1ade2200Content-Disposition: form-data; name="username"xinchun.wang--------------------

2017-05-03 16:48:27 273

原创 http-post(收藏)

2017-05-03 14:37:51 152

原创 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 733

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 86

原创 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 85

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

原创 测试文章锦集

2017-04-20 11:07:15 74

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除