![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 79
李有乾
劝君须惜少年时
展开
-
CVE-2022-40664 ShiroFilter1.7和1.10对于forward请求的处理
shiroFilter拦截forward、include请求原创 2022-10-14 17:08:52 · 4185 阅读 · 0 评论 -
synchronized锁膨胀笔记
synchronized原创 2022-05-03 16:27:29 · 332 阅读 · 0 评论 -
CGLIB分析
cglib代理类分析原创 2022-04-23 16:47:05 · 818 阅读 · 1 评论 -
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 · 617 阅读 · 0 评论 -
SpringMVC源码笔记(三) DispatcherServlet.service
DispatcherServlet.service()原创 2022-03-13 21:21:46 · 1086 阅读 · 0 评论 -
SpringMVC源码笔记(二) HandlerExceptionResolver
HandlerExceptionResolver原创 2022-03-06 18:36:47 · 1585 阅读 · 0 评论 -
SpringMVC源码笔记(一) DispatcherServlet.init
SpringMVC的核心就是DispatcherServlet,本质还是一个Servlet,用于分发HTTP请求,调用相应的Handler处理请求。Servlet的生命周期是初始化init(),处理请求service(),销毁destroy(),挨个学习之原创 2022-03-03 00:12:58 · 578 阅读 · 0 评论 -
Tomcat源码笔记(七)Engine
StandardEngine原创 2021-12-27 00:02:00 · 642 阅读 · 0 评论 -
Tomcat源码笔记(八)Context
StandardContext的启动步骤原创 2021-12-27 00:00:18 · 1001 阅读 · 0 评论 -
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 · 11696 阅读 · 0 评论 -
怎样实现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 · 470 阅读 · 0 评论 -
ScheduledThreadPoolExecutor源码跟踪分析
JDK版本1.6目录Demo代码示例ScheduledThreadPoolExecutor源码分析PriorityQueueofferpollDelayQueuetakepollofferScheduledThreadPoolExecutorScheduledFutureTaskDemo代码示例示例了三种调度定时任务的apipublic class Main{ static ScheduledThreadPoolExecutor ...原创 2021-09-18 23:24:22 · 159 阅读 · 0 评论 -
Tomcat源码笔记(五)Connector
Connector原创 2021-09-05 11:03:17 · 186 阅读 · 0 评论 -
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 · 391 阅读 · 0 评论 -
TCP、TLS\SSL、JSSE、HTTPS杂烩笔记
以目前我的理解以及这两天的各种百度写个总结笔记,有不对的请指正TCP简介全名Transmission Control Protocol,传输控制协议,是网络层IP协议和链路层Ethernet协议之上,Ethernet协议实现链路层的数据传输和地址封装(源方和目标方的MAC地址),解决局域网的点对点通信,而不同局域网之间的两台机子则需要IP协议进行地址的路由中转,TCP则面向的是端口到端口,保证数据传输的完整和可靠,包括数据包的确认、失败重发、流量控制,数据量大的情况TCP会将数据拆分为有原创 2021-09-04 13:55:47 · 1850 阅读 · 1 评论 -
负载均衡超时重发HTTP请求
nginx失败重试的测试原创 2021-08-27 23:33:45 · 1350 阅读 · 2 评论 -
Tomcat源码笔记(四)StandardService
上节看了容器的初始化和启动,知道了Tomcat初始化和启动都是由Server.init(),Server.start(),层层向下依次触发各个组件的initInternal(),startInternal()方法进行初始化和启动,从本片开始,就从各组件的初始化和启动开始读源码。本文的Service实现类是StandardService,内部从配置文件中看到,内部是多个Connector和一个Engine组成,来看代码initInternal() / startInternal()就是调用各子原创 2021-09-05 11:01:48 · 975 阅读 · 0 评论 -
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 · 313 阅读 · 1 评论 -
Java序列化Serializable源码
Java序列化Serializable 示例分析和源码跟踪原创 2021-07-06 22:54:09 · 402 阅读 · 1 评论 -
堆排序实现
sort(int[] arr){for(i=n/2-1;i--){从最后一个节点父节点开始,tiaozheng(i,arr,arr.length);//对i节点进行调整}现在成为了逻辑上的最大堆;for(j=n-1;j>0;j--){swap(arr[0],arr[j]);//最大的是arr[0],换到最后,在对第一个调整tiaozheng(0,arr,j...原创 2018-06-24 19:31:08 · 91 阅读 · 0 评论 -
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 · 149 阅读 · 0 评论 -
JVM笔记(六)堆外内存导致OOM
在垃圾回收时,对于Direct Memory虚拟机虽然会执行回收,但是不受JVM直接管理,不能发现空间不足了就通知收集器回收,而是等待FullGC时,JVM会顺带清除直接内存的废弃对象。原创 2021-06-20 19:13:01 · 886 阅读 · 1 评论 -
最长子序列DP和二分法
输入一串数字例如: 5 6 8 1 3 4 9输出最长递增子序列长度,示例中即 1 3 4 9 ,zui'da'chan原创 2021-06-18 20:36:07 · 4538 阅读 · 1 评论 -
Tomcat源码笔记(二)Bootstrap启动入口main
本文呢,主要从main启动入口了解Tomcat的启动大致步骤和如何终止原创 2021-06-13 02:17:09 · 1968 阅读 · 1 评论 -
Tomcat源码笔记(一)Tomcat8源码下载运行
下载源码网盘链接:https://pan.baidu.com/s/1SipkdXWIN7aPjOCzFB0vmg提取码:66xy解压后直接可以用idea和eclipse打开,运行时需要添加参数如下原创 2021-06-09 20:06:56 · 259 阅读 · 1 评论 -
JVM笔记(三)垃圾回收
1. STW(Stop the World)通常指的是JVM在垃圾回收中,执行垃圾回收算法时,会暂停所有应用线程,所有代码停止。这是因为在标记阶段,使用可达性分析算法进行分析时,整个应用程序的数据都应该处于“一致性视图”当中,这是为了保证可达性分析算法的准确性,因此需要暂停所有的用户线程,假如不停止,gc线程标记了当前需要被回收得对象,这对象在别的线程突然又被使用,会造成错误得回收结果。2. MinorGC/FullGCMinorGC:对堆中新生带(Eden区)的垃圾回收,对于大多数...原创 2021-06-06 19:14:09 · 148 阅读 · 0 评论 -
JVM笔记(二)类加载系统、运行时数据区、执行引擎详解
目录1. 类加载系统1.1 类生命周期1.2 类加载时机1.3类加载器1.3.1ClassLoader#loadClass1.3.2自定义类加载器1.3.3java类热加载原理/实现2.JVM运行时数据区模型2.1.Class文件2.2程序计数器2.3虚拟机栈2.3.1局部变量表2.3.2操作数栈2.3.3动态链接2.3.4方法返回地址2.4堆2.4.1分配过程简述2.4.2大小设置2.5方法区...原创 2021-05-30 15:41:35 · 847 阅读 · 2 评论 -
Netty客户端源码阅读笔记(一)Bootstrap
netty客户端Bootstrap的启动main源码原创 2021-04-25 22:02:00 · 241 阅读 · 0 评论 -
Netty服务端源码阅读笔记(六)服务端拆包粘包--LengthFieldBasedFrameDecoder
接上篇 Netty服务端源码阅读笔记(六)服务端拆包粘包和解决方法代码示例代码不贴了,看上篇文章吧客户端handler依次为LengthFieldPrepender用来为消息增加元数据头的handler和自定义的handler服务端handler依次为LengthFieldBasedFrameDecoder、StringDecoder、和自定义的handler1、MessageToMessageEncoder<T>LengthFieldPrepender继承Message..原创 2021-04-25 21:09:25 · 310 阅读 · 0 评论 -
Netty服务端源码阅读笔记(七)零拷贝与ByteBuf
HeapByteBuffer与DirectByteBuffer的区别原创 2021-04-20 23:27:58 · 354 阅读 · 0 评论 -
Netty服务端源码阅读笔记(六)服务端拆包粘包和解决方法代码示例
接上篇AdaptiveRecvByteBufAllocator对象原创 2021-04-12 00:27:38 · 178 阅读 · 0 评论 -
Netty服务端源码阅读笔记(五)AdaptiveRecvByteBufAllocator
在读服务端NioServerSocketChannel和客户端NioSocketChannel的内部unsafe类读写数据源码时,发现有RecvByteBufAllocator对象来辅助操作,另写一篇来分析分析其实客户端读数据才是难点重点,但是我们先分析服务端channel读取数据方法,比较简单好了解服务端NioServerSocketChannel.NioMessageUnsafe代码位置:io.netty.channel.nio.AbstractNioMessageChannel.NioMe原创 2021-04-09 20:21:02 · 1056 阅读 · 0 评论 -
集合foreach/Iterator遍历中途remove报错
分析源码原创 2021-04-03 13:28:15 · 724 阅读 · 0 评论 -
JAVA BIO/NIO Demo分析
BIOimport java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import java.net.UnknownHostException;public class BIOTest { public static void main(String[] args) thro.原创 2021-03-23 17:15:22 · 154 阅读 · 0 评论 -
Spring注解@Scope---SessionScope和RequestScope
是原创 2021-03-14 02:24:50 · 4484 阅读 · 0 评论 -
AccessController.checkPermission和doPrivileged示例
public class TestManager{ public static void main(String[] args) throws FileNotFoundException { FileInputStream in = new FileInputStream(new File("D:\\1.txt")); System.out.println("有权限了!"); }}在启动参数中使用-Djava.security.manager 之后,开启了SecurityManager,.原创 2021-03-12 18:42:01 · 427 阅读 · 0 评论 -
@ComponentScan注解各属性作用源码分析
的原创 2021-03-11 22:57:21 · 601 阅读 · 0 评论 -
ConfigurationClassPostProcessor源码跟踪
ConfigurationClassPostProcessor原创 2021-02-28 09:29:49 · 197 阅读 · 2 评论 -
SpringBoot启动加载源码记录
断点打到SpringApplication.run方法,发现启动时走了两遍,最后只有一个AnnotationConfigServletWebServerApplicationContext容器,因此分析源码看看,顺便学习学习入口:public class EnjoyStarter{ public static void main(String[] args) { SpringApplication.run(EnjoyStarter.class, args); }}.原创 2021-02-20 04:14:23 · 713 阅读 · 0 评论 -
Spring容器初始化源码记录
上一篇中分析springmvc对于annotation-driven注解的解析找到了MvcNameSpaceHandler类,这篇以此为由头,来分析spring初始化源码,来看如何找到的NameSpaceHandler,和如何进行容器初始化、bean实例加载说实话不算什么深入分析,只能是把源码走了一遍,深入分析还容后续beanFactory体系结构BeanFactory :一级接口,提供简单的bean获取、判断bean存在等功能AutowireCapableBeanFactory : 二原创 2021-02-09 23:15:48 · 170 阅读 · 0 评论