给 Agent 设超时和步数预算:别让它无限跑
给 Agent 设超时和步数预算:别让它无限跑第一次把 Agent 接到真实仓库时,我犯过一个很土的错:只盯着“它能不能做完”,没盯着“它最多能跑多久、最多能走几步” 结果某次工具调用卡在外部接口,它一边重试一边换策略,token 和墙钟时间一起烧,最后我手动杀掉,现场还一堆半成品文件 从那以后,我把超时和步数预算当成和权限同级的安全项 不是为了虐待 Agent,而是承认:自动化一旦没有硬上限,失败模式会从“报错”变成“悄悄耗尽” Agent 的轨迹很会制造希望:每一步都有日志,每一步都像在进步 可进步不等于收敛 常见假象包括: 同一类错误换着措辞重试 在几个文件间来回改,测试始终红 搜索范围越扩越大,上下文越来越脏

2026-10-14鱼鱼
浅谈锁机制、主流锁设计方案
浅谈锁机制、主流锁设计方案本文旨在探讨通用的锁机制实现逻辑,以Java中常见的锁实现为例 本文提到的锁,是指通过限制并发/并行访问所添加的安全措施,本质上是通过限制线程/进程同时更改数据或是读取数据与写入数据产生时序差从而造成数据问题 锁机制中,有一些常见特性: 可重入性 指同一线程/进程携带相同的标识可以反复多次加锁,每次加锁和释放锁对应的重入次数+1/-1; 读写锁/独享共享 是锁的不同运作模式,分为读写锁,读锁与写锁、写锁与写锁是互斥的,但多个线程/进程可以同时对一个逻辑添加读锁,独享共享是另一种叫法 公平性 锁分为 公平锁和非 公平锁, 公平锁指锁释放和获取的顺序严格按照索取的顺序,非 公平锁则是等待锁的对象共同进行锁释放机会的争抢
![浅谈锁机制、主流锁设计方案]()
2024-10-15鱼鱼
Redis原理-源码解析:数据结构3 hash
Redis原理-源码解析:数据结构3 hash 所有原理实现基于Redis版本6.0.9 hash在Redis中可以认为是套了一层的string,当然,对hash来说没有数字类型 让我们依旧通过基本命令看看hash的基本数据结构实现 在set方法中我们看到了hash的初始创建过程,一个hash最开始是zipist 想要了解ziplist可以看Redis原理-源码解析:数据结构2 list ,是为节省内存而生的链表格式 所以其实在使用ziplist时其查询的时间复杂度不是遵循hash的近似O(1),而是O(n),但是在数据量不大时,这种性能的损失微乎其微,并且能预见到大多数使用hash的场景都不会存储过多的字段 所以优先使用了更节省内存空间的ziplist

2020-11-29鱼鱼
让 AI 起变量名和函数名,我留下的几条品味规矩
让 AI 起变量名和函数名,我留下的几条品味规矩命名一直是我写代码时最磨蹭的环节之一 名字起糊了,后面读代码的人(包括一个月后的我)会一直付税 AI 很擅长甩出一串候选名,也很容易甩出看起来专业、读起来空洞的名字 这篇文章记我让它起名时留下的几条规矩——不是语法规范全文,是品味上的取舍 我愿意让 AI 起名,前提是: 我已经能用一句话说明“这个东西在业务里干什么” 我要的是 3–5 个候选,不是一个“最佳答案” 最终选定权在我,尤其是会进公共 API、表字段、事件名的那些 一上来就说“给个好名字”,它常会给你 handleUserData、processInfo、manageService 这类语法正确但语义稀释的词 候选机模式能逼它发散,也逼我比较

2026-10-14鱼鱼
Redis原理-源码解析:数据结构1 字符串操作&SDS及预分配的实现验证
Redis原理-源码解析:数据结构1 字符串操作&SDS及预分配的实现验证所有原理实现基于Redis版本6.0.9 SDS(Simple Dynamic String)简单动态字符串,是Redis中字符串所采取的数据结构,SDS并不是Redis的独创,只是被Redis采纳的一种数据结构,用以替换C语言原生的字符串类型:sds仓库传送门 使用方法与原生的C语言字符串类似,并能提供很多类似的API SDS经过了两个版本,目前的解析大都基于v1 v1版本的sds数据结构很简单: 比起C语言中单一的字符数组构成的字符串,sds具有以下优势: 存储了字符串长度,相比C语言遍历获取长度,将时间复杂度由O(n)变为O(1); 当SDS每次发生修改时,会为其分配冗余空间,在字符串空间小于1MB时,每次分配实际长度2倍的空间,而在大于1MB时则是分配多1MB的空间,是在空间不足时才会触发分配

