- 博客(88)
- 收藏
- 关注
原创 Spring Bean 生命周期解析
本文通过代码示例详细解析了Spring Bean的完整生命周期,包含五个关键阶段:实例化、属性注入、Aware接口回调、初始化和销毁。示例展示了从构造函数执行、属性设置、@PostConstruct注解方法、InitializingBean接口到自定义初始化方法等完整流程,以及对应的销毁过程。文章还配置了BeanPostProcessor和BeanFactoryPostProcessor,帮助开发者全面理解Spring容器如何管理Bean的创建、初始化和销毁过程。
2026-01-05 16:32:19
866
原创 LangChain4j 的 @Tool 调用过程
本文深入解析了LangChain4j的@Tool机制,展示了如何实现从模型意图到Java执行的完整流程。@Tool注解通过反射扫描Java方法,生成包含名称、描述和参数结构的Tool Schema,并随Prompt发送给LLM。当LLM返回tool_call时,系统会验证参数并反射调用本地方法,将结果回传给LLM生成最终回答。文章详细解析了注解定义、关键特性(如工具名称、描述和返回行为控制)以及返回值处理机制,并通过流程图直观呈现了注解处理流程。该机制形成了"意图-执行-反馈"的闭环。
2026-01-01 10:15:00
654
原创 WhatsApp云控系统:当“状态同步”撞上“延迟双删”的认知墙
这是一个WhatsApp云控系统状态同步问题的技术案例。系统采用“延迟双删”缓存策略解决状态不一致:下发指令时删除缓存,异步下发后更新数据库为“发送中”,再延迟删除缓存。但在真实场景中,由于设备连续处理批量指令,导致缓存被错误删除或旧状态残留,用户查询到过期状态。问题根源在于“双删”假设状态线性变化,而实际场景状态会反复横跳。修正方案是为状态增加批次ID标识,让删除操作更精准,并强制状态回调时更新缓存。最终,系统通过补偿巡检机制处理回调丢失,揭示了在异步云控场景中,强一致性难以实现,需接受最终一致。
2025-12-31 10:15:00
853
原创 溯源数据清洗:一次由“可控”到“失控”的复盘
摘要:本文复盘了一个数据清洗系统从可控到失控的全过程。系统采用Kafka+Doris架构,初期通过手动控制消费速率实现稳定运行。但在生产环境中,偶发GC暂停导致Kafka消息积压瞬间涌入,触发级联故障:Doris因批量写入过载而OOM,连接池耗尽最终服务崩溃。测试环境的不足(未模拟GC、数据量差异)掩盖了风险,最终造成业务查询超时。案例揭示了流控设计需考虑异常场景,单纯依赖速率控制存在系统性风险。(149字)
2025-12-30 18:15:00
1517
原创 ShardingSphere 与 PolarDB-X 选型对比
ShardingSphere与PolarDB-X分布式数据库选型对比分析: 架构方面,ShardingSphere采用中间件模式接入现有数据库,而PolarDB-X是原生分布式架构,具备计算存储分离优势。性能测试显示PolarDB-X在QPS(读写性能提升40%+)、延迟(降低39%-51%)等方面表现更优。扩展性上,PolarDB-X支持在线热扩容和数据自动重平衡,操作复杂度显著低于ShardingSphere。事务能力方面,PolarDB-X提供强一致性事务和全局死锁检测,优于ShardingSpher
2025-12-29 18:15:00
719
原创 Redis 7 底层数据结构
Redis 7采用对象系统架构,所有数据存储在redisObject中,包含类型、编码、引用计数等元数据。字符串系统使用5种SDS结构,根据长度自动选择最优编码(INT/EMBSTR/RAW)。列表结构采用QuickList复合设计,结合双向链表与紧凑列表,通过智能压缩策略平衡内存与性能。哈希、集合等类型根据元素数量/大小自动选择最优编码(如LISTPACK或哈希表),实现内存高效利用。Redis 7通过精细化的数据结构设计和自适应编码转换机制,在保证高性能的同时优化内存使用。
2025-12-28 15:15:00
1379
原创 ForkJoinPool 工作原理解析
摘要:本文通过2千万元素数组排序问题,详细解析了ForkJoinPool工作原理。首先介绍了单线程归并排序实现,然后展示了如何利用ForkJoin框架进行并行优化。关键点包括:1) 分治思想的任务分解;2) RecursiveAction子类实现并行计算;3) 工作窃取机制提高效率。性能测试对比显示,在多核CPU上ForkJoinPool能显著提升排序速度,体现了其处理大规模数据的高效性。
2025-12-27 10:15:00
1017
原创 Redis缓存设计与性能优化
本文深入探讨Redis缓存设计与性能优化中的关键问题及解决方案。针对缓存穿透问题,提出两种深度解决方案:1)缓存空对象机制的进阶实现,包含双检锁模式和随机过期时间;2)布隆过滤器的深度应用,详细展示了Redisson实现细节和工作流程。对于缓存击穿问题,重点分析热key保护策略,提出多层防护方案,包括本地JVM缓存和Redis缓存互斥锁机制。文章通过具体代码示例和流程图,展示了如何有效解决缓存穿透和缓存击穿问题,优化系统性能。
2025-12-26 10:15:00
580
原创 Redis线程模型
Redis线程模型解析:Redis采用客户端多线程、服务端单线程为主多线程为辅的架构。核心命令执行保持单线程,避免锁竞争;网络I/O和后台任务使用多线程提升性能。Redis提供多种原子性保证机制,包括复合指令、事务、Lua脚本等,适合不同业务场景。文章还分析了Bigkey问题及解决方案,并梳理了Redis线程模型的演进历程,从4.x纯单线程到7.x后台任务多线程的发展。建议合理选择原子性机制、避免Bigkey、利用多线程特性优化性能。
2025-12-25 10:15:00
1757
原创 MySQL MVCC可见性算法详解
MySQL的MVCC机制通过多版本并发控制实现高效的读写并发。其核心是Read View结构,包含活跃事务列表(m_ids)、最小/最大事务ID等信息,用于判断行数据可见性。不同隔离级别下Read View创建时机不同:READ COMMITTED每次查询新建,REPEATABLE READ只在首次查询创建。可见性判断依据行事务ID与Read View的对比,通过Undo Log构建版本链实现数据回溯。该机制在保证事务隔离性的同时,避免了读写阻塞,显著提升了数据库并发性能。
2025-12-24 10:15:00
718
原创 MySQL MVCC机制解析:实现高并发的核心技术
MySQL MVCC机制解析摘要 MVCC(多版本并发控制)是MySQL实现高并发的核心技术,通过创建数据历史版本实现非阻塞读操作。InnoDB引擎通过三个隐藏字段(事务ID、回滚指针、行ID)和Undo Log构建版本链。Read View机制基于事务ID和版本链实现数据可见性判断,包含低水位(活跃事务列表)和高水位(事务ID上限)。MVCC避免了读写冲突,提升并发性能,但需要定期Purge过期版本。其实现涉及行记录结构、Undo Log管理和Read View生成等复杂机制,是数据库事务处理的重要基础。
2025-12-23 10:15:00
786
原创 MySQL 8.x 索引使用机制
MySQL 8.x 索引使用机制摘要 本文基于MySQL 8.x的employees库分析了索引的使用场景和机制。主要内容包括: 索引类型与创建:演示了单列索引、复合索引和函数索引的创建方法。 索引使用场景: 等值查询(主键、唯一、普通索引) 范围查询和复合索引前缀匹配 排序和分组优化 覆盖索引减少I/O操作 不使用索引的场景: 索引列使用函数或计算 OR条件查询 LIKE通配符在前 数据量过小或索引选择性差 复合索引规则:重点介绍了最左前缀原则,即复合索引必须从左到右顺序使用才能生效。 文章通过大量EXP
2025-12-22 10:15:00
593
原创 搞懂 @EqualsAndHashCode,别再手写 equals 和 hashCode 啦!
Lombok @EqualsAndHashCode 使用指南 该注解自动生成equals()和hashCode()方法,适用于需要对象比较的场景(如放入HashSet/HashMap时)。提供多种用法: 基础用法:@EqualsAndHashCode包含所有字段 排除字段:exclude参数指定忽略字段 继承处理:callSuper=true包含父类字段 精确控制:onlyExplicitlyIncluded配合@Include标记特定字段 ⚠️ 注意: 继承时需显式设置callSuper 避免循环引用导致
2025-12-21 10:15:00
588
原创 InnoDB vs MyISAM:一张图看懂索引核心差异
本文通过可视化图表对比了MySQL中InnoDB和MyISAM存储引擎的核心差异:1) InnoDB采用聚簇索引,索引与数据一体存储,主键查询只需1次I/O;MyISAM索引与数据分离,查询需2次I/O。2) InnoDB支持行级锁和MVCC,适合高并发;MyISAM仅有表级锁。3) InnoDB辅助索引需回表查询,但可通过覆盖索引优化;MyISAM所有索引均为非聚簇结构。4) InnoDB支持事务和崩溃恢复,MyISAM不支持。图表清晰展示了两种引擎在索引结构、查询流程和并发控制方面的本质区别。
2025-12-20 10:15:00
692
原创 MySQL 8 的两阶段提交
MySQL 8的两阶段提交机制通过协调binlog和redo log的写入顺序,解决了数据库崩溃时可能出现的资金丢失等数据一致性问题。其核心是先将事务准备状态写入redo log并刷盘,再写入binlog并刷盘,最后提交事务。这种机制虽然保证了数据安全,但频繁的磁盘刷盘操作(fsync)成为性能瓶颈。MySQL 8.0引入的组提交技术将多个事务的刷盘操作合并为一次,显著提升了性能。测试数据显示,16线程并发下性能提升明显,使数据库在高并发场景下仍能保持较好的事务处理能力。
2025-12-19 10:15:00
2266
原创 JDK17 深度解析:从特性实现到生产实践
本文系统解析JDK17的核心特性与生产实践价值。通过架构演进对比图展示JDK8到JDK17在模块化系统、JAR部署、类加载机制和GC策略等方面的重大改进。性能基准测试矩阵显示JDK17在QPS、GC暂停时间、启动速度和内存占用等方面均有显著提升。重点剖析文本块特性,通过复杂SQL模板和OpenAPI生成示例,展示其在工程实践中的实际应用价值。JDK17的Record类优化带来180MB/s的序列化吞吐提升,ZGC实现亚毫秒级暂停,模块化系统显著降低内存占用至380MB。这些改进使JDK17成为当前企业级应用
2025-12-18 10:15:00
1047
原创 JDK自带性能调优工具:问题定位与解决
摘要:本文介绍了JDK自带的性能调优工具(jps、jmap、jstack等)在定位Java服务性能问题时的应用。通过决策树分析了CPU飙升、内存泄漏、频繁GC等常见问题的诊断流程,并提供了实战案例和代码示例。重点展示了如何使用jmap检测内存泄漏和jstack分析CPU问题,包含详细的操作步骤和监控方法。文章还通过表格形式整理了工具使用场景和问题诊断流程,为Java性能调优提供了实用指导。
2025-12-17 10:15:00
883
原创 Java垃圾收集器深度解析:CMS、G1与ZGC
Java垃圾收集器深度解析 本文深入解析CMS、G1和ZGC三大Java垃圾收集器的工作原理与优化策略。CMS收集器采用并发标记-清除算法,详细分析了其六阶段工作流程、卡表机制及并发失败调优方案。G1收集器创新性地采用Region-based内存布局,阐述了其混合回收机制和读写屏障实现。ZGC作为新一代低延迟收集器,重点介绍了其染色指针技术和并发处理能力。三种收集器各具特点:CMS适合响应敏感应用但存在碎片问题,G1平衡吞吐与延迟,ZGC追求极致低延迟。文章提供了各收集器的核心参数配置建议和典型应用场景选择
2025-12-16 10:16:08
1579
原创 JVM 执行引擎:从“能跑”到“跑得快”
Java采用两次编译的设计策略:前端编译(javac)将源码转为字节码保证正确性,后端编译(JIT)在运行时将热点代码转为机器码提升性能。前端编译仅做基础优化以保持跨语言兼容性,JVM则通过混合模式(解释执行+即时编译)平衡效率。JIT利用方法调用计数器和回边计数器识别热点,进行OSR动态替换,并实施激进优化(如内联、逃逸分析)。这种运行时自适应的特性使Java能逼近C++性能,尤其适合长时服务,但需注意预热对短任务的影响。
2025-12-15 15:45:00
1857
原创 JVM 对象创建、布局与回收:一条从出生到湮灭的路径
本文系统梳理了JVM中对象的全生命周期管理机制,从创建、内存分配到回收过程。关键点包括:对象通过类加载检查后,采用指针碰撞或空闲列表分配内存;对象头包含Mark Word、类指针等元数据;逃逸分析决定对象分配位置(栈或堆);通过指针压缩优化内存使用;对象最终通过可达性分析确定回收时机。文章还结合IoT高并发场景,分析了短命对象对GC的影响及优化策略,并探讨了类的回收条件。整个流程展现了JVM内存管理的精细设计与性能考量。
2025-12-14 10:15:00
799
原创 Java 的 SPI 机制
SPI 的行为由 ClassLoader 决定;ClassLoader 的世界由 classpath 决定;classpath 乱,SPI 就乱。真实线上故障往往不是代码错,而是 classpath 展开顺序不稳定,例如 plugins/* 目录顺序变化导致 SPI 加载结果随机。解决靠显式排序、使用自定义 URLClassLoader 管理插件,或者上升为增强版 SPI(如 SpringFactories、Dubbo SPI)。
2025-12-13 10:15:00
756
原创 JVM 类加载:让代码从黑箱里爬出来
本文深入探讨JVM类加载机制及其在业务场景中的应用价值。文章首先指出类加载在规则快速变化、插件需求强、多租户架构等场景中的重要性,并揭示其作为动态加载、热更新等能力的底层支撑。随后详细解析JVM类加载的三条核心规则(缓存、双亲委派、沙箱保护)和三层加载体系(Bootstrap、Platform、Application)。重点剖析类加载的五个阶段(加载、验证、准备、解析、初始化),特别指出"半初始化状态"可能导致的异常现象。通过实际案例展示了如何设计工程级自定义ClassLoader实现插件系统、热更新和
2025-12-12 10:15:00
803
原创 解决Docker容器部署Dubbo服务时注册地址问题
在使用Docker部署SpringBoot应用并集成Dubbo框架时,经常会遇到一个问题:服务注册到Nacos上的IP地址是容器内部的IP(如172.17.0.13),而不是宿主机IP。这导致当多个服务部署在不同主机上时,彼此无法通过注册中心发现并调用。配置完成后,可以通过Dubbo管理控制台或直接查看Nacos中的服务节点信息,确认注册的IP地址是否为宿主机IP。上述两种解决Docker容器部署Dubbo服务时注册地址问题的方法。选择哪种方法取决于具体的业务需求和环境。
2024-12-13 10:15:00
1863
原创 深入掌握 nslookup:Windows DNS 查询命令详解
命令说明查询 A 记录(IPv4 地址)查询 AAAA 记录(IPv6 地址)查询 MX 记录(邮件服务器)查询 NS 记录(域名服务器)查询 TXT 记录(文本/SPF等)开启调试模式,显示详细 DNS 信息深入调试模式,显示完整的查询流程。
2024-11-15 10:15:00
5980
原创 CentOS系统查看CPU、内存、操作系统等信息
Linux系统提供了一系列命令可以用来查看系统硬件信息,如CPU的物理个数、核数、逻辑CPU数量、内存信息和操作系统版本。
2024-11-01 10:15:00
6306
原创 理解 volatile 的非原子性:深入分析及字节码解释
volatile关键字在多线程环境中提供了可见性和有序性的保证,但无法确保原子性。它适合用于简单的标记变量,但在涉及复杂操作(如自增)时,依然需要额外的手段来保证原子性,例如CAS或锁机制。通过理解volatile的作用和局限性,可以更好地编写出线程安全的代码。
2024-10-31 20:15:00
913
原创 深入理解Spring Boot的事务注解及其实现原理
事务是指一组操作的集合,这些操作要么全部成功,要么全部失败。原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成。一致性(Consistency):事务完成后,数据库必须处于一致的状态。隔离性(Isolation):一个事务的执行不应受到其他事务的干扰。持久性(Durability):事务完成后,其结果应永久保存在数据库中。通过AOP和代理机制,Spring能够在方法调用前后自动管理事务,从而简化了事务管理的复杂性。
2024-10-24 10:15:00
3370
原创 Apache Commons Collections4 的详细指南
1. 什么是 Apache Commons Collections4?Apache Commons Collections4 是一个强大的库,扩展了 Java 标准集合框架,提供了更复杂的集合操作。对于一年左右经验的 Java 开发者,它能帮助你更方便地处理双向映射、自动排序、过滤等功能,这些在标准集合类中很难实现。2. 如何引入 Apache Commons Collections4?通过 Maven 引入依赖:<dependency> <groupId>org.a
2024-10-22 10:15:00
2067
原创 Apache Commons Text 指南:比 String 更强大的文本处理工具
是 Apache Commons 系列中的一部分,专门为 Java 提供强大的字符串处理功能。它可以轻松完成各种复杂的文本操作,如字符串替换、相似度计算、转义等,让你在开发中不用反复编写重复的代码。Apache Commons Text 是一个功能强大的字符串处理库,适合处理各种复杂的文本操作。无论是字符串替换、转义、相似度计算,还是生成随机字符串,它都提供了丰富的工具集,帮你减少重复代码,提升开发效率。
2024-10-21 10:15:00
2265
原创 Apache Commons Lang:Java实用工具包
Apache Commons Lang 是 Apache Commons 项目下的一个模块,提供了对 Java 核心类的增强,特别是围绕StringObjectArrayDate等常用操作。它是一个不可多得的工具包,可以帮助轻松处理一些常见的 Java 编程痛点。Apache Commons Lang 远比它表面看起来的要强大。除了我们讨论的这些类,它还涵盖了异常处理、注解支持、字符编码、位操作等诸多功能。掌握这个工具包可以让你在开发中更加得心应手,少写重复代码,专注于业务逻辑。
2024-10-18 10:15:00
1583
原创 Apache Commons 工具包简述
用 Java 编程时,你可能会发现很多重复的工作:字符串处理、文件操作、集合操作……这些看似简单的任务,有时候却能花费大量的时间。而,正是为了解决这些问题而诞生的,它是一个由 Apache Software Foundation 提供的一系列工具类库,专门用来简化 Java 开发中的常见任务。
2024-10-17 10:15:00
1189
原创 使用 StopWatch 进行代码计时和性能分析
StopWatch: 开始一个指定名称的计时任务。stop(): 停止当前任务的计时。: 获取所有任务的总耗时(毫秒)。: 获取所有任务的总耗时(秒)。: 获取任务的总数。: 获取最后一个任务的名称。: 获取最后一个任务的耗时(毫秒)。: 以格式化的方式输出所有任务的信息。
2024-10-16 10:15:00
1367
原创 Maven Shade Plugin 使用详细说明
是 Apache Maven 提供的一个插件,用于将项目的所有依赖项打包成一个可执行的胖 JAR 文件。这种 JAR 包包含所有项目所需的依赖项,可以在不额外配置的情况下直接运行。在构建微服务、发布可执行应用时,使用胖 JAR 可以减少部署复杂度。是一个功能强大的插件,可以帮助你将项目及其依赖打包成一个胖 JAR 文件。在实际使用中,通过合并资源、排除签名文件和重命名包路径,可以构建出无冲突的可执行 JAR,从而简化部署流程。
2024-10-13 10:15:00
5502
1
原创 深入理解 Java 工具 jdeps 和 jlink:分析依赖与构建自定义运行时详解
Java 自 JDK 9 引入模块系统以来,jdeps和jlink成为了开发人员手中的强大工具,帮助他们更好地管理 Java 应用的依赖,优化应用程序的体积,并通过自定义运行时(Custom Runtime Image, CRI)提高应用程序的性能和部署效率。本文将详细探讨这两个工具的使用方法,并通过示例展示如何将它们结合起来,创建一个面向实际需求的精简版 Java 运行时映像。在传统的 Java 开发中,JDK 和 JRE 的全套工具及库常常被打包到项目中,即使许多模块在特定应用中可能并未使用。
2024-10-12 10:15:00
1894
原创 Java 中的 SecureRandom 与 Random 深度解析:安全性、性能与应用场景
对于性能优先、对安全性没有严格要求的场景,Random是首选。对于安全性至关重要的场景(如加密、身份认证),毫不犹豫地选择。
2024-10-11 10:15:00
2033
原创 Lock4j:基于AOP的分布式锁工具
Lock4j是一个基于Java的分布式锁框架,旨在为分布式系统提供高效的锁机制。它支持多种底层存储,如Redis、Zookeeper和数据库,并通过Spring AOP进行集成,使得开发者可以轻松地在Spring应用中使用分布式锁。Lock4j支持自定义锁实现,开发者可以根据具体需求实现自己的锁逻辑。例如,可以基于不同的底层存储(如Etcd、Consul等)实现分布式锁。自定义锁实现需要继承Lock4j的基础类,并实现相应的方法。
2024-10-06 10:15:00
2563
原创 深入解析Lombok的@EqualsAndHashCode
Lombok允许对可以通过exclude参数排除不需要比较或生成哈希值的字段。例如,不希望id字段参与比较:默认不使用父类的equals和hashCode方法,如果需要,可以通过启用:可以通过来指定明确的字段参与比较和哈希值生成:Lombok的注解通过自动生成equals和hashCode方法,简化了开发工作,提高了代码的一致性和正确性。虽然Lombok有一些局限,但其带来的便利和优势使其成为Java开发中非常有价值的工具。
2024-10-02 10:15:00
1831
原创 Java集成Google翻译API并进行文本翻译
通过Google Cloud提供的库,Java开发者可以方便地将多语言翻译功能集成到他们的应用中。借助简洁的API,您可以快速实现从任意源语言到目标语言的翻译。Google翻译API功能丰富,除了基本的翻译外,还支持语言检测、专业领域翻译以及批量翻译等高级功能,是实现多语言支持的理想选择。
2024-09-30 10:15:00
3346
2
原创 RocketMQTemplate 解析:简化与 RocketMQ 消息系统的交互
Apache RocketMQ 是一个分布式消息队列系统,支持高吞吐量和低延迟的消息处理。它主要用于异步通信、事件驱动架构、数据流处理、日志收集等场景。其核心概念包括生产者、消费者、消息队列和主题等。在分布式系统中,消息队列系统的重要性不言而喻。它们能够解耦应用、提高系统的弹性与容错能力。高性能:每秒百万级别的吞吐量。高可靠性:消息持久化,确保数据不丢失。分布式架构:易于扩展,可以水平扩展以应对更高的负载。事务消息:支持事务消息,用于分布式事务场景。
2024-09-26 10:15:00
2659
原创 MySQL 8 临时关闭缓存
键缓存主要用于 MyISAM 存储引擎,缓存索引块。尽管 InnoDB 是主流,但 MyISAM 在特定场景下仍然适用。在 MySQL 8 中,查询缓存已被移除,但其他缓存机制(如表缓存、键缓存、InnoDB 缓冲池)仍然是提升性能的关键手段。临时关闭缓存可以帮助进行基准测试、解决脏数据问题或应对频繁写入的场景。然而,关闭缓存也可能带来性能下降和磁盘 I/O 增加的副作用。通过合理使用外部缓存、优化查询结构以及动态调整缓存参数,可以实现更为高效的数据库性能管理。
2024-09-25 10:15:00
1293
并发编程基于AQS的ReentrantLock加锁机制解析:公平与非公平锁的排队及阻塞实现原理
2025-12-26
AIDA64 Engineer 8.20.8100 官方正式版
2025-12-21
MySQL 示例数据库,用于测试您的应用程序和数据库服务器
2025-12-21
Docker Desktop 28.3.0 客户端
2025-12-21
scrcpy - 免费开源的 Android 投屏与控制工具
2025-12-21
【Java虚拟机】JVM内存模型核心组件解析:运行时数据区结构与垃圾回收机制设计
2025-12-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