自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 MCP 上生产前必须知道的 5 个坑(含一个 Java 团队的真实教训)

MCP 上生产前必须知道的 5 个坑:Tool 的 description 是写给模型读的 prompt,决定调用成败;写操作靠 prompt 拦不住,要靠 Hook 工程护栏(72 个工具四级安全分级实战方案);自建 Server 直调 Service 层等于重做整套横切逻辑——一个 Java 团队的真实教训;只读查询用 Resources 别用 Tools;SSE 已 deprecated,新工程直上 Streamable HTTP。附 OpenAPI 自动注册方案和生产检查单。

2026-09-15 09:34:10 344 1

原创 Skill 还是 MCP?我把 41 条规则包成 MCP 后,三次决定不升级(附决策表)

我把团队 41 条代码审查规则包成了一个 MCP Server(Spring AI 2.0 实现),跑通后同事问:是不是该全升级成 MCP?我前后认真评估三次,三次结论都是不升。这篇把判断过程摊开:三把标尺(要经验还是要事实、变更频率、升级三信号缺一不可)+ 8 个 Java 团队真实场景对号入座的决策表。含一个反向案例:MCP 接三个月才更新一次的文档 API,每次调用 3000+ token,改回 Skill 省了 60%。选型第一原则不是哪个更高级,而是哪个刚好解决问题。

2026-09-08 16:06:45 66 1

原创 Java 手写第一个 MCP Server:Spring AI MCP 半小时跑通

Java 手写第一个 MCP Server:Spring Boot 4.1.1 + Spring AI 2.0.1 官方 starter,半小时把 41 条 AI 代码审查规则库包装成 MCP Server,提供 3 个 @Tool 工具并用 Node 官方 SDK 真实调通。含版本钉死、两趟模型请求循环拆解,以及四个教程没有的坑:Started 日志消失、String 返回值被 JSON 序列化、Git Bash kill 错进程、npm 残缺。demo 工程已开源,一键复跑。

2026-09-01 09:29:20 419 3

原创 Skill 和 MCP 到底什么区别?Java 后端一篇讲透

这不是抄文档抄来的,是这两天跑 demo 亲眼看到的。SSE 是单向的、有状态的,协议官方已经把远程传输演进到 Streamable HTTP,方向是无状态化——2026 年 7 月底那版协议(发布时还是候选版)的主变更就是这个,SSE 只保留兼容。MCP(Model Context Protocol,Anthropic 在 2024 年 11 月发布的开放协议)干的事是"书同文、车同轨":工具侧按协议把自己包装成 MCP Server,AI 侧按协议实现 MCP Client,各做一次,两两互通。

2026-08-25 09:30:05 335

原创 团队AI代码审查规则库落地:3条真规则好过41条抄来的(附团队规范模板与维护机制)

《代码审查规则的进化:从文档到AI驱动的活规范》 文章分享了团队通过AI实现代码审查规则自动化的实践经验。核心观点是:传统文档型规范易失效,而将规则嵌入AI审查流程可使其持续生效。关键做法包括: 双层规则库:个人通用规则与团队专属规则分离,前者随开发者迁移,后者绑定代码仓库,新人克隆即继承历史经验。 结构化规则格式:每条规则需包含具体条款、来源、事故背景及豁免条件,确保可追溯性和场景适配性。 动态维护机制:规则随线上事故即时更新,AI自动同步生效,并通过定期"称重"淘汰无效规则。

2026-08-18 11:15:24 172 2

原创 AI代码安全审查四张安检卡:SSRF、越权、日志脱敏一次讲透(附白名单拦截正确写法)

本文深入剖析了AI代码审查中安全关的特殊性——作为五关中规则最多(11条)却零事故的一关,其核心在于安全问题的不可复盘性。文章提出将安全审查系统化为"安检卡"模式,包含四个固定检查点:SQL注入(检查`$`动态拼接)、SSRF攻击(校验HTTP客户端调用)、越权访问(追踪userId来源)和日志脱敏(审查敏感信息泄露)。安全关拥有唯一能否决需求的特殊权限,强调对于无法提供域名白名单的外部URL场景应直接拒绝需求。文章通过具体代码示例展示了每个检查点的审查要点和防护方案,帮助开发者在AI生成代码时建立系统化的

2026-08-14 20:07:20 343 1

原创 事务里调 RPC 的两种死法:一种我们真炸过,一种没炸但规则先立了

