- 博客(52)
- 收藏
- 关注
原创 Nginx vs Ribbon:负载均衡的两种核心范式(反向代理 vs 客户端负载)
本文深入分析了Nginx与Ribbon两种负载均衡技术的核心区别。Nginx作为服务端负载均衡,采用反向代理模式,具有高性能的异步非阻塞架构;Ribbon则是客户端负载均衡,嵌入服务消费者进程,直接调用目标实例。文章详细对比了二者的架构位置、实现原理和适用场景,指出Nginx适合入口流量分发,Ribbon更适合微服务内部调用。同时介绍了SpringCloud LoadBalancer作为Ribbon的替代方案,强调在微服务架构中合理选择负载均衡技术对系统性能的重要性。通过具体案例和流程分析,帮助开发者理解不
2026-04-02 16:13:18
876
1
原创 Java 设计模式・解释器模式篇:从思想到代码实现
本文介绍了行为型设计模式中的解释器模式(Interpreter Pattern)。该模式通过定义语言的文法规则和对应的解释器,实现对特定语句的解释执行。文章详细阐述了解释器模式的核心概念(文法规则、抽象语法树)、角色划分(抽象表达式、终结符/非终结符表达式、环境角色)以及Java代码实现示例。分析了其优点(易于扩展、结构清晰)和缺点(复杂文法难维护、执行效率低),并列举了适用场景(简单文法、自定义语言解释)与不适用场景(复杂语法、高性能需求)。最后通过对比组合模式、访问者模式和模板方法模式,以及JDK正则表
2026-03-28 10:00:00
839
1
原创 Java 设计模式・备忘录模式篇:从思想到代码实现
本文系统介绍了行为型设计模式中的备忘录模式(Memento Pattern)。该模式通过在不破坏封装性的前提下捕获对象内部状态并保存,实现状态回退和撤销功能。文章详细阐述了备忘录模式的两种实现方式(白箱和黑箱),对比分析了其优缺点及适用场景,并提供了Java代码示例。此外,还将备忘录模式与命令模式、原型模式进行对比,指出其在游戏存档、编辑器撤销等场景的应用价值。最后提到Java序列化机制本质上是备忘录模式的一种实现。该模式的核心优势在于封装状态数据并支持历史状态恢复,但需注意内存消耗问题。
2026-03-27 14:24:27
737
原创 Java 设计模式・访问者模式篇:从思想到代码实现
行为型设计模式通过定义对象间的通信方式和职责分配,提升代码的灵活性和可维护性。本文重点介绍了访问者模式,它通过双分派机制实现操作与数据结构的解耦,使新增操作时无需修改元素类。访问者模式包含抽象访问者、具体访问者、抽象元素、具体元素和对象结构五个角色,适用于数据结构固定但操作频繁变化的场景。其优点是操作扩展灵活、管理集中,缺点是破坏封装性且数据结构扩展困难。文中还通过宠物喂养的代码示例和Java序列化源码分析,展示了访问者模式的实际应用,并与其他行为型模式进行了对比分析。
2026-03-26 10:00:00
1062
原创 MyBatis @Param 注解详解:为什么 mapper 接口参数必须加它?
本文深入解析MyBatis中@Param注解的使用场景与原理。文章指出,@Param注解在Mapper接口参数传递中起关键作用,其使用需根据参数数量、类型灵活判断:单参数可不加,多参数必须加,集合参数需自定义名称时必须加。底层原理是@Param通过ParamNameResolver类为参数命名,确保SQL正确绑定。文章还揭示了IDEA默认保留参数名的特性,但建议规范使用@Param以避免环境差异问题。通过详细拆解各种应用场景和实现机制,帮助开发者彻底掌握@Param的正确用法,规避参数传递常见错误。
2026-03-25 10:00:00
800
原创 微服务请求全链路解析:从前端到微服务,一次看懂 Nginx、Nacos、网关与 MVC 拦截器到底干了啥
本文详细剖析了微服务架构下一次HTTP请求的完整生命周期。当用户发起请求时,请求首先经过DNS解析和TCP三次握手,随后由Nginx反向代理转发至网关层。网关执行身份认证、权限校验等前置过滤,并通过Nacos服务发现获取目标微服务实例。业务处理过程中,Feign客户端实现跨服务调用,各微服务通过ThreadLocal共享上下文。最终响应数据经网关后置过滤器和Nginx返回客户端。整个流程涉及服务注册发现、负载均衡、链路追踪等微服务核心机制,展现了现代分布式系统的高效协同运作。
2026-03-24 15:52:14
549
原创 Java 设计模式・迭代器模式篇:从思想到代码实现
摘要:迭代器模式是一种行为型设计模式,用于提供统一的方法顺序访问聚合对象中的元素,同时隐藏其内部结构。该模式将遍历逻辑从聚合类中抽离,通过迭代器接口(如hasNext()、next())实现解耦,支持多种遍历方式且符合单一职责原则。虽然会增加系统复杂度,但特别适用于需要统一遍历不同数据结构、隐藏内部实现或支持多种遍历方式的场景。Java集合框架中的Iterator接口是典型实现,相比普通for循环具有更好的封装性和扩展性,但简单遍历场景可能造成过度设计。模式包含抽象聚合、具体聚合、抽象迭代器和具体迭代器四个
2026-03-22 10:53:40
693
原创 Java 设计模式・中介者模式篇:从思想到代码实现
行为型设计模式关注对象间的交互与职责分配,通过命令、迭代、观察者等11种模式提升代码灵活性和可维护性。本文重点解析中介者模式,该模式通过引入中介对象(如租房中介)协调多个对象(房东、租客)间的交互,将网状依赖转为星型结构,降低耦合度。代码示例展示了中介者模式在租房场景中的实现,包括抽象中介者、具体中介公司、客户角色等核心组件。该模式适用于复杂交互场景(如聊天室、UI组件联动),但需警惕中介者过度膨胀的风险。文章还对比了中介者与观察者、状态等模式的区别,并分析了AWT事件机制中的源码应用。
2026-03-21 11:43:07
867
原创 Java 设计模式・观察者模式篇:从思想到代码实现
摘要:本文介绍了行为型设计模式中的观察者模式,通过微信公众号订阅的实例展示了该模式的实现方式。观察者模式实现对象间一对多的依赖关系,当被观察者状态变化时自动通知所有观察者。文章详细说明了模式角色(抽象/具体观察者、抽象/具体被观察者)、Java代码实现、优缺点分析及适用场景,并与发布-订阅模式进行对比。同时指出JDK中原生支持但已废弃的Observable/Observer实现,强调该模式在事件监听、状态同步等场景的应用价值。
2026-03-20 13:25:21
754
原创 Java 设计模式・状态模式篇:从思想到代码实现
摘要:本文系统介绍了行为型设计模式中的状态模式及其应用。状态模式通过封装对象的不同状态及其转换逻辑,实现对象行为随内部状态自动变化。文章详细阐述了状态模式的三大角色(环境、抽象状态、具体状态),并以订单状态流转为例展示了Java代码实现。通过对比策略模式、责任链模式和if/else实现方式,分析了状态模式在消除条件判断、提高扩展性方面的优势,以及可能导致的类膨胀问题。最后指出该模式适用于多状态、复杂流转场景,而不适用于简单状态管理。
2026-03-19 10:00:00
755
原创 Spring 配置类常用注解,一篇就够了
本文系统梳理了Spring配置类中的核心注解,详细解析了@ComponentScan、@PropertySource、@Conditional系列、@Lazy和@Profile等常用注解的功能特点和使用场景。通过对比注解间的差异与优先级,帮助开发者深入理解Spring容器初始化机制,掌握配置类的最佳实践。文章特别强调注解的合理组合使用,如@PropertySource与@ConfigurationProperties的配置绑定组合,以及@Conditional系列注解在自动配置中的关键作用。同时针对常见开发
2026-03-18 10:00:00
734
原创 Spring 核心机制:到底什么样的类才算配置类?@Configuration 与 @Component 的本质区别
本文系统梳理了Spring配置类的核心概念与实现形式。配置类(@Configuration)是Spring容器进行资源加载和Bean定义的核心入口,与普通组件类(@Component)存在本质区别。文章详细解析了配置类的定义标准、实现方式(标准注解式、简化注解式、非注解式、间接导入式)及其适用场景,深入探讨了@Bean和@Configuration注解的作用原理与使用规范。同时对比了不同配置形式(@Component+@Bean、XML配置等)的差异与优劣,强调@Configuration作为官方推荐方式在
2026-03-17 15:43:46
410
原创 彻底搞懂:常量池、字符串常量池、运行时常量池、静态常量池,一篇讲清
本文深入解析Java常量池体系,包括静态常量池、运行时常量池和字符串常量池。静态常量池是编译期产物,存储在.class文件中,包含字面量和符号引用;运行时常量池是静态常量池在内存中的运行时版本,可动态扩展,存储解析后的直接引用;字符串常量池是专门优化字符串存储的特殊区域。文章详细阐述了它们的存储位置、加载时机、作用范围及生命周期差异,并分析了符号引用的重要性、类的加载过程以及字符串创建的不同方式。通过对比JDK不同版本的实现变化,帮助开发者彻底理解常量池的核心机制。
2026-03-15 10:00:00
763
原创 Java 设计模式・责任链模式篇:从思想到代码实现
本文系统介绍了行为型设计模式中的责任链模式。该模式通过将多个处理者连成一条链,使请求沿着链传递直至被处理,实现请求与处理的解耦。文章详细阐述了责任链模式的角色划分(抽象处理者、具体处理者、客户类)、代码实现(以请假审批流程为例),并分析了其优缺点:优点包括解耦、职责单一、灵活扩展;缺点涉及性能损耗、调试困难等。同时列举了适用场景(多级审批、预处理链路)与不适用场景(简单逻辑、高性能要求),并与其他模式(策略、命令、装饰器)进行对比。最后以Spring拦截器为例展示了该模式在源码中的应用。
2026-03-14 09:49:16
828
原创 从 JVM 底层拆解:i++、++i、i+=1、i=i+1 的实现逻辑与坑点
本文从JVM字节码层面深入分析了Java中i++、++i、i+=1和i=i+1四种自增操作的底层实现差异。通过拆解局部变量表和操作数栈的交互机制,揭示了i=i++结果为0的反直觉现象本质:后置自增(i++)会先将原值压栈再自增,导致赋值时用栈中原值覆盖自增结果。对比发现,++i直接通过iinc指令修改局部变量表,效率最高;i+=1和i=i+1完全依赖操作数栈运算,指令最多;i++需要额外栈操作保留原值。理解这些差异有助于编写高效代码和排查相关bug。
2026-03-13 10:45:00
692
原创 深入浅出 AOP:织入时机、JDK 动态代理与 CGLIB 原理及 Spring 选择策略
对比维度JDK 动态代理CGLIB 动态代理核心前提被代理类必须实现至少一个接口被代理类无需实现接口,基于继承生成子类底层技术依赖包,核心是反射依赖 ASM 字节码框架,直接生成字节码调用机制首次调用走反射,后续优化为动态字节码直接调用借助FastClass,全程无反射直接调用方法支持仅支持代理接口的public方法原生支持非 private/final 方法,Spring 封装后默认仅增强 public代理对象类型接口的实现类,仅能强转为接口类型被代理类的子类,可强转为被代理类本身。
2026-03-12 10:45:00
822
原创 力扣 5. 最长回文子串:动态规划、中心扩展、Manacher 算法全解(Java 实现)
对比维度动态规划 (DP)中心扩散法Manacher 算法核心思想利用子问题重叠性,自底向上构建解,通过dp[i][j]记录子串s[i..j]是否为回文。枚举所有可能的回文中心(字符或字符间隙),向两侧扩展,记录最长回文。利用回文对称性,通过预处理将偶数长度回文转为奇数长度,避免重复计算,实现线性时间。时间复杂度O(n²)O(n²)O (n)(线性时间,最优)空间复杂度O (n²)(可优化至 O (n) 滚动数组)O (1)(仅用常数额外空间)O (n)(预处理字符串和辅助数组)实现难度。
2026-03-11 10:45:00
750
原创 力扣 28. 找出字符串中第一个匹配项的下标:从暴力到 KMP 算法详解(Java 实现)
本文系统讲解了字符串匹配问题LeetCode28的两种解法:暴力匹配和KMP算法。暴力匹配通过逐个字符比对实现,时间复杂度为O(n*m),实现简单但效率低。KMP算法利用共同前后缀思想预处理模式串生成pi数组,在匹配时主串不回退,通过pi数组指导模式串跳转,将时间复杂度优化至O(n+m)。文章详细剖析了KMP的核心思想,给出了完整的Java实现代码,包括pi数组的计算和主串匹配流程,帮助读者从原理到实践全面掌握这一经典算法。两种方法各有优劣,KMP虽复杂但效率更高,适合处理大规模文本匹配。
2026-03-10 10:00:00
660
原创 力扣 42. 接雨水:动态规划 / 单调栈 / 双指针 三种解法全解析(Java 实现)
本文系统讲解了LeetCode42接雨水问题的三种解法:1)动态规划法(O(n)时间+O(n)空间),通过预存左右最大高度纵向计算;2)双指针法(O(n)时间+O(1)空间),通过"谁小移谁"策略优化空间;3)单调栈法(O(n)时间+O(n)空间),维护递减栈横向计算凹槽面积。三种方法分别体现了不同的算法思想,动态规划易于理解,双指针空间最优,单调栈则提供了横向计算的新视角。每种方法均附有Java实现代码,全面覆盖该题的求解思路。
2026-03-09 10:00:00
1053
原创 Java 16+ 新特性:一篇吃透 Record,告别冗余 POJO
Java Record是Java 16引入的一种特殊类,专门用于简化不可变数据载体类(如DTO、VO等)的定义。它通过编译器自动生成构造器、访问器、equals/hashCode/toString等方法,大幅减少模板代码。Record的核心特性包括:组件字段自动转为private final,保证不可变性;支持紧凑构造器进行参数校验;允许自定义静态字段和方法,但禁止实例代码块和非静态字段。Record适用于纯数据存储场景,通过简洁语法提供安全规范的数据类定义,同时保持与普通类的互操作性。使用时需注意其设计限
2026-03-08 10:45:00
749
原创 Java 多态核心:继承、方法重载与重写,从语法到设计思想全解析
本文系统解析了Java面向对象编程中的继承、方法重载与重写三大核心概念。继承通过extends实现代码复用,子类可继承父类字段和方法(受访问权限限制),但构造方法无法继承。方法重载(Overload)是同一类中同名不同参数的方法,而方法重写(Override)是子类重新定义父类方法,实现多态特性。文章详细对比了两者的区别,包括参数列表、返回值、访问权限等约束条件,并强调静态方法只能隐藏不能重写。同时指出字段访问是编译时绑定无多态,而方法调用支持运行时多态绑定。最后澄清了返回值、访问权限和异常处理在方法重写中
2026-03-07 10:45:00
662
原创 彻底搞懂 final 和 static:从修饰类、方法到字段的全场景指南
摘要:本文深入解析Java中final和static修饰符的核心概念与使用场景。static修饰类成员表示其属于类本身而非实例,控制生命周期和访问方式;final则限制类、方法或变量的不可修改性。文章详细对比了二者在字段、方法、代码块及类中的不同表现,重点分析了静态字段、静态代码块、实例字段、实例代码块的执行顺序,解释了static final组合定义常量的优势,并阐述了静态内部类与非静态内部类的本质区别。通过执行时机、优先级和使用场景的系统梳理,帮助开发者清晰掌握这两个关键修饰符的应用要点与常见误区。
2026-03-06 09:45:00
662
原创 Java 设计模式・命令模式篇:从思想到代码实现
摘要:行为型设计模式关注对象间交互与职责分配,提升代码灵活性和可维护性。命令模式是其中一种,通过将请求封装为对象实现调用者与接收者解耦,支持撤销、排队等功能。文章以餐厅点餐为例,展示了命令模式的基本实现、撤销功能扩展和队列处理优化,并分析了其优缺点及适用场景。模式适用于需要解耦、支持撤销或批量操作的场景,但在简单业务中可能过度设计。文中还对比了策略模式、装饰器模式等,并列举了JDK中Runnable接口的命令模式实现。
2026-03-05 15:51:25
699
原创 Java 设计模式・策略模式篇:从思想到代码实现
行为型设计模式关注对象间的交互和职责分配,提升代码灵活性和可维护性。策略模式是其中一种经典实现,它通过封装算法实现逻辑与使用方的解耦,支持动态切换策略。该模式包含抽象策略、具体策略和环境类三个角色,典型应用如支付方式选择、排序算法切换等场景。策略模式优点包括消除冗余条件判断、遵循开闭原则、提高复用性;缺点是可能增加类数量。适用场景为需要动态切换算法实现的情况,与工厂模式、模板方法模式等存在设计目标差异。Java中的Comparator接口是策略模式的典型应用。
2026-03-04 10:30:00
995
原创 Spring Boot 配置读取:@Value 与 @ConfigurationProperties 怎么选?
SpringBoot中@Value与@ConfigurationProperties配置读取对比 摘要:本文对比分析了SpringBoot中两种核心配置读取方式。@Value适合简单配置注入,支持基础类型但缺乏复杂类型转换能力;@ConfigurationProperties专为结构化配置设计,支持批量绑定、类型转换、嵌套属性及校验功能。关键差异体现在:1)松散绑定支持度;2)时间/集合/POPO转换能力;3)默认值设置方式。实际开发中,推荐复杂配置使用@ConfigurationProperties,简单
2026-03-03 10:30:00
1581
原创 Java 设计模式・总结目录篇:从思想到代码实现
设计模式是解决软件设计中常见问题的可复用方案,主要分为三类:创建型模式(如单例、工厂、建造者、原型模式)关注对象的创建;结构型模式(如代理、适配器、装饰器、桥接等)处理类与对象的组合;行为型模式(如策略、观察者、责任链等)定义对象间的交互方式。这些模式通过封装变化、解耦依赖,提高代码的灵活性、可扩展性和可维护性,帮助开发者应对复杂业务场景下的设计挑战。
2026-03-02 10:00:00
713
原创 Java 设计模式・模板方法模式篇:从思想到代码实现
行为型设计模式关注对象间的交互与职责分配,通过11种经典模式(如模板方法、策略、观察者等)提升代码灵活性。模板方法模式通过定义算法骨架(父类)和延迟步骤实现(子类)实现代码复用,典型应用包括Spring容器初始化流程。该模式优点包括流程标准化、易于扩展,但存在类膨胀、继承限制等缺点。与其他模式相比,模板方法与工厂方法模式都基于继承,但前者关注流程定义,后者侧重对象创建;与建造者模式相比,前者强调算法步骤顺序,后者注重产品部件组装。
2026-03-01 19:31:38
1077
原创 Java 设计模式・享元模式篇:从思想到代码实现
享元模式是一种结构型设计模式,通过共享对象来有效支持大量细粒度对象。它将对象状态分为内部状态(固定可共享)和外部状态(可变不可共享),通过享元工厂管理共享对象。该模式适用于对象数量多且相似的情况,能显著减少内存占用和对象创建开销,但会增加系统复杂度。文中以围棋棋子为例展示了代码实现,并对比了单例、原型等模式,指出其核心优势在于对象复用。Java的Integer缓存机制是典型应用。
2026-02-28 15:01:36
866
原创 Java 设计模式・组合模式篇:从思想到代码实现
摘要:组合模式是一种结构型设计模式,用于将对象组织成树形结构,使客户端能够统一处理单个对象和组合对象。该模式包含抽象根节点、树枝节点和叶子节点三个角色,分为透明组合模式和安全组合模式两种实现方式。透明模式统一接口但存在安全风险,安全模式区分节点类型但丧失透明性。组合模式适用于文件系统、菜单树等层级结构场景,优点包括简化客户端代码、符合开闭原则,缺点可能带来过度设计。与装饰者模式、适配器模式等其他结构型模式相比,组合模式专注于构建"整体-部分"关系。Java AWT组件体系是组合模式的典型
2026-02-27 20:19:25
983
原创 基于动态规划的旅行商问题 (TSP) Java 完整实现
本文介绍了旅行商问题(TSP)的动态规划解法。首先分析了暴力解法O(n!)的时间复杂度问题,然后提出使用状态压缩动态规划方法。核心思路是用二进制数表示城市访问状态,定义dp[mask][u]表示从起点出发访问mask对应城市集合后停在u的最短路径。详细阐述了递推公式、二进制状态表示方法、位运算优化、二维表格设计及初始化过程。重点说明了遍历顺序、无效状态判定和集合操作等关键步骤,最终返回dp[0][n-1]作为最优解。该算法通过状态压缩将时间复杂度从阶乘级降低到指数级,显著提升了计算效率。
2026-02-26 19:58:34
1144
原创 Java 设计模式・外观模式篇:从思想到代码实现
结构型设计模式关注如何组合类和对象以构建更大的结构。本文重点介绍了外观模式(Facade),它为复杂子系统提供一个统一的高层接口,简化客户端调用。外观模式通过封装多个子系统的交互逻辑,实现客户端与子系统的解耦,提高代码的可维护性。文章详细展示了外观模式的Java实现代码,包括子系统角色(灯、空调)和外观角色(智能助手),并分析了其优缺点。此外,还将外观模式与适配器模式、代理模式等进行了对比,说明其适用场景。外观模式特别适用于需要简化复杂子系统调用、统一业务流程控制的场景。
2026-02-24 18:03:36
1005
原创 Java 设计模式・桥接模式篇:从思想到代码实现
摘要:桥接模式是一种结构型设计模式,通过将抽象部分与实现部分分离,使两者能够独立变化。该模式使用组合关系代替继承,有效解决了多维度扩展导致的类爆炸问题。文中以绘画工具和颜料为例,展示了桥接模式的实现方式:抽象化角色(绘画工具)持有实现化角色(颜料)的引用,通过桥接方式实现两者的解耦。该模式具有高扩展性和复用性,适用于存在多个独立变化维度的复杂场景,但学习成本较高,不适合简单需求。文中还对比了桥接模式与装饰者、适配器等模式的异同点。
2026-02-23 22:21:02
773
原创 Java 设计模式・装饰器模式篇:从思想到代码实现
摘要:结构型设计模式通过组合、代理等方式优雅组织类与对象,提升代码灵活性。装饰器模式作为典型结构型模式,能在不改变对象结构的情况下动态添加功能。其核心包含抽象构件、具体构件、抽象装饰和具体装饰四个角色,通过嵌套包装实现功能叠加。相比继承,装饰器模式具有动态扩展、低耦合等优势,但也存在嵌套层级深时影响可读性等问题。适用于需要动态添加功能的场景,如Java IO流中的BufferedInputStream就是经典实现。装饰器模式与代理模式结构相似但目的不同,前者侧重功能扩展,后者侧重访问控制。
2026-02-19 13:28:17
862
原创 Java 设计模式・适配器模式篇:从思想到代码实现
摘要:结构型设计模式通过合理组织类与对象关系提升代码质量,重点分析了适配器模式。适配器模式分为类适配器(继承实现)和对象适配器(组合实现)两种形式,后者更符合合成复用原则,具有更高灵活性。该模式能解耦核心逻辑与适配逻辑,复用已有功能,但会增加系统复杂度。Java标准库中的InputStreamReader/OutputStreamWriter是典型应用案例,将字节流适配为字符流接口。适配器模式适用于接口不兼容但需复用功能的场景,是提升系统扩展性的有效手段。(149字)
2026-02-17 10:00:00
891
原创 Java 设计模式・代理模式篇:从思想到代码实现
摘要:结构型设计模式通过组合、代理等方式优雅地组织类与对象,提升代码灵活性和可维护性。本文重点解析代理模式,包括静态代理、JDK动态代理和CGLIB代理三种实现方式。静态代理需手动编写代理类;JDK动态代理通过Proxy类动态生成代理对象,要求目标类实现接口;CGLIB代理则通过生成子类方式代理无接口类。三种方式各具特点:静态代理简单但扩展性差,动态代理灵活但存在性能开销。代理模式广泛应用于远程调用、权限控制等场景,Spring AOP正是基于此模式实现方法增强。合理使用代理模式能有效解耦业务逻辑与横切关注
2026-02-16 10:00:00
1029
原创 Java 设计模式・原型模式篇:从思想到代码实现
摘要:本文系统介绍了Java创建型设计模式中的原型模式实现。通过对比赋值、浅克隆和深克隆三种对象复制方式,详细分析了它们在内存地址、基本类型和引用类型处理上的差异。文章提供了用户和地址类的代码示例,演示了浅克隆(实现Cloneable接口)和深克隆(手动递归重写clone()方法和序列化方式)的具体实现方法,并通过测试案例验证了不同克隆方式的行为特性。最后简要提及其他创建型模式(单例、工厂、建造者模式)的参考资源,为Java开发者提供了一套完整的对象创建解决方案。
2026-02-15 11:26:27
950
原创 Java 设计模式・建造者模式篇:从思想到代码实现
本文系统介绍了建造者设计模式及其在Java中的实现。建造者模式通过分离复杂对象的构建与表示,使同样的构建过程可以创建不同表示。文章详细解析了模式的四个核心角色(抽象建造者、具体建造者、产品和指挥者),并提供了三种代码实现方案:基础版、简化版和内部类版。通过娃娃构建的示例,展示了如何逐步组装对象部件。文章还比较了建造者模式与工厂模式的区别,分析了其优缺点(封装性好但适用范围有限),并以Java中的StringBuilder为例说明该模式的实际应用。建造者模式特别适用于构建过程复杂且需要灵活配置的对象创建场景。
2026-02-14 10:00:00
928
原创 Java 设计模式・工厂模式篇:从思想到代码实现
本文系统介绍了创建型设计模式及其应用。首先阐述了创建型模式的核心价值:将对象创建与使用分离,提升代码灵活性。重点分析了五种经典模式:单例模式确保全局唯一实例;工厂方法模式通过子类决定实例化对象;抽象工厂模式创建相关产品族;建造者模式分离复杂对象构建与表示;原型模式通过拷贝创建新对象。 文章详细对比了简单工厂、工厂方法和抽象工厂模式的特点与适用场景:简单工厂通过参数创建对象但违反开闭原则;工厂方法通过子类扩展新产品;抽象工厂适合创建相关产品族。通过咖啡店案例展示了三种工厂模式的代码实现差异,并指出配置文件优化
2026-02-13 10:00:00
862
原创 Java 设计模式・单例模式篇:从思想到代码实现
本文详细介绍了Java中的创建型设计模式,重点解析了单例模式的实现方式及其优缺点。创建型模式通过封装对象创建过程,提升代码的灵活性和可维护性。单例模式确保类只有一个实例,提供全局访问点。文章对比了饿汉式(类加载时创建)和懒汉式(首次使用时创建)的实现,包括静态变量、静态代码块、枚举等方式,并分析了线程安全问题及解决方案(如双重检查锁、volatile关键字)。同时探讨了单例模式可能被序列化和反射破坏的情况,提出了防护措施(readResolve方法和构造器检查)。最后以JDK的Runtime类为例展示了实际
2026-02-12 16:56:29
878
原创 基于 Redis 的秒杀集群系统迭代实现【消息队列异步优化】(附详细流程图)
本文介绍了基于Redis实现异步秒杀系统的优化方案。首先分析了传统秒杀系统使用数据库乐观锁的性能瓶颈,提出采用Redis+Lua脚本保证原子性的方案,并通过JVM阻塞队列实现异步处理。随后针对内存队列的缺陷,详细比较了Redis四种消息队列实现方式(List/PubSub/Stream),最终选择基于Stream的消费者组模式,实现消息持久化、多消费者协同消费和消息确认机制。系统通过Lua脚本完成库存扣减和订单校验,将订单消息写入Redis Stream,由独立线程异步处理数据库操作。该方案解决了高并发下的
2026-02-09 13:55:32
1238
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