<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[曾令胜的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_21190847</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_21190847]]></copyright><item><title><![CDATA[springboot中Bean的销毁流程]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/168115023</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/168115023</guid><author>qq_21190847</author><pubDate>Fri, 16 Oct 2026 14:27:36 +0800</pubDate><description><![CDATA[本文详解Spring Bean的销毁阶段，重点阐述Destruction回调的注册机制与销毁触发流程。核心在于：单例Bean在创建时通过registerDisposableBeanIfNecessary()将需销毁的Bean封装为DisposableBeanAdapter并存入disposableBeans Map，为销毁做准备。销毁回调支持三种方式：@PreDestroy、DisposableBean接口、destroyMethod配置，仅对singleton生效，且需容器正常关闭（如context.cl]]></description><category></category></item><item><title><![CDATA[计算机网络基础]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/162806401</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/162806401</guid><author>qq_21190847</author><pubDate>Sun, 12 Jul 2026 09:58:54 +0800</pubDate><description><![CDATA[路由（Routing）= 路由器根据目标 IP 地址，决定把数据包下一跳发往哪里。fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;你的电脑北京路由器1路由器2运营商路由器3目标服务器上海每一跳路由器查自己的路由表，决定往哪个方向转发。]]></description><category></category></item><item><title><![CDATA[HTTP协议基础总结]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/162768683</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/162768683</guid><author>qq_21190847</author><pubDate>Fri, 10 Jul 2026 17:32:18 +0800</pubDate><description><![CDATA[HTTP（HyperText Transfer Protocol，超文本传输协议）是 客户端与服务器之间通信的应用层协议。它基于请求-响应模型，默认使用TCP作为传输层。一次完整的请求流程浏览器解析出请求的域名。通过DNS（域名系统）获取服务器的IP地址。与服务器建立TCP连接（如果是HTTPS，还需进行TLS握手）。构建并发送HTTP请求报文。服务器接收、解析并处理请求，然后返回HTTP响应报文。浏览器解析响应，并关闭或复用TCP连接。]]></description><category></category></item><item><title><![CDATA[Java是值传递还是引用传递]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/153397211</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/153397211</guid><author>qq_21190847</author><pubDate>Thu, 16 Oct 2025 11:43:16 +0800</pubDate><description><![CDATA[开发了一个功能，远程调用其他系统，获取其他系统返回参数解析，根据解析的字段值记录远程调用信息，主要记录了三个关键信息，第一是调用成功失败状态，第二个是入参，第三个是返参，经过运行一段时间后发现，记录的全部是失败状态，但是记录的远程系统的返参是成功。Java对象的传递，是通过复制引用关系并传递，因为有复制的过程，所以是值传递，只不过对于Java对象的传递，传递的内容是对象的引用。值传递和引用传递最大的区别是传递的过程中有没有复制出一个副本来，如果是传递副本，那就是值传递，否则就是引用传递。]]></description><category></category></item><item><title><![CDATA[excel导出使用arthas动态追踪方法调用耗时后性能优化的过程]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/153114477</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/153114477</guid><author>qq_21190847</author><pubDate>Sun, 12 Oct 2025 16:29:32 +0800</pubDate><description><![CDATA[使用arthas，解决线上系统excel无法导出问题]]></description><category></category></item><item><title><![CDATA[spring 第三级缓存singletonFactories的作用及@Async造成循环依赖报错原因分析]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/152118130</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/152118130</guid><author>qq_21190847</author><pubDate>Fri, 26 Sep 2025 14:15:51 +0800</pubDate><description><![CDATA[第三级缓存singletonFactories，解决不了@Async注解生成的代理类造成的循环依赖的问题。]]></description><category></category></item><item><title><![CDATA[springboot 启动流程及 ConfigurationClassPostProcessor解析]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/151190801</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/151190801</guid><author>qq_21190847</author><pubDate>Thu, 11 Sep 2025 17:36:22 +0800</pubDate><description><![CDATA[咱们重点看的就是上图圈出来的两个方法，一个是创建ApplicationContext，ApplicationContext 是Spring Framework的核心接口，作为IoC（控制反转）容器的核心实现，负责管理应用中所有Bean的创建、依赖注入及生命周期，并提供国际化支持、资源加载、事件发布等企业级功能，我理解就是创建了IOC容器上下文。这确保了自动配置可以在用户自定义的 Bean 被注册之后再进行，从而能够根据完整的上下文（如有无用户自定义的 DataSource Bean）做出正确的条件判断。]]></description><category></category></item><item><title><![CDATA[Spring和mybatis整合后事务拦截器TransactionInterceptor开启提交事务流程]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/150989810</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/150989810</guid><author>qq_21190847</author><pubDate>Sat, 30 Aug 2025 12:34:38 +0800</pubDate><description><![CDATA[本文主要分析了SpringBoot声明式事务与MyBatis结合使用时，数据库连接绑定和SQL执行的过程。首先，TransactionInterceptor通过拦截方法开启事务，将数据库连接绑定到当前线程的ThreadLocal中。接着，MyBatis执行SQL操作时，从ThreadLocal中获取连接执行SQL，最后拦截器根据事务状态提交或回滚事务。文章详细解析了事务开启、连接绑定以及MyBatis获取连接的源码实现过程，帮助理解Spring事务管理机制与MyBatis的协同工作原理。]]></description><category></category></item><item><title><![CDATA[SpringBoot 声明式事务 源码解析]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/150932640</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/150932640</guid><author>qq_21190847</author><pubDate>Fri, 29 Aug 2025 12:06:31 +0800</pubDate><description><![CDATA[摘要：本文分析了Spring Boot事务自动配置机制。重点介绍了TransactionAutoConfiguration配置类的生效条件，解析了@EnableTransactionManagement注解的作用，包括引入TransactionManagementConfigurationSelector组件并默认添加AutoProxyRegistrar和ProxyTransactionManagementConfiguration两个组件。详细说明了AutoProxyRegistrar组件如何通过实现Im]]></description><category></category></item><item><title><![CDATA[mybatisplus oracle 数据库OracleKeyGenerator使用序列生成主键原理]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/150486484</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/150486484</guid><author>qq_21190847</author><pubDate>Mon, 18 Aug 2025 13:45:17 +0800</pubDate><description><![CDATA[摘要：本文分析了MyBatis-Plus的启动流程，重点介绍了Oracle主键生成器的集成方式。在MyBatisPlusAutoConfiguration中会自动收集IKeyGenerator实现类，通过配置@Bean将OracleKeyGenerator加入IOC容器，并在实体类使用@KeySequence指定序列。文章详细追踪了SQL注入过程，从SqlSessionFactory构建到Mapper接口解析，重点说明了DefaultSqlInjector如何为Mapper接口注入基础CRUD方法，以及自定]]></description><category></category></item><item><title><![CDATA[mybatisplus 自定义主键生成器逻辑]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/150449692</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/150449692</guid><author>qq_21190847</author><pubDate>Sun, 17 Aug 2025 19:01:57 +0800</pubDate><description><![CDATA[主键生成核心处理流程源码追踪]]></description><category></category></item><item><title><![CDATA[java Json转实体类方法]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/150059102</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/150059102</guid><author>qq_21190847</author><pubDate>Fri, 08 Aug 2025 10:43:47 +0800</pubDate><description><![CDATA[当实体类属性和json中key名称不对应时，使用反射机制实现json到实体类的转换]]></description><category></category></item><item><title><![CDATA[若依框架中@EnableAspectJAutoProxy注解配置proxyTargetClass为false失效问题]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/148947625</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/148947625</guid><author>qq_21190847</author><pubDate>Fri, 27 Jun 2025 10:54:30 +0800</pubDate><description><![CDATA[EnableAspectJAutoProxy(exposeProxy = true,proxyTargetClass=false)，其中proxyTargetClass=false后，service实现类仍然使用的cglib代理的。AspectJAutoProxyRegistrar中的registerBeanDefinitions进入断点两次，第一次proxyTargetClass=false,第二次为true,第二次覆盖了第一次的值，我猜想第一次是我配置的，第二次应该有自动配置类默认是true.]]></description><category></category></item><item><title><![CDATA[jdk和cglib动态代理区别]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/144579844</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/144579844</guid><author>qq_21190847</author><pubDate>Thu, 19 Dec 2024 10:53:45 +0800</pubDate><description><![CDATA[动态代理]]></description><category></category></item><item><title><![CDATA[HashMap动态扩容解析]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/141558977</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/141558977</guid><author>qq_21190847</author><pubDate>Thu, 29 Aug 2024 15:09:09 +0800</pubDate><description><![CDATA[因为hashCode是int类型，虽然能映射40亿左右的空间，但是，HashMap的table.length毕竟不可能有那么大，所以为了使hash%table.length之后，分布的尽可能均匀，避免哈希冲突，就需要对实例的hashCode的值进行扰动，就是将hashCode的高16和低16位，进行异或，使得hashCode的值更加分散一点。（2）、当数组容量大于64时，hash冲突链表大于8时，会把链表转成红黑树，如果数组容量小于等于64时，hash冲突时链表大于8时，会先扩容数据，每次扩容为2的倍数。]]></description><category></category></item><item><title><![CDATA[redisson watchdog 原理]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/141558918</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/141558918</guid><author>qq_21190847</author><pubDate>Mon, 26 Aug 2024 17:11:18 +0800</pubDate><description><![CDATA[1、reddison中维护了一个ConcurrentHashMap EXPIRATION_RENEWAL_MAP，key是uuid+锁名。value是ExpirationEntry对象，其中threadIds是Map,key是线程号，value是线程获取锁的次数。如果是重入锁value会大于1。会有延迟任务开新线程获取threadIds中线程，判断锁有没有释放，没有释放则重置有效时间，继续调用延迟任务，如果释放了则不会执行延迟任务。]]></description><category></category></item><item><title><![CDATA[ArrayList 动态扩容]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/141158879</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/141158879</guid><author>qq_21190847</author><pubDate>Tue, 13 Aug 2024 14:03:02 +0800</pubDate><description><![CDATA[1、创建ArrayList集合时，可以设置默认长度，如果不设置默认长度为10。2、ArrayList扩容时，会以原数组长度的1.5倍进行扩容，当扩容后的长度大于Integer.MAX_VALUE - 8时，会判断数组中已有元素的长度，当已有元素长度大于Integer.MAX_VALUE - 8时，扩容后的数组长度为Integer.MAX_VALUE，否则是Integer.MAX_VALUE - 8。3、使用Arrays.copyOf把原数组拷贝到扩容后的新数组。]]></description><category></category></item><item><title><![CDATA[spring事务失效原因]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/140709396</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/140709396</guid><author>qq_21190847</author><pubDate>Fri, 26 Jul 2024 18:25:37 +0800</pubDate><description><![CDATA[②、protected方法到是可以被代理，但是CGLIB是基于继承关系来实现的，生成的代理类中对于protected的代理方法，也是protected的，访问范围受限制。，调用目标方法时，会先执行代理方法，代理类方法对方法增强然后使用子类调用父类的方式调用目标类方法。④、调用static方法，因为这类方法是属于这个类的，并不是对象的，所以无法被AOP。③、final修饰的方法不能被代理，因为final修饰的方法不能被子类重写，会报错。③、调用目标方法时，先执行代理类C中方法用于增强目标方法，再使用。]]></description><category></category></item><item><title><![CDATA[Spring如何管理Mapper]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/140527062</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/140527062</guid><author>qq_21190847</author><pubDate>Thu, 18 Jul 2024 17:53:34 +0800</pubDate><description><![CDATA[在Controller中使用Service，一般是实现Service接口类上添加@Service注解，让实现类注入到SpringIoc容器中，Controller通过@Autowired 从容器中获取，但是在Service实现类中使用@AutoWired 获取Mapper的时候，没有看到Mapper的实现类，带着疑问查看Spring是如何把Mapper接口类型的类注入到Ioc容器中。把生成的bean实例放入Spring容器中由此步骤可见，要想生成bean对象，首先需要有BeanDefinition。]]></description><category></category></item><item><title><![CDATA[springboot2.x AOP 默认使用Cglib 源码]]></title><link>https://blog.youkuaiyun.com/qq_21190847/article/details/140499709</link><guid>https://blog.youkuaiyun.com/qq_21190847/article/details/140499709</guid><author>qq_21190847</author><pubDate>Wed, 17 Jul 2024 18:05:25 +0800</pubDate><description><![CDATA[在 SpringBoot 2.x AOP中会默认使用Cglib来实现，但是Spring5中默认还是使用jdk动态代理。Spring AOP 默认使用 JDK 动态代理，如果对象没有实现接口，则使用 CGLIB 代理。也可以强制使用 CGLIB 代理。springboot默认使用cglib实现代码逻辑来记录一下。]]></description><category></category></item></channel></rss>