事务里调 RPC 的两种死法:一种我们真炸过——缓存删在事务提交前,排了两天;一种还没炸——RPC 拖长事务,大促时连接池雪崩。这篇把两种死法收成审查三问,afterCommit 和本地事件表代码直接抄。

2026-08-11 20:25:13 313 1

原创 AI写代码的并发安全关:7个线上bug死于同一个“读—算—写”结构(附行锁/乐观锁规则文件)

本文深入剖析了 AI 生成代码中常见的并发安全问题,指出 7 个线上 bug 均源于相同的“读—算—写”结构。文章分析了 AI 产生此类问题的根本原因(训练语料局限和人工审查疏忽),并提供了完整的解决方案:通过决策树区分不同并发场景(无竞争、低并发、高并发),给出行锁和乐观锁的具体代码实现,最后介绍了如何将规则集成到 AI 审查 Skill 中实现自动化防护。

2026-08-10 17:28:22 337 1

原创 AI代码审查Skill开源:5个月踩11个线上bug换来的41条团队规则(附Claude Code五关清单模板)

用 AI 写了五个月业务代码,踩了 11 个线上 bug,换来 41 条审查规则和一个开源的 Claude Code Skill。这个合集一关一篇,把并发、事务、安全每道关卡背后的真实事故、决策树和规则文件讲透,代码全部直接抄。

2026-08-06 18:39:52 195 1

原创 AI代码审查5个月实战复盘:bug下降82%、41条规则库与团队认知转变——AI协作实验室第6篇

十年Java老兵的真实AI编程踩坑记录。不发教程,只发踩坑记录。本文是系列第6篇(终篇)——五个月AI代码审查实验收官复盘:数据曲线、规则库结构,以及团队成员对"写好代码"的理解发生了怎样的变化。

2026-07-24 09:18:02 380

原创 AI代码审查手动忽略警告:4个决策问题让你的判断不再靠感觉——AI协作实验室第5篇

但真正的瓶颈在测试——支付回调幂等测试要覆盖正常、重复、乱序、补偿、极端延迟五种场景,环境准备半天,QA排期至少一天。但规则边界在哪、什么时候不适用、什么时候两害相权取其轻——这些变量不在代码里,在业务压力、排期约束、系统上下文里。他知道同一笔订单的回调被路由到单线程队列处理(无并发死锁风险),知道补偿机制的间隔和触发条件,知道跳过的校验字段上游已处理过。拍板人不等于职级最高的人,是**对这段代码所处系统上下文最熟的人**。手动忽略的真正边界,不是"能不能忽略",是"你能不能说清楚你为什么忽略"。

2026-07-20 11:44:59 325

原创 Claude Code Skill 实践:团队共享 AI 代码审查规则,CR 从找 bug 变成做决策

如果你正在用 AI 写代码但团队还没有统一的 AI 代码审查规范,建议从这套 Claude Code Skill 开始:把每个人踩过的坑写成自动化 Code Review 规则,让 AI 替你守住底线,人工 CR 只留在真正需要判断的架构决策上。不是AI替他写的方案,而是他自己的规则点出了自己的遗漏——"不能在一个事务里打穿整个批次"这句话,当初的真正的意图被checkpoint这一层逻辑补全了。**低价值评论清零。这个案例说明:**当AI开始审AI的时候,真正有用的是规则之间的冲突。

2026-07-15 10:49:29 389

原创 把Java代码审查清单固化成Claude Code Skill:让AI自动规避并发安全与事务边界踩坑(附SKILL.md模板)

你是否也曾将精心编写的代码审查清单贴在显示器旁,却在AI飞速生成代码时“选择性失明”?本文分享了我将血泪教训固化为Claude Code Skill的完整实践——将“五关审查清单”(审需求、扫模式、追事务、盯外部输入、过安检卡)编码成AI可执行的规则。通过构建包含决策树和正反例的Skill,让AI在生成Java后端代码时自动规避并发、事务、空指针等已知漏洞。你将获得可直接复用的Skill目录结构、规则编写方法论,以及从“人工审查”到“AI按规则生成”的研发流程升级方案。

2026-07-12 10:39:04 477

原创 AI 写的代码,我花 2 倍时间去审——但我不觉得亏

本文分享一套从 11 个线上 bug 中提炼出的 AI 代码五步审查法,帮你将 AI 生成代码的线上问题降低 90%。第一关:需求审查- 80% 的问题源于需求描述不完整,必须明确并发模型、上游输入和失败语义第二关:并发模式识别- 寻找“读-算-写”模式,这是并发问题的根源,需要针对性保护第三关:事务边界检查- 确保远程调用不在事务内,避免缓存一致性和消息投递问题第四关:空指针防御- 重点关注外部来源字段,而非盲目添加 null 检查第五关:安全检查清单。

