<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Java 企业级开发生态全景指南 on PlumePHP</title><link>https://plumephp.com/posts/java-enterprise/</link><description>Recent content in Java 企业级开发生态全景指南 on PlumePHP</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Fri, 14 Aug 2026 10:35:00 +0800</lastBuildDate><atom:link href="https://plumephp.com/posts/java-enterprise/index.xml" rel="self" type="application/rss+xml"/><item><title>限流算法深度解析：令牌桶、漏桶与滑动窗口计数</title><link>https://plumephp.com/java-rate-limiting-algorithms/</link><pubDate>Fri, 14 Aug 2026 10:35:00 +0800</pubDate><guid>https://plumephp.com/java-rate-limiting-algorithms/</guid><description>&lt;p&gt;在高并发系统中，限流是保护服务稳定性的核心手段。当请求量超过系统承载能力时，通过拒绝或延迟部分请求，可以防止级联故障，保障核心功能的可用性。理解不同限流算法的原理与适用场景，是设计高可用系统的必备技能。&lt;/p&gt;</description></item><item><title>Java 代码质量：SonarQube、Checkstyle 与 SpotBugs 工程化实践</title><link>https://plumephp.com/java-code-quality/</link><pubDate>Fri, 14 Aug 2026 10:34:00 +0800</pubDate><guid>https://plumephp.com/java-code-quality/</guid><description>&lt;p&gt;代码质量是软件工程的核心议题。高质量的代码不仅意味着更少的 Bug，还直接影响系统的可维护性、可扩展性和团队协作效率。通过工具化、自动化的代码质量保障体系，可将质量检查前置到开发阶段，大幅降低修复成本。&lt;/p&gt;</description></item><item><title>Spring IoC 容器与依赖注入原理深度剖析</title><link>https://plumephp.com/java-spring-ioc/</link><pubDate>Fri, 14 Aug 2026 10:33:00 +0800</pubDate><guid>https://plumephp.com/java-spring-ioc/</guid><description>&lt;p&gt;控制反转（Inversion of Control, IoC）是 Spring 框架的基石。它将对象创建的主动权从应用代码转移给容器，通过依赖注入（Dependency Injection, DI）实现组件间的松耦合。深入理解 IoC 容器的运作机制，是掌握 Spring 框架的必经之路。&lt;/p&gt;</description></item><item><title>分布式文件存储：MinIO、阿里云 OSS 与 Spring 集成实战</title><link>https://plumephp.com/java-file-storage/</link><pubDate>Fri, 14 Aug 2026 10:32:00 +0800</pubDate><guid>https://plumephp.com/java-file-storage/</guid><description>&lt;p&gt;文件存储是业务系统中普遍存在的场景，包括用户头像、商品图片、附件上传、视频存储等。在分布式环境下，本地文件系统已无法满足需求，对象存储（Object Storage）成为标准方案。&lt;/p&gt;</description></item><item><title>Bean Validation 与 Hibernate Validator 数据校验精要</title><link>https://plumephp.com/java-validation-hibernate/</link><pubDate>Fri, 14 Aug 2026 10:31:00 +0800</pubDate><guid>https://plumephp.com/java-validation-hibernate/</guid><description>&lt;p&gt;数据校验是企业级应用的第一道防线，在数据进入业务逻辑之前拦截非法输入，可有效减少系统漏洞和异常。Bean Validation 2.0（JSR-380）与 Hibernate Validator 6.x 提供了强大且灵活的校验机制。&lt;/p&gt;</description></item><item><title>Spring AOP 原理剖析与 AspectJ 企业级实战</title><link>https://plumephp.com/java-aop-deep-dive/</link><pubDate>Fri, 14 Aug 2026 10:30:00 +0800</pubDate><guid>https://plumephp.com/java-aop-deep-dive/</guid><description>&lt;p&gt;面向切面编程（AOP）是 Spring 框架的核心能力之一，它允许开发者将横切关注点（日志、事务、安全、监控）从业务逻辑中分离，实现代码的模块化与复用。理解 AOP 的底层原理，是掌握 Spring 框架的关键一步。&lt;/p&gt;</description></item><item><title>分布式定时任务：Quartz、xxl-job 与 ElasticJob</title><link>https://plumephp.com/java-scheduling-tasks/</link><pubDate>Fri, 14 Aug 2026 10:29:00 +0800</pubDate><guid>https://plumephp.com/java-scheduling-tasks/</guid><description>&lt;p&gt;定时任务是业务系统中常见的需求，如数据同步、报表生成、缓存预热、订单超时取消等。在单机环境下 Spring 的 &lt;code&gt;@Scheduled&lt;/code&gt; 足够使用，但在分布式环境中，必须解决任务重复执行、集群调度、分片处理与故障转移等问题。&lt;/p&gt;</description></item><item><title>SpringDoc OpenAPI：自动化接口文档与契约开发</title><link>https://plumephp.com/java-apidoc-openapi/</link><pubDate>Fri, 14 Aug 2026 10:28:00 +0800</pubDate><guid>https://plumephp.com/java-apidoc-openapi/</guid><description>&lt;p&gt;在现代前后端分离的开发模式下，清晰、准确、实时同步的 API 文档是团队协作的基础。SpringDoc OpenAPI 作为 Spring Boot 生态中 Swagger 的继任者，提供了更简洁的注解体系和更好的 Spring Boot 3 兼容性。&lt;/p&gt;</description></item><item><title>Spring Cloud Gateway 与 Sentinel 限流熔断实战</title><link>https://plumephp.com/java-gateway-sentinel/</link><pubDate>Fri, 14 Aug 2026 10:27:00 +0800</pubDate><guid>https://plumephp.com/java-gateway-sentinel/</guid><description>&lt;p&gt;微服务网关是流量的统一入口，承担路由转发、负载均衡、认证鉴权、限流熔断等核心职责。Spring Cloud Gateway 作为 Spring 官方推荐的网关实现，配合阿里巴巴 Sentinel 的流量治理能力，可构建企业级的服务保护体系。&lt;/p&gt;</description></item><item><title>Nacos 配置中心与服务发现深度实践</title><link>https://plumephp.com/java-config-center-nacos/</link><pubDate>Fri, 14 Aug 2026 10:26:00 +0800</pubDate><guid>https://plumephp.com/java-config-center-nacos/</guid><description>&lt;p&gt;在微服务架构中，配置管理与服务发现是基础设施的核心能力。Nacos 作为阿里巴巴开源的动态服务发现、配置管理和服务管理平台，已成为 Spring Cloud Alibaba 生态的首选组件。&lt;/p&gt;</description></item><item><title>分布式事务：Seata、TCC 与 Saga 模式详解</title><link>https://plumephp.com/java-distributed-transaction/</link><pubDate>Fri, 14 Aug 2026 10:25:00 +0800</pubDate><guid>https://plumephp.com/java-distributed-transaction/</guid><description>&lt;p&gt;在微服务架构中，一次业务操作往往跨越多个服务和数据库，传统单机事务的 ACID 保证无法直接适用。分布式事务成为企业级系统必须面对的复杂课题。&lt;/p&gt;
&lt;h2 id="一分布式事务的核心挑战"&gt;一、分布式事务的核心挑战&lt;/h2&gt;
&lt;h3 id="11-cap-与-base-理论"&gt;1.1 CAP 与 BASE 理论&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;理论&lt;/th&gt;
					&lt;th&gt;核心观点&lt;/th&gt;
					&lt;th&gt;对事务的影响&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;CAP&lt;/td&gt;
					&lt;td&gt;一致性、可用性、分区容错性不可兼得&lt;/td&gt;
					&lt;td&gt;通常选择 AP，牺牲强一致性&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;BASE&lt;/td&gt;
					&lt;td&gt;基本可用、软状态、最终一致&lt;/td&gt;
					&lt;td&gt;接受短暂不一致，追求最终一致&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="12-分布式事务-vs-本地事务"&gt;1.2 分布式事务 vs 本地事务&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 本地事务：简单直接&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Transactional&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;localOrder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;orderDao&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;save&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// DB1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inventoryDao&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;deduct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sku&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 同一DB&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 分布式事务：跨服务、跨数据库&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kt"&gt;void&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;distributedOrder&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;orderService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;createOrder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// svc1 + DB1&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;inventoryService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;deduct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sku&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;qty&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// svc2 + DB2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;paymentService&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;charge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;amt&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// svc3 + DB3&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="二seata开源分布式事务解决方案"&gt;二、Seata：开源分布式事务解决方案&lt;/h2&gt;
