自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Agent架构设计:Planning与动态任务规划

本文介绍了 Agent Planning 的核心设计思想,解释了为什么 LLM 天然不具备规划能力(当前上下文 ≠ 完整任务状态,当前最优 ≠ 全局最优),以及如何通过 Planning + ReAct 混合模式让 Agent 在复杂任务中保持执行方向,并通过触发式 Replan机制应对执行过程中的意外情况。

2026-07-27 22:06:26 1908

原创 Netty 线程模型:NIO 之上的工程设计

本文旨在介绍 Netty 的主从 Reactor 线程模型,从 BIO/NIO/AIO 三种 IO 模型的演进切入,通过原生 NIO 的痛点引出 Reactor模式,拆解 BossGroup/WorkerGroup 分工、EventLoop 循环驱动、ChannelPipeline 流水线三个核心设计,帮助初学者理解 Netty如何用几十个线程撑起百万连接。

2026-07-16 22:06:50 1161

原创 Agent 三层记忆机制:短期记忆、情景记忆与语义记忆

本文介绍了记忆的三层模型:短期记忆(当前会话的上下文窗口)、情景记忆(历史会话的 RAG检索)、语义记忆(从对话中提炼的用户画像),并通过 Python 代码演示三层各自的存储、检索和更新机制。

2026-07-08 19:10:27 1441

原创 Agent 上下文管理

本文梳理了上下文窗口有限带来的核心问题,并围绕压缩、隔离、按需加载、持久化四个策略展开,帮助读者理解为什么Agent 会"越用越笨",以及如何在有限的 token 窗口里让模型始终看到最有价值的信息。

2026-06-30 21:37:02 1866

原创 Redis 的存取速度为什么这么快

本文逐一拆解 Redis高性能背后的五个核心设计因素:内存存储、高效数据结构、单线程模型、IO 多路复用和 RESP 协议,帮助初学者建立对 Redis性能优势的系统性理解。

2026-06-24 23:40:39 3284 2

原创 设计模式:单例模式

本文系统梳理了单例模式的六种 Java实现方式:饿汉式、懒汉式、synchronized、DCL、静态内部类、枚举。

2026-06-16 20:12:33 1996

原创 MySQL B+树:百万行查询只要几毫秒的秘密

本文将帮助读者理解聚簇索引的本质——数据和主键索引绑在一起存放在B+ 树的叶子节点中。通过有序数组、二叉树、Hash 表、B 树四种数据结构的淘汰赛,自然引出 B+ 树,并从磁盘 IO次数、范围查询效率、查询稳定性三个维度解释为什么 B+ 树是 MySQL 的最优选择。

2026-06-09 06:42:37 2365

原创 WebSocket 与 SSE:实时通信方案的选择

从 HTTP 轮询的资源浪费切入,分别介绍 SSE 和 WebSocket 的协议原理、连接特性和断线重连机制,对比两者在通信方向、数据格式、传输开销上的核心差异,最后给出选型判断标准和 Spring Boot 实现示例,帮助读者根据场景选择合适的推送方案。

2026-08-04 21:21:29 417

原创 Docker 部署 SpringBoot:从镜像构建到服务器运行

本文讲解 Spring Boot 项目从本地到服务器的完整部署链路:Dockerfile 多阶段构建、本地验证、Compose 编排 MySQL 和 Redis、镜像交付(save/load、Registry、GitHub 三种方式),再到服务器启动。重点说明了开发环境和生产环境的四个关键差异:配置隔离、数据持久化、JVM 内存限制和日志输出,以及部署失败时按容器启动、网络通信、配置、时区逐层排查的思路。

2026-08-03 21:16:13 482

原创 Docker Compose:把多个容器组织成一个应用

从手动启动多个容器的痛点出发,介绍 Docker Compose 如何用一个 YAML 文件集中管理多服务的配置、网络和启动顺序,重点说明服务名替代 localhost 的通信机制和 depends_on 配合 healthcheck 保证依赖就绪的做法,并对比了 docker run 和 docker compose 的适用场景。

2026-08-02 16:54:49 390

原创 从 Dockerfile 到容器:部署一个 SpringBoot 应用

