- 博客(94)
- 资源 (2)
- 问答 (4)
- 收藏
- 关注
原创 写在离开顺丰科技之际
2018年7月30日,是我将要离开顺丰科技的日子,后知后觉,已经来了两年… 两年时间说长不长,说短不短,总是觉得自己经历了许多,到头来其实发现,丫,也就这么一点… 谨以此文,感慨一下这两年 离开是为了更好地出发,希望大伙都各自安好进来纯属巧合16年5月份,当时毕业快满一年的我,在广州头脑发热,突然有一个念头,我要离开我的第一家公司!恰逢此时,某某网的猎头来电推荐了顺丰科技数据...
2018-07-28 11:58:15
4794
原创 JUC ExecutorCompletionService 分析
基本介绍ExecutorCompletionService,JUC中提供的CompletionService接口实现,用于实现有限任务的执行以及任务结果的有序返回(先执行完的先被取出)想象这样一种场景,有N个给定的计算任务,每个计算任务耗时各不相同,同时每个计算任务会返回一个结果,应用程序需要做到当每个计算任务完成之后,尽快地对计算结果进行处理(展示,二次处理等等)。假设我们用普通的Thr...
2018-07-20 14:59:43
662
原创 JUC ScheduledThreadPoolExecutor 分析
基本介绍ScheduledThreadPoolExecutor,JUC中提供的调度线程池实现,可以用来执行定时任务,实现与Timer一样的功能特性,相比于Timer,ScheduledThreadPoolExecutor具有以下优势:支持同时调度多种多样的调度任务,耗时的任务调度不会影响其他调度任务的调度(Timer为单线程执行,若存在多个调度任务,则可能任务之间的执行时间会影响到各自的...
2018-07-19 13:56:16
598
原创 JUC FutureTask 分析
基本介绍FutureTask,JUC中提供的一个Future接口实现类,主要作用是为了支持ThreadPoolExecutor的submit操作。经过前面对JDK线程池的分析JUC ThreadPoolExecutor详解,我们知道在AbstractExecutorService中实现了submit方法,以提交Callable为例:public <T> Future&l...
2018-07-15 11:35:33
571
原创 JUC ThreadPoolExecutor 分析
基本介绍ThreadPoolExecutor,JUC提供的线程池实现,用于高效执行应用中的多种任务,通过使用多线程并发执行任务,来提高效率;另外相比于自己new Thread去跑任务,使用线程池具有更好的性能,因为线程的创建与销毁需要一定的时间,线程池通过将线程管理起来,new完之后一般不立刻销毁,而是不断地等待处理任务。另外通过线程池来规范线程的使用,可以有效避免滥用线程使用示例...
2018-07-14 11:49:46
390
原创 JUC PriorityBlockingQueue 分析
基本介绍PriorityBlockingQueue JUC中阻塞队列的一种,支持阻塞的优先队列,容量最大可到int的最大值 - 8(Integer.MAX_VALUE - 8),容量可以自动扩展(内部实现)。PriorityBlockingQueue内部使用最小堆的思想来构建,使用数组形式存储元素构造时建议定义好Comparator的实现并传入,在内部实现里面将使用传入的Comparato...
2018-07-08 16:28:15
375
原创 JUC SynchronousQueue 分析
基本介绍SynchronousQueue JUC阻塞队列的一种,队列无实际容量,一个put操作必须等待一个take操作的执行,才会解除阻塞状态。将put考虑为生产者的话,需要等待消费者,即take操作来取它的数据,才能够从阻塞等待中返回。数据在SynchronousQueue中是被直接传递的,由put线程传递给take线程使用场景SynchronousQueue的使用场景比较少见,...
2018-07-08 12:13:36
405
原创 JUC DelayQueue 分析
基本介绍DelayQueue,JUC阻塞队列的一种,依赖ReentrantLock(非公平实现)、Condition以及PriorityQueue来实现阻塞等待获取超时元素。队列中的元素需要超时后才能够被取出,若多个线程尝试获取还没有到超时结束的队列首元素,那么这些线程将会挂起等待(依赖Condition await 以及 超时wait)。DelayQueue是阻塞队列中的一种实现,因此它需要...
2018-06-13 09:25:15
367
原创 JUC LinkedBlockingQueue 分析
基本介绍JUC里面提供的有界阻塞队列,基于链表方式实现默认队列大小为Integer.MAX_VALUE,给人的感觉是近乎无界,在构造的时候可以自行指定队列的容量内部维护两把锁(putLock与takeLock),用以优化存取的并发性能;put/offer只需要获取putLock,而take/poll只需要获取takeLock,细化了锁粒度,使得存取操作可以并发进行,相比ArrayBloc...
2018-06-12 22:41:02
301
原创 JUC ArrayBlockingQueue 分析
先说说BlockingQueueBlockingQueue,JUC中定义的阻塞队列接口,为阻塞队列的实现定义了一些通用的方法,其中包括非阻塞操作以及阻塞操作非阻塞操作: offer,add(add不常用):队列添加元素(队尾添加)poll,remove(remove不常用):移除队列元素(队头移除)阻塞操作: put:队列添加元素,通常在有界队列实现里面,当队列元素个数达到容量...
2018-06-11 22:11:08
310
原创 JUC CyclicBarrier 分析
基本介绍CyclicBarrier可实现多个线程同时等待,达到一个共同临界点,才一起往下执行,并且,可以在达到共同临界点的时候,触发一个action。这个同步组件实现的功能看似与CountDownLatch一样,但是与CountDownLatch只能被使用一次不一样,CyclicBarrier可被重复多次使用。像CountDownLatch、Semaphore、Lock等同步组件,都是通过...
2018-06-11 09:22:55
310
原创 JUC Semaphore 分析
基本介绍Semaphore,JUC中提供的一个并发组件,根据字面理解是信号量的意思。Semaphore能够实现的功能是允许多个线程同时获取共享资源,实际是共享锁(基于AQS的共享实现模式)的实现。获取不到资源的线程会进行阻塞等待,直到其他线程释放资源,当前阻塞线程尝试获取共享资源成功,则从阻塞等待中返回,否则继续阻塞等待。每个资源称为一个permit(许可),由Semaphore内部持有。Se...
2018-06-10 16:47:29
655
原创 JUC CountDownLatch 分析
简介JUC提供的并发组件CountDownLatch可以实现类似Thread.join的效果,实现等待多个线程执行结束以后才执行接下来逻辑的功能(一个线程阻塞等待其他多个并发任务线程执行完任务之后才解除阻塞)eg:package com.crazypig.juc;import java.util.concurrent.CountDownLatch;public class Co...
2018-06-10 16:20:08
416
原创 JUC Atomic原子类分析
基本介绍JUC中atomic子包里面提供了很多Atomic类,用于多线程并发下原子更新(CAS)不同类型对象,主要包括以下几大类:原子更新基本类型类AtomicIntegerAtomicLongAtomicBoolean原子更新数组类型AtomicIntegerArrayAtomicLongArrayAtomicReferenceArray原子更...
2018-06-09 23:38:40
492
原创 JUC ReentrantLock 分析
基本介绍ReentrantLock,可重入锁,基于AQS实现的互斥锁,在互斥锁之上支持可重入。可重入的意思是,同一个线程可以多次调用lock方法,而不会导致自己等待自己锁的释放。根据内部实现,分为公平性可重入锁和非公平性可重入锁。由构造函数来指定其公平性,默认使用非公平性实现。ReentrantLock实现了Lock接口,实现的接口如下:public interface Lock {...
2018-06-09 14:53:31
319
原创 JUC AbstractQueuedSynchronizer分析
什么是AQSAQS即AbstractQueuedSynchronizer的简称,是实现JUC(java.utils.concurrent包)同步组件的通用基础骨架,JDK中基于此骨架实现的同步组件主要包括ReentrantLock、ReentrantReadWriteLock、CountDownLatch和Semaphore。理解好这个基础骨架实现的功能,就能够更好地去理解其他组件的实现。...
2018-06-09 14:35:24
318
原创 Guava 对JDK Future异步编程的扩展支持
JDK FutureJDK中Future代表了异步计算的结果,通过向线程池ThreadPoolExecutor(通常使用ExecutorService接口) submit 一个Callable,可返回一个Future, eg:ExecutorService jdkExecutor = Executors.newFixedThreadPool(2);Future<String&g...
2018-03-26 09:27:57
773
原创 Ubuntu Clion MySQL 5.7 源码调试环境搭建
一直想在linux下通过调试mysql源码来学习mysql。本文记录Ubuntu14下编译mysql5.7.18源码, 导入clion进行调试的过程
2017-07-16 14:37:10
6042
2
原创 Java Service Wrapper 详解
Java Service Wrapper(JSW) 可用于将Java后台程序包装成一个后台服务运行。除此以外,JSW还可以在你的Java程序挂掉以后,自动帮你把服务再次拉起,相当于提供了一个守护进程的功能
2017-06-25 22:15:58
8482
原创 MySQL Group Replication 同步 or 异步?
参考国外MySQL大神的博客,理解一下Group Replication是同步还是异步的
2017-06-06 20:07:59
1937
原创 Git branch has diverged after rebase
最近在使用git的过程中遇到了以下问题:Your branch and 'origin/xxx' have diverged
2017-05-20 19:22:06
4657
原创 MySQL Group Replication 节点状态详解
通过查询performance_schema下的replication_group_members表可以知道MGR集群中节点的状态
2017-04-22 14:43:21
9532
2
原创 使用mydbtest进行mysql压测
mydbtest简介mydbtest是一款轻量级的mysql数据库压测工具,由OneProxy创始人楼方鑫编写,mydbtest相较于sysbench压测工具,功能单一,但是安装部署操作简单,只需要简单的配置,就可以进行压测,非常方便
2017-03-28 17:42:01
2326
原创 使用sysbench进行mysql压测
sysbench是一个模块化的、跨平台、多线程基准测试工具,主要还是用来做mysql数据库OLTP性能测试
2017-03-27 18:23:42
4205
原创 MySQL Group Replication Got fatal error 1236
Slave I/O for channel 'group_replication_recovery': Got fatal error 1236 from master when reading data from binary log
2017-03-13 14:30:03
3037
原创 MySQL Group Replication HA with ProxySQL [主节点故障切换对应用无感知]
MGR单主模式下,实现主节点故障切换,对应用无感知
2017-01-18 16:40:37
12434
原创 MySQL Group Replication 动态添加成员节点
前面文章已经介绍如何部署MySQL GR 的两种模式。在前面的部署里面,因为是预先知道需要部署的组节点规模,所以我们能够在my.cnf里面体现出组成员信息。但是,前面的部署并没有体现出动态添加组节点。这篇文章介绍如何动态往一个GR组里面添加新的成员节点
2017-01-05 17:52:26
3524
原创 MySQL Group Replication 搭建[Single-Primary Mode]
这篇文章记录如何部署mysql group replication 单写模式 (single-primary mode) 部署方式大致与多写模式的部署一致,所需要修改的只有my.cnf里面关于group replication的配置。
2016-12-21 16:46:21
4887
1
原创 MySQL Group Replication 技术点
mysql group replication,组复制,提供了多写(multi-master update)的特性,增强了原有的mysql的高可用架构。mysql group replication基于mysql插件架构实现,本身就是一个mysql插件。
2016-12-20 15:47:19
3400
原创 MySQL Group Replication 搭建[Multi-Primary Mode]
这篇文章记录如何部署mysql group replication 多写模式 (multi-primary mode)
2016-12-16 12:54:06
9396
1
原创 MySQL Group Replication 介绍
2016-12-12,一个重要的日子,mysql5.7.17 GA版发布,正式发布了Group Replication(组复制) Plugin,增强了mysql原有的高可用方案(原有的高可用方案是指mysql主从架构),提供了重要的特性——多写,保证组内高可用,数据强一致性。
2016-12-16 11:53:01
21735
原创 美团CAT客户端接入方式
接着CAT服务端安装部署之后,下一步就是考虑客户端应用如何接入CAT的问题了。在这里我们以一个最简单的demo应用(hello world类型)来讲解接入步骤:
2016-12-16 09:40:31
9872
6
原创 Java GC 介绍
众所周知,Java程序不用像C++程序在程序中自行处理内存的回收释放。这是因为Java在JVM虚拟机上增加了垃圾回收(GC)机制,用以在合适的时间触发垃圾回收,将不需要的内存空间回收释放,避免无限制的内存增长导致的OOM。作为一个合格的Java程序员,有必要了解Java GC相关知识。
2016-11-26 23:23:09
39899
21
原创 动态加载jdbc驱动(可测试jdbc不同版本兼容性)
缘由接到一个新任务,需要测试应用对mysql jdbc不同版本驱动的兼容性。这里希望能够以代码的形式,手动加载不同版本的mysql jdbc驱动
2016-11-13 15:44:20
7712
3
原创 自己开发zk directory browser
最近研究mycat里面的zk模块,自己在虚拟机上部署了一个伪分布式的zk,发现使用zkCli.sh查询zk上面的内容很不方便,想找一款可以在web界面上浏览zk目录结构和内容的小工具,并且是java实现的,可以一键部署,直接浏览器上面进行目录和内容的查看。在github上面找了一阵子,发现类似的软件都挺大挺复杂,包含CRUD、权限以及其他一些复杂功能,跟我预期的不太一样。所以寻思着还是自己开发吧
2016-10-19 15:57:34
1013
原创 Mycat源码篇 : 起步,Mycat源码阅读调试环境搭建
在研究mycat源码之前必须先把环境搭建好。这篇文章的目标就是搭建mycat源码调试环境。
2016-10-08 20:12:07
13208
13
原创 TestNG-详解preserve-order的作用与测试case的执行顺序
在TestNG xml配置文件中,关于`<test>`的配置里面,有一个属性叫`preserve-order`,一开始以为这个属性可以用来控制测试case(那些被**@Test**注解标注的方法)的执行顺序,后来测试了一把,发现没有这种效果,后来上网找了一下这个属性的作用,发现它是用来控制`<test>`里面所有`<classes>`的执行顺序的。
2016-10-08 12:50:14
11188
1
原创 Mycat源码篇 : 总览
前言目前的工作需要深入理解mycat。打算写一个系列的文章,分模块或者分功能从源码角度去分析mycat。写出来的文章比较零散,没有按照一个有序的顺序来组织,那么,这里通过这篇文章,作为一个文章系列的总览。同时,也作为一个TODO list吧,把需要总结的文章一一列举出来,然后利用业余时间慢慢去填充。
2016-10-06 14:39:07
1771
SQL Server 2005还原大规模数据如何高效进行
2014-07-02
多对多关系的SQL查询?求解
2014-01-21
Java Swing应用程序如何去掉默认菜单栏
2014-01-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人