自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Nacos核心原理

我们需要想到几个问题,客户端是如何注册到服务端的、客户端是如何获取到服务端的其他的服务、服务端是如何保证实例的健康状态的、集群之间服务的实例是如何同步的,这一系列问题贯穿Nacos的核心,由下列特性来实现。Nacos作为服务的注册中心,拥有服务的注册和发现的特性。

2022-08-21 20:35:31 446 1

原创 Alibaba sentinel原理解析

滑动时间窗算法:sentinal的滑动时间窗有一点区别,它可以理解成一个环状的方式来实现的,分为秒级和分钟级,以秒级来举例说明,是将1S分为两个500ms,存在一个开始时间,通过获取到请求的秒数,来算出具体在哪一个区间,并且如果与上一轮开始时间相同,则计数器开始统计合格与不合格,如果不同则重置开始时间,并且计数器统计合格与不合格,在请求开始时通过和设置的进行比较来确认是否需要拦截。漏桶算法:相当于给时间划分区间,一定的时间只能运行一个请求进来。:有三种方式来实现限流(滑动时间窗、漏桶、令牌桶).......

2022-08-15 20:04:11 925

原创 ThreadPoolExecutor线程池

等待状态(WAITING):调用LockSuport.park()、object.wait()、object.join()等方法会使线程从运行状态切换到该状态,释放cpu资源;handler:拒绝策略,4种拒绝策略(AbortPolicy-直接抛异常、CallerRunsPolicy-如果线程池已经满了,会用当前提交任务的线程来执行、DiscardOldestPolicy-把新的任务插入队列,老的任务丢弃掉,DiscardPolicy-直接丢弃)初始化(new):new一个线程的时候为该状态。...

2022-08-15 18:49:42 314

原创 原子类(Atomic)、ConcurrentHashMap、CopyOnWriteArrayList

jdk1.7采用的是桶结构(一个桶对应一个segment),相当于一个hash表下面存放HashMap,segment会继承RentrantLock,总结来说采用了分段锁的形式,避免使用全锁来限制整个ConcurentHashMap的操作。jdk1.8采用的是cas初始化hash数组,当hash值相同时,采用synchronized保证插入的原子性,其实可以将链表或红黑树就相当于1.7中的桶。在1.8之后采用链表+数组,但是达到指定大小的时候会将链表转换为红黑树的结构。使用场景:读多写少的场景。...

2022-08-14 21:54:43 464

原创 AQS深度讲解

进入阻塞状态,释放cpu资源,当争抢到锁的线程运行完成,调用unLock方法,会释放队列最新进入的线程。答案:可以通过设置countDownLatch为3,线程跳出前执行countDown()方法,后面执行await()方法,当线程没有执行完时会进行自旋等待,直到state为0,才会执行下去。是指当一个持有锁的线程释放锁时,刚加入的线程和队列中的最先加入的线程进行一个锁的争抢的过程。通过共享锁的思想来实现的,初始化会设置state的初始值,代表同一时间能执行的线程的数。当多个线程同时竞争锁时,会进行。...

2022-08-14 15:45:40 217

原创 ShardingSphere分库分表

简介ShardingSphere三大重要产品,ShardingJDBC、ShardingProxy、ShardingSidecar。ShardingSphere目前是由京东数科组件团队开发。未来打算做成一个服务及的产品。ShardingSphere源码中包含很多的SPI扩展点。诸如主键生成策略、分布式事务实现.........

2022-07-29 22:48:02 400

原创 RabbitMQ详解

可以开启消费消息的手动确认模式(有三种自动确认,手动确认,异常重发),当消息消费完成后确认消息消费,消息队列才会剔除消息,如果消费失败,可以选择重发指定次数后还是失败在存在库中或日志中以做进一步处理,这时设置消息丢弃。延迟队列(TTL+死信交换机)给消息队列设置过期时间,不设置消费者来消费,当达到过期时间后,过期消息绑定到指定的死信交换机再次分发给消息队列,从而达到延迟队列的目的。如何防止消息的重复消费消费消息的方法最好能达到幂等性(多次消费相同消息不会对结果有影响),一般可以通过乐观锁来实现。...

2022-07-28 22:15:56 748

原创 JVM垃圾回收机制及JVM调优

默认新生代占物理空间的5%,但是会随着对象的增多而变多,最多不会超过60%,可以通过参数来设置。黑色为已经扫描完成的对象,灰色为扫描了一部分引用的对象,白色为未被扫描的对象(当扫描开始时都是白色,扫描完成后还是白色则对象会被清除)。新生代为复制算法、老年代为标记整理算法。并发标记可以和其他线程同时运行,标记GCROOTs关联的所有对象。初始标记暂停其他线程,标记GCROOTs直接引用的对象,速度非常快。重新标记暂停其他线程,标记在并发标记过程中,进入老年代的新对象,主要采用。...

