- 博客(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 3607 3
原创 futureTask
futureTask可以用来异步获取执行结果,也就是说,业务代码的线程和主线程,可以同时执行,在需要获取执行结果的时候,调用其get()方法,就会阻塞主线程,直到获取到执行结果之后,再继续执行主线程的代码,具体的用法,不再详细叙述使用public class FutureTaskTest { public static void main(String[] args) throws Exception{ FutureTask<Integer> futureTask
2022-02-24 08:34:38 270 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 762 1
原创 dubbo的线程模型、派发策略、线程池策略
https://dubbo.apache.org/zh/docs/advanced/thread-model/dubbo提供了自己的线程池以及派发策略,其实官方文档上讲的是比较清楚的,只需要结合着源码看下,就能明白具体的原理
2022-02-19 10:43:30 2224
原创 spring aop和事务同时开启带来的一些问题
最近自己在写一个aop切面,主要是用来记录日志和打印一些信息的,在测试过程中,发现,业务方法在加了事务之后,如果有其他异常抛出,事务并没有回滚,于是,就Google了一把,发现有大佬遇到过这个问题,大部分博客给到的答案是:因为切面的优先级低于事务的优先级,导致事务advisor生成的代理对象被,切面生成的代理对象给覆盖了,需要在切面上加上@Order(1)注解,这样可以保证,切面的优先级较高我自己忽然间想到之前,遇到过类似的问题,并且也记录到了线上问题模块,按照实际操作之后,确实:在切面上加了@Order
2022-01-05 20:30:32 1731
原创 mysql redolog日志
在mysql的架构中,有几个比较重要的日志,分别是binlog、redolog和undoLog,这篇博客主要记录redo log是什么redo log我们称之为重做日志,mysql通过redo log日志来保证了持久性;mysql事务要求要保证持久性,其实如果不考虑性能因素,要保证持久性,最简单的做法,就是:在事务提交的时候,将更新、或者删除的数据,同步去更新磁盘上的数据页即可但是这样做,有一个很大的问题,就是性能问题,因为mysql在磁盘上存储的时候,是按照数据页来存储的,提交的一个sql有可能要
2021-12-15 19:27:43 2599 3
原创 Redis分布式锁零散知识
一、为了确保分布式锁的可用性,需要确保锁在任意时刻,能同时满足以下四个条件1.互斥性:在任意时刻,只有一个客户端能持有锁2.不会发送死锁,即时有一个客户端在持有锁期间崩溃而没有主动解锁,也需要保证其他客户端能加锁3.具有容错性,只要大部分的Redis节点正常运行,客户端就可以加锁解锁4.加锁和解锁必须是同一个客户端二、Redis分布式锁和Java锁的区别1. 如果是分布式部署的话,那么Java锁是锁当前机器上的请求,无法对其他机器的请求进行加锁,因为Java锁用的是jvm的机制,只在本机生效2
2021-12-04 13:55:30 1394
原创 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 3571
原创 模板设计模式
模板设计模式是比较简单,也容易理解的,简单来讲,就是一个事情的完成,要分为多个步骤来进行,但是不同的实现类,有不同的想法,可以自己去实现,但是步骤的顺序不能变举个例子:比如说,做饭,要经过三个步骤:1.买菜2.炒菜3.端上餐桌那这个1、2、3顺序是不可以变的,但是不同的人,买菜的方式不同,有些人是网上下单购买,有些人是自己线下购买炒菜:有些人是电磁炉炒菜,有些人是煤气灶炒菜所以,模板设计模式,其实就是在父类中,规定了一个功能的先后步骤,但是具体每个步骤怎么实现,有子类去实现,如果某一个步
2021-11-26 08:48:40 232
原创 spring事务之事务挂起和事务恢复源码
在学习spring事务的时候,一定会涉及到一个概念,无法避免的,就是事务挂起,所谓的挂起,就是将事务中的属性暂时存储到一个类中
2021-09-25 20:38:56 3149
原创 dubbo之SPI扩展机制注解:@Extension注解的作用
在接口的实现类上可以使用该注解,如果该实现类在扩展文件中,没有配置name,就可以通过@Extension注解,指定name
2021-09-25 13:11:48 1115
原创 责任链设计模式
责任链设计模式,就是一个链。。。我也是参照着网上大部分说的案例来学习的,再复述一遍:假如我要请假,公司规定不超过3天,TL审批即可;3天到6天之内,这是公司的规定,我们假如员工不知道这个规定,那责任链设计模式就是说:我在请假的时候,我只需要按照我想请假的天数提交申请,至于是TL审批?还是TL的TL审批?还是大boss审批?对于提交请假申请的人,就不需要关系因为在这个场景中,TL、TL的TL、大boss这三者是在一个责任链上的,他们三个人都可以来处理请假请求,对于请假人,只需要提交申请,如果责任链中的
2021-09-04 09:14:08 228
原创 dubbo服务调用为何先进入到mockClusterInvoker执行
原来在学习源码的时候,没有注意到这个点,也没觉得有什么问题,但是最近忽然想到,为什么会先经过mockClusterInvoker的处理,然后再经过集群容错相关cluster的处理?
2021-09-04 08:43:09 560
原创 spring事件监听器系列三:通过ApplicationListener接口方式实现监听器源码
前面有介绍了@EventListener注解方式的源码,这篇笔记主要来记录通过实现ApplicationListener接口这种方式实现事件监听器的原理具体的流程,前面博客中,有插入一个截图,我们这篇博客中,主要介绍解析的细节,具体的流程,就不在这里叙述,在上一篇博客中有记录整个流程解析ApplicationListener实现类源码org.springframework.context.support.ApplicationListenerDetector#postProcessAfterIniti
2021-08-01 16:17:34 585
原创 spring事件监听器系列二:@EventListener注解原理
前面的笔记中,有写过,我们要在spring中声明一个事件监听器,有两种方式,一种是实现ApplicationListener接口,一种是通过@EventListener注解来修饰一个方法,并在该注解中,指定要监听的事件,那这个方法在事件发生的时候,会被回调这两种机制,其实我们先不看代码,去考虑下,实现的方式很有可能就是:对于实现接口这种方式,是ApplicationListenerDetector这个类来完成解析的对于注解这种方式,是EventListenerMethodProcessor和Defau
2021-08-01 16:10:33 4290 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 1073
原创 spring扩展点四:SmartInitializingSingleton 补充
前面有笔记,记录过SmartInitializingSingleton这个扩展点的使用,可以参考这篇博客 spring扩展点四:SmartInitializingSingleton的应用这篇博客是我自己写的一个demo,要验证这个扩展机制,但是最近在看spring事件监听机制的时候,看到了对这个扩展点的应用EventListenerMethodProcessor ,就是这个bean,我们先不说这个bean是什么注入到spring容器中的,会在后面事件监听器源码的博客中,单独记录,这篇博客主要想说明的
2021-07-18 12:44:23 480 1
原创 dubbo3.0源码编译问题
将源码down下来之后,在shell命令行,进入到dubbo根目录,执行下面这个命令mvn clean install -Dmaven.test.skip=true执行之后,在通过idea将源码打开的时候,有可能会提示这个类中,缺少TripleWrapper类,是因为截图中,左边这部分,缺失了,我处理的办法,就是,重新在控制台执行一遍上面的命令...
2021-07-08 21:08:36 867
原创 idea运行项目提示找不到或无法加载主类
在网上找了N种方法都不行,最后发现把target目录删除,直接启动即可大概率是因为我执行mvn命令,导致target目录下多了一个maven相关的目录,导致的
2021-07-01 08:50:34 322
原创 springmvc源码 - handlerAdapter是如何初始化的
其实在之前的笔记中,有记录过handlerAdapter、handlerMapping初始化的一些细节,但是今天,突然间想到一个问题,RequestMappingHandlerAdapter、RequestMappingHandlerMapping是在什么时候放入到beanDefinitionMap中的今天这篇笔记主要记录下这里是如何放入到beanDefinitionMap中这个问题在EnableWebMvcConfiguration中,通过@Bean来完成的...
2021-05-03 13:35:20 933 2
原创 Redis--blpop命令使用
在Redis的数据结构中,list这个类型的数据结构,我们说底层是采用的双向链表结构,可以从左边出队入队,也可以从右边出队入队,那其实list也提供了阻塞出队的命令,类似于jdk中的阻塞队列
2021-04-22 08:51:13 1199 2
原创 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 593
原创 spring事务失效场景三:内部方法调用
这篇笔记主要记录spring事务失效场景三:在同一个类中,用非事务方法调用事务方法首先,这种场景,失效的原因是,在非事务方法中,调用同一个类的事务方法,和动态代理没有关系,事务拦截器无法拦截到,就是一个this方法调用,所以,在实际业务开发过程中,一定要避免这种场景应用应用其实简单...
2021-04-15 20:14:07 1019
原创 ReentrantLock源码lock和tryLock区别
在reentrantLock中,提供了一个lock和一个tryLock方法,这两个方法是有区别的,这篇笔记主要记录下具体的区别信息结论其实对于这个两个方法,简单来说,tryLock()方法,返回的是一个boolean类型变量,返回true,表示加锁成功,返回false,表示加锁失败,但是这个方法是没有排队的功能的lock()方法有两个功能:尝试加锁 + 排队;所以,lock方法如果加锁失败,会去排队,我们也可以简单的认为,lock = tryLock + 排队方法lock()源码lock在加锁的时
2021-04-13 08:49:03 601
原创 concurrentHashMap扩容细节
针对扩容和put的原理,这个问题,我在学习的时候,一直有一个疑问点:假如当前A线程已经对15这个位置扩完容了,那如果这时候B线程又对15这个位置插入了元素,要怎么处理?通过对代码的仔细查看学习,找到了这个问题的答案在扩容的时候,假如线程A对i这个位置扩容完成了,那线程A会把原数组中i位置,放入一个ForwardingNode对象,放入的这个对象很有讲究,也起到了很大的作用,这个和put时的一些逻辑处理有关系......
2021-04-09 08:12:34 2214 4
原创 线上问题:大事务问题
大事务问题通常是说,在一个方法的逻辑中,执行的业务逻辑较多,导致接口响应时间较慢等带来的问题,那我在线上碰到的问题是这样子的:线上系统交互逻辑我自己的系统是A系统,我的下游是B系统1.A系统对上游提供了创建订单的接口createOrder()2.我的接口中,会先进行一系列规则校验,校验完成之后,通过dubbo接口调用B系统的接口3.调用B系统的接口之后,会接着进行数据库的更新以及其他的业务逻辑的执行,最后再提交事务上面这三个步骤是我自己接口中做的事情,是在一个大的事务方法中4.B系统在接收到我
2021-04-08 08:28:05 259
原创 spring的beanDefinition是什么
在spring源码中,会涉及到bean和beanDefinition这两个概念,接下来,说下什么是bean,什么是beanDefinition
2021-04-07 08:13:01 727
原创 spring事务失效一:非public方法
在使用spring事务的时候,如果使用不当,有可能会出现事务失效的问题,接下来,我基于自己的见解和学习,分享下我的看法对于非public方法这种场景,我觉得这是最好理解的一种场景,@Transactional注解加在非public修饰的方法上,就不会生效,这个是没问题的,接下来,我分析下为什么非public方法会失效,其实在这篇博客中已经介绍了一部分:spring事务源码-代理对象生成过程解析spring事务也是通过动态代理来实现的,spring事务也是借鉴了AOP的思想,在对一个bean进行初始化的
2021-04-02 08:12:51 3181 1
空空如也
M1处理器在编译Java代码的时候,提示以下报错
2021-11-07
rocketmq收费版 延迟消息是如何实现的?
2021-03-31
TA创建的收藏夹 TA关注的收藏夹
TA关注的人