- 博客(58)
- 资源 (17)
- 收藏
- 关注
原创 JUC并发编程 - ReentrantReadWriteLock源码分析
前言ReentrantReadWriteLock锁是AQS的另一种实现,它做到了可重入、可中断,分为公平和非公平两类实现,并且实现了读锁和写锁两类同时控制。在使用时,读写锁持有的同一个Lock实例,通过控制锁的行为,及CLH节点状态,来操作读锁和写锁,对于写少读多的场景,能提高效率。由于我对AQS及ReentrantLock的源码已经做过分析,因此本篇文章对经常出现的代码流程介绍的会较为粗略,初次接触ReentrantReadWriteLock源码的同学,建议先从前面的文章看起,这样反而更能清晰的理
2020-08-22 12:41:15
347
原创 Mockito+JUnit实现单元测试
这种组合方式,可以理解为仅依赖的是JUnit和Mockito,spring没写是因为关键注解的使用,并没有用到@Resource、@ComponentScan等,1、首先导入包<dependencies> <!--spring的包忽略--> ... <dependency> <groupId>junit</groupId> <artifactId>junit<.
2020-08-21 09:50:30
882
原创 Mockito+JUnit+Spring实现单元测试
这种组合方式,依赖的是JUnit和Spring容器,进行对象注入,而Mockit的作用是在spring生成的bean中,注入mock对象。相当于使用了Mockito的一部分功能。首先导入包<dependencies> <!--spring的包忽略--> ... <dependency> <groupId>junit</groupId> <artifactId>jun.
2020-08-21 09:46:38
701
原创 JUC并发编程 - ReentrantLock源码分析
前言前面分析了AQS类的源码,但真正实现AQS的实现类都在JUC中,当然AQS也是JUC的一部分,只是它不面向应用,除非自己去继承实现一套逻辑。在java的java.util.concurrent包,简称JUC,其内包含的类都与多线程有关,是非常重要的一个包。接下来准备针对JUC下常用类进行分析,剖析它们的原理及使用特点。而本文将针对比较常用的ReentrantLock源码来分析。Re...
2020-04-15 10:58:40
325
原创 面试必考AQS-await和signal的实现原理
Condition接口这个接口为我们提供了2类方法,await()和signal(),其实现类ConditionObject,是AQS中的一个子类。在介绍AQS结构的文章中,ConditionObject类被跳过了,这个类的存在与CLH模型关联度不是很强,但在并发编程中却是不可或缺的一环,它提供的await()和signal()方法,能够为多线程之间交互提供帮助,能让线程暂停和恢复,是很重要的...
2020-04-08 16:46:16
2239
1
原创 面试必考AQS-共享锁的申请与释放,传播状态
引子前文《面试必考AQS-AQS源码全局分析》已经对AQS中对于共享 锁的申请与释放流程进行了总结。而对于申请与释放,在AQS中提现的是与锁并无关系,而是针对同步队列的操作,向同步队列中添加、移除Node实例对象,操作Node中的线程对象。而我们日常使用的锁类,只是表象,何时可以加锁、解锁,达到何种条件才算加锁成功、解锁成功,这才是AQS锁实现的功能。接下来将从源码层面看一下,共享锁的申请与释...
2020-04-03 11:37:33
532
原创 面试必考AQS-排它锁的申请与释放
引子前文《面试必考AQS-排它锁的申请与释放》已经对AQS中对于排它锁的申请与释放流程进行了总结。而对于申请与释放,在AQS中提现的是与锁并无关系,而是针对同步队列的操作,向同步队列中添加、移除Node实例对象,操作Node中的线程对象。而我们日常使用的锁类,只是表象,何时可以加锁、解锁,达到何种条件才算加锁成功、解锁成功,这才是AQS锁实现的功能。接下来将从源码层面看一下,排它锁的申请与释放...
2020-03-26 11:11:31
338
原创 面试必考AQS-AQS源码全局分析
源码划分在《面试必考AQS-AQS概览》中我将AQS的源码,大致分为六部分,总结一下分别是:链表节点类、链表头尾指针 条件对象 同步器状态/资源 用于cas操作的变量及方法 一些实例方法操作链表及同步器状态状态 一些抽象方法等待被实现接下来就逐个介绍这些内容。抽象方法介绍AQS中包含5个未实现方法,也就是等待子类来实现个性化逻辑的,他们是:protected bo...
2020-03-25 09:59:16
232
原创 面试必考AQS-AQS概览
AQS的含义AQS是java.util.concurrent.locks.AbstractQueuedSynchronizer的简称,直译就是“抽象队列同步器”,它是java中大部分lock类的间接实现者。AQS中实现的各种逻辑非常精妙,在此膜拜一下Doug Lea老爷子。刚刚有提到AQS间接实现了lock类,检查java中提供的lock类,如ReentrantLock,Reentrant...
2020-03-24 16:32:10
250
转载 Dubbo可扩展机制实战
Dubbo可扩展机制源码解析在Dubbo可扩展机制实战中,我们了解了Dubbo扩展机制的一些概念,初探了Dubbo中LoadBalance的实现,并自己实现了一个LoadBalance。是不是觉得Dubbo的扩展机制很不错呀,接下来,我们就深入Dubbo的源码,一睹庐山真面目。ExtensionLoaderExtensionLoader 是最核心的类,负责扩展点的加载和生命周期管理。我...
2019-05-07 22:52:22
425
转载 Dubbo可扩展机制实战
1. Dubbo的扩展机制在Dubbo的官网上,Dubbo描述自己是一个高性能的RPC框架。今天我想聊聊Dubbo的另一个很棒的特性, 就是它的可扩展性。 如同罗马不是一天建成的,任何系统都一定是从小系统不断发展成为大系统的,想要从一开始就把系统设计的足够完善是不可能的,相反的,我们应该关注当下的需求,然后再不断地对系统进行迭代。在代码层面,要求我们适当的对关注点进行抽象和隔离,在软件不断添加...
2019-05-07 22:51:25
165
原创 源码解读 - Tcc-Transaction框架(四)回归最新版本思路
前言这次我们直接回到主干分支master-1.2.x进行分析。正文大致浏览一下各个模块,主要模块没有增加。tcc-transaction-server目前还是先不看。 tcc-transaction-dubbo没变动。 tcc-transaction-unit-test增加了几个单元测试类。 tcc-transaction-tutorial-sample增加了很多集成例子。...
2019-05-05 22:57:29
270
原创 源码解读 - Tcc-Transaction框架(三)dubbo支持
前言回到master-1.2.x分支,继续浏览gitlog,这次选择update the version to 1.2.0这次提交,注意这个分支编译会报错,调整dubbo版本为2.5.3才行。正文项目整体结构:这个版本中,增加了tcc-transaction-dubbo模块。同时也调整了一些类所在模块、增加了更多的扩展。tcc-transaction-api迁移:将...
2019-05-05 22:49:55
482
原创 源码解读 - Tcc-Transaction框架(二)职责划分及功能调整
前言回到master-1.2.x分支,继续浏览gitlog,在1.0.3版本后,作者更新较为频繁,每个月都有提交,在2016/6/4日有一次版本变更1.1.0,但是不要急,根据这段时间文件变更内容看,东西修改了不少,但是1.1.0之后还有几次频繁修改,包括几个issue的修订。最后我确定从issue#22的修复为模板,拉取分支(afterv1.1.0-resolvesTheIssue...
2019-05-05 22:23:52
274
原创 源码解读 - Tcc-Transaction框架(一)初探实现思路
前言一个成熟的开源项目,其代码量还是较为客观的,拿到手通常不知如何下手。那么一套清洗的分析思路尤为重要,帮助自己快速理解作者思路。1、首要工作是fork一份源码,在这个基础上做一些诸如,添加注释、debug等操作比较方便。2、查看作者的提交历史,也就是通过git历史来查看这个项目的进化过程。第一步以及clone到本地,可自行百度如何操作。我们从第二步开始。正文1、找到感兴趣...
2019-04-30 15:31:23
672
转载 分布式存储系统:缓存一致性问题之Lease机制
Lease机制 既然,Lease机制提出的时候是为了解决分布式存储系统中缓存一致性的问题,那么首先来看看Lease机制是怎么保证缓存的强一致性的。注意,为了方便后文描述,在本小节中,我们称元数据服务器为服务器,缓存服务器为客户端。 要点:服务器向所有客户端发送缓存数据的同时,颁发一个lease,lease包含一个有限期(即过期时间) lease的含义是:在这个有效期内,服务器保证...
2019-02-18 16:42:27
546
原创 分布式系统的一致性协议之 Zookeeper一致性协议ZAB简述
zookeeper是使用ZAB协议作为数据一致性的算法,ZAB全称:原子消息广播协议。ZAB可以说是在Paxos算法基础上进行了扩展改造:1、ZAB协议设计了支持崩溃恢复,可以保证在Leader进程崩溃的时候重新选举出Leader并且保证数据的完整性2、zookeeper使用单一主进程Leader用于处理客户端所有事物请求,写只能由Leader处理,写过程会阻塞读进程3、采用ZAB协议...
2019-02-18 15:06:15
510
转载 分布式系统的一致性协议之 一致性方案MS、MM、2PC 和 3PC
根据上一篇文章描述《分布式系统的一致性协议之 CAP理论原理》可知,目前分布式系统中通用的一致性方案,主要包括:冷备、Master/Slave、Master/Master、两阶段提交以及基于 Paxos 算法的各种实现。冷备所谓冷备,也就是做定时全量、增量的备份,在系统一致性、可用性出现问题时,能够通过备份数据还原系统到达某一点。这种方案操作难度小,但存在即时性低、丢失率高的问题。Ma...
2019-02-15 15:32:06
793
转载 分布式系统的一致性协议之 CAP理论原理
在分布式系统领域,有一个理论,对于分布式系统的设计影响非常大,那就是 CAP 理论,即对于一个分布式系统而言,它是无法同时满足 Consistency(强一致性)、Availability(可用性) 和 Partition tolerance(分区容忍性) 这三个条件的,最多只能满足其中两个。但在实际中,由于网络环境是不可信的,所以分区容忍性几乎是必不可选的,设计者基本就是在一致性和可用性之间做选...
2019-02-15 15:08:11
1118
原创 Git分支模型:较为标准的模型使用流程分析
本文介绍一种使用Git进行源代码管理的分支模型,着重于如何使用Git更好的管理我们的源代码。我假定您对Git有一定了解,会使用基本的Git命令进行一些简单的源代码管理工作。这不是一篇Git使用教程。文章的主要思想源自以下链接:http://nvie.com/posts/a-successful-git-branching-model/根据自己的使用情况进行了补充。我们知道Git...
2019-01-23 15:12:33
311
转载 web优化必须了解的原理之I/o的五种模型和web的三种工作模式
web优化必须了解的原理之I/o的五种模型和web的三种工作模式===========================================图解五种I/O模型=========================================== 五种I/O: 1)阻塞I/0 2)非阻塞I/O 3)I/O复用 4)事件(信号)驱动I/O 5)异步I/O...
2019-01-15 16:43:21
281
转载 消息队列的两种模式
Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。点对点与发布订阅最初是由JMS定义的。这两种模式主要区别或解决的问题就是发送到队列的消息能否重复消费(多订阅)1、定义JMS规范目前支持两种消息模型:点对点(point to point, ...
2019-01-14 16:37:39
251
转载 理解事务的4种隔离级别
数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读。下面通过事例一一阐述它们的概念与联系。Read uncommitted读未提交,顾名思义,就是一个事务可以读取另一个未提交事务的数据。事例:老板要给程序员发工...
2019-01-12 15:56:27
245
原创 mysql数据库死锁的产生原因及解决办法
这篇文章主要介绍了mysql数据库锁的产生原因及解决办法,需要的朋友可以参考下数据库和操作系统一样,是一个多用户使用的共享资源。当多个用户并发地存取数据 时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并 发控制的一个非常重要的技术。在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组...
2018-12-29 16:11:23
1604
转载 Java中的经典算法之选择排序(SelectionSort)
a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。(这里只介绍常用的简单选择排序)b) 简单选择排序的基本思想:给定数组:int[] arr={里面n个数据};第1趟排序,在待排序数据...
2018-12-26 14:53:24
149
原创 验证[mysql]的REPEATABLE-READ隔离级别对于update操作的影响
隔离级别略过不讲。1、准备工作初始化数据:CREATE TABLE `t_tran` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB ...
2018-12-25 18:14:50
1134
3
原创 总结平衡二叉树概念、插入(旋转)对应java实现
一、定义及原理平衡二叉树要求对于每一个节点来说,它的左右子树的高度之差不能超过1,如果插入或者删除一个节点使得高度之差大于1,就要进行节点之间的旋转,将二叉树重新维持在一个平衡状态。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了...
2018-12-21 19:00:57
612
1
转载 Java map 详解 - 用法、遍历、排序、常用API等
Map用法类型介绍Java 自带了各种 Map 类,这些 Map 类可归为三种类型:通用Map用于在应用程序中管理映射,通常在 java.util 程序包中实现:HashMap、Hashtable、Properties、LinkedHashMap、IdentityHashMap、TreeMap、WeakHashMap、ConcurrentHashMap专用Map通常我们不必亲自...
2018-12-20 18:44:38
260
转载 LinkedList、ConcurrentLinkedQueue、LinkedBlockingQueue对比分析
写这篇文章源于我经历过的一次生产事故,在某家公司的时候,有个服务会收集业务系统的日志,此服务的开发人员在给业务系统的sdk中就因为使用了LinkedList,又没有做并发控制,就造成了此服务经常不能正常收集到业务系统的日志(丢日志以及日志上报的线程停止运行)。看一下add()方法的源码,我们就可以知道原因了:public boolean add(E e) { linkLa...
2018-12-20 18:04:23
555
转载 java队列——queue详细分析
Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口。Queue的实现1、没有实现的阻塞接口的LinkedList: 实现了java.util.Queue接口和java.util.AbstractQueue接口 内置的不阻塞队列: PriorityQu...
2018-12-20 17:59:58
120
原创 git常用命令总结
(1)git本地仓库关联远程仓库的两种方式:1.将远程的代码clone到本地仓库2.将本地的代码关联到远程仓库第1种,直接git clone 仓库地址即可。重点说第2种1、在github上新建一个仓库,然后在本地仓库配置远程仓库地址>git remote add origin git@github.com:stormzhang/test.git2、此时再进行pull......
2018-08-15 17:27:40
1745
2
原创 Hexo+github搭建个人博客
环境准备软件:git,node.js,hexo,markdown下载并安装git,node.js,markdown,过程略。常见问题1、markdown安装完成后,如果使用过程出现如下异常,An error occurred with the Html rendering component...原因:MarkdownPad 2 在win10下 出现HTML 渲染错误(Th...
2018-08-02 21:04:13
271
原创 dubbo集成netflix原生的hystrix框架
一、需求描述需要将一个现有项目添加熔断功能,而这个项目的技术栈为spring、dubbo等,并且使用的dubbo-Main方式启动。二、存在问题由于项目并未使用web容器、也未使用spring-boot。而目前能拿到的资料中,都是在spring-boot下进行hystrix集成的,不得不说spring-boot的开箱即用理念,集成起来真的非常方便。因此,基于当前结构无法快速集成,也就需...
2018-08-02 20:47:35
5540
1
原创 [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBuild+GitHub)
本系列文章包含: [独孤九剑]持续集成实践(一)- 引子 [独孤九剑]持续集成实践(二)– MSBuild语法入门 [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBuild+GitHub) 1、前言 ...
2015-08-12 16:18:00
447
原创 [独孤九剑]持续集成实践(二)– MSBuild语法入门
本系列文章包含:[独孤九剑]持续集成实践(一)- 引子[独孤九剑]持续集成实践(二)– MSBuild语法入门[独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBuild+GitHub)1、开始...
2015-08-12 16:17:00
203
原创 [独孤九剑]持续集成实践(一)- 引子
本系列文章包含:[独孤九剑]持续集成实践(一)- 引子[独孤九剑]持续集成实践(二)– MSBuild语法入门[独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBuild+GitHub)1、概念描述(了解的话直接跳到第2部分) ...
2015-08-12 16:16:00
148
原创 [独孤九剑]Oracle知识点梳理(十)%type与%rowtype及常用函数
本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间、用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入、导出 [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL [独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table、V...
2015-03-15 23:15:00
192
原创 [独孤九剑]Oracle知识点梳理(九)数据库常用对象之package
本系列链接导航:[独孤九剑]Oracle知识点梳理(一)表空间、用户[独孤九剑]Oracle知识点梳理(二)数据库的连接[独孤九剑]Oracle知识点梳理(三)导入、导出[独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL[独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table、View[独孤九剑]Oracle知识点梳理(六)数据库常用对象...
2015-03-15 23:12:00
202
原创 [独孤九剑]Oracle知识点梳理(八)常见Exception
本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间、用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入、导出 [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL [独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table、V...
2015-03-15 23:08:00
138
原创 [独孤九剑]Oracle知识点梳理(七)数据库常用对象之Cursor
本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间、用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入、导出 [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL [独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table、V...
2015-03-15 23:03:00
138
mysql技术内幕innodb存储引擎数据库技术丛书-带书签精校.pdf
2019-07-26
Microsoft web application stress tool(WAS中文说明书)
2015-07-29
编写可维护的javascript(英文)
2013-06-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人