从一个简单的 Dockerfile 示例出发,逐条拆解 FROM、COPY、ENTRYPOINT 等指令的职责,通过镜像体积问题引出多阶段构建,再用构建缓存说明 COPY 顺序对构建速度的影响,最后给出一份可直接复用的生产模板和几个首次容器化时容易踩的坑。

2026-08-02 16:30:49 316

原创 Docker 基础概念:镜像、容器和仓库之间的关系

本文介绍了 Docker 的三个核心概念:镜像是只读的分层打包模板,容器是镜像的运行实例并在镜像层上方增加可写层,Registry 负责镜像的存储和分发。文章从镜像结构、容器生命周期、Registry 工作方式三个角度展开,最后对比了容器与虚拟机的隔离方式差异,帮助读者建立 Docker 工作流的完整认知。

2026-08-01 17:23:07 442

原创 volatile 原理与使用边界:可见性、重排序与 DCL 单例

本文从一个线程无法停止的例子出发,拆解 JMM 的 happens-before 规则,说明 volatile如何通过可见性和有序性两项保证解决跨线程的读写问题,并以 DCL 单例展示安全发布的实际价值,最后通过 counter++ 的反例划清 volatile 与原子操作的边界。

2026-07-30 17:10:28 305

原创 AQS 原理:Java 并发同步器的核心骨架

本文从 ReentrantLock、Semaphore、CountDownLatch 的共同底层出发,拆解 AQS 的三个设计要素——volatile state、CLH 队列变体、模板方法,分别讲了独占模式和共享模式的获取释放流程、传播机制,以及 Condition 的第二条等待队列,帮助读者理解JUC 并发工具的共同骨架。

2026-07-29 23:27:39 337

原创 synchronized 与 ReentrantLock:Java 锁机制原理与实现对比

本文从字节码层面拆解 synchronized 的 monitorenter/monitorexit 指令和 HotSpot 的轻量级锁/重量级锁优化机制,再从 AQS 的 state + CLH 队列结构解析 ReentrantLock 的公平/非公平锁实现,最后通过对比表格和实战代码给出选型决策:需要超时、中断或多条件变量就用 ReentrantLock,其他场景synchronized 就够了。

2026-07-29 18:31:27 379

原创 Java 四种引用类型:强引用、软引用、弱引用与虚引用

本文从 ThreadLocal 的弱引用设计切入,依次讲解了 Java 四种引用类型(强引用、软引用、弱引用、虚引用)对应的可达状态和 GC 行为,并以 ThreadLocal 的 Entry key、WeakHashMap 的 value 引用 key 陷阱、DirectByteBuffer 的堆外内存清理为例说明各自的实际应用与注意事项,最后给出选型建议:强引用是默认选择,弱引用适合不应延长 key 生命周期的映射关系,虚引用适合 native 资源清理,软引用因回收策略不可预测,生产缓存

2026-07-28 20:42:51 441

原创 ThreadLocal 原理与实践:线程隔离、内存泄漏与使用边界

本文从 ThreadLocal 如何实现线程隔离出发,拆解了 Thread 持有 ThreadLocalMap、Entry使用弱引用、开放定址法解决冲突等核心设计,并重点分析了内存泄漏与数据污染的区别,以及线程池场景下 finally 中调用remove() 的必要性。

2026-07-28 18:09:47 416

原创 JVM运行时数据区详解:变量、对象和类信息到底存在哪里

本文以"变量运行时存在哪"为切入点,拆解 JVM 五个运行时数据区(程序计数器、虚拟机栈、本地方法栈、堆、方法区)各自的职责和存储内容,最后通过一段代码逐行分析变量的去向,并纠正了"静态变量存放在方法区"这一常见误区。

2026-07-26 20:10:24 546

原创 分布式 ID 生成方案:从数据库自增到雪花算法

本文从单库自增在分库分表下的局限出发,依次讲解 UUID、数据库号段、Redis INCR、雪花算法四种分布式 ID生成方案的原理和适用场景,重点分析了雪花算法的位分配设计以及时钟回拨问题的处理方式,最后给出选型建议:不要过早引入复杂方案,在当前业务规模下选择合适的复杂度就够了。

2026-07-25 22:08:19 491

原创 Session 和 Cookie 的区别、原理与应用场景

