自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 收藏
  • 关注

原创 第 6 篇:SSM 源码深度解析与生产实践:从性能优化到问题排查

对比维度生态整合与Spring Boot/Cloud无缝整合,支持Spring注解(@Async、@Lazy)、Spring事务独立生态,与Spring整合需额外开发适配器,学习成本高异步能力需依赖Spring异步线程池,非原生异步(状态流转默认同步)基于Akka Actor模型,原生异步非阻塞,适合高并发场景功能全面性支持状态嵌套、持久化、事件广播、监听器,功能开箱即用轻量级,核心是“状态+行为”,高级功能(如持久化)需自定义分布式支持需额外实现分布式锁、状态同步,无原生分布式能力。

2025-10-26 13:15:00 1053 4

原创 第 5 篇:SSM 实战项目:基于 SSM 的企业级工作流引擎(请假流程)

流程链路:员工提交请假申请 → 部门经理审批(同意/驳回)→ HR 审批(同意/驳回)→ 流程完成/终止(驳回时直接终止);核心能力多角色审批:部门经理仅能审批“待部门经理审批”状态的流程,HR 仅能审批“待 HR 审批”状态的流程,避免越权操作;审批意见记录:每一步审批需留存“审批人、审批意见、审批时间”,支持后续追溯;超时提醒:待审批流程超过 24 小时未处理时,自动触发“超时驳回”,并记录驳回原因(超时)。为更直观展示流程流转,附上UML 活动图。

2025-10-26 09:45:00 940

原创 第 4 篇:SSM 分布式落地:状态持久化与并行状态(含 Redis/MySQL 实战)

继承,实现 MySQL 的 CRUD 逻辑,并通过确保事务一致性。@Service@Autowired@Autowired// 用于JSON序列化// 1. 保存上下文到MySQL(存在则更新,不存在则插入)@Override// 判断是否已存在该状态机上下文",if (count!// 更新上下文",} else {// 插入新上下文// 2. 记录事件日志(可选,用于审计)?// 简化逻辑,实际需获取事件前状态= null?"VALUES (?

2025-10-25 10:30:00 1724

原创 第 3 篇:SSM 进阶:监听机制、复合状态与子状态机(含源码)

/ 订单状态(包含父状态和子状态)CREATED, // 已创建(平级状态)PAID, // 已支付(父状态)TO_BE_SHIPPED, // 待发货(PAID的子状态)SHIPPING, // 发货中(PAID的子状态)COMPLETED;// 已完成(平级状态)// 订单事件PAY, // 支付(触发 CREATED → PAID)SHIP, // 发货(触发 TO_BE_SHIPPED → SHIPPING)DELIVER;

2025-10-25 09:30:00 1688

原创 第 2 篇:SSM 核心概念与源码剖析:状态、事件与转换的底层逻辑

/ 订单状态枚举(包含简单状态与终结状态)CREATED("已创建"), // 初始状态PAID("已支付"), // 简单状态SHIPPED("已发货"), // 简单状态DELIVERED("已送达"), // 终结状态CANCELLED("已取消");// 终结状态// 订单事件枚举(触发状态转换的信号)PAY("支付"), // 触发 CREATED → PAIDSHIP("发货"), // 触发 PAID → SHIPPED。

2025-10-24 17:51:14 1442

原创 Spring StateMachine 入门:从框架选型到环境实战

OFF(关闭)、ON(打开);PRESS(按下开关)。// 开关状态枚举OFF("关闭"), ON("打开");// 构造器、getter 省略// 开关事件枚举PRESS("按下开关");// 构造器、getter 省略SSM 中的默认实现是,其@Override@Override// 1. 创建状态机实例(默认实现是 AbstractStateMachine)// 2. 初始化状态机:设置初始状态、注册状态监听器等// 3. 返回初始化后的状态机。

2025-10-24 17:40:01 1138

原创 Debug大作战:奇葩报错诊疗所

