自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 zookeeper(3)分布式锁

在一个分布式系统中,如何保证一个操作,同一时间只有一个线程可以执行,这就是分布式锁的使用场景,同一时间,只有一个线程可以获得锁的使用权。如何实现一个分布式锁?实现一个分布式锁,可以有以下3种方法。一、基于数据库实现分布式锁。1、在MySQL中,使用悲观锁"select from t where id = for update"可以对行数据进行加锁,来实现分布式锁。2、同一个时间内,只会...

2019-09-17 13:55:37 98

转载 zookeeper(2)Master-Worker协同机制实验

案例:1、利用ZooKeeper实现一个组成员的协同管理2、创建一个Master的节点,并利用Master监控组成员Workers3、Workers也要监控Master,当Master宕机之后,一个Worker可以成为Master实验背景1、ZooKeeper集群,采用上一篇文章搭建的环境 搭建环境2、启动3个客户端,连接到ZooKeeper集群,模拟Master和Worker。步骤1、...

2019-09-11 13:52:18 199

转载 zookeeper(1)利用3个机器,搭建zk集群模式

背景最近打算好好学习一下zookeeper,那么第一步就是要搭建一个环境。单机版的比较简单,这里就不介绍了。集群版本的,看网上的教程也蛮简单的,但是自己动起手来还是会遇到各种问题,这里做一下记录。环境介绍1、3个阿里云服务器,其中2个ECS,1个轻量服务器。2、zookeeper使用最新版本 https://archive.apache.org/dist/zookeeper/stable/a...

2019-09-06 18:50:53 128

转载 如何实现一个LRU算法?

LRU就是Least recently used,最近最少使用,如果空间不足淘汰掉最近最少使用的数据。实现方式可以有一下三种:1、单链表实现原理:1、插入:插入数据是最新的数据,直接插入到链表尾部2、查找:查找到的数据移动到链表尾部,代表最新访问。3、删除:链表头代表最近最少使用,如果链表满,则删除链表头数据时间复杂度:O(n)2、哈希表+双向链表1、先后插入5个节点,每个节点在2个...

2019-09-04 09:47:48 255

转载 问题排查-jps和jstack

jpsjps 命令类似与 linux 的 ps 命令,但是它只列出系统中所有的 Java 应用程序。 通过 jps 命令可以方便地查看 Java 进程的启动类、传入参数和 Java 虚拟机参数等信息。参数说明:-q:只输出进程 ID-m:输出传入 main 方法的参数-l:输出完全的包名,应用主类名,jar的完全路径名-v:输出jvm参数-V:输出通过flag文件传递到JVM中的参数1、...

2019-08-28 13:32:47 179

转载 问题排查-jmap和MAT工具

jmap常用命令1、heap命令:jmap -heap pid描述:显示Java堆详细信息2、histo[:live]命令:jmap -histo:live pid描述:显示堆中对象的统计信息3、dump:<dump-options>命令:jmap -dump:format=b,file=heapdump.phrof pid描述:生成堆转储快照dump文件。以hprof二进制...

2019-08-26 10:22:50 113

转载 GC问题排查常用命令-jstat

