- 博客(19)
- 收藏
- 关注
原创 什么是面向对象,谈谈你对面向对象的理解
对比看,什么是面向过程?举例:比如洗衣机洗衣服1、打开洗衣机2、放衣服3、放洗衣粉4、清洗5、烘干人:打开洗衣机、放衣服、放洗衣粉洗衣机:清洗、烘干。
2025-08-08 16:26:18
244
原创 @Autowired和@Resource的区别
摘要:@Autowired和@Resource是两种依赖注入注解,核心区别在于匹配逻辑。@Autowired先按类型匹配,再按名称匹配,支持集合注入和@Qualifier指定Bean;@Resource先按名称匹配,再按类型匹配,支持name/type属性精确控制。@Autowired是Spring专属,@Resource是JavaEE规范。此外,@Autowired可自动注入集合类型,@Resource不支持。选择时需根据具体需求和容器环境决定。
2025-08-06 19:01:33
346
原创 单例设计模式
当 外部类 Singleton 被加载时,静态内部类 Holder 不会被主动加载(内部类属于 “被动使用”,除非显式访问其静态成员)。只有当 调用 getInstance() 时,才会访问 Holder.INSTANCE,此时 JVM 才会加载 Holder 类,进而初始化 INSTANCE。→ 实现了 “首次使用时才创建实例” 的延迟加载效果。
2025-08-05 10:49:04
181
原创 MVCC原理
Multi-Version Concurrency Control (多版本并发控制)。核心思想: 为数据库中的每一行数据维护多个历史版本。当一个事务需要读取数据时,它看到的是在事务开始时已经提交的数据版本(一个快照),而不是当前可能正在被其他事务修改的最新数据。当一个事务修改完数据后,它创建的是数据的一个新版本,而不是直接覆盖数据的旧版本。旧版本数据会被保留一段时间,供可能还在使用它们的事务读取。
2025-07-22 17:44:58
1550
原创 Redis主从同步的原理
当主从第一次连接或断开重连时,从节点会向psync请求中携带master_replid,主节点会判断从节点的master_replid是否与自己的master_replid一致,一致,说明是断开重连,主节点把从节点缺少的数据的写命令发送给从节点;当从节点发起增量同步请求时,会携带slave_repl_offset,主节点会比较在复制积压缓冲区master_repl_offset与slave_repl_offset相差的部分的命令,主节点会把从节点与主节点的相差的部分的命令发送给从节点,实现增量同步。
2025-07-18 18:33:21
422
原创 策略模式的使用与进阶
策略模式是一种行为型设计模式,它将算法封装为独立对象,使它们可以相互替换。核心思想是分离变化部分,通过接口规范行为,支持运行时动态切换算法实现。文章通过支付策略示例展示了模式的具体应用,对比了策略模式与简单工厂模式的差异,并深入探讨了四种企业级策略管理方案:每次new实例(完全隔离)、单例模式(全局共享)、对象池(资源复用)和按需缓存(自动管理)。最后介绍了混合模式实践和Spring集成方案,为不同场景提供了灵活的策略管理选择。
2025-07-13 00:06:17
681
原创 工厂方法模式
技巧核心目的最佳适用场景主要优势参数化工厂减少工厂类数量产品类型固定的小型系统代码简洁,易于理解单例工厂节省系统资源高频使用工厂的场景避免重复创建,提高性能依赖注入实现完全解耦中大型企业级应用易于扩展、测试和维护。
2025-07-11 23:46:08
777
原创 常见的垃圾判定算法、常见的垃圾回收算法和常见的垃圾回收器
摘要:垃圾回收算法主要分为可达性分析和回收算法两类。可达性分析通过GC Roots遍历标记存活对象,常见的回收算法包括标记-清除(易产生碎片)、标记-复制(空间利用率低)和标记-整理(效率较低)。分代垃圾回收将堆分为年轻代和老年代,采用不同算法提高效率。主流垃圾回收器如Serial(单线程)、Parallel(高吞吐)、CMS(低延迟)和G1(可预测停顿),各具特点。G1采用分区策略和混合回收机制,适合大堆内存,是JDK9后的推荐选择。(149字)
2025-06-17 18:08:11
909
原创 类加载器与双亲委派机制
一、什么是类加载器一、什么是类加载器类加载器是JVM的核心组件之一,负责在运行时将 .class 文件(字节码)从磁盘、网络或其他来源动态加载到JVM内存中,并生成能让JVM可以直接使用的 java.lang.Class 对象。想象JVM是一个工厂,.class文件是原材料(设计图纸+零件),找到原材料(根据类名找.class文件)。检查原材料是否符合规格(验证字节码)、把零件组装起来(准备内存、解析符号引用)、最后让机器可以开动(初始化)。二、有哪些类加载器。
2025-06-16 20:24:31
837
原创 类的生命周期
摘要:类加载机制是JVM执行Java程序的核心过程,分为加载、验证、准备、解析、初始化和使用六个阶段。加载阶段将类字节码读入JVM并生成Class对象;验证确保字节码合规;准备阶段为静态变量分配内存并赋默认值;解析将符号引用转为直接引用;初始化执行静态代码块和赋值操作。类卸载需满足三个条件:实例被回收、加载器被回收、Class对象无引用。整个过程体现了JVM安全高效管理类生命周期的方式,是理解Java运行机制的关键。
2025-06-15 19:19:26
673
原创 字符串常量池从方法区移动到堆上的原因
摘要:字符串常量池的位置变化显著影响回收机制。JDK6前位于永久代时几乎无法回收,因其绑定类加载器且依赖FullGC触发。迁移到堆内存后,字符串被纳入分代GC体系:新生代可快速回收短命字符串,长期使用的晋升老年代。JDK7优化intern方法,不再复制字符串内容,改用8字节引用指针,避免重复存储。这一改进使方法区大小更可控,同时降低了内存占用,解决了永久代时代的内存泄漏问题。(149字)
2025-06-15 16:20:21
303
原创 使用元空间代替永久代的原因
优化垃圾回收策略:永久代在堆上,当要去清理方法区不再使用的数据时,一般会采用堆里面的老年代的垃圾回收方式,也就是仅在 Full GC 时触发回收。并且,堆里面存放的是对象,而永久代存放的是类相关的数据,对象的回收与类的回收逻辑不同,类的回收条件跟苛刻,需同时满足:类所有实例被回收;根治内存溢出(OOM):永久代在堆上,可使用的内存上限有限。元空间使用的是 JVM 进程的本地内存,而非 JVM 堆内存,它与堆内存平行。如果不设置上限,只要不超过操作系统的内存上限,就可以一直分配空间。
2025-06-14 19:20:19
247
1
原创 不同JDK版本之间运行时数据区域的区别
摘要:Java虚拟机内存结构包含线程私有的程序计数器、虚拟机栈和本地方法栈,以及线程共享的堆和方法区。程序计数器记录指令地址,虚拟机栈存储方法调用信息,本地方法栈处理Native方法。堆是对象存储主区域,可通过-Xms/-Xmx调整大小。方法区存储类元信息,在JDK8后由永久代改为元空间实现。字符串常量池在JDK7后移至堆内存,解决了永久代内存溢出问题。合理设置初始和最大堆内存相同可避免频繁GC和内存抖动。(148字)
2025-06-14 17:10:54
1691
原创 SpringBoot集成rabbitmq使用教程
本文介绍了RabbitMQ在Spring Boot中的配置与应用。主要包括:1)添加依赖和配置RabbitMQ连接参数;2)核心概念如生产者、消费者、队列和交换机等;3)实际应用场景的实现,包括死信队列(配置死信交换机、队列和绑定规则)和延时队列(通过插件或死信队列实现)。详细说明了不同延时方案的实现方法,如固定延迟、动态延迟和多延时队列方案,并列举了订单超时、预约提醒等经典应用场景。最后建议根据业务需求选择合适的延时方案。
2025-06-10 01:06:38
486
1
原创 SpringBoot的自动装配原理
SpringBoot自动配置机制解析:通过@SpringBootApplication组合注解启动时,@EnableAutoConfiguration会触发自动配置流程。核心实现类AutoConfigurationImportSelector在2.7版本前读取META-INF/spring.factories文件,3.0后改为读取spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件获取候选配置类。系统通过条件注解(
2025-06-07 17:04:14
621
1
原创 将本地JAR包安装到Maven本地仓库后,可以在pom.xml文件中添加对该JAR包的依赖。
替换 path/to/your.jar 、 com.example 、 your-artifact-id 和 1.0 为你自己的值。可以看一下pom文件中添加的依赖的标签,都是与之对应的。其实只要确保你的your-artifact-id的是对的就行,例如:lombok2.在Maven仓库中找到你刚添加的jar包的文件夹,删除同文件夹下的。此时IDEA还是找不到该依赖。
2024-08-10 11:00:26
442
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