- 博客(98)
- 收藏
- 关注
原创 CVE-2022-40664 ShiroFilter1.7和1.10对于forward请求的处理
shiroFilter拦截forward、include请求
2022-10-14 17:08:52
4435
原创 application.properties和bootstrap.properties的加载时机
application.properties和bootstrap.properties的加载时机
2022-08-23 11:12:50
1635
原创 RocketMQ源码阅读(十四)延迟消息
当消息写入到Broker后,需要等待指定的时长后才可被消费处理的消息,称为延时消息,本文记录延迟消息在RocketMQ的实现
2022-08-14 00:25:47
905
原创 RocketMQ源码阅读(十一)AllocateMessageQueueConsistentHash一致性hash
AllocateMessageQueueConsistentHash
2022-08-08 23:21:55
442
原创 Spring三级缓存解决循环依赖
对于没有循环依赖的场景下的bean创建过程如下,直接看核心代码(隐掉了部分循环依赖的代码) protected <T> T doGetBean( String name, @Nullable Class<T> requiredType, @Nullable Object[] args, boolean typeCheckOnly) throws BeansException { // 分别从三级缓存中查询是否已经有该bean Object sh.
2022-04-17 01:59:54
658
原创 SpringMVC源码笔记(一) DispatcherServlet.init
SpringMVC的核心就是DispatcherServlet,本质还是一个Servlet,用于分发HTTP请求,调用相应的Handler处理请求。Servlet的生命周期是初始化init(),处理请求service(),销毁destroy(),挨个学习之
2022-03-03 00:12:58
618
原创 分布式事务解决方案简述
分布式事务常用解决思路有2PC、3PC、TCC、saga、消息等目录2PC2PC参考实现3PCTCCTCC参考实现SAGA实现saga事务的两种思路消息事务2PC两阶段提交,引入一个第三方协调者来管理整个分布式事务,各系统本地事务为参与者。将分布式事务分为两个阶段,一阶段Prepare,二阶段Commit/Rollback。一阶段执行各参与者的本地事务,执行完后向协调者反馈执行成功/失败情况,但事务不提交。协调者判断若所有反馈都是成功,会进入二阶段向所有参
2021-12-29 22:49:09
564
原创 RedisTemplate.execute执行lua脚本踩坑记录
一波三折目录EvalSha is not supported in cluster environmentNo way to dispatch this command to Redis Cluster because keys have different slotsJedis does not support password protected Redis Cluster configurations!背景:最近项目新引入redis,代码中为了保证redis原子操作,大部分操作
2021-09-27 17:06:56
12272
原创 怎样实现Redis分布式锁
对于某个JVM进程,要保证某个操作的唯一执行,可以使用synchronized关键字或ReentrantLock在执行前加锁,对于多个JVM进程,要保证这个操作在多个进程中的唯一执行,那就需要依赖第三方系统,例如DB,for update nowait等,除此之外,还可以借助redis、zookeeper实现分布式锁。Redis锁实现思路业务操作会有编号m,线程1往redis中set一个key是m的数据,表示m操作已经加锁,别的线程判断如果redis中已经有了key为m的数据,不再执行操作,
2021-09-19 18:04:26
520
原创 ScheduledThreadPoolExecutor源码跟踪分析
JDK版本1.6目录Demo代码示例ScheduledThreadPoolExecutor源码分析PriorityQueueofferpollDelayQueuetakepollofferScheduledThreadPoolExecutorScheduledFutureTaskDemo代码示例示例了三种调度定时任务的apipublic class Main{ static ScheduledThreadPoolExecutor ...
2021-09-18 23:24:22
191
原创 Tomcat源码笔记(六)Connector--Endpoint
Endpoint端点,在Tomcat中也就是接收socket连接和处理连接的地(ServerSocket.accept())。AbstractEndpoint声明了三个组件,Accepter,SocketProcessor,以及一个Handler接口。Accepter 顾名思义,ServerSocket.accept()接收socket连接 SocketProcessor 模板方法,子类实现具体的SocketProcessor类,处理接收到的socket,SocketProcessor处...
2021-09-05 11:02:40
437
原创 Tomcat源码笔记(四)StandardService
上节看了容器的初始化和启动,知道了Tomcat初始化和启动都是由Server.init(),Server.start(),层层向下依次触发各个组件的initInternal(),startInternal()方法进行初始化和启动,从本片开始,就从各组件的初始化和启动开始读源码。本文的Service实现类是StandardService,内部从配置文件中看到,内部是多个Connector和一个Engine组成,来看代码initInternal() / startInternal()就是调用各子
2021-09-05 11:01:48
1068
原创 TCP、TLS\SSL、JSSE、HTTPS杂烩笔记
以目前我的理解以及这两天的各种百度写个总结笔记,有不对的请指正TCP简介全名Transmission Control Protocol,传输控制协议,是网络层IP协议和链路层Ethernet协议之上,Ethernet协议实现链路层的数据传输和地址封装(源方和目标方的MAC地址),解决局域网的点对点通信,而不同局域网之间的两台机子则需要IP协议进行地址的路由中转,TCP则面向的是端口到端口,保证数据传输的完整和可靠,包括数据包的确认、失败重发、流量控制,数据量大的情况TCP会将数据拆分为有
2021-09-04 13:55:47
2033
1
原创 Tomcat源码笔记(三)容器初始化和启动
上节看到bootstrap.java 在启动时调用了Catalina.load 和 Catallina.start方法if (command.equals("start")) { daemon.setAwait(true); daemon.load(args); daemon.start(); if (null == daemon.getServer()) { System.exit(1);}load()内部大致为解析conf/server.xml文件并初
2021-07-11 12:43:31
346
1
原创 JDK动态代理源码跟踪
写了个简单的JDK动态代理Demo,在IDEA Debug执行时发现了新大陆,特此记录一下Demo代码如下public interface MyInterface { void print();}public class MyClass implements MyInterface { @Override public void print() { System.out.println("主方法啦啦啦啦啦"); }}public cla
2021-06-30 15:56:27
168
原创 JVM笔记(六)堆外内存导致OOM
在垃圾回收时,对于Direct Memory虚拟机虽然会执行回收,但是不受JVM直接管理,不能发现空间不足了就通知收集器回收,而是等待FullGC时,JVM会顺带清除直接内存的废弃对象。
2021-06-20 19:13:01
997
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人