jstat查看GC的常用命令jstat [ generalOption, outputOptions vmid, [ interva,count ]参数:generalOption: 一般使用-gcutil查看GC情况vmid: 虚拟机进程号,即当前运行的java进程号interval: 间隔时间,单位为秒或毫秒count: 打印次数,如果缺省则打印无数次1、查询GC总体使用情况jstat...

2019-08-23 14:21:44 602

转载 JMH测试AtomicLong和LongAdder的性能

AtomicLong 和 LongAdder 的区别AtomicLong1、AtomicLong是利用了底层的CAS操作来提供并发性。2、在并发量较低的环境下,线程冲突的概率比较小,自旋的次数不会很多。但是,高并发环境下,N个线程同时进行自旋操作,会出现大量失败并不断自旋的情况,此时AtomicLong的自旋会成为瓶颈。3、AtomicLong中有个内部volatile变量value保存着实际...

2019-08-21 07:23:46 128

转载 MySQL小组分享大纲

1、查询语句是如何执行的?1、连接1、建立连接2、验证权限,修改了权限,创建新的连接才会生效。3、SQL执行的临时内存2、查询缓存1、先查询缓存,更新操作会导致所有缓存失效。2、MySQL 8.0功能去掉3、分析词法解析,语法解析4、优化1、决定使用哪个索引,比方说根据统计信息预估扫描行数,是否使用临时表,需不需要排序等。2、决定join的各个表的连接顺序5、执行1、调用引擎...

2019-08-19 12:38:18 57

转载 死磕Synchronized实现原理(转发)

无意之间发现了这几篇文章,写的很详细,很好,拜读转发一下1、死磕Synchronized底层实现,面试你还怕什么?2、面试题深入解析:Synchronized底层实现3、一文让你读懂Synchronized底层实现,秒杀面试官4、死磕Synchronized底层实现--重量级锁...

2019-08-15 21:46:42 721

转载 垃圾回收(4)G1的GC过程

G1日志G1有详细的日志信息,建议使用下面的参数,当G1出问题,可以获取很多有用的信息1、-xx:+PrintGCDateStamps 打印日期和正常云行时间2、-xx:+PrintGCDetails 打印G1详细信息3、-xx:+PrintAdaptiveSizePolicy 打印自适应调节策略;自适应策略:GC会根据中统计的GC时间、吞吐量、内存占用量,重新计算堆内存中各区大小4、-...

2019-08-13 21:31:15 138

转载 垃圾回收(3)G1的结构和概念

G1介绍G1(Garbage First)算法,通过参数-XX:+UseG1GC来启用,该算法在JDK 7u4版本被正式推出,G1可以通过参数-XX:MaxGCPauseMillis控制GC暂停时间。Region在G1算法中,采用了另外一种完全不同的方式组织堆内存,堆内存被划分为多个大小相等的内存块(Region),每个Region是逻辑连续的一段内存,结构如下:每个Region被标记了E...

2019-08-11 22:49:04 332

转载 垃圾回收(2)CMS

一、CMS介绍全称 Concurrent Mark Sweep,是一款并发的、使用标记-清除算法的垃圾回收器。1、并行,STW时间短暂。2、没有压缩和整理,产生内存碎片。对象在标记过程中,根据标记情况,分成三类:1、白色对象,表示自身未被标记;2、灰色对象,表示自身被标记,但内部引用未被处理;3、黑色对象,表示自身被标记,内部引用都被处理;触发时间:如果添加了一下参数当老年代的使用...

2019-08-08 22:58:24 91

转载 垃圾回收(1)概述

1、JVM运行时内存分布垃圾回收针对的是Heap(堆区),因为运行时所有的对象实体都是存在这个区域的。2、垃圾回收算法2.1、引用计数法1、它的做法是为每个对象添加一个引用计数器,用来统计指向该对象的引用个数,当对象的引用个数为0的时候,就可以回收了。2、引用计数法还有一个重大的漏洞,那便是无法处理循环引用对象,比方说A引用B,B引用A,但是A和B都没有其他引用,那么这个时候就回造成对象...

2019-08-07 22:45:14 107

转载 装饰器模式-实现电商的优惠活动价格计算

1、案例1、商品有基本价格2、可以使用优惠券和红包两种优惠活动3、基于装饰器模式,实现价格的计算和扩展。2、实现代码-业务逻辑2.1、商品类import java.math.BigDecimal;import java.util.Map;/** * 商品实体类 */public class Merchandise { private String sku; pr...

2019-08-05 12:59:53 664

转载 SpringBoot-定制Web容器Tomcat,请求头增加traceid参数

通过特定Web容器工厂TomcatServletWebServerFactory定制1、Pom.xml文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-in...

2019-07-17 13:36:01 715

转载 多线程(二十二、异步执行-Futrue模式)

Future简介如果一个任务需要返回执行结果,一般我们会实现一个Callable任务,并创建一个线程来执行任务。对于执行时间比较长的任务,显然我们同步的等待结果再去执行后续的业务是不现实的,那么,Future模式是怎样解决这个问题的呢?Future模式,可以让调用方立即返回,然后它自己会在后面慢慢处理,此时调用者拿到的仅仅是一个凭证,调用者可以先去处理其它任务,在真正需要用到调用结果的场合,再...

2019-07-12 13:28:40 90

转载 多线程(二十一、阻塞队列-DelayQueue)

DelayQueue简介DelayQueue中的所有元素必须实现Delayed接口,还必须实现还实现了Comparable接口。1、DelayQueue是×××阻塞队列2、队列中的元素必须实现Delayed接口,只有当该对象的getDalay方法返回的剩余时间≤0时才会出队。3、剩余时间最小的元素就在堆顶,每次出队其实就是删除剩余时间≤0的最小元素。DelayQueue构造基于Prior...

2019-07-10 13:23:52 115

转载 多线程(二十、阻塞队列-PriorityBlockingQueue)

PriorityBlockingQueue简介1、一种优先级队列,元素并不是以FIFO的方式出/入队,而是以按照权重大小的顺序出队;2、PriorityBlockingQueue是真正的×××队列(仅受内存大小限制),它不像ArrayBlockingQueue那样构造时必须指定最大容量,也不像LinkedBlockingQueue默认最大容量为Integer.MAX_VALUE;3、Priori...

2019-07-08 23:42:46 207

转载 多线程(十九、阻塞队列-LinkedBlockingQueue)

LinkedBlockingQueue简介1、LinkedBlockingQueue底层数据结构基于单链表实现,与ArrayBlockingQueue不同。2、既可以在初始构造时就指定队列的容量,也可以不指定,如果不指定,那么它的容量大小默认为Integer.MAX_VALUE。3、区别于ArrayBlockingQueue的全局锁,LinkedBlockingQueue维护了两把锁——take...

2019-07-05 19:16:06 185

转载 多线程(十八、阻塞队列-ArrayBlockingQueue)

ArrayBlockingQueue简介1、队列的容量一旦在构造时指定,后续不能改变;2、插入元素时,在队尾进行;删除元素时,在队首进行;3、队列满时,插入元素会阻塞线程;队列空时,删除元素也会阻塞线程;4、支持公平/非公平策略,默认为非公平策略。ArrayBlockingQueue构造核心构造方法:/** * 指定队列初始容量和公平/非公平策略的构造器. */public A...

2019-07-04 21:55:08 163

转载 多线程(十七、深入了解线程池-ThreadPoolExecutor)

ThreadPoolExecutor原理ThreadPoolExecutor构造函数参数/** * 使用给定的参数创建ThreadPoolExecutor. * * @param corePoolSize 核心线程池中的最大线程数 * @param maximumPoolSize 总线程池中的最大线程数 * @param keepAliveTime 空闲线程的存活时间 *...

2019-07-02 20:15:01 74

转载 XXL-JOB任务执行的过程源码分析

xxl-job介绍xxl-job是一个分布式任务调度系统,基于quartz实现调度器。1、quartz是基于数据库for update实现锁,来保证同一个任务同一时间只会执行一次。2、最新版本的xxl-job已经摒弃了quartz.xxl-job核心模块1、调度中心,也就是任务的管理系统2、执行器,任务真正的执行服务,一般是分布式的服务。任务执行过程1、调度中心1.1 点击执行...

2019-06-29 10:06:03 1093

转载 多线程(十五、ConcurrentHashMap原理(2)类和方法分析)

ConcurrentHashMap的构造ConcurrentHashMap,采用了一种“懒加载”的模式,只有到首次插入键值对的时候,才会真正的去初始化table数组。构造方法:1、空构造函数,默认桶大小162、指定桶初始容量的构造器,必须是2次幂值/** * 指定table初始容量的构造器. * tableSizeFor会返回大于入参(initialCapacity + (initia...

2019-06-25 20:43:34 64

转载 多线程(十四、ConcurrentHashMap原理(1)节点)

ConcurrentHashMap介绍针对JDK1.8看ConcurrentHashMap是如何实现的结构图:1、ConcurrentHashMap内部是一个Node节点的数组table,数组的每一个位置table[i]代表一个桶。根据键的hash值映射到不同的桶内。transient volatile Node<K,V>[] table;2、Node节点一共有5种类型1...

2019-06-24 19:10:46 264

转载 多线程(十三、AQS原理-Semaphore信号量)

Semaphore介绍Semaphore,限制对共享资源访问的最大线程数量,要访问共享资源,需要先申请许可,申请到许可才能访问。访问结果了,释放许可。案例:3个线程:Thread-1、Thread-2、Thread-3。一个许可数为2的公平策略的Semaphore。线程的调用顺序如下:Thread-1 申请一个许可,等待几秒钟,继续执行Thread-2 申请2个许可,许可不足,阻塞Thre...

2019-06-20 20:02:04 74

空空如也

空空如也

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

TA关注的人

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