&lt;h3 id="21-seata-架构组件"&gt;2.1 Seata 架构组件&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ TM (事务管理器) │----│ RM (资源管理器) │----│ TC (协调中心) │
│ @GlobalTransactional │ │ 各服务的 DataSourceProxy │ │ 维护全局事务状态│
└──────────────┘ └──────────────┘ └──────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="22-at-模式automatic-transaction"&gt;2.2 AT 模式（Automatic Transaction）&lt;/h3&gt;
&lt;p&gt;AT 模式基于 SQL 解析和反向补偿，对业务零侵入。&lt;/p&gt;</description></item><item><title>24. Java 性能测试与压测工具链</title><link>https://plumephp.com/java-performance-testing/</link><pubDate>Fri, 14 Aug 2026 10:09:00 +0800</pubDate><guid>https://plumephp.com/java-performance-testing/</guid><description>&lt;p&gt;性能是软件系统的关键质量属性之一。在 Java 生态中，性能测试涵盖多个层面：&lt;strong&gt;微基准测试&lt;/strong&gt;验证代码片段性能、&lt;strong&gt;协议压测&lt;/strong&gt;模拟用户请求、&lt;strong&gt;全链路压测&lt;/strong&gt;验证系统整体容量。本文系统梳理从开发到生产的性能测试工具链。&lt;/p&gt;</description></item><item><title>23. Spring Security Web 安全纵深防御</title><link>https://plumephp.com/java-web-security/</link><pubDate>Fri, 14 Aug 2026 10:08:00 +0800</pubDate><guid>https://plumephp.com/java-web-security/</guid><description>&lt;p&gt;Web 安全是应用安全的基石。OWASP Top 10 中绝大多数漏洞与 Web 层密切相关。Spring Security 提供了丰富的安全功能，但默认配置往往不够——需要针对具体场景进行纵深防御配置。&lt;/p&gt;</description></item><item><title>22. Java 容器化最佳实践与 Kubernetes 部署</title><link>https://plumephp.com/java-containerization-kubernetes/</link><pubDate>Fri, 14 Aug 2026 10:07:00 +0800</pubDate><guid>https://plumephp.com/java-containerization-kubernetes/</guid><description>&lt;p&gt;容器化已成为 Java 应用部署的标准方式。但 Java 与容器的结合并非简单地将 &lt;code&gt;*.jar&lt;/code&gt; 放进镜像——JVM 的内存管理、线程模型与容器的 cgroups 体系需要深度适配，否则极易出现&lt;strong&gt;容器内 OOM&lt;/strong&gt;、&lt;strong&gt;CPU 限流失效&lt;/strong&gt;、&lt;strong&gt;启动缓慢&lt;/strong&gt;等问题。&lt;/p&gt;</description></item><item><title>21. Spring Native 与 GraalVM 原生镜像</title><link>https://plumephp.com/java-spring-native-graalvm/</link><pubDate>Fri, 14 Aug 2026 10:06:00 +0800</pubDate><guid>https://plumephp.com/java-spring-native-graalvm/</guid><description>&lt;p&gt;Java 启动慢、内存大是长期被诟病的痛点。传统 JVM 采用&lt;strong&gt;热点代码探测 + JIT 编译&lt;/strong&gt;的模型，运行一段时间后性能极佳，但启动阶段需要解释执行、类加载、动态编译，导致冷启动在秒级甚至十秒级。GraalVM Native Image 通过&lt;strong&gt;Ahead-Of-Time（AOT）编译&lt;/strong&gt;，将 Java 字节码直接编译为机器码，实现&lt;strong&gt;毫秒级启动&lt;/strong&gt;和&lt;strong&gt;更小的内存占用&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>20. Maven 与 Gradle 构建工具深度实践</title><link>https://plumephp.com/java-build-tools/</link><pubDate>Fri, 14 Aug 2026 10:05:00 +0800</pubDate><guid>https://plumephp.com/java-build-tools/</guid><description>&lt;p&gt;构建工具是 Java 工程的基石。从 Maven 的约定优于配置到 Gradle 的 DSL 编程式构建，两者各有胜负。理解它们的底层原理——生命周期、依赖传递、插件机制——是构建高效 CI/CD 流水线的必要条件。&lt;/p&gt;</description></item><item><title>19. Flowable 与 BPMN 工作流引擎实战</title><link>https://plumephp.com/java-workflow-engine/</link><pubDate>Fri, 14 Aug 2026 10:04:00 +0800</pubDate><guid>https://plumephp.com/java-workflow-engine/</guid><description>&lt;p&gt;在企业应用中，&lt;strong&gt;业务流程管理（BPM）&lt;/strong&gt; 是核心基础设施之一：请假审批、订单审核、采购流程、财务核销等都需要灵活可变的流程支持。硬编码流程的方式在需求变更时成本极高，而 BPMN 2.0 工作流引擎通过&lt;strong&gt;可视化建模 + 运行时解释执行&lt;/strong&gt;，实现了业务逻辑与流程编排的分离。&lt;/p&gt;</description></item><item><title>18. Spring Batch 批处理与定时任务调度</title><link>https://plumephp.com/java-batch-processing/</link><pubDate>Fri, 14 Aug 2026 10:03:00 +0800</pubDate><guid>https://plumephp.com/java-batch-processing/</guid><description>&lt;p&gt;企业级应用中，大量场景需要&lt;strong&gt;批量处理数据&lt;/strong&gt;：每日对账、月度结算、历史数据迁移、报表生成等。Spring Batch 是 Java 生态中最成熟的批处理框架，提供了作业编排、事务管理、容错重试、进度监控等完整能力。&lt;/p&gt;</description></item><item><title>17. 日志框架、MDC 与分布式链路追踪</title><link>https://plumephp.com/java-logging-tracing/</link><pubDate>Fri, 14 Aug 2026 10:02:00 +0800</pubDate><guid>https://plumephp.com/java-logging-tracing/</guid><description>&lt;p&gt;日志是系统可观测性的基石。在单体时代，简单的日志文件已足够；但在微服务架构下，一次用户请求可能流经数十个服务，日志散落在各节点，必须依赖&lt;strong&gt;统一的日志规范&lt;/strong&gt;与&lt;strong&gt;分布式链路追踪&lt;/strong&gt;才能高效排查问题。&lt;/p&gt;</description></item><item><title>16. 数据库连接池、读写分离与分库分表</title><link>https://plumephp.com/java-database-sharding/</link><pubDate>Fri, 14 Aug 2026 10:01:00 +0800</pubDate><guid>https://plumephp.com/java-database-sharding/</guid><description>&lt;p&gt;随着业务数据量突破千万级、亿级，单一数据库实例在连接数、CPU、磁盘 I/O、内存等方面都会达到瓶颈。Java 企业级应用需要系统性地解决三个问题：&lt;strong&gt;连接高效复用&lt;/strong&gt;、&lt;strong&gt;读流量分散&lt;/strong&gt;、&lt;strong&gt;数据水平拆分&lt;/strong&gt;。本文从连接池原理出发，逐步深入到 ShardingSphere 分库分表实战。&lt;/p&gt;</description></item><item><title>15. Java 17/21 现代语言特性实战</title><link>https://plumephp.com/java-modern-features/</link><pubDate>Fri, 14 Aug 2026 10:00:00 +0800</pubDate><guid>https://plumephp.com/java-modern-features/</guid><description>&lt;p&gt;Java 在 JDK 8 之后经历了一段&amp;quot;沉默期&amp;quot;，但从 JDK 11（LTS）开始，特别是 JDK 17（LTS）和 JDK 21（LTS），Oracle 和 OpenJDK 社区以每六个月一次的发布节奏，持续交付了大量改变编程范式的特性。本文聚焦生产环境可用的核心特性，展示从&amp;quot;样板代码地狱&amp;quot;到&amp;quot;表达力爆炸&amp;quot;的蜕变。&lt;/p&gt;</description></item><item><title>14. Java 测试策略与工程化</title><link>https://plumephp.com/java-testing-strategy/</link><pubDate>Thu, 13 Aug 2026 10:14:00 +0800</pubDate><guid>https://plumephp.com/java-testing-strategy/</guid><description>&lt;p&gt;测试是软件质量的最后一道防线。JUnit 5 提供了灵活的测试扩展模型，Mockito 解耦外部依赖，Testcontainers 在真实环境中运行集成测试，Pact 保障微服务间的契约兼容性。本文以&amp;quot;测试金字塔&amp;quot;为指导，构建从单元到 E2E 的完整测试体系。&lt;/p&gt;</description></item><item><title>13. Java 监控诊断与可观测性</title><link>https://plumephp.com/java-monitoring-diagnosis/</link><pubDate>Thu, 13 Aug 2026 10:13:00 +0800</pubDate><guid>https://plumephp.com/java-monitoring-diagnosis/</guid><description>&lt;p&gt;系统上线后，监控与诊断能力决定了问题的发现速度与修复效率。Java 生态提供了 Actuator 端点暴露、Micrometer 统一指标、Arthas 实时诊断、JFR/JMC 离线分析等工具，配合 Prometheus/Grafana 实现可视化。本文构建完整的可观测性体系。&lt;/p&gt;</description></item><item><title>12. Java 安全认证与授权体系</title><link>https://plumephp.com/java-security-oauth2-jwt/</link><pubDate>Thu, 13 Aug 2026 10:12:00 +0800</pubDate><guid>https://plumephp.com/java-security-oauth2-jwt/</guid><description>&lt;p&gt;安全是微服务架构的基石。Spring Security 提供了一套可扩展的认证（Authentication）与授权（Authorization）框架，结合 OAuth2 协议与 JWT 令牌，可实现分布式系统的无状态安全体系。本文从基础配置到高阶场景，构建完整的 Java 安全方案。&lt;/p&gt;</description></item><item><title>11. 微服务接口设计与集成</title><link>https://plumephp.com/java-microservice-api-design/</link><pubDate>Thu, 13 Aug 2026 10:11:00 +0800</pubDate><guid>https://plumephp.com/java-microservice-api-design/</guid><description>&lt;p&gt;微服务的接口设计决定了团队协作效率与系统维护成本。RESTful 风格简洁通用，GraphQL 按需获取，gRPC 适合高性能内部通信，OpenFeign 将 HTTP 调用封装为声明式接口。本文从协议选型、规范制定、性能优化等维度全面解析。&lt;/p&gt;</description></item><item><title>10. Java 高并发与并发工具包</title><link>https://plumephp.com/java-concurrent-programming/</link><pubDate>Thu, 13 Aug 2026 10:10:00 +0800</pubDate><guid>https://plumephp.com/java-concurrent-programming/</guid><description>&lt;p&gt;Java 的高并发能力源于 JUC（java.util.concurrent）包和 JVM 底层的内存模型与锁机制。理解 CAS、AQS、线程池与锁升级的全链路，是设计高吞吐系统的关键。&lt;/p&gt;</description></item><item><title>09. Spring 集成消息队列</title><link>https://plumephp.com/java-message-queue-integration/</link><pubDate>Thu, 13 Aug 2026 09:09:00 +0800</pubDate><guid>https://plumephp.com/java-message-queue-integration/</guid><description>&lt;p&gt;消息队列是微服务解耦与异步化的核心基础设施。Spring 提供了统一的抽象层，但每种消息中间件在消息语义、事务保证与消费模型上各有侧重。本文基于实战场景对比集成方案。&lt;/p&gt;</description></item><item><title>08. 异步与响应式编程</title><link>https://plumephp.com/java-async-reactive-programming/</link><pubDate>Thu, 13 Aug 2026 09:08:00 +0800</pubDate><guid>https://plumephp.com/java-async-reactive-programming/</guid><description>&lt;p&gt;Java 异步编程经历了从回调地狱到声明式链式调用，再到协程模型的演进。理解每一层抽象的设计目的与应用场景，才能在高并发系统中做出正确的选择。&lt;/p&gt;
&lt;h2 id="1-异步编程模型演进"&gt;1. 异步编程模型演进&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;同步阻塞（Tomcat 线程池）
 → Future / Callback（异步回调，代码碎片化）
 → CompletableFuture（链式组合，声明式）
 → RxJava / Reactor（响应式流，背压）
 → Virtual Threads（虚拟线程，同步写法异步执行）
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="2-completablefuture组合式异步"&gt;2. CompletableFuture：组合式异步&lt;/h2&gt;
&lt;h3 id="21-创建与完成"&gt;2.1 创建与完成&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 异步执行任务&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;CompletableFuture&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;future&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CompletableFuture&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;supplyAsync&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 运行 ForkJoinPool.commonPool()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fetchData&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;});&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 指定线程池&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ExecutorService&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;executor&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Executors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;newFixedThreadPool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;CompletableFuture&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;String&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;f2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CompletableFuture&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;supplyAsync&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fetchData&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;executor&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 立即完成 / 异常完成&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;future&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;complete&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;value&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;future&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;completeExceptionally&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RuntimeException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;error&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="22-链式组合操作"&gt;2.2 链式组合操作&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;CompletableFuture&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Order&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;orderFuture&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fetchUserAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;thenCompose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fetchCartAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getId&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;// 扁平化：thenApply 返回 Future 会嵌套&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;thenCompose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cart&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;createOrderAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cart&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;thenApply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enrichWithTracking&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;exceptionally&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Order creation failed&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Order&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;failed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getMessage&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;whenComplete&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ex&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;metrics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;recordOrder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;核心方法对照&lt;/strong&gt;：&lt;/p&gt;</description></item><item><title>07. 分布式锁与协调服务</title><link>https://plumephp.com/java-distributed-locking/</link><pubDate>Thu, 13 Aug 2026 09:07:00 +0800</pubDate><guid>https://plumephp.com/java-distributed-locking/</guid><description>&lt;p&gt;分布式锁是协调多节点并发访问共享资源的基础设施。从简单的 Redis SETNX 到工业级的 Redisson、Curator，每种方案都在一致性、可用性与性能间做着不同的取舍。&lt;/p&gt;</description></item><item><title>06. Java 缓存策略与 Redis 集成</title><link>https://plumephp.com/java-caching-strategies/</link><pubDate>Thu, 13 Aug 2026 09:06:00 +0800</pubDate><guid>https://plumephp.com/java-caching-strategies/</guid><description>&lt;p&gt;缓存是性能优化的第一现场。从线程级 &lt;code&gt;ThreadLocal&lt;/code&gt; 到进程级 &lt;code&gt;Caffeine&lt;/code&gt;，再到分布式 &lt;code&gt;Redis&lt;/code&gt;，每一层缓存都是空间换时间的权衡。本文逐层拆解缓存设计，聚焦一致性、并发、过期三大挑战。&lt;/p&gt;</description></item><item><title>05. ORM 框架：JPA/Hibernate 与 MyBatis</title><link>https://plumephp.com/java-orm-hibernate-mybatis/</link><pubDate>Thu, 13 Aug 2026 09:05:00 +0800</pubDate><guid>https://plumephp.com/java-orm-hibernate-mybatis/</guid><description>&lt;p&gt;Java ORM 生态圈的核心矛盾是&lt;strong&gt;开发效率&lt;/strong&gt;与&lt;strong&gt;执行效率&lt;/strong&gt;的权衡。JPA/Hibernate 通过抽象隐藏 SQL，加速 CRUD 开发；MyBatis 让开发者精确控制每一行 SQL，换取极致性能。本文对比两者设计哲学，聚焦 N+1、缓存策略、批量操作等关键实战问题。&lt;/p&gt;</description></item><item><title>04. JVM 性能调优与 GC 优化</title><link>https://plumephp.com/java-jvm-performance-tuning/</link><pubDate>Thu, 13 Aug 2026 09:04:00 +0800</pubDate><guid>https://plumephp.com/java-jvm-performance-tuning/</guid><description>&lt;p&gt;JVM 调优不是堆砌参数的艺术，而是在吞吐量、延迟与内存占用之间找到业务场景的最优平衡点。本文从垃圾回收器原理出发，结合实战案例，建立系统化的调优方法论。&lt;/p&gt;</description></item><item><title>03. JVM 内存模型与类加载机制</title><link>https://plumephp.com/java-jvm-internals/</link><pubDate>Thu, 13 Aug 2026 09:03:00 +0800</pubDate><guid>https://plumephp.com/java-jvm-internals/</guid><description>&lt;p&gt;JVM 是 Java 生态的基石。理解其内存布局、类加载机制与执行引擎，不仅是性能调优的前提，更是排查 OOM、类冲突、类泄露等疑难杂症的必备技能。&lt;/p&gt;
&lt;h2 id="1-jvm-运行时数据区总览"&gt;1. JVM 运行时数据区总览&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────┐
│ JVM Runtime │
├─────────────────────────────────────────────────────┤
│ 线程私有（随线程生灭） │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ PC 寄存器 │ │ 虚拟机栈 │ │ 本地方法栈 │ │
│ │ (计数指令) │ │ (Stack) │ │ (Native) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────┤
│ 线程共享（所有线程可见） │
│ ┌─────────────────────────────────────────────┐ │
│ │ 堆 (Heap) │ │
│ │ ┌─────────────┐ ┌──────────────────────┐│ │
│ │ │ 年轻代 │ │ 老年代 ││ │
│ │ │ Eden / S0/S1│ │ (Old Gen) ││ │
│ │ └─────────────┘ └──────────────────────┘│ │
│ └─────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────┐ │
│ │ 元空间 (Metaspace, Java 8+) │ │
│ │ 类元数据 / 方法元数据 / 常量池 / 符号引用 │ │
│ └─────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────┤
│ 直接内存（堆外） │
│ ┌─────────────────────────────────────────────┐ │
│ │ 直接堆外内存 (Direct Buffer / Unsafe.allocate) │ │
│ └─────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="11-各区域详解"&gt;1.1 各区域详解&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;区域&lt;/th&gt;
					&lt;th&gt;用途&lt;/th&gt;
					&lt;th&gt;异常&lt;/th&gt;
					&lt;th&gt;参数&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;PC 寄存器&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;当前线程执行字节码行号&lt;/td&gt;
					&lt;td&gt;无（Native 方法时为 Undefined）&lt;/td&gt;
					&lt;td&gt;—&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;虚拟机栈&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;方法调用栈帧（局部变量、操作数栈、动态链接、返回地址）&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;StackOverflowError&lt;/code&gt; / &lt;code&gt;OutOfMemoryError&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;-Xss&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;本地方法栈&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Native 方法调用&lt;/td&gt;
					&lt;td&gt;同上&lt;/td&gt;
					&lt;td&gt;—&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;堆&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;对象实例与数组&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;OutOfMemoryError: Java heap space&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;-Xms&lt;/code&gt; / &lt;code&gt;-Xmx&lt;/code&gt; / &lt;code&gt;-Xmn&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;元空间&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;类元数据（Java 8+ 替代永久代）&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;OutOfMemoryError: Metaspace&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;-XX:MaxMetaspaceSize&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;直接内存&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;NIO 缓冲区、Netty 等&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;OutOfMemoryError: Direct buffer memory&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;-XX:MaxDirectMemorySize&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="12-堆对象分配与晋升"&gt;1.2 堆：对象分配与晋升&lt;/h3&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;新对象 → Eden 区
 ├─ Minor GC 后存活 → Survivor 区 (S0 或 S1)
 │ ├─ 交替复制到另一 Survivor
 │ └─ 每经历一次 Minor GC，年龄 +1
 │ └─ 年龄 ≥ -XX:MaxTenuringThreshold 或 Survivor 50% 同龄对象 → 晋升老年代
 └─ 大对象（-XX:PretenureSizeThreshold） → 直接分配老年代