案例1漏判“时区对字符串解析的影响”;案例2漏判“全角字符对加密的影响”;案例3漏判“定时任务对缓存的覆盖影响”。写代码时:多问“这个逻辑的依赖条件是什么?(如时区、字符编码、数据源)”“有没有其他代码会修改这个结果?(如定时任务、其他接口)”;排查时:先看“线上现象数据”(监控、投诉)缩小范围,再查“代码关键逻辑”(传参、处理、存储),最后用“工具+复现”验证假设;解决后:将“修复逻辑”封装成通用工具(如时区处理工具类、字符校验工具类),避免重复踩坑。

2025-10-22 16:28:09 1226

原创 第14篇:出师篇:Jackson在大型项目中的最佳实践

实现// 手机号脱敏序列化器// 必须提供无参构造(Jackson反射创建实例时需要)@Override= 11) {// 非手机号格式,直接返回原值return;// 脱敏逻辑:保留前3位和后4位,中间用****代替继承,将序列化器与“特定字段类型/注解”绑定(此处以“带@Sensitive// 自定义脱敏模块@Component// 1. 给“带@Sensitive注解的String字段”注册脱敏序列化器。

2025-10-22 09:30:00 1428

原创 第 13 篇:避坑指南:Jackson 常见问题与解决方案

若需要特殊转换规则(如 JSON 的 “Y/N” 转 Java 的Boolean),自定义反序列化器并通过@JsonDeserialize绑定到字段:步骤 1:自定义反序列化器// 自定义:"Y"→true,"N"→false@Override步骤 2:绑定到 Java 字段// 该字段使用自定义反序列化器// 测试:"Y"转Boolean// 输出true(转换成功)// 字段级格式:仅该字段用"yyyy-MM-dd",覆盖全局的"yyyy-MM-dd HH:mm:ss"

2025-10-22 09:00:00 920

原创 第12篇:实战案例:从0到1实现一个JSON工具类

JSON转换过程中可能出现多种异常(如),直接抛出原生异常会导致业务代码捕获逻辑复杂。我们封装一个自定义异常// 自定义JSON处理异常(继承RuntimeException,无需强制捕获)// 构造方法1:仅异常信息// 构造方法2:异常信息+根因异常后续所有JSON转换异常,都包装为抛出,业务代码可根据需要统一捕获(如全局异常处理器)。// Java 8日期类型// 集合属性// 省略getter、setter、toString、构造方法本文实现的JsonUtil统一配置:全局。

2025-10-21 16:40:08 496

原创 第11篇:源码解析:Jackson核心流程与设计模式

若需自定义序列化器/反序列化器:只需继承,重写,即可融入“序列化器链/反序列化器链”;若需修改序列化器选择逻辑:可扩展,重写,替换默认策略;若需批量定制Bean序列化:可扩展,重写,统一处理Bean的序列化逻辑。Jackson的架构之所以灵活,正是因为它用“流程解耦”(Provider)和“设计模式”(策略、工厂、模板方法)构建了可扩展的骨架——掌握这些底层逻辑,才能从“会用”到“用好”Jackson。

2025-10-21 16:38:41 800

原创 第10篇:高级特性:模块机制与扩展生态

