- 博客(37)
- 收藏
- 关注
原创 【Agent工程设计】工具太多导致上下文爆炸-从ToolSearch到PTC
工具定义超过 30 到 50 个,模型挑工具就开始变差。这句话后来被问得最多。原因不难理解,现在接工具太容易了:装一个 MCP server,十几二十个工具就进来了;再接上 GitHub、Slack、浏览器、数据库,几十上百个工具很快就攒齐了。1.工具定义: 每个工具的名字、描述、参数 schema 都要放进 context,不管这一轮用不用得上。当系统的工具,接入的服务,MCP等过多,对话还没开始,就已经占用掉了很多token。2.中间结果:工具每执行一次,结果就整段回到对话里。模型真正想要的可能只是个结
2026-11-02 13:33:20
294
原创 上下文工程:优化系统提示词,利用 KV Cache 降低 Token 成本
在 Agent 系统中,系统提示词往往是最稳定、也最容易重复计算的一部分。时间、请求 ID、用户临时状态等动态信息如果直接写进长系统提示词,会破坏 KV Cache 的前缀匹配。稳定规则放在系统提示词中动态时间放在独立消息中消息位置固定同一天内保持静态前缀不变这套方案没有减少模型需要知道的信息,只调整了信息的组织方式。上下文工程的一个实用判断是:让稳定内容尽可能早出现,让动态内容尽可能晚出现。Manus 的上下文工程实践:构建 Manus 的经验。
2026-09-21 22:20:57
317
原创 【无标题】
摘要: Claude Code 的工具设计围绕“精准赋能模型”展开,通过三阶段演进解决核心问题:1. 任务管理从弥补注意力缺陷(TodoWrite)升级为多智能体协作框架(Task Tool);2. 搜索工具摒弃静态RAG,采用模型主导的渐进式探索(Agentic Search),动态追踪代码上下文;3. 工具管理通过子智能体解耦功能(如Guide专精文档查询),避免上下文污染与选择负担。核心启示:工具设计需动态适配模型能力,平衡赋能与约束,最终实现高效协作。
2026-08-23 17:15:15
352
原创 【MySQL专题】1.一条更新SQL语句是如何执行的
首先 先通过磁盘IO 找到对应的数据页 如果数据页在BufferPool中 就直接对内存中数据页进行操作 如果数据页不存在于BufferPool中 需要先从磁盘读取数据页 加载到BufferPool 对应上文 会先通过索引快速找到id=21的数据 将数据页加载到BufferPool(如果不存在于BufferPool的话)redolog日志是MySQL 存储引擎层的物理日志 记录事务修改的操作以及结果 他用于保证事务的持久性 能够保证数据持久化和崩溃恢复。
2026-05-17 23:21:21
486
3
原创 网络IO模型-从BIO到IO多路复用
本文系统介绍了网络IO模型的基础知识,重点分析了三种IO模型的特点和演进过程。首先解释了Socket作为应用层和传输层中间抽象层的作用,以及服务端处理网络请求的基本流程。然后详细对比了BIO(阻塞IO)、NIO(非阻塞IO)和IO多路复用三种模型:BIO每个连接需要独立线程,资源消耗大;NIO通过轮询减少阻塞但仍有性能问题;IO多路复用通过select/poll/epoll实现单线程管理多个socket。特别深入分析了epoll的优化机制,包括分离socket维护与进程阻塞、使用红黑树管理socket集合、
2026-05-15 10:36:35
2311
2
原创 【面试复盘】有了equals为什么还需要hashcode
本文探讨了equals和hashCode方法的协同作用。equals用于判断对象逻辑相等,而hashCode通过计算哈希值快速定位对象存储位置。在HashMap等哈希结构中,两者配合使用:先用hashCode快速筛选,再用equals精确判断,既保证了对象唯一性又提高了查询效率。源码分析显示,这种机制通过哈希值预判和精确比对,实现了性能与正确性的平衡。
2026-01-15 16:12:10
390
原创 【MySQL】你真的了解MySQL日志吗
特性Redo LogUndo LogBinlog所属层InnoDB(存储引擎层)InnoDB(存储引擎层)Server 层适用引擎仅 InnoDB仅 InnoDB所有引擎日志类型物理日志逻辑日志逻辑日志主要作用崩溃恢复,保证持久性事务回滚 + MVCC主从复制、备份恢复写入时机事务提交时修改数据时生成事务提交时是否循环写是(固定大小环形文件)否否Redo Log是 数据存储的持久性保障,确保宕机不丢数据;Undo Log是提供回滚能力和版本链,支持回滚与并发快照;
2026-01-14 14:39:41
598
原创 SpringAI从0到1搭建智能出题助手Agent
摘要:本文介绍了基于SpringAI构建题目生成Agent的实现方案。该Agent采用ReAct范式(思考-行动-观察循环),通过责任链模式实现题目生成、验证和自动优化的闭环流程。核心架构包含生成节点(初次生成/反馈优化)、验证节点(质量评估)和总结节点,具备自我反思能力,能自动修正低质量题目直至满足要求。与传统API调用相比,该方案显著提升了题目生成的鲁棒性和智能性,未来可通过RAG增强和多Agent协作进一步优化。典型应用场景是教育科技领域的自动化出题系统。
2026-01-13 16:17:58
645
原创 【Java】一篇文章教你搞懂String的不可变性
在运行期的时候,对于HotSpot虚拟机,并不会立即加入到运行期常量池,而是懒加载,只有第一次用到该字符串常量的时候,采用将其加载到字符串常量池中,在字符串常量池创建出一个String对象,创建一个char[]/byte[],同时其引用指向这个数组。也就是我们创建一个String对象的时候,**新创建的** `String`**对象会直接复用传入对象(即** `"hello"` **)的** `char[]`**数组引用,而不会重新分配新的内存去存储字符数组**//s1指向的是内存中非字符串常量池的地址。
2026-01-13 13:15:02
453
原创 你真的理解Spring三级缓存吗
Spring创建Bean B,完成实例化后,将B的创建工厂存入。初始化A时,发现需要注入Bean B,触发B的创建流程;从三级缓存获取A的工厂,生成A的早期引用,存入。一级缓存无A(未初始化完成),二级缓存无A;初始化B时,发现需要注入Bean A,调用。将A的早期引用返回给B,B完成初始化,存入。存储实例化完成的早期Bean引用。存储完全初始化的成熟Bean。存储Bean的创建工厂。
2026-01-13 13:06:39
504
原创 力扣316去除重复字母-单调栈
d入栈,c要入栈,c已经在栈中了(关键点2,需为在栈中的字符设置标记),所以跳过这个c,b入栈,发现b比栈顶小,但是后面已经没有d了,所以栈顶元素d不能出栈,然后c同样,栈已经存在,跳过。如果栈顶元素比他大呢,我们是否要将他去掉吗,不,如果待搜索的字母中(还未入栈)不包括栈顶元素,那么他是不应该被删掉的,在这种情况,我们就得知道栈顶元素的字母后续是否会出现,,所以去掉a,然后b入栈,a入栈的时候发现a比b小,且b后面还有出现,所以b出栈,然后c入栈,得到最终答案acdb。
2025-04-07 20:08:02
456
原创 redis实现分布式锁
不过使用lua脚本实现分布式锁是更好的选择,因为下文这把锁在判断锁是不是自己的和删除锁的操作不是原子的。UUID作为静态变量,在类加载时生成,也就是服务器启动时,这样不同的JVM下就是不同的UUID。用UUID+线程id作为value,保证每个线程的value唯一,用于后续删除锁前的判断。通过SET key value NX EX seconds操作实现分布式锁。删除锁的时候,判断锁是否是自己的,即通过UUID加线程ID判断。用业务ID作为key:保证一个业务操作一把锁。
2025-03-24 19:10:31
239
原创 一个简单的拦截器实现登录拦截
当携带了cookie,我们可以发送请求成功,并且成功按照拦截器的逻辑打印出了cookie。拦截登录验证比较可靠的刻意使用jwt令牌,redis+token等方式实现。首先我们需要设置一个拦截器,记得注册为bean,并且设置拦截器配置类。我们这里的拦截逻辑比较简单,就是在请求头中加入cookie,然后我们通过postman模拟发送请求。如果可以帮到你,快去动手试试吧ovo。这种方法不安全,只是为了方便演示。当我们不携带cookie。我们可以看到成功拦截。
2025-03-23 12:17:34
223
原创 力扣322
选择了加入,在加入n个这个硬币的决策下可以产生很多选择,最好的选择是dp[i-val]+1,其中dp[i-val]是最多加入n-1这个硬币(可能一个都没加)的最好选择,当我们对某个硬币(数值val)的加入进行决策时,可以产生很多方案,这些方案无非分为两种,加入了,没加入,如果不选择加入,那么此刻dp[i]=dp[i]最后拿dp[i-val]+1和dp[i] 做比较,就是对这个硬币的加入做出决策后的最好选择。如果没有任何一种硬币组合能组成总金额,返回。,表示不同面额的硬币;你可以认为每种硬币的数量是无限的。
2025-03-20 20:50:45
279
原创 力扣416动态规划题目
这也就是滚动数组优化的理由,然后你还可以发现我在枚举3的时候形成了dp[4],我不会拿新形成的dp[4]再加上3取形成dp[7](由1 ,3,3)形成,为什么我不会这么做,因为3只能取一次,但你如果使用了滚动数组(自我滚动,在这道题中体现为dp是一维的)不这么做,程序不一定会, 如果你把我的代码的for(int j=target;枚举3的时候,发现dp[1]存在,那么dp[4]存在,dp[2]存,在, 那么dp[5]存在,dp[3]存在,那么dp[6]存在。dp[0]存在,那么把2加入dp[2]存在。
2025-03-20 20:29:26
259
原创 01背包个人理解(解析)
有 N件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围输入样例8。
2025-03-20 14:39:37
494
原创 并查集基础题:
什么时候连接两个点的边会使得集合成环,那就是两个点已经有通路了,如果两个点没有通路,那么这个边时第一个使得他俩相连的边,那么不可能成环,题目翻译后,就是一道基础的并查集题目了。翻译一下题目:找出第一条使集合成环的边,
2025-03-18 17:21:26
164
原创 洛谷4017题-最大食物链计数
那么为什么可以使用拓扑排序,是因为我们在处理某个点的path的时候,已经把他的前驱都计算好了,在计算2时,1处理好了,他的结果是正确的,在计算3时,2处理好了,在计算4时,3处理好了,在计算5时,2,3,4处理好了,队列对于每个点的处理,都是建立在食物链的流动方向上的。(这里的“最大食物链”,指的是**生物学意义上的食物链**,即**最左端是不会捕食其他生物的生产者,最右端是不会被其他生物捕食的消费者**。第一行,两个正整数 $n、m$,表示生物种类 $n$ 和吃与被吃的关系数 $m$。
2025-03-18 15:49:44
387
原创 一道dfs模板题两种做法,初学者必看,了解dfs出错原因
如A98,是要去处理当前参数节点,那么在进入dfs就得先处理好标记以及添加操作,判断是否完成目标,完成目标则处理并且回溯,否则,列举他能到达的节点,条件成立对其dfs,我们不需要对其先处理,因为我们此时的dfs是处理当前参数节点,对他的处理应该在dfs的头和尾。为什么A98P2在达到终点时不用回溯,因为回溯是在dfs之外的,为什么A98达到终点需要回溯,因为回溯是在dfs之内的,你return后面代码无法执行他就无法回溯了,输出所有的可达路径,每条路径独占一行,存在多条路径,路径输出的顺序可任意。
2025-03-16 11:59:41
380
原创 2017蓝桥杯C合根植物
w 星球的一个种植园,被分成 $m \times n$ 个小格子(东西方向 $m$ 行,南北方向 $n$ 列)。接下来 $k$ 行,每行两个整数 $a$,$b$,表示编号为 $a$ 的小格子和编号为 $b$ 的小格子合根了。第一行,两个整数 $m$,$n$,用空格分开,表示格子的行数、列数($1<m,n<1000$)。接下来一行,一个整数 $k$,表示下面还有 $k$ 行数据 $(0<k<10^5)$。蓝桥杯 2017 年第八届国赛。格子的编号一行一行,从上到下,从左到右编号。## 输入输出样例 #1。
2025-03-14 17:09:12
384
原创 图论-拓扑排序-力扣207课程表
总共有 2 门课程。学习课程 1 之前,你需要先完成课程 0;并且学习课程 0 之前,你还应先完成课程 1。总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。在选修某些课程之前需要一些先修课程。请你判断是否可能完成所有课程的学习?,表示如果要学习课程。
2025-03-13 18:12:00
234
原创 力扣239困难题滑动窗口最大值-单调队列解法
比如 -3 -1 2 1,....,k=4我们把-3加进来,-1加进来,和-3比较,他比-3大,那么-3不可能是最大值了,踢出去,把-1加进去,把2加进来发现-1比他小,-1不可能是最大值了,踢出去,把2加进来,然后1比2小,那么把1加进。那样的话我们需要遍历n-k+1个窗口,对于每个窗口需要遍历K个元素,需要(n-k+1)*k次操作,时间复杂度约为O(nk),最差的时间复杂度接近为O(n^2)来,这样队列就是 2 1,刚好遍历到第四个数了,形成了窗口,最大值就是队头2了,
2025-03-12 21:55:07
212
原创 力扣74搜索二维矩阵-二分基础题
给你一个满足下述两条属性的m x n给你一个整数target,如果target在矩阵中,返回true;否则,返回false。truefalse如果把数组排列成一维,那么问题很好解决所以我们直接把他看成一维数组,然后二分搜索,x=一维的下标/列数,y=一维的下标/行数,画图即可看出。
2025-03-12 18:36:46
302
原创 洪水填充问题-dfs与bfs实现
洪水填充从一个点位向邻居点位扩散,然后再扩散到邻居的邻居,实际是一个寻找连通块的过程洪水填充过程符合BFS原理,但用DFS实现更容易如果用DFS,我们知道他会一条路走到底然后再回溯,这样我们就可以再一开始设置变量,来记录遍历的连通块的数量,并且记录这块连通块的数量伪代码对于起点,再主函数调用DFS(起点x坐标,起点y坐标)函数实现:牢记;DFS的一条路走到底,回溯走其他路,我们只要维护一个变量,这样我们可以遍历所有点,DFS(x,y){将x,y标记res++for(){//枚举四周的点。
2025-03-11 16:32:23
313
原创 学习搜索第四天---一道简单的bfs搜索问题
847. 图中点的层次给定一个 nn 个点 mm 条边的有向图,图中可能存在重边和自环。所有边的长度都是 11,点的编号为 1∼n1∼n。请你求出 11 号点到 nn 号点的最短距离,如果从 11 号点无法走到 nn 号点,输出 −1−1。
2025-03-10 19:39:18
236
原创 剪枝的应用-BFS剪枝-poj3278-可行性剪枝
DescriptionFarmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has
2025-03-09 15:50:51
739
原创 DFS例题-填涂颜色
由数字 0 组成的方阵中,有一任意形状的由数字 1 构成的闭合圈。现要求把闭合圈内的所有空间都填写成 2。例如:6×6 的方阵(n=6),涂色前和涂色后的方阵如下:如果从某个 0 出发,只向上下左右 4 个方向移动且仅经过其他 0 的情况下,无法到达方阵的边界,就认为这个 0。闭合圈不一定是环形的,可以是任意形状,但保证的 0 是连通的(两两之间可以相互到达)。
2025-03-09 13:19:24
377
2
原创 八数码问题-BFS宽度优先搜索
在一个 3×3 的网格中,1∼8 这 8 个数字和一个x恰好不重不漏地分布在这 3×3的网格中。在游戏过程中,可以把x与其上、下、左、右四个方向之一的数字交换(如果存在)。例如,示例中图形就可以通过让x先后与右、下、右三个方向的数字交换成功得到正确排列。现在,给你一个初始网格,请你求出得到正确排列至少需要进行多少次交换。
2025-03-08 16:14:15
1010
原创 【无标题】
目前学了:javase,mysql基础,ssm,苍穹外卖,基础算法和数据结构。现在是2025.3.8,13:37,此刻在图书馆学习bfs,还有三年半毕业,此贴为证:三年后我要进字节。正在学redis,搜索.
2025-03-08 13:41:00
120
原创 单调队列应用—滑动窗口-acwing154
给定一个大小为 n≤106n≤106 的数组。有一个大小为 kk 的滑动窗口,它从数组的最左边移动到最右边。你只能在窗口中看到 kk 个数字。每次滑动窗口向右移动一个位置。以下是一个例子:该数组为,kk 为 33。你的任务是确定滑动窗口位于每个位置时,窗口中的最大值和最小值。
2025-03-06 15:20:23
372
原创 2017蓝桥杯省赛分巧克力详解
当我们获得的边长更大,意味着巧克力更少,在巧克力边长的数轴上,随着边长在增长,巧克力数量变少,当巧克力小于小朋友个数的时候,就不满足了,因此我们要查找的是check(x)>=k满足时的x的最大值 k把数轴一分为2(由此自然想到二分),左边是满足,右边是不满足,我们要找的就是满足的右端点,因此我们查找的方向是向右(满足时向右边查找),最终找到答案。//边长从左到右变大,我们要的是能满足分配给小朋友的边长最大值,也就是我们要找的是该性质的右端。//二分的是使巧克力满足小朋友需求的最大值。
2025-03-05 16:56:04
345
1
原创 【无标题】
我是一个准大一学生,学习编程是为了多一项技能,打算通过学习理论知识,多打代码,多实践操作来提升编程能力,打算每周学习20小时左右,想加入腾讯公司。
2024-07-12 20:37:26
122
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