-XX:TargetSurvivorRatio = 50 (Survivor 目标使用率)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;空间分配担保&lt;/strong&gt;：Minor GC 前检查老年代最大连续空间是否大于新生代所有对象总空间；否则查看 &lt;code&gt;HandlePromotionFailure&lt;/code&gt;。JDK 6u24 后此参数废弃，默认开启。&lt;/p&gt;</description></item><item><title>02. Spring Cloud 微服务架构全家桶</title><link>https://plumephp.com/java-spring-cloud-microservices/</link><pubDate>Thu, 13 Aug 2026 09:02:00 +0800</pubDate><guid>https://plumephp.com/java-spring-cloud-microservices/</guid><description>&lt;p&gt;Spring Cloud 家谱经历了从 Netflix OSS 到 Spring Cloud Alibaba 的演进。本文以 &lt;strong&gt;Spring Cloud 2022/2023 + Spring Cloud Alibaba 2022&lt;/strong&gt; 版本为基线，系统梳理注册发现、配置管理、服务网关、熔断限流与分布式事务的完整方案。&lt;/p&gt;
&lt;h2 id="1-版本选型矩阵"&gt;1. 版本选型矩阵&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;版本线&lt;/th&gt;
					&lt;th&gt;Spring Boot&lt;/th&gt;
					&lt;th&gt;Spring Cloud&lt;/th&gt;
					&lt;th&gt;Spring Cloud Alibaba&lt;/th&gt;
					&lt;th&gt;状态&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;2021.x&lt;/td&gt;
					&lt;td&gt;2.6/2.7&lt;/td&gt;
					&lt;td&gt;2021.0.x&lt;/td&gt;
					&lt;td&gt;2021.x&lt;/td&gt;
					&lt;td&gt;维护中&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;2022.x&lt;/td&gt;
					&lt;td&gt;3.0/3.1&lt;/td&gt;
					&lt;td&gt;2022.0.x&lt;/td&gt;
					&lt;td&gt;2022.x&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;推荐&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;2023.x&lt;/td&gt;
					&lt;td&gt;3.2+&lt;/td&gt;
					&lt;td&gt;2023.0.x&lt;/td&gt;
					&lt;td&gt;2022.x&lt;/td&gt;
					&lt;td&gt;最新&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Java 基线&lt;/strong&gt;: Spring Boot 3.x 起 &lt;strong&gt;最低 Java 17&lt;/strong&gt;。&lt;/p&gt;</description></item><item><title>01. Spring Boot 核心原理与自动配置</title><link>https://plumephp.com/java-spring-boot-fundamentals/</link><pubDate>Thu, 13 Aug 2026 09:01:00 +0800</pubDate><guid>https://plumephp.com/java-spring-boot-fundamentals/</guid><description>&lt;p&gt;Spring Boot 通过 &lt;strong&gt;约定优于配置&lt;/strong&gt; 的理念，将传统 Spring 应用繁杂的 XML 配置压缩到几乎为零。但零配置不等于无设计——理解其背后的自动装配、条件判断与生命周期管理，是掌握企业级 Java 开发的必修课。&lt;/p&gt;</description></item></channel></rss>