我把代码审查交给了 AI,结果反被它教育了

发布时间:2026/8/30 15:42:05

我把代码审查交给了 AI,结果反被它教育了
我以为 AI 只会挑缩进和命名这种格式问题。结果它揪出我一个空指针隐患我脸有点挂不住。自己看自己的代码眼睛会自动跳过 bug这是真的。你刚写完一段逻辑脑子里还是我打算让它这样跑的预设review 的时候就容易顺着预设看跳过真正的问题。同事 review 也费眼——大家都忙很多时候扫一眼就过了看起来没问题就 approve 了。工具把 diff 贴给任意大模型就行不用接 CI/CD 流水线不用装任何插件不用配 GitHub App。最简方案只需要两步第一步导出 diff# 导出本次 MR/PR 相对于主分支的所有变更gitdifforigin/main...HEADmr.diff# 查看概况echo变更统计:wc-lmr.diff# 总行数grep^mr.diff|wc-l# 新增行数grep^-mr.diff|wc-l# 删除行数第二步贴给 AI 提示词打开千问 / 豆包 / ChatGPT / Claude先粘贴 diff 内容再贴这段提示词下面是本次改动的 git diff。 请只从逻辑、边界、异常处理的角度做 code review 列出具体风险点和修复建议。 ⚠️ 不要改代码风格不要挑缩进和命名。 那些留给 linter 和 formatter 去管。 重点关注这五类问题 1. 空指针NPE — Optional.get() 未判空 — Map.get() 返回值直接用 — 方法链式调用中间可能返回 null 2. 越界访问 — 数组/列表索引越界 — substring 截取范围未校验 3. 并发安全 — 共享变量无 synchronized / 无锁 — 非线程安全的集合在多线程环境使用 4. 资源泄漏 — Stream / Connection / InputStream 未 close — finally 块中缺少清理逻辑 5. 边界条件 — 空集合传入遍历 - null 入参未 guard — 极端值0, MAX_VALUE, 负数 输出格式 严重[文件:行号] [问题描述] → [建议修复方式] ⚠️ 建议[文件:行号] [问题描述] → [建议修复方式] ✅ OK [做得好的地方简要表扬]它真挑出了我忽略的空指针那段代码我读了三遍没发现问题。代码长这样// 旧代码有 bugpublicStringgetUserName(LonguserId){UseruuserRepo.findById(userId);// 返回 OptionalUserreturnu.getName();// ← 直接用如果 userId 不存在呢}问题在于findById()返回的是OptionalUser但代码直接.getName()没做任何判空处理。这个 key 在某种边界情况下压根没 put 进去——平时测试数据都覆盖了线上偶发就炸。AI 一句话点破“若 key 不存在getValue() 返回 null后续 .toString() 会 NPE。建议使用 orElseThrow() 或 ifPresent() 做防御性处理。”我愣了三秒。这确实是我的盲区——我自己写的代码脑子里它一定有值的预设太强了。那一刻有点羞耻但更多的是庆幸——这要是上线了又得半夜被报警叫醒别问我怎么知道的凌晨三点的钉钉电话谁接谁知道。修复后// 新代码安全publicStringgetUserName(LonguserId){returnuserRepo.findById(userId).map(User::getName).orElseThrow(()-newNotFoundException(用户不存在: userId));}踩坑它也会误报别全信公平说AI review 不是全对。我用了几十次后的经验情况频率怎么处理真 bug像上面的 NPE~60%直接修感谢 AI有道理但优先级不高~25%记到待办不阻塞合并误报它理解错了上下文~15%忽略不加评论典型误报场景它把防御性代码当成冗余建议你删掉 →别删防御性代码是你的安全网它对你们框架的自定义注解不熟悉瞎指一气 →忽略框架相关的误报它建议你用最新语法/API 但你们项目还在用老版本 →按项目规范来所以用法是它当第一道筛子你当最后一道关。它列的风险点你逐条判断真不真、修不修。我那次 NPE 是对的但十次里大概有两三次是误报得你自己兜底。完整工作流每个 MR 必走一遍本地开发完成 ↓ git push origin feature/xxx ↓ 创建 MR / PR ↓ ① git diff mr.diff ← 导出 diff ↓ ② 贴给 AI review 提示词 ← AI 初筛2 分钟 ↓ ③ 逐条判断 AI 的意见 ← 你当最后一道关5 分钟 ↓ ④ 自己再看一遍整体逻辑 ← 补 AI 看不到的架构视角3 分钟 ↓ ⑤ 修改确认的问题 ← 推送 fix commit ↓ ⑥ 合并 MR ← ✅ 完成总耗时约 10–15 分钟/MR纯人工 review 通常要 30–40 分钟量化效果指标纯人工 reviewAI 辅助 review每个 MR 耗时30–40 分钟10–15 分钟漏掉的 bug偶有遗漏人眼疲劳显著减少AI 不疲劳一年省下时间—约 80–100 小时最有价值的事—替你挡住线上事故我现在合 MR 前都先过一遍 AI review再自己看。一年几百个 MR省出来的时间够我多带小覃写两个模块。更重要的是它替我挡掉的几个隐患换成线上事故就是半夜救火 全群 你。