本文从 HTTP 的无状态性出发,讲解 Cookie 和 Session 配合完成用户认证的完整流程,并对比了内存/Redis/数据库三种 Session存储方案的适用场景,最后厘清 Session 和 JWT 的本质区别:一个查存储拿用户信息,一个解析 Token拿用户信息,选哪个取决于系统实际场景。

2026-07-25 21:38:23 553

原创 CompletableFuture:异步编排使接口摆脱串行等待

本文从商品详情页接口串行调用三个远程服务导致响应慢的实际问题出发,介绍 CompletableFuture的链式处理、并行编排和异常处理能力,并通过 Spring Boot实战示例演示如何把无关依赖的远程调用从串行改成并行,同时做好子任务异常隔离和线程池配置。

2026-07-24 21:26:54 437

原创 DDD + Spring Boot 实战:一个订单系统从需求到代码的完整落地

本文以电商订单系统为案例,走完从需求分析、领域建模到 Spring Boot代码落地的全流程,串联前八篇讲过的实体、值对象、聚合、领域服务、领域事件、Repository、分层架构、CQRS全部概念,并在最后讨论 DDD 的适用边界和贫血/充血模型的选择。

2026-07-24 16:42:02 506

原创 DDD 战术设计:CQRS,让读和写各司其职

本文意在介绍 CQRS 的核心思想:让读写各走各的路。通过订单列表只显示几个字段却要加载整个聚合的痛点,引出 Repository越来越臃肿的根源,并以同库实现为重点,演示如何用 QueryService 直接查 DTO,让写模型维护业务规则、读模型高效展示数据。

2026-07-23 18:22:56 608

原创 DDD 分层架构:六层分层架构

本文意在介绍 DDD 六层架构(trigger、api、app、domain、infrastructure、types)的职责划分和依赖方向,通过依赖倒置让领域层成为核心而非底层,并以 Spring Boot 项目结构为例,演示各层如何配合完成一个完整的下单流程。

2026-07-23 17:40:58 580

原创 DDD 战术设计:Repository 与持久化的边界

本文旨在介绍 DDD 中 Repository 仓储模式的设计思想,解释为什么领域层不应该直接依赖数据库操作,以及 Repository 如何通过接口与实现分离、领域对象(Order)与数据库对象(OrderDO)的转换,让聚合根作为整体被存取,同时隔离底层存储细节,并通过Order.create() 与 Order.reconstruct() 两种构造路径区分业务行为与持久化还原。

2026-07-22 22:16:56 560

原创 DDD 战术设计:领域事件与操作解耦

本文旨在介绍 DDD中领域事件的核心概念,解释为什么将"发生了什么"和"之后做什么"拆开能降低模块耦合,并通过聚合根产生事件、事务后发布(含Outbox Pattern)、订阅者各自响应的完整流程,演示下单场景下事件驱动的实现方式与分层归属。

2026-07-22 21:36:13 486

原创 DDD 战术设计:领域服务与跨对象业务规则

本文从"跨聚合的业务逻辑放哪"这个问题出发,介绍领域服务的核心定位:承载那些重要但无法自然归属于任何实体的业务规则。通过DiscountService的实战代码演示领域服务与应用服务的分工,并给出判断逻辑归属的三问口诀:实体方法、领域服务、还是应用服务。

2026-07-21 17:39:25 374

原创 DDD 战术设计:从实体到聚合根,构建领域模型

本文承接 DDD 战略设计,系统介绍了战术设计的三个核心构造块:实体(有标识、可变、封装规则)、值对象(无标识、不可变、消除基本类型迷恋)、聚合(一致性边界 + 聚合根保护),并通过 Order 聚合的实战代码串联所有概念。

2026-07-21 16:55:50 445 1

原创 DDD 战略设计:限界上下文与统一语言

本文围绕 DDD 战略设计的两个核心概念展开,解释了统一语言如何消除团队内部的业务术语歧义,以及限界上下文如何通过划分业务边界让不同场景各自维护独立的模型,并以电商系统的实际拆分演示了上下文映射和防腐层的用法。

2026-07-20 23:58:37 463

原创 DDD:领域驱动设计的初步认识

本文旨在介绍 DDD 的核心思想,从传统三层架构的痛点出发,解释业务规则为什么会越来越分散,以及 DDD如何通过让代码结构反映业务结构来解决这个问题,并说明了 DDD 适合和不适合的场景。

