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
PyCharm与python快速开发
PyCharm与python快速开发Python语言作为“胶水语言”,简单易学,开发周期快,功能和扩展性强大,类库丰富 只依赖一门Java并不适用于所有情况,譬如快速开发一次性脚本(修复数据),通过使用Python效率更高,本篇文章旨在介绍本人快速入门Python的一些tips 注意,一些Python的基本语法在此不予介绍,推荐前往廖雪峰的博客查看,博客基于Python3.8版本 关于编译器等配置内容参考PyCharm帮助文档 从Python官网下载Python并安装,配置环境变量,安装PyCharm(这里 我们使用它作为IDE),这里略过 pip是python的包管理与安装工具,当你安装python后,pip也会随之被安装

2021-01-16鱼鱼
排坑指南-异步操作HttpServletRequest丢失Cookie
排坑指南-异步操作HttpServletRequest丢失Cookie遇到了一个很奇怪的bug:请求鉴权失败,因为通过Request对象获取到的Cookie中没有数据 经过debug调用request.getCookies()方法返回了null值,但是header属性的cookie却能拿到用户的有效cookie(request.getHeader("cookie")),其中缘由,且慢慢道来 我们可以在web项目中通过Request对象很方便的获取Cookie对象: 但其内部实现其实有一层缓存逻辑,从名为"cookie"的请求头中读取并处理数据转为Cookie对象并不是个省时事,在org.apache.catalina.connector.Request类中可以看到如下代码实现:

2020-11-11鱼鱼
长任务 Agent 的上下文压缩:摘要什么、丢什么、什么必须原样留着
长任务 Agent 的上下文压缩:摘要什么、丢什么、什么必须原样留着我自己写的那个编程 Agent,最早只用来做一些小改动,十几轮对话就结束了,上下文从来不是问题 后来我开始让它做跨很多文件的迁移,比如把一批旧接口的调用换成新接口 这种任务一跑就是几十轮:读文件、搜索、改代码、跑测试、看报错、再改 每一轮的工具输出都往上下文里堆,没多久就逼近了模型的上下文上限 于是我做了第一版“压缩”:上下文超过某个阈值,就让模型把之前的历史总结成一段话,然后用这段总结替换掉原来的历史,继续往下跑 听起来很合理,跑起来问题一大堆 这篇就讲讲我前后几次改动的过程,以及现在比较稳定的做法 都是在我自己这个 Agent 上摸索出来的经验,换个场景未必完全适用 第一版用的是自由发挥式的摘要,提示大概就是“请总结上面的对话,保留重要信息”

2026-10-14鱼鱼
日常 Coding Agent 里的提示注入:不夸张,但真会踩
日常 Coding Agent 里的提示注入:不夸张,但真会踩一提「提示注入」,容易联想到演示视频里的戏剧桥段:网页藏白字、模型突然泄露密钥 真实日常 Coding Agent 里,更多是另一种样子——不夸张,但真会踩:issue 正文里一句「请忽略之前的指示」,日志里一段看起来像指令的异常信息,README 里抄来的「安装后请执行」…… 这篇文章按工程实践写:我在日常用 Coding Agent 时,把提示注入当成什么风险、怎么降危,以及哪些防护值得做、哪些不必神话 目标不是制造焦虑,是把卫生习惯写清楚 Coding Agent 常见外源: 网页 / 文档抓取内容 GitHub issue、PR 描述、评论 报错日志、测试输出、构建日志

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

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

2026-10-14鱼鱼
Spring源码解析(3) IoC容器配置读取和容器refresh
Spring源码解析(3) IoC容器配置读取和容器refresh在文章Spring源码解析(I) 基于SSM看Spring的使用和Spring启动监听中,讲述了web容器启动后会触发的方法实现中生成Context的部分,回顾下核心方法: 我们已经分析到了0.处,他对我们生成的容器做了一个判断,对于web.xml监听初始化的Context,其生成的WebApplicationContext都是ConfigurableWebApplicationContext的子类,所以必然会进入if分支 首先通过loadParentContext先加载了父容器,默认是null 然后调用了configureAndRefreshWebApplicationContext方法进行初始化和配置项的读取

