- 博客(159)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Sentinel计算QPS限流算法
Sentinel其实就是一个AOP,通过AspectJ切入要进行限流的接口,为其添加@Around环绕通知,并使用try-catch包裹起来,源码在SentinelAutoConfiguration中每一个对该限流接口的请求,都要经过AOP的增强,先执行过一系列限流、熔断规则组成的责任链,然后才执行真正的接口逻辑。@Aspect //使用的AOPpublic class SentinelResourceAspect extends AbstractSentinelAspectSupport {..
2021-08-25 22:48:02
2677
4
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Ribbon负载均衡原理,Feign是如何整合Ribbon的?
文章目录1. 什么是负载均衡?2. Ribbon的使用2. Ribbon的负载均衡原理①:收集带有@LoadBalanced注解的RestTemplate,并为其添加一个拦截器②:选择负载均衡器,执行负载均衡算法(默认轮询)1. 什么是负载均衡? 负载均衡是从多个服务中根据某个策略选择一个进行访问,常见的负载均衡分为两种客户端负载均衡:即在客户端就进行负载均衡算法分配。例如spring cloud中的ribbon,客户
2021-07-20 22:18:14
3619
12
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 mysql慢查询优化方案
文章目录1. 分页查询优化 1. 分页查询优化在平时开发中,免不了使用分页,很多时候我们业务系统实现分页功能可能会用如下sql实现:mysql> select * from employees limit 10000,10; 这种查询方式表示从表 employees 中取出从 10001 行开始的 10 行记录。看似只查询了 1
2021-06-21 23:31:53
796
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 网关Spring Cloud Gateway的配置和使用
文章目录1. 什么是Spring Cloud Gateway?1. 什么是Spring Cloud Gateway? Spring Cloud Gateway 是 Spring Cloud官方推出的第二代网关框架,定位于取代 Netflix Zuul。相比 Zuul 来说,Spring Cloud Gateway 提供更优秀的性能,更强大的有功能。 &
2021-05-20 12:36:23
1283
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 分布式事务Seata的AT模式下两阶段提交原理
文章目录1. 扫描@GlobalTransactional注解,开启全局事务 Seata的AT模式的核心是对业务无侵入,是一种改进后的两阶段提交,其设计思路如下:第一阶段:RM端提交本地事务,生成undo日志表,释放本地锁和连接资源。并向TC注册分支事务,通过全局事务的 XID 进行关联。第二阶段:完全异步分布式事务操作成功,则TC通知RM异步删除undo日志表分布式事务操作失败,则TM
2021-05-14 18:02:42
3580
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 分布式事务解决方案,Seata的基本配置和使用
文章目录1. 分布式事务介绍①:本地事务②:分布式事务2. Seata介绍①:Seata的三种角色②:Seata的设计思路③:设计亮点以及存在的问题3. Seata的DB模式配置①:事务协调者TC环境配置 1. 分布式事务介绍事务分为两种本地事务分布式事务①:本地事务 大多数场景下,我们的应用都只需要操作
2021-05-12 18:06:13
2954
3
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Nacos集群的CP架构,CAP原则与BASE原则的应用
文章目录1. Nacos单机模式下的心跳检查机制2. Nacos集群模式下的心跳检查机制1. Nacos单机模式下的心跳检查机制 Nacos单机模式的心跳机制在上一篇已经分析完毕,点击查看Nacos单机模式下的心跳检查机制 主要逻辑是:开启一个延迟定时线程池,延时5秒,每隔5秒发起一次心跳检测,如果15秒没有响应,则把服务的健康状态置为false,如果30秒没有响应,才踢出该服务! public vo
2021-04-13 22:03:02
4580
4
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Nacod服务注册与发现(AP架构)、心跳检查机制
文章目录1. Nacos核心功能点2. 服务注册1. Nacos核心功能点 Nacos架构图如下:结合以上架构图,Nacos的核心功能点有如下几点:服务注册:Nacos Client会通过发送REST风格请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息。Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中。服务心跳
2021-04-11 13:18:17
2181
5
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 mysql的事务与锁机制
文章目录1.事务及其ACID属性2. 事务并发带来的问题 我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能就会导致我们说的脏写、脏读、不可重复读、幻读这些问题。mysql中可以通过begin、commit等命令开始或者提交一个事务,在使用Spring的@Transiti
2021-03-24 14:35:55
1530
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 mysql索引为什么使用B+tree,InnoDB与MyISAM 的区别
文章目录1. 索引的作用?2. 索引有哪些数据结构①:二叉树②:红黑树③:B-Tree④:B+Tree 1. 索引的作用?索引就像数据的目录,是帮助MySQL高效获取数据的排好序的数据结构,那么他有什么作用呢?以上图为例,如果我们要查询col2 = 89 的数据,sql如下:select * from table where Col2 = '89'; &
2021-03-23 15:14:51
638
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 一文彻底搞懂字符串、字符串常量池原理
文章目录1. 常量池概述1.1 常量池、运行时常量池与字符串常量池的区别2. 字符串常量池的设计初衷3. 字符串的几种创建方式及原理①:直接赋值②:new String()③:intern()方法3. 面试题:字符串比较 1. 常量池概述 java代码经过编译后会生成.class字节码文件,随便打开一个target目
2021-03-22 18:04:38
3814
7
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Dubbo的SPI机制对比传统的SPI做了哪些改进?Dubbo的IOC和AOP
文章目录1. JAVA的SPI机制1. JAVA的SPI机制 SPI全称Service Provider Interface,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来框架扩展和组件替换。在面向的对象的设计里,一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码。但如果需要替换另一种实现,就需要修改代码,生成新的jar包,违反了可拔插的原则。为了实现在模块装配的时候能不在程序里指明
2021-02-23 12:57:40
750
3
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 RocketMQ如何保证消息不丢失? 如何快速处理积压消息?
文章目录1. 哪些环节会有丢消息的可能?1. 哪些环节会有丢消息的可能? 关于MQ,有一个问题是无法避免的,就是怎么保证消息不丢失,这个问题是所有MQ都需要面对的一个共性问题。大致的解决思路都是一致的,首先要找到哪些环节会有丢消息的可能,来看一个MQ的通用架构 其中,1,2,4三个场景分别是:发消息、消息主从同步
2021-02-17 00:47:15
8409
5
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 RocketMQ的组织架构和基本概念,Dledger高可用集群架构原理
文章目录1. MQ产品介绍2. rocketMQ组织架构①:NameServer②:Broker③:Producer**④:Consumer1. MQ产品介绍 1.1 什么是MQ?为什么要用MQ? MQ:MessageQueue,消息队列。 队列,是一种FIFO 先进先出的数据结构。消息由生产者发送到MQ进行排
2021-02-09 20:50:28
1744
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 redis专题:redis缓存穿透、缓存击穿、缓存雪崩等问题如何解决?
文章目录1. 缓存穿透1.1 缓存空对象1.2 布隆过滤器2. 缓存击穿(失效)3. 缓存雪崩 在高并发项目中,redis作为热门中间件,在为项目带来便利性的同时,也存在一些隐患,比如缓存穿透、缓存击穿、缓存雪崩等问题。这些问题的出现可能会使数据库遭受非常大的压力,以至于数据库崩溃!下面来介绍如何应对和解决这些问题!1. 缓存穿透 &n
2020-11-16 17:59:11
442
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 redis专题:redis的主从、哨兵、集群架构的配置和部署详情、以及问题分析
文章目录1. 在linux下安装redis1. 在linux下安装redis下载地址:http://redis.io/download安装步骤:# 安装gccyum install gcc# 把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下(可以使用Xftp传输)wget http://download.redis.io/releases/redis-5.0.3.tar.gz# 解压tar xzf redis-5.0.3.tar.gzcd redis-5
2020-11-06 15:23:35
2332
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 redis专题:redis的持久化方式有哪些?redis数据的备份和恢复策略
文章目录1. 为什么要做redis持久化?2. 持久化方式之----RDB快照(snapshot)3. 持久化方式之----AOF(append-only file)4. 持久化方式之----混合持久化1. 为什么要做redis持久化? 在web项目中,从前台打过来的请求一般会经过redis,如果redis中有,就直接返回,redis中没有再去访问数据库,有效的减轻了数据库的压力。在很多大型互联网公司中,对于
2020-11-06 11:37:13
496
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 框架源码专题:Spring是如何集成Mybatis的?Spring怎么管理Mapper接口的动态代理
文章目录1. Spring集成Mybatis代码示例2. Spring 如何解析Mybatis配置文件3. Spring是怎么管理Mapper接口的动态代理的1. Spring集成Mybatis代码示例 Spring在集成Mybatis时,使用SqlSessionFactoryBean来完成Configuration的解析,代码如下:@EnableTransactionManagement@Configu
2020-10-28 18:04:26
1143
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 框架源码专题:Spring是如何解决循环依赖的?
文章目录1.什么是循环依赖2.解决循环依赖思路3.二级缓存能否解决循环依赖,三级缓存存在的意义4.多例和构造器为什么无法解决循环依赖5.如何进行扩展1.什么是循环依赖 所所谓的循环依赖是指,A 依赖 B,B 又依赖 A,它们之间形成了循环依赖。或者是 A 依赖 B,B 依赖 C,C 又依 赖 A。它们之间的依赖关系如下:循环依赖代码如下:public class InstanceA { @Au
2020-09-22 12:34:41
744
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 框架源码专题:springIOC的加载过程,bean的生命周期,结合spring源码分析
文章目录1.BeanFactory和ApplicationContext的区别?1.BeanFactory和ApplicationContext的区别? BeanFactory是ApplicationContext的顶级接口,ApplicationContext在前者的基础上又增加了很多扩展点,例如:注解处理,bean扫描和AOP代理等等。和BeanFactory相比更值得推荐。 &n
2020-09-17 15:06:24
685
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 线程和线程池七大参数、线程池分类、运行原理详解,线程池的使用场景
文章目录1. 线程2. 线程池1. 线程1.1线程 线程是调度CPU资源的最小单位,线程模型分为KLT模型与ULT模型,JVM使用的KLT模型,一个java线程对应一个OS线程,线程有多个生命状态①:NEW :新建②:RUNNABLE :运行③:BLOCKED :阻塞④:WAITING :等待⑤:TIMED_WAITING :超时等待⑥:TERMINATED :终结其中运行又分为 就绪、运行中
2020-08-31 12:32:10
5520
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 抽象同步器AQS、CAS应用之--ReentrantLock,lock和unlock的流程、源码分析
文章目录1. AQS和CAS2. ReentrantLock1. AQS和CAS多线程中经常听到AQS和CAS,他们究竟是什么呢?AQS: AbstractQueuedSynchronizer(AQS)抽象队列同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch等。CAS: compare and swap(CAS),比较与交换。在java语言之前,高并发已经在服务器领域有大量的应
2020-08-19 12:23:20
854
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 synchronized的使用和底层原理、锁状态的膨胀升级过程
1. synchronized介绍 synchronized内置锁是一种对象锁(锁的是对象而非引用),作用的粒度是对象,可以解决并发的原子性、一致性、有序性等问题,是可重入的。1.1 加锁的方式有三种:①:加在静态方法上,锁的对象是Class对象,只有一个!②:加在普通方法上,锁的是当前调用者这个对象,有多个!③:加载代码块上,锁的是括号里的对象!1.2 synchronized的发展史 
2020-08-10 17:46:23
780
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 JVM内存模型、逃逸分析以及发生GC的时机
1.整体内存模型图jvm内存关系如图所示。上边的图会结合Math类进行分析,Math如下所示//Math类public class Math { public static final int initData = 666; public static User user = new User(); public int compute() { int a = 1; int b = 2; int c = (a + b) *
2020-08-10 12:20:53
1041
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 类加载机制、双亲委派机制深度解析以及如何自定义类加载器
当我们运行一个类的时候,首先要通过类加载机制把类加载到JVM中1.类加载运行的全过程jvm创建 -> 类加载步骤:①:c++程序先创建java虚拟机②:c++程序创建引导类加载器③:c++创建JVM启动器 Launcher 实例④:在Launcher实例中获取其他类加载器(扩展、应用类加载器)⑤:通过双亲委派机制,决定哪个类加载器加载⑥:找到合适的类加载器后,通过loadClass的类加载过程: 加载 >> 验证 >> 准备 >> 解析 >
2020-08-10 12:20:43
1061
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 mysql的MVCC机制详解
1. 什么是MVCC机制?首先来认识一下可重复读:可重复读:mysql的默认隔离级别是可重复读,也就是在一个事务中,多次查询结果都相同。就算有其他事务修改了数据,也不会影响当前事务的查询结果。mysql是怎么来实现可重复读的呢?其实是靠MVCC(Multi-Version Concurrency Control-多版本并发控制)机制来实现的。首先mvcc机制不会对读操作加锁,不会通过加锁控制来保证读写隔离(串行化隔离级别是这样干的!),避免了频繁加锁,保证了读操作的效率。注意:mysql在读已提交
2020-08-10 12:20:12
2342
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 JVM垃圾回收算法与垃圾收集器
JVM是通过分代收集理论进行垃圾回收的,即新生代和老年代选择的垃圾回收算法是不同的:新生代:标记-复制算法老年代:标记-清除、标记-整理算法等。下面来看每个算法的理论和应用:1. JVM垃圾回收算法1.1 标记-复制算法①:此算法将内存分为大小相同的两块,每次使用其中一块,当这一块内存使用完毕后,通过标记活着的对象,把活着的对象复制到另一块中,然后把第一块内存空间清理掉。②:标记-复制 算法一般用在新生代,因为标记-复制算法只使用一半的内存空间,因为新生代对象朝生夕死的缘故,只需要付出少量的复
2020-08-10 12:19:39
866
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 redis专题:使用redis实现分布式锁
在使用redis应对高并发的情况下,可能会出现缓存穿透、缓存雪崩、缓存击穿等问题。1.缓存穿透描述:查询一个不存在的数据,比如只有100个商品,使用压测工具一直查询101号商品,redis中没有,数万请求一起请求数据库,数据库瞬时压力激增,导致数据库崩溃。解决:查询不存在的数据,即使数据库返回null,也放入缓存,并设置短期过期时间,这样只有一次查询查数据库,同时使用过期时间也过滤了redis中的无用数据。2.缓存雪崩描述:所有缓存的数据在某一时刻同时失效。例如设置缓存的数据时,设置了相同的过期时
2020-07-03 16:23:13
640
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 spring的IOC原理,容器管理的bean类型、bean的生命周期
1.什么是IOC(1)控制反转,把对象创建和对象之间的调用过程,交给 Spring 进行管理(2)使用 IOC 目的:为了耦合度降低为什么IOC可以极大的降低耦合度?(1)原始版:一般我们想使用userDao中的方法时,会在调用地创建userDao的对象,当userDao对象包名更改或者方法名更改时,也同时要修改userService中的代码,耦合度很高!(2)进阶版,使用工厂模式生成userDao对象,解决了service和dao的耦合,但是dao和factory又耦合(3)最终版 IOC
2020-06-02 17:16:58
647
原创 docker安装mysql8.0教程
假设新拿到一台机器,为了以后使用命令方便,先安装一些基础软件包。接下来安装docker(如果机器上已有docker请忽略)如果你的云主机已经有下面的这些基础软件包请忽略。
2024-06-05 16:27:46
1422
原创 Easyexcel为什么不解析二进制的excel文件,而要通过解析xml内容来完成解析?
通过将 Excel 文件解析为 XML 内容,EasyExcel 能够有效地处理大型的 Excel 文件,并且在解析过程中可以选择读取特定的数据或者只处理部分数据,以节省内存和提高读取性能。总之,EasyExcel 选择解析 Excel 文件的 XML 内容而不是直接解析二进制格式的 Excel 文件,是为了实现兼容性、解析性能、内存管理和灵活性的平衡。因此,可以说 EasyExcel 在读取 Excel 文件时实际上是处理 Excel 文件的 XML 内容,而不是直接处理二进制格式的 Excel 文件。
2023-07-13 20:24:01
489
原创 mysql死锁问题分析,锁行与锁表的原因
文章目录1. 死锁是怎样产生的?2. 死锁解决方案3. 锁行与锁表的现象和原因准备工作,建一张表CREATE TABLE `testtable` ( `id` bigint NOT NULL AUTO_INCREMENT, `name` varchar(500) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '名字', `age` int DEFAULT NULL COMMENT '年龄', `id_card` int NOT NULL
2022-05-23 00:21:00
2565
2
原创 mysql把一个表的字段赋值到另一张表,多表之间常用的操作
文章目录mysql多表之间的常用操作1. 根据主键,把一个表的字段赋值到另一张表2. replace into:把一张表的数据新增或更新到另一张表mysql多表之间的常用操作 1. 根据主键,把一个表的字段赋值到另一张表user表userIdusernamepasswordsexaddrphone1张珊123男北京市15623565862李思456女北京市1562354256score表scoreIduserId
2022-03-16 21:12:24
23429
原创 left join后边跟on...and 和where...and的区别
文章目录1. 建表2. on...and3. where...and1. 建表testACREATE TABLE testA ( Id int ( 10 ) PRIMARY KEY, NAME VARCHAR ( 10 )) INSERT INTO testAVALUES ( 1, '小黄' );INSERT INTO testAVALUES ( 2, '小绿' );INSERT INTO testAVALUES ( 3, '小白' );INSERT INTO testA
2022-01-13 17:55:48
1059
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人