2026-07-19 20:07:05 331

原创 MyBatis Plus:快速上手指南

本文旨在帮助后端开发者快速上手 MyBatis Plus,覆盖 BaseMapper 内置 CRUD、Wrapper条件构造、分页、自动填充、逻辑删除等核心功能,并结合实际踩坑经验说明 MP 的适用边界。

2026-07-18 22:59:31 437

原创 MyBatis 原理解析:Mapper 接口没有实现类,SQL 如何执行

本文从 MyBatis 的三层架构出发,拆解了一条 Mapper 方法调用从接口层到 JDBC 执行的完整链路,重点分析了 MapperProxy动态代理如何在运行时为接口生成实现类,并通过源码讲解了代理对象的创建过程和方法拦截机制。

2026-07-17 23:50:13 288

原创 Function Calling:LLM 是怎么学会调工具的

本文意在从 LLM 侧解释 Function Calling 的实现原理,帮助读者理解工具定义如何通过上下文注入被模型"看到",模型如何通过监督训练掌握工具调用格式、再通过偏好优化学会判断何时该调工具,并区分 Function Calling 与原生 JSON 输出的本质差异。

2026-07-15 23:24:40 367

原创 Spring Cloud:微服务的基础设施工具箱

本文从微服务和 Spring Cloud 的基本概念出发,讲清了二者的分工关系(微服务负责拆,Spring Cloud 负责管),并通过 Nacos服务发现、OpenFeign 声明式调用、Spring Cloud Gateway 网关、Sentinel 熔断降级、Nacos Config配置中心五个核心组件的代码示例,带你了解 Spring Cloud 如何解决微服务拆分后的治理问题。

2026-07-14 23:26:06 719 1

原创 DNS:把域名翻译成 IP 的层级查询机制

本文意在拆解 DNS 的工作流程,从域名到 IP 的翻译过程出发,介绍四种域名服务器的角色分工和一次完整的逐级迭代解析链路,并通过递归查询与迭代查询的对比说明客户端和服务端各自的职责,最后点出 DNS 明文传输的局限性及 DoH/DoT 的改进思路。

2026-07-14 17:29:44 530

原创 RPC:像调用本地函数一样调用远程服务

本文以分布式系统中手动拼 HTTP 调用远程服务的痛点为切入点,通过一次 RPC 调用的六个步骤和 Stub/Skeleton两层代理的拆解,帮助后端初学者理解 RPC 的本质,即把网络调用封装成方法调用,并简要对比了 Dubbo、gRPC、Thrift 三大框架及RPC 与 REST 的区别。

2026-07-12 21:54:35 387

原创 RabbitMQ 消息可靠性:怎么避免消息丢失

本文从消息丢失的三个环节出发,逐一讲解 Publisher Confirm、持久化、手动ACK、死信队列、幂等消费五个机制,并在最后串联成完整的可靠性方案,同时讨论了可靠性与性能之间的取舍。

2026-07-12 18:51:35 492

原创 Agent 和 Workflow的区别

本文旨在厘清 Agent 和 Workflow 经常被混用的两个概念:Workflow的执行路径由开发者预先编排,模型只是流程中的一个节点;Agent的执行路径由模型在运行时自主规划,开发者只提供工具和约束。文章通过代码对比、选型标准和混合架构案例,帮助读者判断什么时候该用哪种方案,以及为什么生产环境中两者往往是配合使用而非互相替代的关系。

2026-07-09 22:13:37 368

原创 接口幂等性:重复提交保证结果一致

本文介绍了接口幂等性的概念,即同一个操作执行一次和执行多次结果相同,并从 Token机制、数据库唯一约束、状态机约束、Redis SETNX 四种方案出发,结合 Java代码示例讲解各自的实现原理和适用场景,帮助后端开发者根据业务特点选择合适的幂等方案。

2026-07-07 22:48:21 698

原创 线程池参数调优:corePoolSize 怎么设置

本文意在线程池七个参数"是什么"的基础上,进一步讲清楚"值怎么填",通过阻塞比例公式给出 corePoolSize 的计算方法,区分 CPU密集型和 IO 密集型的不同策略。

2026-07-06 23:38:47 531

空空如也

空空如也

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

TA关注的人

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