- 博客(34)
- 收藏
- 关注
原创 MyBatis-Plus 相比 MyBatis 做了哪些增强?为什么项目中会选择使用它?
MyBatis-Plus 是 MyBatis 的 “超集”,通过封装常用操作解决了 MyBatis 的 “繁琐编码” 问题,同时保留了其灵活性。完全兼容 MyBatis 的原有功能,无需修改已有代码即可平滑迁移,开发者仍可使用 MyBatis 的 XML 映射、动态 SQL 等特性。,同时通过封装简化了开发流程,解决了 MyBatis 中大量重复的 CRUD 代码问题。既有开箱即用的基础功能(如分页、逻辑删除),又支持自定义扩展(如手动编写复杂 SQL),平衡了 “便捷性” 和 “灵活性”。
2025-09-29 14:03:03
1151
原创 自动装配和自动配置的区别
维度自动装配(Autowiring)自动配置(Auto-configuration)核心目标解决 Bean 之间的依赖注入问题解决 Bean 的自动创建和配置问题作用阶段Bean 已存在于容器中,处理依赖关联Bean 未创建时,自动注册并初始化组件触发方式@Autowired等注解或 XML 配置及 starter 依赖所属范围Spring 框架原生功能Spring Boot 扩展功能自动配置负责 “把 Bean 放进容器”,自动装配负责 “把容器里的 Bean 关联起来”。
2025-09-29 00:15:00
559
原创 @RequestMapping、@GetMapping、@PostMapping 有什么区别?如何处理请求参数(比如路径参数、请求体、表单参数)?
路径参数:用绑定 URL 中的占位符;请求体(JSON/XML):用绑定到对象;表单 / 查询参数:用绑定键值对;请求头 / Cookie:分别用和。这些注解可单独使用,也可组合使用,覆盖各种参数传递场景。
2025-09-27 18:53:25
1498
原创 SpringMVC的执行流程
(处理器适配器),由适配器负责调用 Handler(解耦 DispatcherServlet 与 Handler 的直接交互)。View 对象结合 Model 中的数据(模型数据),进行视图渲染(将数据填充到视图模板中),生成最终的响应内容(如 HTML、JSON 等)。HandlerAdapter 调用具体的 Handler(即 Controller 中的目标方法),执行核心业务逻辑,处理请求参数(如通过。(处理器映射器),根据请求的 URL、请求方法等信息,查找对应的。
2025-09-27 18:08:31
937
原创 请解释 Spring 中的 IoC 容器和 DI 依赖注入的概念,以及它们解决了什么问题?
总结:IoC 是一种设计思想(反转控制权),DI 是其实现手段,二者共同通过 “容器管理对象和依赖”,解决了传统开发中对象耦合紧密、难以维护的问题,是 Spring 框架实现 “松耦合” 的核心基础。将对象的创建、管理(如生命周期、依赖关系)的控制权从业务代码转移到一个统一的容器(IoC 容器)可以理解为:原本是 “开发者主动创建依赖”,现在变成 “容器主动推送依赖”,控制权发生了反转。容器在创建对象时,自动将其依赖的其他对象(Bean)注入到当前对象中。IoC 字面理解是 “控制反转”,核心是。
2025-09-26 17:00:52
392
原创 AOP 是 Spring 的核心特性之一,你能说说 AOP 的主要概念(如切面、通知、连接点、切入点)吗?实际项目中用过哪些场景(比如日志、事务、权限)?
AOP的一些基本概念和应用场景
2025-09-26 16:55:45
564
原创 Spring 中的 Bean 有哪些作用域?单例 Bean 在多线程环境下会有线程安全问题吗?为什么?
单例 Bean 是 “全局唯一实例”,多线程共享该实例。若 Bean 无状态(无共享变量或变量不可变),线程间没有竞争资源,因此安全。若 Bean 有状态(存在可修改的共享变量),多线程并发修改时会产生竞态条件(Race Condition),导致线程安全问题。解决思路:避免在单例 Bean 中定义可修改的成员变量,尽量设计为无状态(推荐)。若必须使用状态,可通过 ThreadLocal 存储线程私有变量(每个线程操作自己的副本)。
2025-09-25 22:15:57
385
原创 当启用注解@Accessors(chain = true)时BeanUtils.setProperty(t,key,value)不生效的原因分析
若需要链式调用,同时要兼容BeanUtils@Data// Lombok 生成的链式 setter(返回 User)// 手动定义标准 setter(返回 void),供 BeanUtils 使用// 此时需注意:BeanUtils 需指定手动定义的 setter 对应的属性名(可能不符合预期)生成的 setter 方法返回值为当前对象(非 void),而BeanUtils要求 setter 必须返回 void,因此导致属性设置失败。解决方式要么放弃链式调用。
2025-09-25 10:54:02
448
原创 Hash为什么不是链表长度超过8直接形成红黑树
这种设计既保证了 HashMap 在大多数场景下的轻量高效(链表为主),又能在极端冲突场景下通过红黑树维持性能稳定,是 “概率统计” 与 “工程实践” 结合的典型案例。同时,转回链表的阈值设为 6(而非 8),是为了避免 “链表长度在 8 附近波动时频繁触发树与链表的转换”(如从 8→7→8 反复转换,导致性能损耗)。,当数组容量很小时(比如初始容量 16),即使链表长度超过 8,也可能是因为 “哈希冲突集中在少数桶中”(而非元素总量大)。这是一种 “先空间换时间,再结构换时间” 的策略。
2025-09-24 21:23:04
456
原创 创建线程的几种方式
场景需求推荐方式简单场景,无继承需求实现Runnable接口需要线程返回结果实现Callable接口生产环境,多线程并发管理线程池(简单示例或需继承Thread功能继承Thread类(不推荐)
2025-09-24 21:19:52
488
原创 为什么HashMap的初始化容量是16
如果初始容量过小,哈希冲突会更加频繁,导致链表(JDK 1.7 及以前)或者红黑树(JDK 1.8 及以后,当链表长度达到阈值会转化为红黑树)变长,使得操作性能下降。在扩容时,新容量也是 2 的幂次方,通过位运算能高效地重新分配元素到新的哈希桶中,减少扩容操作带来的性能损耗。例如,从容量 16 扩容到 32,只需要对元素的哈希值的某一位进行判断,就可以确定其在新哈希表中的位置。容量为 16 时,在。,通过与哈希值进行按位与运算,可以快速得到在 0 - 15 范围内的索引值,相。,在二进制下,15 是。
2025-09-23 08:36:57
448
原创 MySQL事务机制和隔离级别
MySQL 的隔离级别从低到高分为 4 种,级别越高,并发控制越严格,但性能开销越大隔离级别脏读(Dirty Read)不可重复读(Non-repeatable Read)幻读(Phantom Read)说明读未提交(Read Uncommitted)可能发生可能发生可能发生一个事务可读取另一个未提交的修改,极少使用(如实时数据监控场景)。读已提交(Read Committed)不会发生可能发生可能发生一个事务只能读取另一个已提交的修改(Oracle 默认级别)。
2025-09-23 03:00:00
1831
原创 Java中List转换成Map的两种方式
推荐方式:使用,代码简洁且支持灵活配置。核心要素:明确键(Key)、值(Value)的提取规则,处理可能的重复键冲突。扩展场景:可根据需求转换为不同的Map实现类,或只保留对象的部分属性作为值。
2025-09-22 22:17:43
512
原创 MySQL 锁 学习笔记
是计算机协调或线程的。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,也是一种供许。如何是所有数据库必须解决的一个问题,也是影响数据库的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。
2025-09-22 19:22:52
364
原创 MySQL触发器
触发器是与表有关的数据库对象,指在 insert/update/delete 之前或之后,触发并执行触发器中定义的 SQL 语句集合。触发器的这种特性可以协助应用在数据库端等操作。使用别名和来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还。
2025-09-18 20:26:49
423
原创 MySQL存储过程 条件判断+循环控制+参数
计算从 1 累加到 n 的值,n 为传入的参数值 (leave 结束所有循环)BEGINEND IF;SELECT sum;END;
2025-09-18 03:00:00
367
原创 MySQL存储过程 语法及变量
用户定义变量是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用 “@变量名” 使用就可以。其作用域为当前连接。-- 局部变量-- 声明:declareBEGINEND;
2025-09-17 20:17:08
734
原创 MySQL视图 学习笔记
视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 通俗的讲,视图只保存了查询的 SQL 逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条 SQL 查询语句上。 1.2.2 创建视图 2-4 LOCAL 三 更新及作用 3-1 更新
2025-09-17 01:15:00
426
原创 Redis进阶 学习笔记
Redis内存淘汰机制是指当内存使用达到上限(可通过maxmemory配置,0为不限制,即服务器内存上限),根据一定的算法来决定淘汰掉哪些数据,以保证新数据的存入。
2025-09-16 17:19:37
1027
原创 Redis数据类型 学习笔记
1.计数器:许多运用都会使用redis作为计数的基础工具,他可以实现快速计数查询缓存的功能,同时数据可以异步落地到其他的数据源。如:视频播放数系统就是使用redis作为视频播放数计数的基础组件2.共享session:出于负载均衡的考虑,分布式服务会将用户信息的访问均衡到不同服务器上,用户刷新一次访问可能会需要重新登录,为避免这个问题可以用redis将用户session集中管理在这种模式下只要保证redis的高可用和扩展性的,每次获取用户更新或查询登录信息都直接从redis中集中获取。
2025-09-16 17:03:20
684
原创 MySQL优化学习笔记
执行分组操作,根据 profession 字段分组在分组操作时,可以通过索引来提高效率。分组操作时,索引的使用也是满足最左前缀法则的。
2025-09-15 22:00:43
1549
原创 MySQL索引学习笔记(4-6章)
在 MySQL 中,PROFILE是一个用于分析 SQL 语句执行细节的工具,主要作用是记录 SQL 语句执行过程中各个阶段的耗时,帮助开发者定位查询性能瓶颈。通过PROFILE可以获取SQL 执行过程中每个步骤(如解析、优化、执行、锁等待等)的耗时。通过分析PROFILE的结果,可以针对性地优化 SQL 语句(如添加索引、调整查询结构等),提升执行效率。
2025-09-14 18:00:36
877
原创 MySQL索引学习笔记(1-3章)
是帮助 MySQL的(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
2025-09-13 15:50:15
786
原创 MySQL存储引擎学习笔记
在生活中,我们常常可以听到很多引擎.比如汽车引擎,火箭引擎等等.汽车引擎就如同汽车的心脏,没有引擎汽车就无法启动.所以引擎非常重要.那什么是数据库的存储引擎呢?存储引擎就是存储数据、建立索引、更新 / 查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。
2025-09-12 21:09:26
802
原创 微服务学习笔记----Sentinel
Sentinel (分布式系统的流量防卫兵) 是阿里开源的一套用于服务容错的综合性解决方案。它以流量 为切入点, 从流量控制、熔断降级、系统负载保护以及实时监控等多个维度来保护服务的稳定性。
2025-09-10 21:31:24
687
原创 微服务学习笔记
微服务架构, 简单的说就是将单体应用进一步拆分,拆分成更小的服务,每个服务都是一个可以独立 运行的项目。微服务架构的常见问题这么多小服务,如何管理他们?(服务注册中心:nacos)这么多小服务,他们之间如何通讯?(同步:spring-cloud-feign/异步:消息队列-RabbitMQ)这么多小服务,客户端怎么访问他们?(负载均衡:Nginx + 网关:spring-cloud-gateway)这么多小服务,一旦出现问题了,应该如何自处理?(服务容错与降级:sentinel)
2025-09-09 17:52:20
934
1
原创 idea已经导入了servlet.api的包为什么还是报错
如果遇到这种jar包已经导入到项目中,却无法识别HttpServlet的情况,直接ALT+回车强行导入这个类就好了。
2025-07-21 18:57:36
199
原创 如何解决Tomcat部署在idea2025上时控制台出现乱码的问题
但是我最近玩的是Idea2025,我不知道它的控制台默认编码集是UTF-8,一直在修改File Encoding里面的编码集,但是都是无用功。后来我就一一比对这两个版本的配置,找了半天才找到这两的区别,话不多说直接上图。由于之前一直用的是Idea2021的破解版,然后它的控制台默认编码集是GBK,我在改完Tomcat的配置文件,从UTF-8改为GBK这个控制台就不会乱码。
2025-07-17 16:32:02
441
1
原创 反射+内省学习笔记
注意:下面红框里面的方法是由@Data注解重写父类的方法属于子类方法,不属于父类方法。,专注于检查 JavaBean 的属性(getter/setter 方法)。在Student类中添加一个静态方法方便测试。
2025-07-15 18:17:45
669
转载 Idea 配置tomcat服务器 如何将localhost:8080/war_exploded中的war_exploded删除
tomcat application context 配置 servlet _war_exploded 删除-优快云博客
2025-04-01 21:23:32
291
原创 Java Stream流 常用API 简单使用
Java 中的 Stream类()是 Java 8 引入的核心特性之一,主要用于对集合、数组等数据源进行。它的核心作用是为复杂的数据操作提供一种高效、简洁且可并行化的编程模型。
2025-03-31 13:52:17
778
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