2020-11-16鱼鱼
你好,这是一篇测试博客
你好,这是一篇测试博客这是一篇由助手代为撰写的测试博客 今天天气不错,适合写点东西 以后会在这里记录一些有趣的想法和学习笔记,欢迎大家多多交流
![你好,这是一篇测试博客]()
2026-09-30鱼鱼
kasper的算法(从0到1)
kasper的算法(从0到1)https://javaguide.cn/cs-basics/data-structure/linear-data-structure.html https://javaguide.cn/cs-basics/algorithms/linkedlist-algorithm-problems.html 项目地址:https://github.com/labuladong/fucking-algorithm 在线文档地址:https://labuladong.gitee.io/algo/home/ http://fishmaple.cn/blog/topicBlog?topicId=7
![kasper的算法(从0到1)]()
2023-10-23kasper
AI 自动补全抢方向盘:什么时候该关掉它
AI 自动补全抢方向盘:什么时候该关掉它AI 补全(或行内建议)最迷人的地方,是它常常「猜对你下一句」 最烦人的地方也是这个——它猜对下一句时,也可能把你带离本来要开的那条路 我不是补全黑名单派 体力活、重复模式、测试样板,我开着很香 但这篇文章想写清楚:哪些时刻我会主动关掉或忽略它,以及为什么「一直开着」会偷偷伤到设计质量 写给那些已经习惯 Tab,却说不清「这段到底是我想的还是它推的」的人 典型场景: 你正要抽一个接口,光标停在名字上,它已经按旧习惯补出一个「很大很全」的方法签名 你在探索两种方案,它持续把你推向仓库里更常见的那一种 你想写个丑但明确的临时实现,它不停建议「更优雅」的抽象 命名还没想清,它已经用空心词把名字钉死了

2026-10-15鱼鱼
让 AI 帮我看别人的 PR,我怎么避免被它带偏
让 AI 帮我看别人的 PR,我怎么避免被它带偏code review 一直是我又爱又烦的环节 爱的是能提前拦住问题;烦的是有些 PR 又长又绕,下午三点看到,眼睛先花了 后来我开始让 AI 帮忙“先看一眼” 效率确实上来了:它能很快列出一堆疑点,有的还挺准 但用了一阵子,我也被它带偏过——有一次它言之凿凿说某段并发不安全,我跟着在评论区写了很长一段,作者委婉回复:那段代码根本不会并发进入 我再看,确实如此 尴尬归尴尬,也逼我把用法收紧了 这篇不是教你“用 AI 替代 review”,而是聊聊:怎么让它当助手,却不把结论权交出去 先说我自己的体感(不是评测数据,是使用感受) 相对擅长: 扫一眼有没有明显的空指针、资源没关、错误被吞

2026-10-14鱼鱼
让 AI 写 SQL 和迁移脚本:语法没错,坑全在数据里
让 AI 写 SQL 和迁移脚本:语法没错,坑全在数据里在我日常用 AI 写的各种代码里,SQL 大概是“看起来最省心”的一类 语法它几乎不会写错,连窗口函数、递归 CTE 都信手拈来 让它写个报表查询,或者写个加字段的迁移脚本,几秒钟就好,读一遍也挑不出毛病 但正是这种“挑不出毛病”,让我吃过好几次亏 SQL 的坑很少出在语法上,而是出在语义、数据量和线上环境上——这三样东西,恰恰是 AI 在对话框里看不到的 这篇就把我踩过、或者差点踩到的坑整理一下,最后再说说我现在的做法 先交代背景:我平时主要接触 MySQL,也维护过一些 PostgreSQL 的项目 下面说到具体行为时,我尽量注明是哪个数据库;不同版本之间行为可能有差异,以你用的版本的官方文档为准

2026-10-14鱼鱼
AI 生成的 README 和注释,我为什么经常删掉重写
AI 生成的 README 和注释,我为什么经常删掉重写AI 写文档很快:README、函数注释、模块说明,几秒就能铺满 我早期几乎照单全收,后来越来越频繁地整段删掉重写 不是因为文笔不好,而是因为很多生成文档在“正确的废话”和“过时的细节”之间晃,读的人费时间,维护的人更痛苦 这篇文章记我什么时候信它、什么时候动手砍,以及重写时我保什么、扔什么 1. 正确的废话 “本模块用于处理订单相关逻辑,提供创建、查询与更新能力 ”——读完等于没读 它没有告诉我边界、不变量、也没有告诉我别乱用的地方 2. 和代码赛跑的细节 把当前参数列表、每一步实现按行复述一遍 代码一改,注释就撒谎 AI 特别擅长写这种“现在时”的说明,因为它看见的就是此刻源码

2026-10-14鱼鱼
AI 建议装新依赖时,我怎么查验再动手
AI 建议装新依赖时,我怎么查验再动手结对写代码时,AI 很爱给一种“干净解法”:装一个库,三行调用,问题消失 有时这确实是正道;有时则是把一个五分钟能写完的小函数,换成十年后还要付账的依赖 我吃过亏:当时图省事装了包,后来发现维护停滞、传递依赖一堆、许可证也不理想 卸载比安装痛 所以现在但凡 AI 说“建议安装某某”,我会先走一套很短的查验,再决定装不装 查验的第零步不是搜包,而是判断需求本身 若是加密、图像处理、成熟协议实现——自己造轮子风险更大,倾向用维护良好的库 若是拼接查询字符串、简单重试、薄封装——先看标准库或现有工具能不能扛 我会明确问 AI:“不用新依赖,用标准库怎么写?代价是什么?”它若给不出合理的无依赖方案,只是单方面推销某个包,我反而更警惕

2026-10-14鱼鱼