- 博客(25)
- 收藏
- 关注
原创 Python 语法入门:从零开始写出你的第一个程序
本文介绍了 Python 入门阶段最常用的语法,包括:变量和数据类型输入、输出与运算符条件判断与循环列表、元组、字典和集合函数、模块与异常处理文件读写与类的基本概念编程能力不是“看会”的,而是“写会”的。现在就打开编辑器,从一个十几行的小程序开始吧。
2026-08-29 15:13:48
309
1
原创 深入理解 MVCC:数据库如何做到“读写互不阻塞”
MVCC 的本质不是“复制很多份数据”,而是把以下几项能力组合起来:隐藏事务字段 + Undo 版本链 + Read View 可见性判断 + 后台清理它的工作流程可以概括为:数据被修改时,通过 Undo Log 保留旧版本;当前记录通过回滚指针连接历史版本;事务执行快照读时创建或复用 Read View;数据库根据事务 ID 判断当前版本是否可见;如果不可见,就沿版本链查找更早的可见版本;不再被任何事务需要的旧版本最终由 Purge 机制清理。
2026-08-18 08:55:14
322
原创 Java 类的生命周期:从 .class 文件到卸载
Java 类从字节码进入 JVM 到最终卸载,会经历以下过程:加载 → 验证 → 准备 → 解析 → 初始化 → 使用 → 卸载加载负责把字节码转换成 JVM 中的类结构和Class对象。验证保证字节码格式、语义和执行安全。准备为静态字段分配内存并设置默认值,编译期常量可能直接获得常量值。解析把类、字段和方法的符号引用转换成可直接访问的引用。初始化执行静态字段赋值和静态代码块,父类先于子类初始化。对象初始化与类初始化不同,每创建一个对象都会执行实例初始化和构造器。卸载。
2026-08-14 15:29:00
341
1
原创 Agent 性能优化与最佳实践
提示词即代码— 用 Few-Shot + CoT + 角色扮演三件套,系统化提升输出质量工具是 Agent 的手和眼— 标准化描述降低误用率,缓存减少冗余调用成本意识前置— 模型分层路由 + 上下文裁剪 + Prompt 缓存,三管齐下为失败而设计— 重试 + 熔断 + 降级,构建韧性系统没有可观测性就没有可靠性— 日志 / 指标 / 链路追踪是生产环境的必需品📅 发布于 2026-08-03。
2026-08-04 09:44:00
485
1
原创 主流 Agent 开发框架对比
AI Agent 开发框架哪家强?本文从 LangChain、AutoGen、CrewAI 到 Dify,全面拆解四大主流框架的核心概念、适用场景与选型策略,帮你选对轮子,少走弯路。
2026-07-29 17:03:10
564
原创 多 Agent 协同系统设计:从单兵作战到团队协作
PM Agent— 需求分析师System Prompt:你是一位经验丰富的产品经理,擅长将用户需求转化为可执行的技术任务输入:用户的自然语言需求输出:结构化的任务列表(含优先级、依赖关系、验收标准)工具:项目管理工具、知识库检索— 系统架构师System Prompt:你是资深系统架构师,专注技术方案设计,遵循 SOLID 原则输入:PM 拆分后的任务输出:技术方案(接口定义、数据模型、文件结构)工具:代码库搜索、设计模式库— 开发者。
2026-07-18 18:04:03
595
原创 构建 Agent 的五大难点与解决方案
随着大语言模型(LLM)能力的飞速提升,AI Agent 成为 2025-2026 年最炙手可热的技术方向。从 AutoGPT 到 Claude Code,从客服机器人到自动化运维,Agent 正在重塑软件开发的范式。然而,构建一个真正可靠的 Agent 远比做一个 ChatBot 困难得多。一个 Demo 级的 Agent 可能一个下午就能搭出来,但要做到生产级可用——能稳定运行、不烧钱、不给用户添乱——需要跨越许多深坑。
2026-07-16 10:36:14
658
4
原创 Agent 的工作原理与理解方式
ReActReasoning +Acting(推理 + 行动),是当前 AI Agent 领域最主流的框架范式。它由 Google Research 在 2022 年提出,核心思想是让大语言模型在推理(Thought)和行动(Action)之间交替循环,从而能够处理需要与外部世界交互的复杂任务。纯语言模型被困在"知识截止日期"里,而 ReAct 让模型"长出双手",可以主动获取信息、操作工具、观察反馈,再据此调整下一步策略。把4.2(工作模式)和4.3(理解视角)
2026-07-14 09:16:21
620
4
原创 AI Agent 的四大组成部分详解
dataclass"""Agent 工具的标准化定义"""name: str # 工具名称(LLM 用它来识别)description: str # 功能描述(帮助 LLM 判断何时使用)parameters: dict # 参数 JSON Schemafunction: Callable[..., Any] # 实际执行函数tools = ["description": "读取指定路径的文件内容","description": "文件的绝对路径"},
2026-06-28 16:11:54
876
原创 从工具到伙伴:AI Agent 核心架构深度剖析
回想 2022 年底 ChatGPT 横空出世时的场景——你问一句,它答一句。这种"一问一答"的模式本质上是一个无状态的推理引擎:给定输入,产生输出,然后遗忘一切。局限表现无法行动ChatGPT 只能"说",不能"做"。它无法帮你订机票、发邮件、操作数据库。缺乏记忆每次对话都是独立的。它不记得你昨天说过什么,也不会从历史中学习。不会规划遇到复杂任务(如"帮我筹备一次发布会"),它只能给出笼统建议,无法拆解成可执行的步骤。而Agent(智能体)正是为解决这三个局限而生。
2026-06-25 19:15:01
1337
3
原创 RAG索引生成优化篇(下):RAPTOR 与 ColBERT
"""使用 GMM 进行聚类,自动选择最优簇数"""best_n = 2bic = gmm.bic(embeddings) # BIC 越低越好print(f"最优簇数: {best_n}, BIC: {best_bic:.2f}")# 执行聚类你的场景推荐方案原因快速落地,成本敏感概念简单,改动小,ROI 高长文档、多层次语义RAPTOR天然处理不同粒度的查询精度要求极高,存储可接受ColBERT接近 Cross-Encoder 的精度超大规模(百万级)
2026-06-22 19:37:14
739
2
原创 RAG索引生成优化篇(上):Multi-representation Indexing(多表征索引)
这是整个 Pipeline 最核心的一步。我们让 LLM 为每个 Chunk 生成一句精炼的摘要,这个摘要将成为后续检索的"钥匙"。# Prompt 模板:让 LLM 为文档片段生成摘要"""你是一个专业的文档摘要助手。请用一句话概括下面这段文档的核心内容。要求:1. 摘要长度控制在 50 字以内2. 突出关键实体、动作和结论3. 使用简洁、客观的语言文档内容:一句话摘要:"""# 创建摘要链# 为所有文档生成摘要Document(
2026-06-20 10:29:55
712
3
原创 【RAG技术从小白到深入理解】路由优化与查询构建策略:RAG 系统的智能调度与精准检索
在实际应用中,用户的查询千差万别,不同类型的问题需要走不同的检索路径。RAG 路由的核心思想是:在收到用户查询后,先由路由器(Router)分析查询特征,然后将其分发到最合适的检索通道。一句话总结:路由就是 RAG 系统的"智能调度中心"——不是所有问题都适合用向量检索,把问题分发给最懂它的检索器,才能获得最佳效果。
2026-06-16 19:14:08
644
7
原创 【RAG技术从小白到深入理解】RAG 查询优化策略:从多查询到 HyDE 的完整指南
在构建 RAG(Retrieval-Augmented Generation)应用时,我们常常遇到一个尴尬的场景:知识库里有答案,但系统就是检索不出来。问题往往不在于向量模型不够好,而在于用户的原始查询和知识库中的文档之间存在语义鸿沟。用户提问的方式千差万别:有人问得过于简短,有人问得过于宽泛,有人用的术语和文档中的不完全一致。如果我们只是简单地把原始问题向量化然后做相似度检索,检索效果往往会大打折扣。查询优化(Query Optimization)
2026-06-15 18:00:40
808
5
原创 【RAG技术从小白到深入理解】一文搞懂 RAG:索引、检索、生成与评估全流程
RAG 的核心不是让大模型记住所有知识,而是让大模型在回答问题前,先从外部知识库中检索相关内容,再基于这些内容生成答案。Indexing:索引构建Retrieval:检索召回Generation:答案生成Evaluation:效果评估其中,Indexing 决定知识能不能被正确组织,Retrieval 决定能不能找到正确内容,Generation 决定能不能基于上下文生成高质量答案。文档清洗是否干净chunk 是否合理embedding 是否适合业务检索策略是否准确。
2026-06-14 20:31:13
633
6
原创 【每日八股】雪花算法:分布式 ID 生成的经典方案
雪花算法是一种经典的分布式 ID 生成方案。它通过时间戳、机器 ID 和序列号组合出一个 64 位整数,在保证全局唯一的同时,也具备很高的生成性能和较好的数据库索引友好性。用本地计算代替中心化发号,在高并发分布式环境下生成趋势递增的全局唯一 ID。但在使用雪花算法时,一定要重点关注两个问题:机器 ID 不能冲突系统时钟不能大幅回拨只要这两个问题处理好,雪花算法就是一个非常实用、稳定、性能优秀的分布式 ID 方案。
2026-06-11 19:28:38
832
8
原创 【项目实战】给黑马点评增加滑动窗口限流:Redis + Lua + AOP 实现接口防刷
虽然项目已经用了 Redis、Lua、分布式锁、异步下单等方案来保证库存安全,但如果短时间内大量请求直接打到秒杀接口,后端仍然会承受很大压力。固定窗口实现简单,但边界问题明显。比如限制 10 秒 10 次,用户可以在第 9.9 秒请求 10 次,再在第 10.1 秒请求 10 次,短时间内实际打进来 20 次请求。尤其是秒杀场景,限流可以把大量无效请求挡在业务逻辑之前,减少 Redis、数据库和消息队列的压力。滑动窗口则会根据当前时间动态统计最近一段时间内的请求数,更平滑,也更适合秒杀、防刷这类场景。
2026-06-08 18:45:44
663
6
原创 Java 线程创建方式总结:Thread、Runnable、Callable、线程池与虚拟线程
面试时可以这样回答:Java 创建线程常见方式有:继承 Thread、实现 Runnable、实现 Callable 配合 FutureTask、使用线程池,以及 Java 21 的虚拟线程。继承 Thread 写法简单,但受单继承限制,任务和线程耦合;Runnable 实现了任务和线程分离,但没有返回值;Callable 可以返回结果并抛出异常,但获取结果时可能阻塞;线程池可以复用线程、控制并发,是实际开发中最常用的方式;
2026-06-06 12:41:13
581
9
原创 CAS 的 ABA 问题:值没变,就真的没被改过吗?
ABA 问题指的是:一个变量原来是 A,后来被改成了 B,然后又被改回了 A。此时另一个线程来执行 CAS,发现当前值还是 A,于是认为这个变量没有被修改过,CAS 成功。但实际上,这个变量中间已经被别人动过了。举个简单例子。假设共享变量初始值是 100。100 -> 101101 -> 100这时候,变量的值又变回了 100。线程 1 再执行 CAS 时,会发现当前值仍然是 100,于是 CAS 成功。从 CAS 的角度看,它没有发现任何问题。因为它只判断“当前值是不是 100”。
2026-06-01 08:27:46
603
2
原创 Spring 三级缓存如何解决循环依赖?
Spring 解决单例 Bean 循环依赖的核心逻辑,主要在 DefaultSingletonBeanRegistry 中。// 一级缓存:保存已经完整创建好的单例 Bean// 二级缓存:保存提前暴露的 Bean 的早期引用// 三级缓存:保存 ObjectFactory,用来生成 Bean 的早期引用这三个缓存分别承担不同的职责。一级缓存 singletonObjects,保存的是已经完整创建好的单例 Bean。
2026-05-30 13:27:31
676
9
原创 缓存更新到底是先删缓存还是先更新数据库?
缓存一致性的关键不是追求绝对强一致,而是明确数据库是最终事实来源,缓存是可丢弃的加速层,通过删除缓存、失败重试、TTL 和 binlog 监听等方式保证最终一致。
2026-05-21 21:09:04
960
原创 《一篇文章搞懂常见限流算法:固定窗口、滑动窗口、漏桶和令牌桶》
固定窗口实现简单但存在临界突刺问题,滑动窗口更精确,漏桶适合平滑流量,令牌桶则在控制平均速率的同时允许一定突发流量。在高并发系统中,如果瞬时流量超过系统承载能力,可能会导致接口响应变慢、线程池耗尽、数据库连接打满,甚至服务雪崩。比如把 1 分钟拆成 6 个 10 秒的小窗口,每次统计最近 1 分钟内所有小窗口的请求总数。但在分布式系统中,一个服务通常会部署多个实例,如果每个实例都单独限流,就可能导致整体限流失效。它把时间划分成固定窗口,比如 1 秒一个窗口,然后统计当前窗口内的请求数量。
2026-05-19 09:22:50
799
10
原创 Happens-Before:并发编程中的“先后关系”
happens-before 是理解 Java 并发的核心概念。它不是单纯的“谁先执行”,而是内存模型里的“谁对谁可见”。判断一段多线程代码是否可靠时,可以问自己一个问题:一个线程的写入,和另一个线程的读取之间,有没有建立 happens-before 关系?如果有,代码才有可靠的可见性和顺序保证。如果没有,那么程序看起来“多数时候正常”,但在高并发、不同 CPU、不同 JVM 优化下,就可能出现难以复现的问题。简单来说:happens-before 是并发程序里判断内存可见性的规则。
2026-05-16 10:52:02
676
4
原创 JDK21新特性 —— 虚拟线程
虚拟线程是JDK21引入的一个新特性,它是运行在平台线程上的极其轻量级的线程,让你可以轻松开启成千上万个线程且不用担心系统崩溃。虚拟线程最大的好处不是让单次任务变快(它甚至比内核线程慢一点点点),而是极大地提高了系统的并发能力(吞吐量)。它让你可以用阻塞式的简单代码,跑出非阻塞式的超高性能。
2026-05-13 16:52:25
379
1
原创 一篇文章带你搞懂“三色标记法”
定义:三色标记法是一种,用于在垃圾回收过程中区分存活对象和垃圾对象好处:1. 标记时需要进行stw,需要暂停程序。三色标记法就是将stw变成并发标记,使程序一边运行一边进行标记垃圾。2. 避免重复扫描对象,高效遍历对象图,提升标记阶段的效率。
2026-05-11 14:10:22
288
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