- 博客(145)
- 收藏
- 关注
原创 Mybatis 拦截器 与 PageHelper 源码解析
本文深入解析 MyBatis 拦截器机制与 PageHelper 分页插件的实现原理。MyBatis 插件基于责任链模式和动态代理模式实现,通过拦截 Executor 等四大对象的方法调用实现功能扩展。Interceptor 接口提供核心拦截逻辑,配合 @Intercepts 注解定义拦截规则。PageHelper 通过拦截查询方法,自动执行 count 操作并改写 SQL 实现分页,支持丰富的分页信息获取。文中还包含自定义 SQL 耗时拦截器示例和 PageHelper 使用注意事项,为开发者深入理解 M
2025-06-07 22:34:12
1230
原创 MyBatis 缓存机制源码深度解析:一级缓存与二级缓存
本文深入解析MyBatis缓存机制,剖析一级缓存和二级缓存的实现原理与差异。一级缓存是会话级缓存,基于BaseExecutor实现,通过PerpetualCache的HashMap存储数据,在query方法中优先检查缓存命中。缓存键CacheKey由SQL语句、参数等信息哈希生成。二级缓存则是跨会话的命名空间级缓存,通过Cache接口实现,支持多种缓存策略。两种缓存通过不同生命周期和范围共同优化系统性能,减少数据库访问。文章结合MyBatis 3.4.6源码,详细解读了缓存的实现细节和使用场景。
2025-06-04 01:34:52
659
2
原创 MyBatis源码解析:从 Mapper 接口到 SQL 执行的完整链路
MyBatis源码解析:Mapper接口到SQL执行全流程 本文深入解析MyBatis从Mapper接口到SQL执行的完整链路:1)通过MapperProxyFactory创建动态代理对象;2)代理对象调用时触发MapperMethod处理;3)四大核心组件(Executor、StatementHandler、ParameterHandler、ResultSetHandler)协同完成SQL执行。揭示MyBatis如何将接口方法转化为SQL操作。
2025-06-02 17:53:15
906
原创 JDBC 核心执行流程详解
JDBC核心执行流程详解:首先通过Class.forName()或SPI机制加载数据库驱动;其次使用DriverManager建立数据库连接;然后创建Statement、PreparedStatement或CallableStatement执行对象;接着执行SQL并处理结果集ResultSet;最后按照打开顺序释放资源。其中PreparedStatement具有预编译和防SQL注入优势,是推荐使用方式。完整流程包括驱动加载、连接建立、SQL执行、结果处理及资源释放五个关键步骤,体现了Java与数据库交互的标
2025-05-30 00:12:23
770
1
原创 SqlSession 的创建、事务管理与组件协作全解析
本文深入解析MyBatis中SqlSession的创建过程、事务管理机制与组件协作关系。SqlSession通过SqlSessionFactory创建,其构建过程涉及XML配置解析、Configuration对象生成和事务工厂初始化。核心在于openSessionFromDataSource方法,该方法创建事务对象和执行器后生成SqlSession实例。在事务管理方面,MyBatis默认采用非自动提交模式(autoCommit=false),需显式调用commit/rollback。文章对比了自动提交和非
2025-05-27 00:27:22
700
原创 MyBatis 核心架构与启动流程剖析:从配置到初始化的深度解析
本文以MyBatis的demo项目为例,剖析其核心架构与启动流程。核心架构分为配置层、会话层、执行层和数据层,通过分层设计实现数据库操作解耦。启动流程包含配置加载、核心类初始化和会话工厂构建三个阶段。文章详细解析了XMLConfigBuilder.parse()方法如何将配置文件转换为Configuration对象,包括解析properties、settings、typeAliases等节点,最终构建SqlSessionFactory。示例代码展示了用户表操作的基本实现,包括User实体类、Mapper接口
2025-05-26 00:38:36
912
原创 浅析Spring AOP 代理的生成机制
本文深入解析了Spring AOP代理的生成机制。AOP代理主要通过在Bean初始化后阶段由AbstractAutoProxyCreator后置处理器生成,核心方法是postProcessAfterInitialization。代理生成流程包括:判断是否需要代理(wrapIfNecessary)、创建代理工厂(createProxy),以及最终选择JDK动态代理或CGLIB代理(createAopProxy)。关键决策点包括目标类是否实现接口、是否强制使用CGLIB等配置参数。该机制通过BeanPostPr
2025-05-24 23:00:45
961
原创 SpringBoot 源码分析:启动流程、自动装配
通过对 SpringBoot 启动过程的源码分析,我们了解到从启动入口SpringApplication的构造函数初始化各种组件,到run方法中完成环境准备、上下文创建、Bean 加载和初始化等一系列复杂而有序的操作。同时,自动配置机制通过spring.factories文件和条件注解,实现了根据依赖自动配置应用的功能。深入理解这些原理,将帮助我们更好地使用 SpringBoot 开发高效、稳定的应用程序。在实际开发中,如果遇到启动问题或想要定制化启动过程,我们就可以从这些原理出发,快速定位和解决问题。
2025-05-22 00:59:23
777
原创 Spring 源码解析:finishBeanFactoryInitialization () 方法深度剖析
通过对 `finishBeanFactoryInitialization()` 方法及其核心子方法的分析,我们深入了解了 Spring Bean 生命周期的各个阶段源码逻辑。整个过程涉及 **Bean 的实例化**、**属性填充**、**初始化**
2025-05-20 00:27:12
659
原创 浅析 Spring 启动过程:从源码到核心方法
通过对 Spring 启动过程的源码分析,我们对 Spring 框架的工作原理有了更深入的理解。无论是在开发过程中优化应用性能,还是在遇到问题时进行排查,掌握这些知识都能让我们更加得心应手。
2025-05-15 23:43:41
1006
1
原创 Spring BeanFactoryPostProcessor:机制解读与代码实践
BeanFactoryPostProcessor是Spring框架中的一个关键扩展点(位于org.springframework.beans.factory.config包),其核心功能是在Bean实例化之前修改Bean的配置元数据(即BeanDefinition)。通过该接口,开发者可以在容器启动时动态调整Bean属性(如作用域、懒加载、属性值)、注册新的Bean定义,甚至替换现有Bean的实现类
2025-05-11 01:22:34
970
2
原创 Spring BeanPostProcessor:机制解读与代码实践
BeanPostProcessor 是 Spring 框架中用于 干预 Bean 生命周期 的核心接口,允许开发者在 Bean 实例化后、初始化前后插入自定义逻辑
2025-05-08 00:39:30
748
1
原创 浅析 Spring 中 FactoryBean 的实现与使用
FactoryBean是Spring容器中用于定制化对象创建的核心接口(org.springframework.beans.factory.FactoryBean),其设计体现了两个关键特征:工厂模式:通过getObject()方法动态生成目标对象容器托管:FactoryBean本身作为Spring Bean被容器管理,支持依赖注入和生命周期回调
2025-05-07 00:41:36
1009
原创 【汇总常见设计模式!程序员的进阶宝典,速速收藏】
大家好!最近整理了设计模式的系列文章,汇总成一张超全表格和对应讲解链接,无论是面试突击还是日常开发,都能帮你快速掌握设计模式的核心!
2025-04-12 15:26:28
215
原创 小张的工厂进化史——工厂模式
从参数控制到多态扩展,再到生态兼容。正如软件开发,规模越大越需要解耦与规范。下次编码时,不妨思考:“这个对象,该由哪个Factory来生产?”
2025-04-11 23:35:41
769
原创 当浓缩咖啡遇见代码——装饰者模式
装饰者模式揭示了软件设计的本质规律:通过组合代替继承,用分层代替臃肿。就像调制一杯完美的咖啡,代码架构也应该具备「无限叠加,自由组合」的扩展能力。当你在星巴克听到"双份浓缩加燕麦奶"时,不妨想象每个加料选项都是一个装饰器——这正是优雅代码与现实世界的绝妙共鸣。
2025-04-07 22:06:12
315
原创 谁该处理我的请假?——责任链模式
这种设计让复杂流程变得像搭积木一样灵活,是处理多层级、多条件业务的利器。通过合理运用,能显著提升代码的可维护性和扩展性。
2025-04-06 21:00:30
992
原创 数字世界的“唯一身份证“——单例模式
想象一家跨国集团只能有一位CEO,所有重大决策必须通过他签署。。无论市场部要预算,还是研发部要资源,都必须通过这位唯一的CEO,避免多头决策导致管理混乱。
2025-04-02 23:55:27
1025
原创 告别通勤选择困难症——策略模式
当你在编写充满条件判断的业务代码时,不妨思考:这些逻辑是否可以被抽象为一系列可插拔的策略对象?这正是策略模式给我们的最佳实践启示。
2025-04-01 23:16:17
634
原创 设计模式中的“万能转换器”——适配器模式
通过HDMI场景的深入解析可见,适配器模式是接口冲突的终极解决方案。无论是代码中的协议转换,还是你桌上那根“救命”的Type-C转HDMI线,都在默默践行这一设计哲学。
2025-03-31 22:56:33
871
原创 设计模式六大原则,带你看懂编程的底层逻辑
六大原则本质是解耦与抽象单一职责与接口隔离控制代码粒度,避免“万能类”开闭原则与依赖倒置通过抽象提升扩展性,适应需求变化里氏替换与迪米特法则确保协作安全,降低耦合风险推荐结合《漫画设计模式》中的趣味案例进一步理解,将抽象原则具象化为可落地的代码设计技巧。
2025-03-30 23:14:45
826
原创 Java的继承:方法;属性?
最近公司有个需求需要用方法模板模式改造一部分冗余的代码,因为涉及到Java中父、子类之间的继承与重写,所有来记录一下这里抛出一个问题:前提父类声明的子类对象(例如父类 aa = new 子类()如果aa调用重写的方法调用的是 父类的?还是子类的?如果aa调用重写的属性调用的是 父类的?还是子类的?结论:调用方法是子类重写的方法。而属性是父类的属性。
2025-03-18 21:25:29
640
1
原创 计算机网络八股文
HTTP1.0 其实也可以强制开启长链接,例如接受Connection: keep-alive 这个字段,但是,这不是标准字段,不同实现的行为可能不一致,因此不是根本的解决办法。这种方式就好像我们打电话的时候,只能说一件事儿一样,说完之后就要挂断,想要说另外一件事儿的时候就要重新拨打电话。发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接。我们知道TCP连接的建立需要三次握手,是很耗费时间的一个过程。,该功能是由「应用程序」实现的,,该功能是由「内核」实现的,
2024-04-15 11:23:45
894
原创 MyBatis相关面试题总结
Mybatis是一个流行的ORM(对象关系映射)框架,可以将Java对象映射到关系型数据库中的表中。使用Mybatis可以编写更简洁的SQL语句,并且可以使用动态SQL和参数映射来进行高效和灵活的数据操作。
2024-04-15 11:23:30
619
原创 Java相关面试题总结
字节流以字节为单位进行读写操作,而字符流以字符为单位进行读写操作。字节流主要由InputStream和OutputStream两个抽象类及其子类组成,而字符流则由Reader和Writer两个抽象类及其子类组成。字节流可以读写任意类型的数据,而字符流只能读写字符类型的数据;字节流通常用于处理二进制数据,而字符流则通常用于处理文本数据。缓冲流是Java IO流中的一种流,它可以提高IO流的读写效率。缓冲流分为字节缓冲流和字符缓冲流。
2024-04-15 11:23:01
872
原创 数据库相关面试题(Mysql、Redis、ES)
ES是什么:ES是基于Lucene的搜索引擎。是一个分布式、多租户的全文搜索引擎,具有高可用、高可扩展性、高性能等特点ES的应用场景:ES广泛应用于日志分析、全文搜索、数据分析等领域,如网站搜索、电商搜索、日志分析、监控告警等ES的核心概念:ES的核心概念包括索引、映射、文档、分片、副本等。其中索引是ES中最重要的概念,类似于关系型数据库中数据表;映射类似于表结构;文档类似于行数据。ES的查询语句:ES提供了丰富的查询语句,如match、term、bool、range等,可以满足不同场景下的查询需求。
2024-04-15 11:22:47
786
原创 Spring相关面试题总结
Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。Spring属于轻量级的、低侵入式设计,代码的污染极低;Spring的控制反转将对象之间的依赖关系交由框架处理,减低组件的耦合性;Spring提供了AOP技术,支持将一些通用任务,如安全、事务、日志、权限等进行集中式管理,从而提供更好的复用;Spring对于主流的应用框架提供了集成支持。提供SPI方便其他框架集成p=11。
2024-04-15 11:21:17
854
原创 RocketMQ相关面试题总结
分为同步刷盘和异步刷盘生产者先把消息发送到MQMQ将数据写入内存MQ将内存的数据写入的磁盘刷盘成功后,返回给生产者对应的ACK生产者先把消息发送到MQMQ将数据写入内存直接给生产者返回对应的ACK由后台线程异步地去执行刷盘操作对比发现,同步刷盘安全性更高,单性能较低;异步刷盘响应更快,但是会有数据丢失的风险一般地,异步刷盘只有在 Broker 意外宕机的时候会丢失部分数据,你可以设置 Broker 的参数来调整你的刷盘策略(ASYNC_FLUSH 或者 SYNC_FLUSH)
2024-04-15 11:20:55
1115
原创 微服务相关 - SpringCloud + Dubbo
CAP原则是指,分布式系统中 的 强一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。这三个因素往往只能满足两点,不能三者兼顾。强一致性(Consistency): 访问所有的节点,得到的数据结果都是一样的可用性(Availability): 保证每个请求不管成功或者失败都有响应分区容错性(Partiton tolerance): 分布式系统在遇到某节点或者网络故障时,整个系统仍然能够对外提供满足一致性或者可用性的服务。
2024-04-15 11:18:52
567
原创 LeetCode刷题总结 - LeetCode 热题 100 - 持续更新
LeetCode 热题 100其他系列哈希1. 两数之和49. 字母异位词分组128. 最长连续序列双指针27. 移除元素283. 移动零11. 盛最多水的容器剑指 Offer II 007. 数组中和为 0 的三个数42. 接雨水滑动窗口438. 找到字符串中所有字母异位词3. 无重复字符的最长子串字串560. 和为 K 的子数组剑指 Offer 59 - I. 滑动窗口的最大值普通数组最大子数组和56. 合并区间189. 轮转数组238. 除自身以外数组的乘积矩阵73. 矩阵置零54. 螺旋矩阵48.
2023-10-13 22:33:41
948
原创 LeetCode刷题总结 - 面试经典 150 题 -持续更新
LeetCode刷题总结 - 面试经典 150 题 - 持续更新其他系列数组 / 字符串88. 合并两个有序数组27. 移除元素26. 删除有序数组中的重复项80. 删除有序数组中的重复项 II169. 多数元素189. 轮转数组121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II55. 跳跃游戏274. H 指数380. O(1) 时间插入、删除和获取随机元素238. 除自身以外数组的乘积739. 每日温度42. 接雨水双指针125. 验证回文串392. 判断子序列167. 两数之和 II -
2023-07-29 19:59:20
8147
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人