- 博客(608)
- 收藏
- 关注
原创 Agent调优必须要懂的12条原则!
本文来自于对 Agent 12 原则的总结。Agent 是软件,但不同于传统软件(需要工程师编写每个步骤和边缘情况),Agent 只需要给出目标和一组规则,通过 Agent 实时决策以确定执行路径,从而达成最后目标。Agent 给软件开发带来的改变:Agent 允许工程师编写更少的控制型代码,只需要将“图的边(Edge)”提供给 LLM,让他自行决策下一步执行节点。Agent 开发中,最重要的是提示词和上下文工程,这是工程师与 LLM 交互的核心方式。
2025-12-09 23:54:05
1007
原创 DeepResearch 核心原理
本节介绍基于 Spring AI Alibaba 实现的 DeepResearch 内部的核心流程,涵盖了常见 Agent 的开发范式。Agent 适用于目标明确,可以动态寻找最优解的场景。DeepResearch 就是经典的场景,根据用户的问题,大量搜集前置知识,并不断优化调整,以提升最终生成研究报告的质量。DeepResearch 中,想要生成兼具广度和深度的研究报告,首先需要搜集与用户问题相关的前置知识,为了使搜集到的信息覆盖面足够广,需要先进行问题扩展。
2025-12-06 18:40:25
997
原创 05-面试解析 Agent 理论 + 实践(Spring AI Alibaba)
本节介绍了 Agent 的四种基础设计模式,来自于吴恩达 2024 年 3 月发表的演讲,这四种设计模式是最基础的设计模式,除了这些还有很多其他方式可以提升 Agent 的性能,例如在 Jina DeepResearch 中,会使用<xml>定义提示词,并且对查询进行重写,查询的重写非常重要,可以从更多角度获取潜在的答案,并且在 RAG 搜索中,可以基于查询重写得到更适合 BM25 算法的关键词,以收集到更多有用的内容。
2025-10-30 22:23:29
753
原创 04-Agent 武器库-集成百炼MCP(Spring AI Alibaba)
本地实现 MCP Client/Server 进行调用。集成百炼平台的 MCP Server,并且改造 Spring AI 源码实现了鉴权方式。原生 MCP Client 实现。除此之外,还介绍了 MCP 的两种通信方式,Stdio 和 SSE,其中 Stdio 是进程级别的通信,因此只能在本地运行,如果要调用远程 MCP Server,则需要使用 SSE 方式。
2025-10-23 22:01:24
669
原创 03-RAG Agent-集成百炼知识库(Spring AI Alibaba)
代码位于:https://github.com/1020325258/spring-ai-alibaba-tutorial/blob/master/03-spring-ai-alibaba-mcp/bailian-mcp-client/src/test/java/com/alibaba/yycome/ClientSse.java。上边演示了借助于 Spring AI 封装的 MCP 快速集成百炼的 MCP 工具,但是由于封装的内容太多,对于内部如何调用 MCP 工具我们可能并不清楚。
2025-10-22 23:03:33
1043
原创 02-单智能体-面试结果评估(Spring AI Alibaba)
*面试答案评估智能体:**根据问题和用户输入的答案,通过 AI 模型来评估答案质量。首先创建一个 ChatClient 与 LLM 交互,因此这里称它为“智能体”(具备感知、决策、行动、反思能力),这里通过@Bean@Bean.build();SystemMessage:定义模型的行为和角色。它为模型提供上下文和行为指导,并确保模型在对话过程中保持一致的行为。UserMessage:通常是用户输入的问题。
2025-10-21 23:23:45
1031
原创 Java 程序员:Spring AI Alibaba 框架选型
下图来自于 Spring AI Alibaba 官方,最底层基于 Spring AI 来实现 Chatbot 和 RAG 应用。Spring AI Alibaba 基于 Spring AI 扩展了工作流(Workflow)、多智能体(Multi Agent)等能力,核心就是它所提供的多智能体能力,基于 Graph 能力编排多个智能体。相比于单智能体,
2025-10-19 00:44:35
977
原创 Async 默认线程池真坑!
Async由 Spring 框架提供,被该注解标注的类或方法会由异步线程执行。因此,在项目中,需要异步执行的地方通过@Async指定非常方便,但正是因为这种便利性,让开发人员对底层流程没有任何感知。如果不了解底层原理,直接使用@Async,那就可能会导致在未来的某一时刻出现服务不可用的情况。因为@Async默认使用 Spring 的线程池会为每一个异步任务创建一个线程执行,有 1w 个任务就会创建 1w 个线程,不会对线程进行复用,开销巨大。
2024-12-26 17:30:00
1534
原创 爆肝万字,AQS 源码分析!
最近一周在写 AQS 源码分析,AQS 属于并发的核心内容,很多同步器都基于 AQS 实现。可能很多同学并不太了解 AQS 学习到什么程度好,以及 AQS 中的 Node 节点状态是在是太复杂,看的眼花缭乱!通过这一周看 AQS 源码的经验,我觉得学习 AQS 只要把它内部的执行流程捋顺就可以了。AQS 主要是管理线程的入队、出队,以及队列中线程等待获取资源这一过程,所以自己在学习的过程中也有必要画画图,来看一下在入队、出队的时候,节点的状态是如何变化。通过画图,可以很好地理清思路。
2024-12-23 15:28:26
1147
原创 多线程案例落地 - 库存扣减请求合并、库存一致性保证
文章内容已经收录在《高级技术专家成长笔记》,欢迎订阅专栏!从原理、系统设计出发,直击面试难点,实现更高维度的降维打击!海哥也给出了合并库存扣减请求的 Demo,是一个多线程的 Demo,对提升并发掌握很有帮助,这里也整理一篇文章进行分析!参考 B 站 up 主《极海Channel》,视频链接:https://www.bilibili.com/video/BV1Hv4y1P7ta对于库存扣减流程中的优化,最主要的优化就是库存扣减请求的合并,海哥也给出了 Demo,这里将整体设计、演进思路整理出来库存扣减请求
2024-11-28 16:03:26
1473
原创 高级专家性能调优手段,库存扣减场景,20 倍性能提升!
整体介绍了库存扣减优化思路,其中最核心的优化就是对库存请求进行合并,将性能瓶颈由数据库转移到合并算法的设计中,性能具体可以提升多少,取决于合并算法可以减少多少的数据库 IO 开销除了核心的请求合并优化,也进行了事务内部的 SQL 顺序调整,减少行锁持有时间并且将缓存更新由同步更新,改为异步更新,减少扣减库存接口的同步等待时间, 并且降低了 Redis 中库存数据的刷新频率。
2024-11-25 11:14:13
977
原创 超高流量多级缓存架构设计!
多级缓存架构在互联网电商场景中经常使用,因为读、写请求量级较大,RT 要求较低,这里讨论的多级缓存架构仅以读请求性能提升为目的为什么多级缓存架构可以提升读性能?缓存的本质就是数据冗余,通过将数据一层一层冗余,放在离用户更近、容量更小、价格更贵、速度更快的存储系统上,以此来提升系统的访问性能。
2024-11-21 12:49:49
3275
原创 电商服务-订单服务设计(万字长文分析)
对于分布式 ID 的生成方案,美团基础研发平台推出了 Leaf 作为分布式 ID 生成服务,已经广泛应用于美团金融、美团外卖、美团酒旅等多个部门,因此直接学习美团的开源解决方案即可Leaf-segment:基于 MySQL 生成唯一 IDLeaf-snowflake:基于雪花算法优化更加常用的方案是方案一和方案三通过方案一可以满足从用户维度的订单查询通过方案三可以实现更多维度的查询操作。
2024-11-20 14:56:03
1506
原创 Java线程池的核心内容详解
在线程池中可以自己去定义拒绝策略,如果线程池无法处理更多的任务了,可以在自定义的拒绝策略中,将拒绝的任务异步持久化到磁盘中去,之后再通过一个后台线程去定时扫描这些被拒绝的任务,慢慢执行保证严格的任务不丢失:如果线上机器突然宕机,线程池的阻塞队列中的请求怎么办?如果宕机,重启之后,线程池阻塞队列中的任务就会全部丢失如果想要解决这种情况的话,有这么一个解决方案。
2024-11-04 13:47:52
1343
原创 面试官:Elasticsearch 为什么能实现灵活的查询?
ES 中灵活的查询主要依赖于分词和倒排索引,通过这两个核心技术,实现了根据关键词搜索对应文档,并且可以对搜索结果的相关性进行排序除此之外,ES 还提供了高级查询 Query DSL(Domain Specified Language,领域专用语言),DSL 允许用户构建更加复杂的查询条件。
2024-10-31 14:12:27
515
原创 美团面试:Elasticsearch 深分页问题如何解决?
欢迎关注公众号(文章末尾即可扫码关注) ,持续在我后台回复 「资料」 可领取在我后台回复「面试」可领取该文章内容已经收录在,从原理出发,直击面试难点,实现更高维度的降维打击!
2024-10-30 13:11:16
1247
原创 JDK 下的高性能计数器 LongAdder 实现原理
欢迎关注公众号(文章末尾即可扫码关注) ,持续在我后台回复 「资料」 可领取在我后台回复「面试」可领取该文章内容已经收录在,从原理出发,直击面试难点,实现更高维度的降维打击!
2024-10-30 13:09:39
997
原创 写时复制(CopyOnWrite)落地实现
欢迎关注公众号(文章末尾即可扫码关注) ,持续在我后台回复 「资料」 可领取在我后台回复「面试」可领取该文章内容已经收录在,从原理出发,直击面试难点,实现更高维度的降维打击!
2024-10-21 13:37:29
1260
原创 指令重排导致的单例在并发场景下出现问题!
欢迎关注公众号(文章末尾即可扫码关注) ,持续在我后台回复 「资料」 可领取在我后台回复「面试」可领取该文章内容已经收录在,包含底层原理解析,带你冲破面试迷雾。
2024-10-21 13:36:14
1298
原创 【MySQL核心面试题】MySQL 核心 - Explain 执行计划详解!
欢迎关注公众号(文章末尾即可扫码关注) ,持续在我后台回复 「资料」 可领取在我后台回复「面试」可领取该文章内容已经收录在,包含底层原理解析,带你冲破面试迷雾。
2024-10-20 21:06:05
1077
原创 高性能无锁内存队列-Disruptor
缓存行的概念为了提升 CPU 速度,CPU 会有一个高速缓存(Cache),该缓存由很多个 cache line 组成,每个 cache line 通常是 64B,并且可以有效地引用主内存中的一块地址。Java 中 long 类型变量是 8B,因此一个 cache line 可以存储 8 个 long 类型变量CPU 每次从主存中拉取数据时,会把相邻的数据也存入同一个 cache line,那么在访问一个 long 数组时,如果数组中的一个值被加入缓存中,那么也会加载另外 7 个伪共享问题。
2024-10-20 15:36:39
1109
原创 【MySQL核心面试题】面试官:不可重复读和幻读了解吗?MySQL如何解决对应问题?
在互联网公司面试中,MySQL 相关问题的出现频率相当之高,作为后端研发人员,几乎人人都要掌握 MySQL 底层原理,否则在面试第一关八股文就会被拦住,对应的内容也收录在了中,可以关注文章底部扫码关注公众号(11来了),即可领取。
2024-10-19 15:56:07
1177
原创 面试:了解 ThreadLocal 内存泄漏需要满足的 2 个条件吗?
ThreadLocal 用于存储线程本地的变量,如果创建了一个 ThreadLocal 变量,在多线程环境下访问这个变量的时候,每个线程都会在自己线程的本地内存中创建一份变量的副本,从而起到线程隔离的作用当 ThreadLocal 被定义为方法中的局部变量,那么当线程进入该方法的时候,就会将 ThreadLocal 的引用给加载到线程的栈中。
2024-10-19 15:53:17
1184
原创 【MySQL核心面试题】索引结构
在 Java 语言的 HashMap 中,当链表中的节点过多时,就会将链表转为红黑树来提升查询性能,HashMap 会经常的增加、删除节点,而红黑树的插入、删除效率较高。
2024-10-18 14:47:01
824
原创 【MySQL核心面试题】InnoDB 的自适应哈希索引
自适应哈希索引使得 InnoDB 在恰当的工作负载以及充足的 Buffer Pool 内存系统中,可以表现得更加像一个内存数据库,并且无需牺牲事务特性以及可靠性基于观察到的搜索模式,哈希索引是使用索引 key 的前缀来构建的,前缀可以是任意长度,并且可能只有 B 树中的某些值才出现在哈希索引中,哈希索引是根据需要为需要经常访问的索引页构建的。
2024-10-18 14:42:40
1077
原创 【MySQL核心面试题】MyISAM 和 InnoDB 存储引擎的区别
MyISAM 存储引擎由于不支持事务,并且只有表锁没有行锁,导致了它如果执行发生错误容易丢失数据,并且锁的粒度太大了,导致无法承载高并发的写操作但是 MyISAM 可以支持很好的查询性能,因为它的索引和数据是分开存放的,因此可以缓存更多的索引,查询性能较好,在大量查询操作的场景中,MyISAM 可以有很好的性能表现InnoDB相对于 MyISAM 来说,更适合写操作比较多。
2024-10-18 14:41:58
789
原创 【MySQL核心面试题】为什么 mysql 删了行记录,反而磁盘空间没有减少?
欢迎关注公众号(文章末尾即可扫码关注) ,持续在我后台回复 「资料」 可领取在我后台回复「面试」可领取。
2024-10-18 14:41:33
630
原创 线程池扩展 - 快速定位异常任务的提交位置
线程池执行任务出现异常,会遗漏异常任务在哪里提交的日志打印,因此可以对线程池做扩展,在提交线程任务的时候,自己创建一个异常,保存调用的堆栈信息,如果任务执行失败,就将调用的堆栈信息也同时打印出来即可。
2024-10-18 12:20:33
517
原创 隐蔽的并发错误
对 cnt 加锁,看似逻辑上没有问题,但最终却出现了并发问题,是因为 JDK 将 java 代码编译为字节码指令,编译后的字节码指令与我们的预期不符,导致出现并发问题,虽然工作中也不会碰到,但是可以借此进一步了解 JVM 中的字节码指令字节码为了计算方便,为通过栈进行操作数的计算,在第 15 行通过 getstatic 获取 cnt 的 int 值压入栈中,在 25 行将常数 1 压入栈中,在 26 行将栈顶两个整数相加,执行完成cnt ++
2024-10-17 15:40:38
686
原创 多级缓存架构设计
应用 Nginx 本地内存Redis 缓存JVM 内存DB接入层 Nginx:处理入口流量,用作流量分发应用层 Nginx:接近业务层,处理业务逻辑,用作热点缓存的读取Nginx 作为高性能的 Web 服务器,经常被作为反向代理服务器用作负载均衡,这里多增加了一层应用层 Nginx,用来处理热点缓存数据,相比于 Tomcat 集群的本地内存来说,可承接的流量更高。
2024-10-14 15:20:50
1154
原创 用户“关注”系统设计方案
方案的设计是从无到有的过程,如果直接给出优化后的方案,缺少中间的思考过程是得不偿失的,因为在工作中碰到相同场景的几率是很小的,所以学习具体场景的解决方案对研发人员来说是性价比很低的,要学习其中对每一步方案的优缺点分析,以及如何优化!先介绍单表实现方案,通过 DB 表来完成用户关注关系的查询,使用 表来存储,如下:直接将用户的关联关系插入到表 表中单表方案存在问题: 将所有用户的关联关系都存储在单表中,会导致单表数据量大,存在性能问题单表数据量太大,因此分库分表进行存储,那么要考虑分片键的设定,有两种选择
2024-10-11 20:30:05
967
原创 缓存数据一致性保证通用方案
综上,介绍了 3 种保证缓存一致性的解决方案,在真正使用场景中,需要从业务场景对数据不一致时间、实现成本、维护成本等多个方面进行评估,选择适合的方案不过既然使用缓存,肯定就没办法保证绝对的一致性比如在 Linux 内核中,使用了 PageCache(在内存中) 来优化 IO 性能,所有的 IO 操作,数据并不是直接写入到磁盘中,而是先放入到了 PageCache 中,再统一时间将 PageCache 的数据刷入到磁盘中,以此来提升磁盘 IO 的效率。
2024-10-10 11:13:35
1129
基于电商的高并发Redis专栏讲解
2024-01-26
Java春招面试突击pdf学习文档
2024-01-24
计算机专业考研(408)思维导图
2023-12-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