相关新闻

STM32N6 XSPI2 Direct-XIP后Abort卡死BUSY的根因与规避

STM32N6 XSPI2 Direct-XIP后Abort卡死BUSY的根因与规避

2026/8/30 15:42:05

做嵌入式这些年,最怕碰到的就是“配置看着没问题、逻辑也挑不出毛病、但实际就是卡死”的外设问题。最近在STM32N6上调试XSPI2连接外部NOR Flash的工程时,我就遇到了这么个非常刁钻的怪问题:只要XSPI2的会话在此之前被实际用于Direct-XIP指令…

Angular核心概念与实战:从安装到企业级应用开发

Angular核心概念与实战:从安装到企业级应用开发

2026/8/30 15:32:04

做前端技术选型时,很多团队会反复纠结一个问题:业务系统复杂度上来之后,是选一个轻量灵活的框架快速搭页面,还是选一个规范完整、约束更强的框架慢慢打磨。Angular 明显属于后者。它不像某些轻量方案那样几分钟就能起一个页面&…

识别伪装成AI爬虫的漏洞扫描:从UA到行为分析的检测实践

识别伪装成AI爬虫的漏洞扫描:从UA到行为分析的检测实践

2026/8/30 15:32:04

你看日志时可能见过这样的请求:GET /wp-login.php HTTP/1.1 User-Agent: ClaudeBot/1.0一个自称是 ClaudeBot 的爬虫,没有去访问正常的页面,而是直扑后台登录接口。如果你只是按 User-Agent 对爬虫放行,那这台服务器大概率已经被扫…

STM32复位释放期间IO引脚默认逻辑与误动作规避实战

STM32复位释放期间IO引脚默认逻辑与误动作规避实战

2026/8/30 16:42:07

我猜不少人碰到过这种情况:板子一上电,或者按了复位键,外接的继电器“啪”地吸合一下,电机莫名其妙地转了一下,蜂鸣器“嘀”一声短响,LED闪了一下又恢复正常。排查了半天电路,硬件上上下拉都加了…

基于PPO强化学习的六轴机械臂轨迹规划与避障控制仿真实践

基于PPO强化学习的六轴机械臂轨迹规划与避障控制仿真实践

2026/8/30 16:42:07

简介:本资源是一套面向机器人控制与强化学习研究者的六轴机械臂智能轨迹规划仿真系统,聚焦工业自动化场景下的PPO算法落地实践,解决CR5机械臂在动态环境中自主避障、末端精确定位与夹爪协同控制等核心问题。压缩包共102个文件,含2…

从2017京东校招看Android面试:主观题考点与答题思路

从2017京东校招看Android面试:主观题考点与答题思路

2026/8/30 16:42:07

最近翻旧电脑里的面试笔记,翻出一份2017年京东校招Android方向的主观题汇总。那年我还在一线做Android开发,从笔试、面试到帮部门整理题库都经历过一遍,对这些题的感情挺复杂。今天回看,最大的感受是:2017年前后Androi…

告别八股文面试:技术面试到底该考察什么?

告别八股文面试:技术面试到底该考察什么?

2026/8/30 16:42:07

最近几年不管是大厂还是中小公司,技术面试越来越像高考默写。面试官拿着网上流传的题库,从 HashMap 底层问到 Kafka 为什么能支撑百万并发,候选人熬夜背了一堆“标准答案”,一进面连线上的问题都没排过,张口就是“红黑…

MoE架构125B参数仅6B激活,本地部署与微调实战指南

MoE架构125B参数仅6B激活,本地部署与微调实战指南

2026/8/30 16:42:07

Qwen 这次开源的 125B 总参数、仅激活 6B 的 MoE 架构模型,最值得关注的数字不是 125B,而是那个 6B。激活参数决定了单次推理要跑多少计算量,6B 激活意味着它的单 token 推理开销远低于同规模稠密模型,本地部署的显存策略、推理速…

Codex目标模式实战:从安装配置到批量任务全解析

Codex目标模式实战:从安装配置到批量任务全解析

2026/8/30 16:32:07

这次我们来看 Codex 的“目标模式”。如果你已经装了 Codex CLI,但还在像聊天框一样一句一句发 prompt,那你其实只用了它一小部分能力。所谓目标模式,核心是:你只告诉 Codex 一个最终目标,比如“把这个 Node.js 项目迁…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/8/30 0:01:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/8/30 0:01:07

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/8/30 0:01:07

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/8/30 0:01:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/8/30 0:01:07

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/8/30 0:01:07

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/28 7:35:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/28 7:34:51

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/28 7:34:35

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…