- 博客(145)
- 收藏
- 关注
原创 原生 JDBC + DbUtils + MyBatis 同场景 Demo(C3P0 数据源 XML 配置版)
解耦配置与代码:数据库连接信息、连接池参数通过 XML 配置,无需硬编码,便于维护和多环境切换;连接复用提升性能:C3P0 连接池复用物理连接,避免原生 JDBC 频繁创建 / 关闭连接的性能损耗;资源管控更安全:连接池限制最大连接数、空闲时间等参数,避免数据库连接数超限导致的服务不可用;框架适配性强:DbUtils 可直接复用 C3P0 数据源,MyBatis 通过自定义适配后,也能无缝使用 C3P0 的连接池能力。
2025-12-17 19:13:46
732
原创 原生 JDBC 深度问答:强逻辑拆解 + 引导式思考
JDBC是Java访问数据库的标准接口规范,而非具体实现类库。其核心价值在于解耦Java代码与具体数据库,通过接口与实现分离的设计,使代码只需面向JDBC接口编程,更换数据库时仅需替换驱动Jar包。JDBC驱动作为接口的具体实现,负责与数据库建立物理连接和执行SQL指令。JDBC4.0后通过SPI机制自动加载驱动,简化了开发流程。在SQL执行层面,PreparedStatement通过预编译和参数分离机制有效防止SQL注入。事务管理以Connection为载体,遵循"一个连接一个事务"的
2025-12-17 12:29:35
879
原创 Apache Commons DbUtils
引导思考:回忆原生 JDBC 写增删改查的流程 ——要创建连接、PreparedStatement、处理结果集,还要在 finally 中层层关闭资源,容易出现什么问题?核心解答:原生 JDBC 痛点:① 资源关闭代码冗余(try-catch 嵌套);② 结果集遍历繁琐(手动映射到 JavaBean/Map);③ 事务控制与连接管理耦合;④ 容易因空值 / 异常导致资源泄漏。封装关闭逻辑,自动判空 + 屏蔽关闭异常,一行替代多层 try-catch;执行层面。
2025-12-17 11:56:10
842
3
原创 HttpServlet 深度拆解:从设计模式看透其核心原理
设计模式的实践载体(适配器 + 模板方法协议适配的经典案例(通用接口→具体协议线程模型的示范实现(单例多线程 + 无状态设计从设计模式理解其核心机制(适配 + 模板方法);从线程模型掌握安全开发规范;从分层设计领悟框架扩展思路;从异步扩展理解高并发优化方向。
2025-12-17 11:05:27
1007
2
原创 【手写Mybatis | version0.0.3 附带源码 项目文档】
本文详细解析了Easy-MyBatis v0.0.3的架构设计和类关系。该系统采用模块化架构,通过六大模块协作实现功能:配置与启动层负责框架装配,代理门面层提供统一入口,业务处理器层实现具体功能,工具与基础设施层提供可复用组件,数据源层管理连接,事务管理层控制事务。核心设计采用工厂模式、代理模式和策略模式,通过SqlSessionProxy路由请求到专门处理器(CRUD、查询、批量操作等)。相比v0.0.2的单体架构,v0.0.3实现了职责分离、低耦合和高扩展性,支持水平扩展新增处理器和垂直优化现有功能。系
2025-12-10 23:43:11
833
1
原创 【手写Mybatis | version0.0.1 附带源码 项目文档】
Easy-mybatis 0.0.1 是一个简化版的 MyBatis 框架实现,主要包含以下核心功能: 配置加载:通过 Resources 类加载配置文件,SqlSessionFactoryBuilder 解析 XML 配置并初始化数据源、事务管理器和 SQL 映射。 核心组件: EasyMybatisUNPOOLEDDataSource:非池化数据源 EasyMybatisJDBCTransaction:JDBC 事务管理 EasyMybatisMappedStatement:封装 SQL 映射信息 执行
2025-12-10 23:24:10
711
1
原创 JavaWeb 核心深度解析:Servlet 全家桶(原理 + 实战 + 踩坑)
本文深入剖析JavaWeb开发中的Servlet核心组件,从底层原理到企业级实战应用。主要内容包括:1)Servlet配置的URL映射规则与优先级,以及初始化优化技巧;2)Servlet生命周期与线程安全问题;3)请求响应处理的高级用法;4)转发与重定向的底层差异;5)过滤器链实现与安全防护;6)监听器的应用场景;7)Cookie/Session的底层机制与分布式解决方案;8)JSP原理与现代模板引擎替代方案。文章通过大量代码示例和典型场景分析,揭示了Servlet体系的核心机制与常见陷阱,为开发者构建稳定
2025-12-08 23:45:49
672
1
原创 【苍穹外卖 | day31- 2】
公共字段自动填充通过 MyBatis-Plus 简化重复编码,菜品管理通过事务保证数据一致性,Redis 优化高频数据访问,店铺状态控制通过拦截器实现全局校验 —— 这些知识点围绕 “高效开发”“性能优化”“业务安全” 展开,是苍穹外卖项目的核心技术亮点。掌握这些内容,不仅能理解项目架构,更能将其复用在其他 Java 后端项目中!
2025-11-27 00:02:32
764
原创 【若依 | day36 2-底层原理】
本文深度解析若依框架的三大核心组件:代码生成器采用"结构化数据+模板引擎"模式,通过gen_table和gen_table_column存储表结构元数据,结合Freemarker模板生成代码;RBAC权限模型通过"用户-角色-菜单"三层结构实现细粒度管控,支持从接口到按钮的全链路权限校验;异步任务管理器基于Quartz框架实现任务调度,支持动态配置与执行监控。三者协同构建了"高效开发+安全管控+可靠调度"的企业级开发体系,为业务开发提供完整解决方案
2025-11-26 23:41:24
821
1
原创 【若依 | day35 1-基础应用】
摘要:本文系统介绍了若依(RuoYi)框架的开发实践指南,包含版本选择、环境搭建、核心功能使用及二次开发方法。主要内容包括:1)框架概述及版本差异;2)开发环境配置步骤;3)代码生成器使用流程;4)RBAC权限系统工作原理;5)项目模块结构解析;6)常见问题解决方案。特别针对前后端分离版本(RuoYi-Vue)提供了详细的操作指引,涵盖数据库配置、权限控制、定时任务等企业级开发常见需求,并给出模块定制、样式修改等二次开发建议。
2025-11-24 23:45:54
969
1
原创 【苍穹外卖|day30 -1】
通过前三天的学习,我们已经掌握了苍穹外卖项目的核心技术栈。理解原理:不仅要会使用框架,更要理解其背后的设计思想动手实践:所有代码都要亲手敲一遍,遇到问题先思考再求助举一反三:将学到的技术应用到其他项目中,形成自己的技术体系关注性能:在功能实现的基础上,思考如何优化性能和提高系统稳定性希望这份总结能够帮助你更好地掌握苍穹外卖项目的核心技术,为后续的学习和工作打下坚实的基础!延伸阅读[Spring Security实战指南][分布式系统设计模式][MySQL性能优化实践]
2025-11-24 23:11:44
674
5
原创 【 Java编程思想 | 16—数组】
本章深入探讨了数组的特性及其与Java泛型的矛盾。数组作为高效的线性序列存储结构,具有O(1)访问速度,但长度固定且存在类型安全问题。与容器相比,数组牺牲了灵活性,特别是与泛型结合时会出现协变性问题。文章详细分析了为什么不能创建泛型数组,并提供了使用Object[]转型的替代方案。最后总结了使用场景:数组适用于性能敏感、固定长度的基本类型存储,而容器更适合需要动态扩容和类型安全的场景。理解这种权衡对Java开发至关重要。
2025-11-24 22:50:16
882
1
原创 【Java编程思想|15-泛型】
迁移兼容性优先:通过擦除保证与旧代码的二进制兼容编译期安全:在编译时捕获类型错误,而不是运行时运行期简单:JVM不需要理解复杂的泛型类型系统灵活性补偿:通过通配符、辅助方法等模式弥补擦除的局限理解这些深层机制,才能真正驾驭Java泛型,写出既类型安全又灵活优雅的代码。这不仅仅是语法规则,更是一种类型系统设计的思维方式。
2025-11-23 22:08:26
621
1
原创 【Java编程思想 | 14-类型信息】
本文探讨Java运行时类型信息(RTTI)和反射机制,分析其如何实现静态类型语言的动态能力。RTTI通过类型转换、instanceof和Class对象在编译时已知类型框架内工作,而反射则完全突破这一限制,允许运行时探查和操作未知类型。文章详细解析了Class对象的获取方式及其初始化差异,并阐述了反射API体系及其在框架开发中的重要作用。同时指出反射的性能开销和安全风险,建议将其作为最后手段。最后介绍了基于反射的动态代理机制,说明其作为AOP实现核心的价值。全文构建了从基础类型安全到高级系统设计的完整知识体系
2025-11-23 16:13:14
736
原创 【MyBatis-Plus | Wrapper 条件构造器 】
链式编程:通过泛型设计实现流畅的API组合模式:通过 Segment 组合复杂SQL条件模板方法:AbstractWrapper 定义算法骨架,子类实现具体逻辑类型安全:LambdaWrapper 在编译期检查字段名正确性深入理解 Wrapper 不仅有助于更好地使用 MyBatis-Plus,也能学习到优秀框架的设计思想和编程模式。
2025-11-23 16:13:04
844
原创 【MyBatis-Plus | 自定义 SQL 深度讲解 】
java@Mapper// 1. 简单查询// 2. 带条件参数// 3. 更新操作// 4. 插入操作java// 使用 <script> 标签实现动态 SQL"</if>" +这是 MyBatis-Plus 最强大的特性之一,可以在自定义 SQL 中复用 Wrapper 的条件构造能力。方式一:使用java// Mapper 接口方法// 使用示例方式二:XML 中使用 Wrapperxml-- 在 XML 中使用 -->
2025-11-23 16:12:54
677
原创 【MyBatis-Plus | 常见问题与面试重点】
类别核心要点常见坑点注解映射、主键策略、条件构造器判空、模糊查询、全表操作、分页配置、逻辑删除冲突面试重点原理(Wrapper、分页插件)、设计(多租户、数据权限)、优化(N+1、缓存)、源码(代码生成器)要学好 MyBatis-Plus,不仅要会用其便捷的 API,更要理解其背后的 MyBatis 原理、插件机制,并时刻关注性能和安全问题。在面试中,结合具体业务场景来阐述你的理解和解决方案,会大大加分。
2025-11-22 21:37:46
63
原创 【MyBatis-Plus | 核心知识点完整指南 】
java// 自定义查询方法// 自定义更新方法// 调用存储过程// 复杂统计查询java// 数据源配置// 全局配置// 开启swagger注解// 生成BaseResultMap// 生成BaseColumnList// 包配置// 策略配置// 生成的表// 表前缀// 自定义实体类配置// 自定义Controller配置// 自定义Service配置。
2025-11-22 21:26:52
503
原创 【SSM框架 |day29-springboot整合SSM框架】
依赖管理:使用Spring Boot Starter简化依赖配置自动配置:利用Spring Boot的自动配置特性配置分离:使用YAML文件,支持多环境配置组件扫描:合理使用注解进行组件扫描事务管理:使用声明式事务管理。
2025-11-22 20:50:52
656
原创 【Java 编程思想 |2 一切都是对象】
经过字节码、内存布局、工具实操的三重穿透,本章的核心不再是 “是否一切都是对象”,而是 Java 如何通过分层抽象抽象层:开发者面对 “对象”,通过引用操作实体,屏蔽内存细节;底层支撑层:JVM 通过对象头、堆 / 栈分离、GC、类加载机制,为对象提供内存管理和安全保障;权衡层:基本类型、static、四种引用类型,是为了弥补纯对象模型的性能 / 复用短板。所有细节(如对象头的 64 位字段、字节码的。
2025-11-22 15:30:46
326
原创 【Java 编程思想|1-对象导论 】
本文深入解析面向对象编程(OOP)的核心思想与Java实现。首先对比面向过程与面向对象的差异,指出OOP通过封装数据和行为解决了代码耦合问题。随后详细拆解OOP四大特性:封装(隐藏细节、暴露接口)、继承(代码复用与扩展)、多态(动态绑定实现接口统一)、抽象(提取共性忽略细节)。文章还剖析了Java的OOP设计哲学,包括简单性、可移植性和安全性等特点,并揭示了对象作为"服务提供者"的核心隐喻。最后,通过内存模型和JVM机制展示了OOP的底层实现原理,为理解后续Java技术奠定基础。
2025-11-20 22:58:27
671
原创 【MyBatis Plus | 1-完整使用指南】
/ 使用注解方式// 使用 XML 方式(推荐复杂 SQL)> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!> <!</> <!> <!> <!> <!</> <!> <!> <!> <!</> <!</> <!</> <!</> <!注解作用示例@TableName指定表名@TableId主键注解字段注解逻辑删除@Version乐观锁@Version@EnumValue枚举值@EnumValue。
2025-11-20 12:32:06
328
原创 【Hot100|12-最大子数组和(LeetCode 53)】
将子数组和问题转化为前缀和差值问题通过维护最小前缀和来优化计算在遍历过程中动态更新最大值这种方法体现了"将复杂问题转化为已知问题"的算法设计思想,是解决子数组和类问题的经典范式。
2025-11-18 21:51:05
599
原创 【Hot100|11-LeetCode 239. 滑动窗口最大值 】
该解法的核心是 **“单调队列动态维护窗口内的潜在最大值”:通过入队时的单调性筛选(移除不可能成为最大值的元素)和出队时的边界检查(移除窗口外的元素),确保队首始终是当前窗口的最大值,从而在 O (n) 时间内高效求解。这种 “单调队列” 思路是解决滑动窗口极值问题 ** 的经典范式,可迁移到 “滑动窗口最小值”“滑动窗口内的次大值” 等类似问题中。
2025-11-11 10:50:16
431
原创 【Hot100|10-LeetCode 560. 和为 K 的子数组】
该解法的核心是 **“前缀和转化问题 + 哈希表记录频率”:通过前缀和将 “子数组和为 k” 转化为 “两个前缀和的差值为 k”,再用哈希表高效统计符合条件的前缀和出现次数,最终在 O (n) 时间内解决问题。这种 “前缀和 + 哈希表” 的思路是解决子数组和问题 ** 的经典范式,可迁移到 “和为 0 的子数组”“子数组和的范围” 等类似问题中。
2025-11-10 11:21:56
960
原创 【SSM 框架 | day28 MyBatis 和 MyBatis-Plus】
MyBatis-Plus是一个基于MyBatis的增强工具,通过简化开发、提高效率来优化单表操作。它提供无侵入性的增强功能,包括通用Mapper、Lambda表达式、主键自动生成和分页插件等。核心功能涵盖标准数据层CRUD操作、条件查询(Wrapper)、分页查询、逻辑删除、乐观锁等。MP支持Lombok简化实体类,提供代码生成器自动生成基础代码。在分布式系统中,推荐使用雪花算法(ASSIGN_ID)生成主键。MP通过版本号机制实现乐观锁,适合读多写少场景。条件构造器支持Lambda方式避免字段名错误,分页
2025-11-08 17:52:02
1019
1
原创 【Hot100|9-LeetCode 438. 找到字符串中所有字母异位词】
该解法的核心是 **“固定滑动窗口 + 字符频率统计”**,精准利用字母异位词的频率特征,通过高效的数组计数和窗口维护,实现线性时间求解。这种思路不仅适用于本题,还可迁移到类似的字符串匹配问题(如判断子串是否包含目标字符集、统计符合字符频率要求的子串数量等),是处理字符串频率类问题的经典范式。
2025-11-08 17:26:36
887
原创 【Hot100|8-LeetCode 3. 无重复字符的最长子串】
该解法的核心是 **“滑动窗口动态维护无重复子串 + 数组高效计数”**:通过right扩展窗口,left收缩窗口确保无重复,用数组计数替代哈希表提升效率,最终在 O (n) 时间和 O (1) 空间内解决问题。这种 “滑动窗口 + 哈希计数” 的思路是解决字符串子串问题的经典范式,可迁移到 “最小覆盖子串”“至多包含两个不同字符的最长子串” 等类似问题中。
2025-11-08 16:09:06
537
原创 【Hot100|先导篇 Java算法常用API的调用&易错语法点】
说明:通过Comparator自定义排序规则。示例java运行// 按字符串长度排序。
2025-11-08 01:01:00
642
原创 【Hot100 |7 - LeetCode 42. 接雨水】
摘要:本文详细讲解LeetCode 42题"接雨水"的双指针解法。该算法通过维护左右两侧最大值(preMax和sufMax),在单次遍历中动态计算每个位置的积水量:当preMax较小时,左指针位置的积水量由preMax决定;反之右指针位置的积水量由sufMax决定。这种贪心策略实现了O(n)时间复杂度和O(1)空间复杂度的优化,无需额外存储数组。文章从问题分析、思路讲解、代码实现到实例演示,系统性地展示了该经典解法的原理和实现细节,是处理区间积水问题的高效解决方案。
2025-11-08 00:50:30
499
原创 【Hot100 | 6 LeetCode 15. 三数之和】
该解法的核心是 **“排序 + 双指针 + 分层去重”**:通过排序简化查找和去重,双指针将内层查找从 O (n²) 优化为 O (n),分层去重确保结果无重复。这种思路不仅适用于三数之和,还可迁移到 “四数之和” 等类似的 “n 数之和” 问题,是面试中高频考察的经典算法思想。
2025-11-07 23:49:17
933
原创 【Hot100 |5-LeetCode 11. 盛最多水的容器】
本文介绍了LeetCode 11题"盛最多水的容器"的双指针解法。该方法通过初始化左右指针(数组头尾),计算当前容量后移动较矮的柱子,在O(n)时间内找到最大容量。相比暴力法的O(n²),双指针法利用贪心策略缩小范围,仅需常数空间。关键点在于理解移动较矮柱子的合理性:宽度减小时,唯有提升高度才可能增大容量。实例演示展示了指针移动和容量计算的完整过程,验证了算法正确性。
2025-11-07 23:28:57
907
原创 【Hot100|4-LeetCode 283. 移动零 】
该解法的核心是双指针分区思想,通过left划分非零区域,i寻找非零元素,用交换实现原地移动。这种思路不仅适用于 “移动零”,还可迁移到类似的「数组分区问题」(如将数组分为奇数和偶数、正数和负数等),是面试中高频考察的基础算法思路。
2025-11-07 23:02:43
874
原创 【Hot100|3 LeetCode 128. 最长连续序列】
摘要:本文详细解析了LeetCode 128题「最长连续序列」的高效解法。该方案利用HashSet实现O(1)快速查找,通过「判断序列起点+向后延伸」的策略,在O(n)时间复杂度内解决问题。核心思路是:通过判断x-1是否存在来确定序列起点,避免重复计算;从起点开始向后延伸查找连续序列;用Math.max动态更新最长长度。文章通过代码逐行解析和实例演示(如数组[100,4,200,1,3,2]的最长序列1-4)验证了算法正确性,并分析了O(n)时间复杂度和O(n)空间复杂度。
2025-11-06 23:59:45
904
原创 【HOT100|1 LeetCode 1. 两数之和】
该解法的核心是利用哈希表的快速查找特性,将 “查找互补元素” 的时间从暴力解法的O(n)优化到O(1),整体效率大幅提升。这种 “以空间换时间” 的思路是哈希表的典型应用,也是大厂面试中高频考察的基础算法思想。
2025-11-06 23:47:36
948
1
原创 【Hot100 | 2 LeetCode49 字母异位词分组问题】
add(s)这段代码的核心是利用 “异位词排序后相同” 的特性,通过哈希表快速分组,逻辑清晰且效率较高。其中方法的使用简化了代码,是哈希表操作的高频技巧,也是面试中的常见考点。优化方向?
2025-11-06 23:36:10
1067
1
原创 【SSM 框架 | day27 spring MVC 和 SSM 整合】
SSM 框架的企业级开发,核心在于吃透底层机制、规范代码编写、提前规避坑点。本文通过补充完整代码示例、拆解底层逻辑、复现高频错误,从 SSM 整合、统一结果 / 异常处理、拦截器拓展到前后端联调,形成一套完整的实战体系。开发中需重点关注容器协同、事务一致性、序列化规范、接口安全等核心问题,同时养成日志分级、异常捕获、配置规范的习惯,才能构建出高可用、易维护的 Web 应用。
2025-11-06 23:01:44
1023
4
原创 【SSM框架 | day26 spring AOP与事务管理】
AOP(面向切面编程)是一种将横切逻辑(如日志、事务)与业务逻辑分离的编程范式。其核心概念包括连接点、切入点、通知和切面,通过动态代理实现方法增强。Spring AOP提供5种通知类型,支持XML和注解配置,常用功能包括统一日志、性能监控和声明式事务管理。声明式事务通过@Transactional注解实现,可配置传播行为和隔离级别。开发中需注意AOP失效问题,如自调用、异常捕获等。相比AspectJ,Spring AOP更轻量但功能有限。最佳实践包括精确切入点表达式、保持切面轻量和合理事务配置。掌握AOP能
2025-11-04 15:29:53
783
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