- 博客(27)
- 收藏
- 关注
原创 SpringBoot的自动配置和起步依赖原理
这里有个重要变化需要说明:早期的Spring Boot版本确实是通过META-INF/spring.factories文件来注册自动配置类的,但从2.7版本开始,官方逐渐转向了新的META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件。不过无论是新机制还是旧机制,底层逻辑都是相同的——框架提前预设好常见技术栈的最佳实践配置,只要开发者引入对应的起步依赖,就会触发这些配置的自动加载。
2025-05-08 20:23:31
443
原创 MVCC(多版本并发控制)
MVCC(多版本并发控制)是数据库实现高并发事务的核心技术之一,其核心是通过数据多版本解决读写冲突。以下从四个方面深入解析。
2025-04-27 15:24:12
508
原创 MySQL 事务隔离级别详解
实现不同级别的数据一致性保障。开发者需根据业务需求权衡一致性与性能,结合显式锁策略优化高并发场景。:需避免脏读,但对不可重复读和幻读容忍度较高的场景(如 Oracle 默认级别)。:需保证事务内多次读取数据一致性的场景(如账户余额查询)。:对数据一致性要求极低,允许临时性脏数据读取的场景。:对数据一致性要求极高,且并发量极低的场景。MySQL 的隔离级别通过 。
2025-04-26 21:25:49
881
原创 CGLIB 核心解析
CGLIB 通过动态生成子类实现方法拦截,弥补了 JDK 动态代理必须基于接口的局限性,广泛应用于 Spring、Hibernate 等框架。其核心在于 Enhancer。方法灵活插入增强逻辑。实际使用中需权衡其性能优势与代理生成成本,并注意。与 JDK 动态代理不同,CGLIB 不依赖接口,可直接代理普通类。(Code Generation Library)是一个基于 。 和 MethodInterceptor。 的代码生成库,用于在 。,实现对目标类的 。,开发者可通过重写。
2025-04-12 11:33:49
361
原创 JVM 调优核心步骤与参数配置
JVM 调优需结合监控数据(GC 日志、堆转储)明确瓶颈,针对性调整堆内存、收集器、线程参数。推荐优先使用 G1/ZGC 等现代收集器,并在低竞争、短任务场景下优化锁机制。
2025-04-12 08:39:27
720
原创 TCP和UDP的区别
TCP(传输控制协议)和 UDP(用户数据报协议)是两种最常用的传输层协议,它们在数据传输方式、可靠性、适用场景等方面有显著区别。:某些应用(如 QUIC 协议)基于 UDP 实现了类似 TCP 的可靠性,用于优化 HTTP/3 的性能。
2025-04-11 09:03:29
380
原创 如何解决线程安全问题(不涉及分布式情况)
当多个线程并发操作共享资源(变量/对象)时,可能因非原子性操作或内存可见性问题导致数据不一致。简单场景下更安全(自动释放锁),JVM会优化锁升级(偏向锁->轻量级锁->重量级锁)JDK1.6+版本中两者性能差异不大,应优先考虑代码可维护性。显式加锁与释放(必须保证释放)防止死锁,加锁顺序需全局统一。实例(推荐成员变量)
2025-04-09 09:04:44
302
原创 线程池(ThreadPoolExecutor)不断加入任务
首先是核心线程处理任务 -> 然后是工作队列存满 -> 然后是创建临时线程,临时线程都在处理任务 ->最后处罚拒绝策略。
2025-04-09 08:56:41
90
原创 TreeSet以及HashSet注意事项
对象需要重写hashCode和equals方法,存入HashSet或者HashMap的key内才会被去重。对象需要实现compareable接口才可以存入TreeSet内进行排序。
2025-04-07 17:00:00
98
原创 hashMap相关
已知HashSet是单列的可去重集合(读取无序,无索引)那么HashSet的去重是如何实现的?是使用HashMap的key去重原理来实现也就是说,其实并不存在所谓HashSet,因为单列的HashSet只是把HashMap的值写死成一个常量并赋值为new Object();那么HashMap是如何去重的?(引用类型重写hashCode()方法和equals()方法的重要性)
2025-04-07 10:25:07
447
原创 什么是回表?
在Mysql InnoDB引擎中,主键默认是聚簇索引(即叶子节点会存储一整行数据)当sql命中非聚簇索引的时候,需要使用主键的值重新查询这行数据。在存储引擎层提前过滤无效主键值,减少回表次数。而非聚簇索引的叶子结点存储的是主键的值。将查询字段全部包含在非聚簇索引中。
2025-04-06 20:40:44
72
原创 关于finally关闭资源
try()的小括号内只能写资源类(即实现了AutoCloseable接口的类)虽然不论try{}代码块里是否有异常,finally都会执行。此时可以使用try-with-resource来自动关闭资源。
2025-04-06 17:20:42
164
原创 Integer 类的享元设计模式
方法在自动装箱时被调用,检查数值是否在缓存范围内。不可变性:Integer 不可变,保证共享对象的安全性,无需担心状态被修改。Byte: 缓存全部可能值(-128 至 127),因 byte 范围较小。Short/Long:类似 Integer,默认缓存 -128 至 127。在类加载时初始化缓存数组,预先生成范围内的 Integer 实例。性能优化:高频使用的小数值被缓存,减少对象创建和垃圾回收开销。灵活性:允许通过 JVM 参数扩展缓存上限,适应不同应用场景。比较内容,因超出缓存范围的对象不共享。
2025-04-02 11:18:48
326
原创 迭代器、增强for相关
增强for循环/Lambda遍历均不能解决并发修改异常问题,因此增它们只适合做数据的遍历,不适合同时做增删操作。如果集合支持索引,可以使用for循环遍历,每删除数据后做i--;Collection还可以使用lambda遍历(jdk1.8之后)或者可以使用迭代器遍历,并用迭代器提供的删除方法删除数据。增强for是迭代器的语法糖,可以用来遍历集合或者数组。迭代器是用来遍历集合的专用方式(数组没有迭代器)
2025-03-31 21:23:42
187
原创 如何自定义异常类
和编译时异常一样,只不过编写的类需要继承RunTimeException类。通过throw new 类(message)创建异常对象并抛出。编写一个类,继承Exception类,重写构造。
2025-03-31 15:15:54
193
原创 高可用与高吞吐的权衡原理(CAP)
在分布式系统中,高可用性(High Availability) 与 高吞吐量(High Throughput) 通常难以同时最大化,其本质源于 资源竞争 和 设计目标的冲突。强一致性场景中,为保证数据一致性(如 CAP 原理中的 C),需通过同步复制或分布式锁协调节点间的数据状态,这会增加网络通信和计算开销,降低吞吐量。核心强一致性模块(如支付)采用高可用架构(如 MySQL 主从同步 + 故障转移),非核心模块(如缓存)通过异步队列提升吞吐。可部分缓解矛盾,但无法完全消除。
2025-03-18 20:44:56
426
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人