2026-07-09 16:11:46 665

原创 编码时间降了65%,但我反而更焦虑了

你有没有过这种感觉——效率明明涨了,交付的东西明明多了,但下班的时候心里虚得慌。我以前一直以为是矫情。直到上个月我给自己做了个实验,然后失眠了一个晚上。事情是这样的。我一个十年 Java 程序员,从去年开始陆陆续续在用 AI 写代码。Claude Code 为主,偶尔 Codex 打杂。用着用着觉得挺顺手,就想看看它到底省了我多少时间。5 月底我开了个严格对照:手头三个 Spring Boot 微服务——设备数据接入、告警上报、音视频流转发——再加一个管理后台。我把 AI 当成刚入职的 P6,我当 Tec

2026-07-09 15:58:32 279

原创 什么是业务架构、数据架构、应用架构和技术架构

它涉及的是应用软件的设计和部署,支持业务和数据处理需要哪些应用系统,完成从业务到IT的转换,以确保它们有效支持公司的业务需求。减少数据冗余,解决企业数据孤岛,信息化程度低的问题,提高数据的质量和一致性,通过提供清晰、准确的数据,加快决策过程。技术架构的主要目的是提供一个稳定、可靠且安全的技术环境,使企业的相关软件硬件系统都能够实现其业务目标,优化技术资源的配置和使用,降低成本,提高系统的性能和可用性。根据现有架构和先前的纪录和整合,设计新的或改进的业务流程,确保流程的高效和符合战略目标。

2024-07-08 16:32:46 5093 1

原创 10个高级的 SQL 查询技巧

如果您注意到,CTE很有用,因为您可以将代码分解为较小的块,但它们也很有用,因为它允许您为每个CTE分配变量名称(即toronto_ppl和avg_female_salary)递归CTE尤其有用,它涉及查询组织结构图,文件系统,网页之间的链接图等的分层数据,尤其有用。对于上表来说,Joe是唯一一个比他的经理工资更多的员工。Rank()返回从1开始的每行的唯一编号,除了有关系时,等级()将分配相同的数字。示例问题:给定天气表,写一个SQL查询,以查找与其上一个(昨天)日期相比的温度较高的所有日期的ID。

2024-07-03 09:53:45 2208

原创 如何避免写流水账代码?

Orchestration:通常出现在脑海里的是一个交响乐团(Orchestra,注意这两个词的相似性)。交响乐团的核心是一个唯一的指挥家Conductor,在一个交响乐中,所有的音乐家必须听从Conductor的指挥做操作,不可以独自发挥。所以在Orchestration模式中,所有的流程都是由一个节点或服务触发的。我们常见的业务流程代码,包括调用外部服务,就是Orchestration,由我们的服务统一触发。

2024-07-01 09:05:10 1318

原创 JVM 内存结构

程序计数器是一块较小的内存空间,是当前线程正在执行的那条字节码指令的地址。若当前线程正在执行的是一个本地方法,那么此时程序计数器为Undefined。Java 虚拟机栈是描述 Java 方法运行过程的内存模型。局部变量表操作数栈动态链接方法出口信息......本地方法栈是为 JVM 运行 Native 方法准备的空间,由于很多 Native 方法都是用 C 语言实现的,所以它通常又叫 C 栈。它与 Java 虚拟机栈实现的功能类似,只不过本地方法栈是描述本地方法运行过程的内存模型。

2024-06-28 11:41:34 850

原创 浅谈ChatGPT实现原理(素人角度)

总的来说,ChatGPT的实现原理就是通过大量的文本数据训练模型,使其学会语言的规律和意义,然后通过微调训练让模型学会在对话中生成合理的回复。这样,模型就可以根据输入的对话内容,生成出连贯、有意义的回复。接下来,在微调阶段,我们使用了一些已经标记好的对话数据来训练模型。通过将对话数据作为输入和输出进行训练,模型学会了在对话中生成连贯、有意义的回复。首先,在预训练阶段,模型被“喂”了大量的文本数据,像是维基百科、新闻文章、书籍等。当我们输入一个对话时,模型可以理解这个对话的语境,并根据它生成一个相关的回复。

2024-06-28 11:26:42 546

原创 一个注解实现接口幂等性,真心优雅!