2022-07-27 22:58:13 548

原创 JVM整体深度剖析

对象初次来到堆中,默认会放入Eden区,当对象很大(eden区剩余空间)时,会直接加载到老年代;IO流读取的字节码文件,然后根据规则校验类的字节码文件是否正确(这一步在C、C++)实现,将类的静态变量赋予初始值(int、boolean等),然后将类的信息初始化到方法区中,同时会生成一个java.lang.class的对象到堆中,作为开发者获取类信息的切入点。s0、s1一定有一个为空,当触发MinorGC时,未被回收的对象头信息的分代年龄会+1,同时加载到一个空的s区。)中加载,没有找到类后才会从。...

2022-07-21 22:11:03 97

原创 Redis集群及性能优化

redis集群架构是基础主从架构的基础下,兼有哨兵的选举功能,并且可以横向拓展的高可用架构。redis集群至少需要三个master节点,并且建议奇数节点的部署模式,主要是由于master的选举规则限制。redis集群master选举规则是当slave感知master节点变为fail时,会主动广播其他集群中其他节点,只有master节点会返回一个ack信息(master只会响应第一个接受到广播的slave节点并回应),当超过半数的master返回信息后,该slave会升级为主节点,并且广播消息通知到其他集群节

2022-07-12 22:13:44 1252

原创 深入理解Redis、主从

redis是具有原子性的,在读写的操作时由一个线程完成,但redis在持久化、异步删除、集群同步时是由额外线程执行的。redis读写速度快,主要原因是数据都存储在内存中,所有的运算都是内存级别的,并且由一个线程完成,避免了线程切换的消耗。redis在处理并发客户端连接请求时,采用I/O多路复用的策略,将连接信息和队列依次放到队列中,然后依次放入文件事件分派器中,然后依次交给事件处理器处理。在事件处理器处理事件时,队列和事件分派器仍然在读取其他事件,高效利用redis服务器的处理能力。如图:Info可查看re

2022-07-11 22:09:16 296

原创 Mysql事务隔离级别与锁机制

Mysql设计了事务隔离机制、锁机 制、MVCC多版本并发控制隔离机制,用一整套机制来解决多事务并发问题。事务及其ACID属性并发事务会出现哪些问题:事务隔离级别 常看当前数据库的事务隔离级别: show variables like 'tx_isolation';设置事务隔离级别:set tx_isolation='REPEATABLE-READ';MVCC多版本并发控制机制基于undo日志和read view机制。read view生成规则:事务创建时会生成一个readview[11,12,16]:21

2022-07-10 17:58:49 445

原创 MySql索引优化实用场景

1、索引字段在where后面过滤不走索引(这种情况一般是组合索引和普通索引会出现,数据量过多的话会出现逐条回表的操作,优化器会认为相对耗时;还有一种是in里面数据过多),这种情况可以加上force index使其强制走索引,具体表具体分析。2、select查询尽量不要用到select *,优先使用覆盖索引,避免回表操作3、in和or在表数据量比较大的情况会走索引,在表记录不多的情况下会选择全表扫描4、like KK% 一般情况都会走索引 5、Order by与Group by也遵

2022-07-10 17:09:19 247

原创 Explain详解

Explain为Mysql的执行计划,是通过Mysql的内置查询优化器来分析后得出的执行计划,并不是真正的执行sql。Explain字段理解: 1)simple:简单查询。查询不包含子查询和union 2)primary:复杂查询中最外层的 select 3)subquery:包含在 select 中的子查询(不在 from 子句中) 4)derived:包含在 from 子句中的子查询。MySQL会将结果存放在一个临时表中,也称为派生表(derive

2022-07-10 16:01:00 232

原创 MySql索引底层数据结构

索引:索引是Mysql快速获取数据的一种数据结构。索引的数据结构有哪些? MySql真正使用的索引的数据结构是B+TreeMysql最终使用的索引数据结构为B+Tree。B+Tree单个节点的分配空间大小为16KB(大概估算:1170*1170*16≈2000W),所以一般生产环境上Mysql单表存放一般是一千万数据,更多的数据采用分库分表存储(MySql横向扩容是很方便的)。Mysql用的数据引擎(数据引擎是针对表的,并不是针对数据库): 索引

2022-07-10 12:21:11 994 1

空空如也

空空如也

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

TA关注的人

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