用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/zhangloveyan/backend-skill --skill proj-review命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
基于 SOC 职业分类
| name | proj-review |
| description | 代码审查检查清单和流程。用于代码提交前的自检、PR审查、代码质量检查。 |
前置: 任务文档校验 → Step 0: 编译检查 → Step 1: 功能检查 → Step 2: 代码规范 → Step 3: 安全检查 → Step 4: 性能检查 → Step 5: 自动修复 → Step 6: 测试检查 → Step 7: 输出报告
执行 mvn compile 检查:
如有编译错误,先修复再继续审查。
强制规则 - 违反必须修复:
#{} 参数化查询)其他安全检查:
强制规则 - 违反必须修复:
其他性能检查:
对于以下问题,直接修复而非仅报告:
| 问题类型 | 修复方式 |
|---|---|
| NPE 风险(Integer/Long 比较) | 改用 equals() 或 Objects.equals() |
| 类名与文件名不匹配 | 修改类名与文件名一致 |
缺少 @ApiLog 注解 | 添加注解 |
| 硬编码常量 | 提取为常量或使用 BaseConstant |
// ✗ 错误
int a = 1;
String str = "hello";
public void process() {}
// ✓ 正确
int userCount = 1;
String userName = "hello";
public void processOrder() {}
// ✗ 风险
User user = userMapper.selectById(id);
return user.getName(); // user 可能为 null
// ✓ 正确
User user = userMapper.selectById(id);
if (user == null) {
throw new BusinessException(ErrorCode.DATA_NOT_EXIST);
}
return user.getName();
// ✗ 危险
@Select("SELECT * FROM user WHERE name = '" + name + "'")
// ✓ 安全
@Select("SELECT * FROM user WHERE name = #{name}")
// ✗ N+1 问题
List<Order> orders = orderMapper.selectList();
for (Order order : orders) {
User user = userMapper.selectById(order.getUserId()); // N次查询
}
// ✓ 正确 - 批量查询
List<Order> orders = orderMapper.selectList();
Set<Long> userIds = orders.stream().map(Order::getUserId).collect(toSet());
Map<Long, User> userMap = userMapper.selectBatchIds(userIds)
.stream().collect(toMap(User::getId, Function.identity()));
// ✗ 深度分页问题
SELECT * FROM order LIMIT 100000, 10; // 扫描 100010 行
// ✓ 游标分页
SELECT * FROM order WHERE id > #{lastId} ORDER BY id LIMIT 10;
// ✗ 未分批
mapper.insertBatch(largeList); // 可能超时或内存溢出
// ✓ 分批处理
List<List<Entity>> batches = Lists.partition(largeList, 500);
for (List<Entity> batch : batches) {
mapper.insertBatch(batch);
}
使用模板生成审查报告:审查报告模板
同步更新任务文档: