Jiefang's Blog

过去心不可得,现在心不可得, 未来心不可得

分布式锁-01丨Redis实现分布式锁

Redis分布式锁 生产环境用分布式锁的时候,一定是会用开源类库的,比如Redis分布式锁,一般就是用Redisson框架。 1 2 3 4 5 6 //获取锁 RLock lock = redissonClient.getLock("redisson_lock"); //加锁 lock.lock(); //解锁 rLock.unlock(); 实现原理 加锁机制 首先会根据hash节...

分布式原理-05丨分布式事务

分布式事务 分布式事务,就是在分布式系统中运行的事务,由多个本地事务组合而成。 实现分布式事务有以下 3 种基本方法: 基于 XA 协议的二阶段提交协议方法; 三阶段提交协议方法; 基于消息的最终一致性方法; TCC事务; 基于 XA 协议的二阶段提交方法 XA 是一个分布式事务协议,规定了事务管理器和资源管理器接口。因此,XA 协议可以分为两部分,即事务管理器和本地资...

分布式原理-04丨分布式选举

分布式选举 为什么要有分布式选举? 主节点,在一个分布式集群中负责对其他节点的协调和管理,也就是说,其他节点都必须听从主节点的安排。主节点的存在,就可以保证其他节点的有序运行,以及数据库集群中的写入数据在每个节点 上的一致性。这里的一致性是指,数据在每个集群节点中都是一样的,不存在不同的情况。 Bully 算法 Bully 算法选举原则是“长者”为大,即在所有活着的节点中,选取ID最大的节...

分布式原理-03丨分布式互斥

分布式互斥 在分布式系统里,排他性的资源访问方式,叫作分布式互斥(Distributed Mutual Exclusion),而这种被互斥访问的共享资源就叫作临界资源(Critical Resource)。 集中式算法 引入一个协调者程序,得到一个分布式互斥算法。每个程序在需要访问临界资 源时,先给协调者发送一个请求。如果当前没有程序使用这个资源,协调者直接授权请求程序访问;否则,按照先...

分布式原理-02丨分布式系统的指标

分布式系统的指标 从分布式技术的起源可以看出,分布式系统的出现就是为了用廉价的、普通的机器解决单个计算机处理复杂、大规模数据和任务时存在的性能问题、资源瓶颈问题,以及可用性和可扩展性问题。换句话说,分布式的目的是用更多的机器,处理更多的数据和更复杂的任务。 性能、资源、可用性和可扩展性是分布式系统的重要指标 性能(Performance) 性能指标,主要用于衡量一个系统处理各种任务的能力...

分布式原理-01丨分布式服务限流算法

分布式服务限流原理 限流 限流(Rate limiting)指对应用服务的请求进行限制,例如某一接口的请求限制为100个每秒,对超过限制的请求则进行快速失败或丢弃。 限流可以应对: 热点业务带来的突发请求; 调用方Bug导致的突发请求; 恶意攻击请求; 限流算法 实现限流有很多办法,在程序中时通常是根据每秒处理的事务数(Transaction per second)来衡量...

SpringBoot-01丨Spring Boot 启动原理

Spring Boot 启动原理 Springboot项目启动类: 1 2 3 4 5 6 @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); ...

Hystrix-02丨Hystrix配置项

Hystrix配置项 Command Properties Execution 以下属性控制HystrixCommand.run()如何执行。 参数 描述 默认值 execution.isolation.strategy 隔离策略,有THREAD和SEMAPHORE THREA...

Java多线程-31丨JUC-ForkJoinTask

ForkJoinTask 简介 Java注释 Abstract base class for tasks that run within a {@link ForkJoinPool}.A {@code ForkJoinTask} is a thread-like entity that is much lighter weight than a normal thread. Huge...

Java多线程-30丨JUC-Fork丨Join框架

Fork丨Join框架 简介 Fork/Join框架是Java7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。Fork/Join 技术是分治算法(Divide-and-Conquer)的并行实现,它是一项可以获得良好的并行性能的简单且高效的设计技术。 Fork/Join框架基础类 ForkJoinPool:用...

Java多线程-29丨JUC-Phaser

Phaser 简介 Java注释 A reusable synchronization barrier, similar in functionality to {@link java.util.concurrent.CyclicBarrier CyclicBarrier} and {@link java.util.concurrent.CountDownLatch CountDow...

Java多线程-28丨JUC-StampedLock

StampedLock StampedLock类,在JDK1.8时引入,是对读写锁ReentrantReadWriteLock的增强,该类提供了一些功能,优化了读锁、写锁的访问,同时使读写锁之间可以互相转换,更细粒度控制并发。 简介 Java注释 A capability-based lock with three modes for controlling read/write ac...

Java多线程-27丨JUC-ScheduledThreadPoolExecutor

ScheduledThreadPoolExecutor 简介 Java注释 A {@link ThreadPoolExecutor} that can additionally schedule commands to run after a given delay, or to execute periodically. This class is preferable to {@...

Java多线程-26丨JUC-LongAdder

LongAdder 简介 Java注释 One or more variables that together maintain an initially zero {@code long} sum. When updates (method {@link #add}) are contended across threads, the set of variables may g...

Java集合-25丨TreeMap

TreeMap 简介 TreeMap 底层的数据结构就是红黑树,和 HashMap 的红黑树结构一样。 不同的是,TreeMap 利用了红黑树左节点小,右节点大的性质,根据 key 进行排序,使每个元素能够插入到红黑树大小适当的位置,维护了 key 的大小关系,适用于 key 需要排序的场景。 数据结构 特性 每个节点都有颜色(红或黑); 根节点必须是黑色的; ...

Java集合-24丨集合问题

集合问题 List 关于List相关的问题主要有: ArrayList和LinkedList有什么区别? ArrayList是怎么扩容的? ArrayList插入、删除、查询元素的时间复杂度各是多少? 怎么求两个集合的并集、交集、差集? ArrayList是怎么实现序列化和反序列化的? 集合的方法toArray()有什么问题? 什么是fail-fast? ...

Java集合-23丨ArrayDeque

ArrayDeque 简介 Java注释 Resizable-array implementation of the {@link Deque} interface. Array deques have no capacity restrictions; they grow as necessary to support usage. They are not thread-s...

Java集合-22丨DelayQueue

DelayQueue 简介 Java注释 An unbounded {@linkplain BlockingQueue blocking queue} of {@code Delayed} elements, in which an element can only be taken when its delay has expired. The head of the queue...

Java集合-21丨ConcurrentLinkedQueue

ConcurrentLinkedQueue 简介 Java注释 An unbounded thread-safe {@linkplain Queue queue} based on linked nodes.This queue orders elements FIFO (first-in-first-out).The head of the queue is that elemen...

Java集合-20丨LinkedTransferQueue

LinkedTransferQueue 简介 Java注释 An unbounded {@link TransferQueue} based on linked nodes. This queue orders elements FIFO (first-in-first-out) with respect to any given producer. The head of the ...