***参数名,表示将从哪个参数中获取属性值。*获取到的属性值将作为KEY。*@return*//***属性,表示将获取哪个属性的值。*@return*//***参数类型*@return*/

2024-06-28 11:18:26 682

原创 如何利用MySQL实现模糊匹配

目标是实现一个公司的申请审批流程,整个业务流程涉及到两种角色,分别为角色与角色。整个流程如下图所示:流程图。商务在添加公司时,可能为了方便,直接填写公司简称,而公司全称可能之前已经被添加过了,,所以管理员在针对公司信息审批之前,需要查看以往添加的公司信息里有无同一个公司。

2024-06-28 08:59:20 1186

原创 较为常用的SQL脚本整理

工作中有许多比较常用的SQL脚本,今天开始分几章分享给大家。如果一个ID可以区分的话,可以这么写结果:对比一下发现,ID为1,2的被过滤掉了,因为他们只有一条记录如果几个ID才能区分的话,可以这么写结果:我们将原来的4列增加到了6列。细心的朋友可能发现了这个结果和上面的行转列怎么一模一样?其实上面的行转列是省略写法,这种是比较通用的写法。语法1:Insert INTO table(field1,field2,...) values(value1,value2,...)

2024-06-26 17:29:36 762

原创 SQL 优化的万能小妙招

在应用开发的早期,数据量少,开发人员开发功能时更重视功能上的实现,随着生产数据的增长,很多SQL语句开始暴露出性能问题,对生产的影响也越来越大,有时可能这些有问题的SQL就是整个系统性能的瓶颈。

2024-06-26 17:02:10 1178

原创 Git 使用教程:最详细、最傻瓜、最浅显、真正手把手教!

首先要明确下,所有的版本控制系统,只能跟踪文本文件的改动,比如txt文件,网页,所有程序的代码等,Git也不列外,版本控制系统可以告诉你每次的改动,但是图片,视频这些二进制文件,虽能也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是知道图片从1kb变成2kb,但是到底改了啥,版本控制也不知道。在开发中,会经常碰到bug问题,那么有了bug就需要修复,在Git中,分支是很强大的,每个bug都可以通过一个临时分支来修复,修复完成后,合并分支,然后将临时的分支删除掉。

2024-06-26 16:16:32 1117

原创 抉择之门:在梦想与现实间寻找大学之路

想象一下,你站在人生的十字路口,一边是那个让你心跳加速的专业,它像是一盏明灯,照亮了你内心深处对未来的憧憬和梦想。另一边,则是一所声名显赫的学府,它的名字仿佛自带光环,让人不禁想象自己置身于那片知识的海洋,与志同道合的人一起探索未知的世界。总之,选择学校还是专业,没有绝对的对错,关键在于我们如何根据自己的情况和目标,做出最适合自己的选择。一个好的学校,不仅能够提供优质的教育资源,还能为我们提供一个良好的社交环境,让我们在大学期间结识来自五湖四海的朋友,拓展我们的人脉和视野。我对未来的职业有什么期待?

2024-06-26 10:05:13 341

原创 如何设计一个安全的对外接口

本文大致列举了几种常见的安全措施机制包括:数据加密、数据加签、时间戳机制、AppId 机制、限流机制、黑名单机制以及数据合法性校验;当然肯定有其他方式,欢迎评论中补充。

2024-06-26 09:30:41 1963

原创 写给刚入行程序员的一点经验之谈

2、debug的能力远比编码能力更重要 实现功能只是程序员的第一步,更重要的是解决各种奇怪的bug。通过学习他人的思想和解决问题的方式,可以在遇到类似问题时借鉴他人的经验和方法,并学习如何解决特定类型的问题。6、做好封装 高内聚、低耦合是封装的基本原则,好的封装可以让代码更好地实现单一职责,并减少类和模块之间的依赖关系。10、学会看性能指标、学会性能调优 学会观察和分析性能指标,并进行相应的性能调优,可以提高程序的运行效率和性能。良好的命名规则可以替代部分注释的功能,提高代码的可维护性和可读性。

2024-06-25 17:19:03 573

适用于idea2022.3.3版本各类插件

适用于idea2022.3.3版本各类插件,插件内容丰富从代码格式到逆向工程,从json格式化到代码填充无所不有,家居必备、一键下班

2024-06-26

国密非对称加解密-Java+redis实现方案

通过国密加解密,每个会话产生一对公私秘钥,用于数据通信加解密,支持规则配置

2024-06-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除