自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(146)
  • 问答 (2)
  • 收藏
  • 关注

原创 sentinel滑动时间窗口算法学习

滑动时间窗口先不说sentinel的算法实现,先说什么是滑动时间窗口,我们在进行限流的时候,比如通过QPS进行限流,那假如我们以秒为单位,举个例子:我设置了限流规则,qps是10如果不使用滑动窗口算法,在统计qps的时候,就有可能会有问题,比如:在0 - 500ms中的请求数是0,但是在500ms - 1000 ms的请求数是10;在1000ms - 1500ms 之间又进来了5个请求,此时只判断了1000ms - 2000 ms之间的请求数因为没有把1S进行拆分多个窗口,所以在1000ms之后

2022-04-02 07:31:12 3516 3

原创 futureTask

futureTask可以用来异步获取执行结果,也就是说,业务代码的线程和主线程,可以同时执行,在需要获取执行结果的时候,调用其get()方法,就会阻塞主线程,直到获取到执行结果之后,再继续执行主线程的代码,具体的用法,不再详细叙述使用public class FutureTaskTest { public static void main(String[] args) throws Exception{ FutureTask<Integer> futureTask

2022-02-24 08:34:38 236 1

原创 dubbo源码-隐式传参

在业务系统中,如果要使用dubbo的隐式传参功能,可以使用RpcContext对象使用在服务消费者这一端这样设置即可RpcContext.getContext().setAttachment("age","22");然后在服务提供者这一端String age = RpcContext.getContext().getAttachment("age");System.out.println("隐式传参获取到的age:" + age);就可以获取到设置的参数源码分析其实要实现隐式传输的传递

2022-02-19 13:15:36 703 1

原创 dubbo的线程模型、派发策略、线程池策略

https://dubbo.apache.org/zh/docs/advanced/thread-model/dubbo提供了自己的线程池以及派发策略,其实官方文档上讲的是比较清楚的,只需要结合着源码看下,就能明白具体的原理

2022-02-19 10:43:30 2077

原创 spring aop和事务同时开启带来的一些问题

最近自己在写一个aop切面,主要是用来记录日志和打印一些信息的,在测试过程中,发现,业务方法在加了事务之后,如果有其他异常抛出,事务并没有回滚,于是,就Google了一把,发现有大佬遇到过这个问题,大部分博客给到的答案是:因为切面的优先级低于事务的优先级,导致事务advisor生成的代理对象被,切面生成的代理对象给覆盖了,需要在切面上加上@Order(1)注解,这样可以保证,切面的优先级较高我自己忽然间想到之前,遇到过类似的问题,并且也记录到了线上问题模块,按照实际操作之后,确实:在切面上加了@Order

2022-01-05 20:30:32 1588

原创 jdk动态代理为什么只能为接口生成代理类?

在动态代理

2021-12-25 15:28:03 2849

原创 mysql redolog日志

在mysql的架构中,有几个比较重要的日志,分别是binlog、redolog和undoLog,这篇博客主要记录redo log是什么redo log我们称之为重做日志,mysql通过redo log日志来保证了持久性;mysql事务要求要保证持久性,其实如果不考虑性能因素,要保证持久性,最简单的做法,就是:在事务提交的时候,将更新、或者删除的数据,同步去更新磁盘上的数据页即可但是这样做,有一个很大的问题,就是性能问题,因为mysql在磁盘上存储的时候,是按照数据页来存储的,提交的一个sql有可能要

2021-12-15 19:27:43 2403 3

原创 Redis分布式锁零散知识

一、为了确保分布式锁的可用性,需要确保锁在任意时刻,能同时满足以下四个条件1.互斥性:在任意时刻,只有一个客户端能持有锁2.不会发送死锁,即时有一个客户端在持有锁期间崩溃而没有主动解锁,也需要保证其他客户端能加锁3.具有容错性,只要大部分的Redis节点正常运行,客户端就可以加锁解锁4.加锁和解锁必须是同一个客户端二、Redis分布式锁和Java锁的区别1. 如果是分布式部署的话,那么Java锁是锁当前机器上的请求,无法对其他机器的请求进行加锁,因为Java锁用的是jvm的机制,只在本机生效2

2021-12-04 13:55:30 1311

原创 Redis分布式锁之:RedLock

redLock也是Redis提供的一个分布式锁,和redissonLock有些区别是什么RedLock可以指定等待时间,也就是说,假如我指定了等待时间waitTime是2S,比如:1.A线程来加锁,正常去执行业务逻辑2.B线程也来加锁,此时会加锁失败,那B线程最多等待2S,如果超过了2S还没有获取到分布式锁,那B线程加锁就返回false,表示加锁失败redLock的思想是:redLock的使用,需要有奇数台独立部署的Redis节点在加锁的时候,会分别去N台节点上加锁,如果半数以上的节点加锁成

2021-12-04 13:34:41 3481

原创 Redis分布式锁之:RedissonLock

Redis提供的分布式锁有多个,这篇笔记主要记录redissonLock的相关内容

2021-12-04 13:11:14 5432

原创 模板设计模式

模板设计模式是比较简单,也容易理解的,简单来讲,就是一个事情的完成,要分为多个步骤来进行,但是不同的实现类,有不同的想法,可以自己去实现,但是步骤的顺序不能变举个例子:比如说,做饭,要经过三个步骤:1.买菜2.炒菜3.端上餐桌那这个1、2、3顺序是不可以变的,但是不同的人,买菜的方式不同,有些人是网上下单购买,有些人是自己线下购买炒菜:有些人是电磁炉炒菜,有些人是煤气灶炒菜所以,模板设计模式,其实就是在父类中,规定了一个功能的先后步骤,但是具体每个步骤怎么实现,有子类去实现,如果某一个步

2021-11-26 08:48:40 211

原创 spring多个事务管理器踩坑

项目中使用了两个事务管理器,但是没有手动指定事务要使用哪个,导致事务不生效

2021-11-07 18:20:09 2433

原创 spring事务之事务挂起和事务恢复源码

在学习spring事务的时候,一定会涉及到一个概念,无法避免的,就是事务挂起,所谓的挂起,就是将事务中的属性暂时存储到一个类中

2021-09-25 20:38:56 2990

原创 dubbo之SPI扩展机制注解:@Extension注解的作用

在接口的实现类上可以使用该注解,如果该实现类在扩展文件中,没有配置name,就可以通过@Extension注解,指定name

2021-09-25 13:11:48 1004

原创 自定义类加载器的父类为什么是AppClassLoader?

我们如果自定义一个类加载器,默认设置的父类加载器是AppClassLoader

2021-09-22 19:50:22 3112 1

原创 dubbo超时机制原理

如果服务消费者调用超时,会抛出异常,来看下异常的原理:

2021-09-16 08:48:30 2644

原创 springmvc源码-我们自定义的参数解析器是如何放入到spring容器中的

被吃撒子

2021-09-08 21:07:24 288

原创 责任链设计模式

责任链设计模式,就是一个链。。。我也是参照着网上大部分说的案例来学习的,再复述一遍:假如我要请假,公司规定不超过3天,TL审批即可;3天到6天之内,这是公司的规定,我们假如员工不知道这个规定,那责任链设计模式就是说:我在请假的时候,我只需要按照我想请假的天数提交申请,至于是TL审批?还是TL的TL审批?还是大boss审批?对于提交请假申请的人,就不需要关系因为在这个场景中,TL、TL的TL、大boss这三者是在一个责任链上的,他们三个人都可以来处理请假请求,对于请假人,只需要提交申请,如果责任链中的

2021-09-04 09:14:08 158

原创 dubbo服务调用为何先进入到mockClusterInvoker执行

原来在学习源码的时候,没有注意到这个点,也没觉得有什么问题,但是最近忽然想到,为什么会先经过mockClusterInvoker的处理,然后再经过集群容错相关cluster的处理?

2021-09-04 08:43:09 498

原创 spring事件监听器系列三:通过ApplicationListener接口方式实现监听器源码

前面有介绍了@EventListener注解方式的源码,这篇笔记主要来记录通过实现ApplicationListener接口这种方式实现事件监听器的原理具体的流程,前面博客中,有插入一个截图,我们这篇博客中,主要介绍解析的细节,具体的流程,就不在这里叙述,在上一篇博客中有记录整个流程解析ApplicationListener实现类源码org.springframework.context.support.ApplicationListenerDetector#postProcessAfterIniti

2021-08-01 16:17:34 561

原创 spring事件监听器系列二:@EventListener注解原理

前面的笔记中,有写过,我们要在spring中声明一个事件监听器,有两种方式,一种是实现ApplicationListener接口,一种是通过@EventListener注解来修饰一个方法,并在该注解中,指定要监听的事件,那这个方法在事件发生的时候,会被回调这两种机制,其实我们先不看代码,去考虑下,实现的方式很有可能就是:对于实现接口这种方式,是ApplicationListenerDetector这个类来完成解析的对于注解这种方式,是EventListenerMethodProcessor和Defau

2021-08-01 16:10:33 4164 1

原创 build项目报错

build项目报错Error:java: Annotation processing is not supported for module trade-api. Please ensure that all modules from cycle [A,B] are excluded from annotation processing 是因为两个子模块相互依赖导致的

2021-08-01 14:30:14 1001

原创 spring事件监听器系列一:应用

123

2021-07-26 21:05:06 660

原创 spring扩展点四:SmartInitializingSingleton 补充

前面有笔记,记录过SmartInitializingSingleton这个扩展点的使用,可以参考这篇博客 spring扩展点四:SmartInitializingSingleton的应用这篇博客是我自己写的一个demo,要验证这个扩展机制,但是最近在看spring事件监听机制的时候,看到了对这个扩展点的应用EventListenerMethodProcessor ,就是这个bean,我们先不说这个bean是什么注入到spring容器中的,会在后面事件监听器源码的博客中,单独记录,这篇博客主要想说明的

2021-07-18 12:44:23 434 1

原创 dubbo3.0源码编译问题

将源码down下来之后,在shell命令行,进入到dubbo根目录,执行下面这个命令mvn clean install -Dmaven.test.skip=true执行之后,在通过idea将源码打开的时候,有可能会提示这个类中,缺少TripleWrapper类,是因为截图中,左边这部分,缺失了,我处理的办法,就是,重新在控制台执行一遍上面的命令...

2021-07-08 21:08:36 838

原创 idea运行项目提示找不到或无法加载主类

在网上找了N种方法都不行,最后发现把target目录删除,直接启动即可大概率是因为我执行mvn命令,导致target目录下多了一个maven相关的目录,导致的

2021-07-01 08:50:34 289

原创 springmvc源码 - handlerAdapter是如何初始化的

其实在之前的笔记中,有记录过handlerAdapter、handlerMapping初始化的一些细节,但是今天,突然间想到一个问题,RequestMappingHandlerAdapter、RequestMappingHandlerMapping是在什么时候放入到beanDefinitionMap中的今天这篇笔记主要记录下这里是如何放入到beanDefinitionMap中这个问题在EnableWebMvcConfiguration中,通过@Bean来完成的...

2021-05-03 13:35:20 898 2

原创 策略设计模式

策略设计模式在spring源码中的应用

2021-04-30 09:16:16 201

原创 spring容器中存储的bean相关问题

通常我们说,spring容器帮我们管理bean,但是什么是bean?

2021-04-25 21:04:16 527

原创 Redis--blpop命令使用

在Redis的数据结构中,list这个类型的数据结构,我们说底层是采用的双向链表结构,可以从左边出队入队,也可以从右边出队入队,那其实list也提供了阻塞出队的命令,类似于jdk中的阻塞队列

2021-04-22 08:51:13 1133 2

原创 spring容器是什么

spring容器是什么

2021-04-19 12:06:11 2110

原创 jdk优先级队列、延迟队列原理

优先级队列PriorityQueue这个类,是优先级队列的核心,包括我们下面要说的延迟队列,在jdk6之前,也是以这个为基础的在该类中,维护了几个核心的属性transient Object[] queue; // non-private to simplify nested class accessprivate int size = 0;private final Comparator<? super E> comparator;这里的queue,就是实际存放元素的数组结构

2021-04-17 08:51:19 541

原创 spring事务失效场景三:内部方法调用

这篇笔记主要记录spring事务失效场景三:在同一个类中,用非事务方法调用事务方法首先,这种场景,失效的原因是,在非事务方法中,调用同一个类的事务方法,和动态代理没有关系,事务拦截器无法拦截到,就是一个this方法调用,所以,在实际业务开发过程中,一定要避免这种场景应用应用其实简单...

2021-04-15 20:14:07 869

原创 JDK-阻塞队列、非阻塞队列原理

在jdk提供的队列中,有阻塞队列和非阻塞队列

2021-04-14 08:51:15 594

原创 ReentrantLock源码lock和tryLock区别

在reentrantLock中,提供了一个lock和一个tryLock方法,这两个方法是有区别的,这篇笔记主要记录下具体的区别信息结论其实对于这个两个方法,简单来说,tryLock()方法,返回的是一个boolean类型变量,返回true,表示加锁成功,返回false,表示加锁失败,但是这个方法是没有排队的功能的lock()方法有两个功能:尝试加锁 + 排队;所以,lock方法如果加锁失败,会去排队,我们也可以简单的认为,lock = tryLock + 排队方法lock()源码lock在加锁的时

2021-04-13 08:49:03 526

原创 spring事务失效二:业务代码捕获异常

trycatch 捕获异常

2021-04-12 08:54:02 354 1

原创 concurrentHashMap扩容细节

针对扩容和put的原理,这个问题,我在学习的时候,一直有一个疑问点:假如当前A线程已经对15这个位置扩完容了,那如果这时候B线程又对15这个位置插入了元素,要怎么处理?通过对代码的仔细查看学习,找到了这个问题的答案在扩容的时候,假如线程A对i这个位置扩容完成了,那线程A会把原数组中i位置,放入一个ForwardingNode对象,放入的这个对象很有讲究,也起到了很大的作用,这个和put时的一些逻辑处理有关系......

2021-04-09 08:12:34 2110 4

原创 线上问题:大事务问题

大事务问题通常是说,在一个方法的逻辑中,执行的业务逻辑较多,导致接口响应时间较慢等带来的问题,那我在线上碰到的问题是这样子的:线上系统交互逻辑我自己的系统是A系统,我的下游是B系统1.A系统对上游提供了创建订单的接口createOrder()2.我的接口中,会先进行一系列规则校验,校验完成之后,通过dubbo接口调用B系统的接口3.调用B系统的接口之后,会接着进行数据库的更新以及其他的业务逻辑的执行,最后再提交事务上面这三个步骤是我自己接口中做的事情,是在一个大的事务方法中4.B系统在接收到我

2021-04-08 08:28:05 234

原创 spring的beanDefinition是什么

在spring源码中,会涉及到bean和beanDefinition这两个概念,接下来,说下什么是bean,什么是beanDefinition

2021-04-07 08:13:01 678

原创 spring事务失效一:非public方法

在使用spring事务的时候,如果使用不当,有可能会出现事务失效的问题,接下来,我基于自己的见解和学习,分享下我的看法对于非public方法这种场景,我觉得这是最好理解的一种场景,@Transactional注解加在非public修饰的方法上,就不会生效,这个是没问题的,接下来,我分析下为什么非public方法会失效,其实在这篇博客中已经介绍了一部分:spring事务源码-代理对象生成过程解析spring事务也是通过动态代理来实现的,spring事务也是借鉴了AOP的思想,在对一个bean进行初始化的

2021-04-02 08:12:51 2944 1

空空如也

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

TA关注的人

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