官方模块覆盖了通用场景,但实际业务中会有“个性化需求”——比如枚举需要序列化“code”而非“name”、自定义的Money类需要序列化为"100.00元"格式。此时,我们可以将这些逻辑封装成自定义模块,实现“一次开发,多项目复用”。下面以“枚举序列化”为例,完整演示自定义模块的开发流程。getCode()针对CodeEnum类型,编写专属的序列化器(将枚举转为code)和反序列化器(将code// 自定义枚举序列化器:将CodeEnum序列化为code(Integer)@Override。

2025-10-17 10:00:00 1232

原创 第9篇:性能优化:让Jackson跑得更快

Jackson的性能优化并非“高深技巧”,而是“细节优化”——通过复用核心实例(单例)、减少无效计算(禁用冗余特性)、降低数据量(这三个方向,即可实现2-3倍的性能提升。这些优化的落地成本极低(只需修改初始化逻辑和添加注解),但在高并发场景(如微服务API、大数据同步)下,能显著降低系统的CPU和内存占用,避免性能瓶颈。建议你在项目中立即检查Jackson的使用方式,将上述优化应用到实际业务中——性能的提升,往往藏在这些细节里。

2025-10-17 09:30:00 899

原创 第8篇:Jackson与Spring Boot:实战整合技巧

/ 视图接口:用于标记不同场景的字段// 基础视图:列表接口用(只返回核心字段)// 详情视图:详情接口用(返回全部字段),继承Base视图(包含Base的所有字段)// 统一JSON响应类// 状态码:200成功,其他为错误码// 消息:成功/错误描述// 数据:正常响应时返回的数据(异常时为null,可忽略)@JsonInclude(JsonInclude.Include.NON_NULL) // null时不序列化// 时间戳:响应时间// 成功构造器(带数据)

2025-10-16 11:11:56 1085

原创 第7篇:复杂类型处理:泛型、嵌套对象与树模型

/ 最内层:城市// 城市名// 邮编// 省略getter/setter/toString// 中间层:地址// 街道// 嵌套City对象// 省略getter/setter/toString// 最外层:用户// 嵌套Address对象// 省略getter/setter/toString场景需求推荐方案核心优势泛型集合(如List)的反序列化破解泛型擦除,精准映射泛型类型多层固定结构的JSON(如User→Address→City)嵌套对象映射。

2025-10-16 10:57:09 353

原创 第6篇:`ObjectMapper`深度配置:全局行为定制

场景推荐方案优势项目统一规则(如日期格式、命名策略、空值过滤)全局配置一处配置,全域生效,减少重复代码个别字段特殊需求(如特殊日期格式、特殊字段名)局部注解灵活覆盖全局规则,不影响其他字段通过本文的四大核心配置,你可以彻底告别“注解泛滥”的问题,实现项目JSON处理规则的统一化、标准化——这不仅能提升开发效率,更能降低后续维护成本(如需修改规则,只需调整全局配置,无需逐个修改实体类)。

2025-10-15 16:42:33 1055

原创 第5篇:自定义序列化器与反序列化器:突破默认逻辑

敏感数据脱敏/加密:如用户手机号、身份证号,不能直接以明文返回,需要将中间几位替换为(脱敏),或通过 AES 加密后传输;特殊格式转换:如后端存储的“时间戳”需要转为前端可读的“yyyy-MM-dd HH:mm:ss”格式,或前端传递的“JSON 数组字符串”需要转为后端自定义的TagList对象;非常规类型映射:如 JSON 中的String类型(如“1,2,3”)需要转为 Java 中的,或 JSON 中的Object需要根据字段动态转为不同子类;空值特殊处理:默认情况下null。

2025-10-15 16:26:13 499

原创 第4篇:注解驱动:高级注解与复杂场景(下)

用和标注父类Animal// 1. 配置类型标识:添加"animal_type"字段,值为自定义名称(如"dog"/"cat")use = JsonTypeInfo.Id.NAME, // 类型标识用“自定义名称”include = JsonTypeInfo.As.PROPERTY, // 类型标识作为JSON的兄弟字段property = "animal_type" // 类型标识字段名:animal_type// 2. 声明子类映射:名称→子类。

2025-10-15 09:13:00 755

原创 第3篇:注解驱动:用注解定制JSON格式(上)

字段映射(重命名)、(忽略敏感字段);类级控制(加根节点)、(忽略未知字段);日期格式化(指定格式+时区);空值处理(动态排除空值)。通过这些注解,我们无需编写任何手动处理代码,就能让实体类“自描述”JSON格式,极大提升开发效率。下一篇我们将深入更复杂的场景(如枚举序列化、嵌套对象控制、自定义序列化逻辑等),进一步挖掘注解驱动的强大能力。

2025-10-15 09:05:17 673

原创 第 2 篇:基础序列化与反序列化:核心 API 全解析

本篇通过 “理论 + 代码示例” 详解了 Jackson 的基础序列化与反序列化能力:掌握实现 “Java 对象→JSON”,覆盖字符串与文件输出场景;掌握实现 “JSON→Java 对象”,支持字符串、文件、URL 等数据源;能处理基础类型、日期、集合等常见数据类型,解决泛型擦除问题;了解常见异常及解决方向,避免开发中踩坑。

2025-10-13 19:08:54 1126

原创 深入理解Spring Cloud RefreshScope:从原理、源码到实战

RefreshScope是Spring Cloud提供的自定义Scope默认的singletonScope:Bean初始化后一直存在于容器中,配置变化无法影响已创建的Bean;refreshScope:Bean会被缓存,但支持通过「刷新操作」清空缓存——下次调用Bean时,会重新创建实例并加载最新配置。动态替换容器中的Bean实例,实现配置热更新。基础实战中使用手动触发刷新,实际生产中可能需要更灵活的方式,如「自定义刷新接口」或「基于Spring Cloud Bus的批量刷新」。

2025-10-13 10:17:02 806

原创 Jackson 入门:为什么它是 Java JSON 处理的首选?

Jackson 是一套基于 Java 的 JSON 处理工具集,由jackson-core(核心流处理)、jackson-annotations(注解支持)和jackson-databind(数据绑定,最常用)三个核心模块组成。它的核心价值在于 **“高效、灵活、可扩展”**,能轻松实现 Java 对象与 JSON 字符串的双向转换,同时支持复杂场景的定制化处理。// 无参构造器(反序列化时必须,Jackson默认通过无参构造创建对象)// 有参构造器(方便创建对象)

2025-10-11 13:45:08 1006

原创 一文吃透FFmpeg:从核心原理到实战应用,解锁音视频处理全技能

FFmpeg的强大之处,在于它将“复杂的音视频处理逻辑”封装为简洁的命令和API,既满足普通用户的日常需求(格式转换、剪辑),也支撑企业级应用的底层开发(直播、智能剪辑、播放器)。无论是短视频平台的内容处理、影视后期的批量转码,还是开发者的自定义应用开发,FFmpeg都能提供高效、灵活的解决方案。通过本文的核心原理解析、场景化实战命令和进阶开发指南,你已掌握FFmpeg的核心使用能力。

2025-09-25 14:18:40 1022

原创 一文读懂常见视频流格式:从技术原理到场景化选型

追求兼容性和点播体验,选HLS+TS或DASH+MP4;追求超低延迟和互动性,选WebRTC;做直播推流,选RTMP+FLV;本地高清播放,选MP4或MKV。理解“传输协议”与“封装格式”的分工,再结合项目的核心诉求(延迟、兼容性、清晰度),就能轻松避开选型误区,搭建高效、稳定的视频方案。

2025-09-25 14:02:23 1104

原创 Redis集群部署模式全解析:原理、优缺点与场景适配

Redis三种集群模式分别对应“基础备份”“高可用”“分布式扩展”三大核心需求,没有绝对的“最优方案”,只有“最适配场景”的选择。主从复制是入门级方案,适合读多写少的简单场景;哨兵模式在主从基础上提升可用性,适合需自动故障转移的中等业务;Redis Cluster则通过分片实现水平扩展,是大规模业务的必然选择。

2025-09-14 21:29:00 838

原创 SpringBoot 中 ZK 与 Kafka 节点选择逻辑:底层原理与实践解析

SpringBoot 不做选择:节点选择由 ZK 客户端(Curator)完成,遵循 ZK 协议。核心依据是“节点角色”和“请求类型”:读走 Follower/Observer(轮询负载),写通过 Follower 转发 Leader。种子节点只是“入口”:不是固定连接的节点,仅用于获取集群拓扑。生产者看“Partition Leader”:先按策略选 Partition,再连该 Partition Leader 所在的 Broker。消费者看“Partition 分配”

2025-09-14 21:19:23 1353

原创 Spring Boot 生命周期与核心扩展点全解析(含实操案例)

/ 1. 实现扩展类@Override// 往环境中添加自定义属性// 将自定义属性添加到环境中(优先级低于配置文件)System.out.println("ApplicationContextInitializer:已添加自定义系统属性");// 2. 注册扩展类(两种方式任选其一)// 方式1:在启动类中手动注册// 添加自定义Initializer// 方式2:通过META-INF/spring.factories配置(推荐,解耦)

2025-09-14 08:17:46 1159 1

原创 TLS 1.3:重塑安全通信的核心优化解析

性能上:通过 1-RTT 首次握手、0-RTT 会话复用,解决了 TLS 长期存在的延迟痛点,尤其适配移动网络和跨地域通信;安全上:移除所有弱算法、强制前向安全、封堵侧信道漏洞,将加密安全门槛提升到新高度;灵活性上:预留后量子加密接口、优化分布式会话复用,确保协议在未来仍能适配新技术场景。如今,TLS 1.3 的全球部署率已超过 70%(据 SSL Labs 2024 年数据),成为 HTTPS 通信的主流协议。

2025-09-09 16:41:54 884

原创 深度解析HTTPS:从加密原理到SSL/TLS的演进之路

HTTPS通过TLS/SSL协议的加密机制、CA证书的信任体系,从根本上解决了HTTP的安全缺陷,已成为现代互联网的标配。从用户角度看,它保护了个人信息和隐私;从网站角度看,它提升了用户信任和品牌形象;从整个互联网生态看,它构建了安全通信的基础,推动了电子商务、在线支付等关键领域的发展。理解HTTPS的工作原理,不仅能帮助我们更好地保护自己的数据安全,也能让我们看清互联网安全技术的发展脉络——从SSL到TLS,从明文到加密,每一次技术迭代都是对安全威胁的回应,也是对用户信任的守护。

2025-09-09 15:53:39 1023

原创 MyBatis缓存机制全解析:一级缓存与二级缓存的实践指南

MyBatis缓存机制是提升系统性能的重要手段,但也伴随着数据一致性和分布式问题。一级缓存主要利用事务内的缓存复用,需注意数据一致性问题二级缓存适用于高频查询、低频修改的场景,分布式环境需使用Redis等集中式缓存针对缓存穿透、雪崩等问题,需实现相应的防护机制建立完善的缓存监控体系,持续优化缓存策略通过合理配置和科学管理,MyBatis缓存能在保证数据一致性的前提下,显著提升系统性能,为生产环境的稳定运行提供有力保障。

2025-09-09 09:46:41 831

原创 MyBatis执行器深度解析与SpringBoot集成实践

MyBatis执行器是SQL执行的“策略中枢”,三种核心类型(SIMPLE、REUSE、BATCH)分别对应不同业务场景,需结合实际需求选择。在SpringBoot中,通过可配置全局执行器,通过可实现局部执行器指定,配合事务管理和缓存优化,能最大化MyBatis的性能。实际开发中,建议优先使用默认的SIMPLE执行器处理普通业务,针对批量操作单独配置BATCH执行器,并通过等参数进一步优化——只有理解执行器的工作机制,才能真正发挥MyBatis在持久层的灵活性与高效性。

2025-09-09 09:12:39 944

原创 Java 并发编程:Executors 线程池全解析与实践陷阱

在 Java 并发编程领域,线程池是提升系统性能的关键组件。提供了多种预设线程池实现,简化了并发编程的复杂度。然而,这些"开箱即用"的线程池背后隐藏着不同的设计理念和潜在风险。本文将深入解析常用线程池的特性,结合实际场景说明其适用范围,并揭示可能导致线上故障的隐患。

2025-09-03 09:54:21 491

原创 Spring 中 Hikari 与 Druid 的详细介绍、对比及同类组件分析

Hikari(日语意为“光”)是 Spring Boot 2.x 及以上版本的默认数据库连接池,由日本开发者 Brett Wooldridge 开发,核心设计理念是「极致轻量与高性能」。Druid(中文意为“德鲁伊”)是阿里巴巴开源的数据库连接池,定位是「功能全面的企业级连接池」,除了连接池核心能力外,还集成了监控、统计、防SQL注入、加密等企业级特性,是国内互联网公司的主流选择之一。

2025-09-02 13:20:21 1617

原创 基于ZooKeeper实现分布式锁(Spring Boot接入)及与Kafka实现的对比分析

优先选择ZooKeeper:当业务要求高安全性(如分布式事务、数据一致性校验)、强公平性,且并发量适中(QPS<1000)时,ZooKeeper的临时节点和Watcher机制能提供更可靠的锁服务。优先选择Kafka:当业务面临高并发(QPS>10000)、允许短暂锁延迟,且已基于Kafka构建消息架构时,其高吞吐量特性可显著提升系统性能。实际开发中,还需结合中间件的运维成本(如ZooKeeper需维护奇数节点集群)、团队熟悉度等因素综合决策。

2025-09-02 11:09:52 1536

原创 深入理解Java动态代理:机制、实现与应用

首先定义目标接口,并实现具体的业务逻辑类// 目标接口// 目标类(实现接口)@OverrideSystem.out.println("业务逻辑:添加用户 -> " + username);// 目标类(无接口)// 非final方法(CGLIB可重写)System.out.println("业务逻辑:创建订单 -> " + orderId);// final方法(CGLIB无法代理)System.out.println("取消订单 -> " + orderId);

2025-08-29 18:32:26 682

原创 基于K8s部署服务:dev、uat、prod环境的核心差异解析

K8s部署中dev、uat、prod的差异,本质是“场景适配”——用最小的成本满足当前环境的核心需求dev环境:优先“效率”,简化配置、降低资源开销,让开发者专注于代码调试;uat环境:优先“精准”,贴近生产配置,确保测试结果能真实反映上线后状态;prod环境:优先“稳定”,通过资源冗余、安全防护、灰度发布、全链路监控,保障业务不中断。实际落地时,需避免两个极端:一是“dev环境过度生产化”(如配置多副本、复杂网络策略),导致开发效率低;

2025-08-28 21:47:07 1124

原创 消息队列核心问题解决方案:从丢失到重复消费的全方位保障

环节核心动作生产者端1. 开启发送确认(Ack/Confirm);2. 开启重试机制;3. 处理发送失败回调Broker 端1. 开启持久化(队列+消息);2. 配置副本/镜像(至少 2 个);3. 禁用自动删除消费者端1. 关闭自动 Ack,手动确认;2. 实现业务幂等(唯一 ID/业务键去重);3. 开启重试积压处理1. 合理设置分区/队列数;2. 多线程消费;3. 临时扩容消费者。

2025-08-28 21:34:45 880

原创 JVM分层编译深度解析:完整机制与实践指南

JVM分层编译通过0-4层的精细化设计,构建了从"快速启动"到"极致优化"的完整性能演进路径。动态资源分配:根据代码热度分配编译资源,避免无效优化数据驱动优化:通过2层Profiling实现精准优化,提升优化效率弹性调整机制:通过去优化应对运行时变化,保证优化有效性理解分层编译机制,不仅有助于编写更易被JVM优化的代码(如减少过度复杂的分支、控制方法长度),更能针对特定场景制定有效的调优策略。对于大多数应用而言,保持默认配置即可获得最佳平衡,但在性能敏感场景下,有针对性的层级调整可进一步挖掘性能潜力。

2025-08-26 21:42:30 1148

原创 揭秘 Java 逃逸分析触发机制:从阈值配置到代码验证的实战指南

逃逸分析的触发机制本质是JVM的“性能平衡术”——通过设置合理的编译阈值,避免过早编译带来的CPU开销,同时确保热点代码能及时被优化。逃逸分析依赖JIT编译,而编译触发的核心是“方法调用次数达到阈值”;通过等参数可灵活控制逃逸分析的生效时机;未逃逸对象在阈值前后的内存分配行为有显著差异(堆分配→栈分配)。性能敏感场景下,通过降低阈值让逃逸分析更早生效;利用和内存监控验证优化效果;生产环境保持默认阈值,避免过度优化引入的稳定性风险。

2025-08-26 21:09:16 618

原创 Java逃逸分析:从隐形杀手到性能利器的实战调优指南

逃逸分析(Escape Analysis)是JVM中一种静态分析技术,它通过跟踪对象的生命周期,判断对象是否会"逃逸"出当前方法或线程。未逃逸:对象仅在当前方法内使用方法逃逸:对象被作为方法返回值返回线程逃逸:对象被存储到类静态变量或可被其他线程访问的实例变量// 示例1:不同逃逸程度的对象// 线程逃逸:静态变量引用的对象// 方法逃逸:作为返回值return obj;// 方法逃逸// 线程逃逸:赋值给静态变量// 线程逃逸// 未逃逸:仅在方法内部使用// 未逃逸。

2025-08-26 21:06:08 1038

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除