2020-08-09鱼鱼
MCP 协议入门:给 Agent 一个统一的“工具接口”
MCP 协议入门:给 Agent 一个统一的“工具接口”当 Agent 需要接入越来越多的外部能力——文件系统、数据库、GitHub、内部系统——每个工具都要自己写一套适配代码,非常繁琐 MCP(Model Context Protocol,模型上下文协议) 就是为了解决这个问题而提出的开放协议,由 Anthropic 发布,目标是让“AI 应用”和“外部工具/数据源”之间有一套统一的对接标准 本文从动机出发,讲清楚 MCP 的角色、能力、消息流程,带你用 SDK 写一个最小 Server,再用不依赖 SDK 的方式手写一遍协议交互来理解本质,最后总结安全注意事项、常见坑和 FAQ 从 N×M 到 N+M:Host、Client 与 Server 的分工

2026-10-14鱼鱼
让 AI 写 commit message,我留下的几条规矩
让 AI 写 commit message,我留下的几条规矩现在写完一小段改动,我偶尔会让 AI 根据 diff 拟一条 commit message 省事是真省事,翻车也真实翻过:有的标题漂亮得像广告,读完不知道改了什么;有的把半成品猜想写进历史,后来查问题的人会被带沟里 所以我不是禁用,而是给它加了几条规矩 规矩的核心只有一句:说明白改了什么、为什么改;别写套话,别替我编动机 Commit message 是给未来的自己和同事看的 好的 message 能回答:这次动了哪类东西?动机是修 bug、加能力,还是清债?有没有故意不做的范围? AI 擅长扫 diff、归纳文件级变化,比我在疲惫时随手敲的 fix、update 强 但它也容易:

2026-10-14鱼鱼
ES快速入门(2)——Tokenizer、Reindex
ES快速入门(2)——Tokenizer、Reindex本篇介绍es提供的几种分词分析器和常用的开源分词分析器 es默认的分词器,中规中矩的按照 Unicode Standard Annex #29分词,一般的小写符号会忽略,对于中文等字符会逐字分割,参数max_token_length表示最大的字符长度,再切分后会继续按此切分 譬如: 会分词为: 一个无视语义,按照字符尽量收集全索引的分词方式,会前后叠加的按符号位分词,参数: 会分词为: nGram的分词很全面,但如此夸张的方式用不好会导致索引doc过大,同时使查询效率偏低 分词规则很简单,无其余规则的按空格分词: 会分词为: 在standard的基础上能够有效拆分出邮箱和url地址的格式,同样有max_token_length这一参数:
![ES快速入门(2)——Tokenizer、Reindex]()
2020-09-05鱼鱼
给 Agent 一个草稿本:为什么 scratchpad 比全塞进 prompt 更稳
给 Agent 一个草稿本:为什么 scratchpad 比全塞进 prompt 更稳做长任务 Agent 时,我最早的做法特别朴素:把所有中间结果、计划、反思,一股脑追加进对话上下文 反正模型“看得见”,多写点总没错 错就错在“多写点” 上下文很快又脏又长:旧计划和新计划并存,失败的工具输出还在,模型开始引用过期结论,或者在同一段推理上打转 更麻烦的是,你很难回答一个基本问题——此刻 Agent 到底相信什么? 后来我给 Agent 加了一个显式的“草稿本”(scratchpad):工作记忆外置到一块可读写的状态里,prompt 里只放当前需要的摘要和指针 稳定性和可调试性都好了不少 这篇讲讲为什么,以及我怎么划分什么该进草稿本 1. 噪声淹没信号 工具返回动辄几千字,失败堆栈、HTML 片段、长 JSON,全进上下文

2026-10-14鱼鱼