返回技能市场

Java代码审查免费版

面向 Java 开发者的代码审查工具,自动生成结构化审查报告。核心能力: - 6 大维度代码审查(风格/异常/安全/性能/设计/资源) - 4 级严重程度分级(Critical/Major/Minor/Suggestion) - 代码修复建议与前后对比 - Markdown 格式审查报告输出 适用场景: - 个人 Java 代码变更审查 - 代码质量自查与缺陷发现 - 提交前的代码质量验证 差异化: 免费版聚焦个人开发者的代码变更审查,提供标准化的 6 维度检查与修复建议模板,开箱即用

版本: 1.0.1分类: 文档处理
中文

SKILL.md

功能说明: 本技能涵盖 中文交互、化工作流场景 等核心能力。

Java 代码审查工具(免费版)

概述

本工具为 Java 开发者提供代码变更的结构化审查能力,按 6 大维度逐项检查代码质量,标记问题严重程度,并提供可运行的修复代码。通过自然语言指令驱动,帮助开发者在提交前发现潜在缺陷、安全隐患和性能问题。免费版聚焦个人开发者的代码变更审查场景,提供标准化的审查模板与修复建议。

核心能力

审查维度描述常见问题示例
代码风格与命名命名规范、格式、注释变量名 int d、魔法值 status = 1
异常处理捕获策略、错误处理空 catch 块、返回 null 而非抛异常
安全隐患敏感信息、注入风险SQL 拼接、硬编码密码
性能问题循环优化、资源复用循环内字符串拼接、N+1 查询
设计合理性职责单一、模块化过长函数、重复代码
资源管理资源释放、内存管理未关闭连接、ThreadLocal 未清理
技术实现要点:核心能力基于input_params参数与output_format配置实现,支持创建/查询/修改/删除等操作模式,通过config_options进行运行时配置。

核心功能执行

用input_params参数进行配置。

输出: 返回核心功能执行的执行结果,包含操作状态和输出数据。

  • 执行此能力时使用input_params参数,支持创建/查询/导出操作

参数配置与调用

用config_options参数进行配置。

输出: 返回参数配置与调用的执行结果,包含操作状态和输出数据。

  • 执行此能力时使用config_options参数,支持修改/重置/导入操作

结果处理与输出

用output_format参数进行配置。

输出: 返回结果处理与输出的执行结果,包含操作状态和输出数据。

  • 执行此能力时使用output_format参数,支持导出/保存/转换操作 能力覆盖范围:本skill的核心能力覆盖以下场景关键词:Java、代码变更审查工具、大维度生成结构化、审查报告与修复建、开发者的代码审查、自动生成结构化审、查报告、大维度代码审查、级严重程度分级、Critical、Major、Minor、Suggestion、代码修复建议与前、后对比、Markdown、格式审查报告输出等。这些关键词对应description中声明的使用场景,均已在上述能力点中提供对应的操作支持。

使用场景

场景一:审查 Git Diff 变更

开发者提交前需要审查代码变更。

用户:审查以下代码变更
[粘贴 git diff 输出]

助手:生成审查报告
## 不适用场景

以下场景Java代码审查免费版不适合处理:

- 无明确技术栈的模糊需求
- 纯架构设计决策
- 运维部署管理
## 触发条件

需要代码生成、编程辅助、调试测试、开发部署时使用。不适用于非本工具能力范围的需求。
## 概述
- 审查文件:3 个
- 问题总数:5 个
  - Critical: 1
  - Major: 2
  - Minor: 2
## 问题详情

### 1. [Critical] 未释放数据库连接
文件:UserService.java:45

问题描述:
方法中获取了数据库连接但未确保关闭。

问题代码:
```java
public User findById(Long id) {
    Connection conn = dataSource.getConnection();
    // ...
}

修复后代码:

public User findById(Long id) {
    try (Connection conn = dataSource.getConnection()) {
        // ...
    }
}

请参考上方使用说明进行配置和调用

result = "ready"


### 场景二:审查单个源文件

开发者需要对一个 Java 源文件进行全面审查。

```text
用户:审查 UserService.java 文件

助手:按 6 维度逐项检查

### 代码风格与命名
- [Minor] 第 12 行:变量名 `d` 不清晰,建议改为 `duration`
- [Suggestion] 第 25 行:魔法值 `1` 建议提取为常量

### 异常处理
- [Major] 第 38 行:空 catch 块,应记录日志或重新抛出

### 安全隐患
- [Critical] 第 52 行:SQL 拼接存在注入风险,应使用 PreparedStatement

### 性能问题
- [Major] 第 67 行:循环内字符串拼接,应使用 StringBuilder

### 设计合理性
- [Minor] 第 80 行:方法超过 50 行,建议拆分

### 资源管理
- [Critical] 第 95 行:FileInputStream 未关闭,应使用 try-with-resources

场景三:生成修复建议

开发者需要针对审查发现的问题获取修复代码。

// 问题代码:SQL 拼接
public User findByUsername(String username) {
    String sql = "SELECT * FROM users WHERE username = '" + username + "'";
    Statement stmt = conn.createStatement();
    ResultSet rs = stmt.executeQuery(sql);
    // ...
}

// 修复后代码:参数化查询
public User findByUsername(String username) {
    String sql = "SELECT * FROM users WHERE username = ?";
    try (PreparedStatement stmt = conn.prepareStatement(sql)) {
        stmt.setString(1, username);
        try (ResultSet rs = stmt.executeQuery()) {
            if (rs.next()) {
                return mapToUser(rs);
            }
        }
    } catch (SQLException e) {
        logger.error("查询用户失败: {}", username, e);
        throw new RuntimeException("查询用户失败", e);
    }
    return null;
}

快速开始

严重程度定义

级别说明示例
Critical必须修复,可能导致崩溃/安全漏洞/数据丢失SQL 注入、空指针崩溃、硬编码密码
Major强烈建议修复,影响质量/可维护性/性能空 catch 块、N+1 查询、过长函数
Minor建议改进,不影响功能但有优化空间魔法值未提取、命名不清晰
Suggestion可选优化,用于代码美化或优选实践添加 Javadoc、提取工具方法

审查流程

1. 用户提供输入:
   - 必填:git diff 输出或 Java 源文件
   - 可选:需求文档(用于一致性检查)

2. 执行审查:
   - 按 6 个维度逐项检查
   - 标记问题及严重程度

3. 生成报告:
   - 使用标准模板
   - 输出 Markdown 格式

报告结构

## 概述
- 审查文件:N 个
- 问题总数:N 个
  - Critical: N
  - Major: N
  - Minor: N
  - Suggestion: N
## 问题详情
(按 Critical → Major → Minor → Suggestion 排序)

### N. [严重程度] 问题标题
文件:`文件名:行号`

**问题描述**:简短描述

**问题代码**:
```java
// 修复前代码(至少 3 行上下文)

修复后代码:

// 修复后代码(必须可运行)

参考规则:[对应规则编号和名称]

## 示例

### 审查规则速查

**代码风格规则**:
| 规则 | 描述 |
| --- | --- |
| NAM-001 | 变量名应具有描述性,禁止单字母(循环变量除外) |
| NAM-002 | 类名使用 UpperCamelCase |
| NAM-003 | 常量使用全大写下划线 |
| STY-001 | 避免魔法值,提取为常量 |
| STY-002 | 删除注释掉的代码 |

**异常处理规则**:
| 规则 | 描述 |
| --- | --- |
| EXC-001 | 禁止空 catch 块 |
| EXC-002 | 捕获具体异常而非 Exception |
| EXC-003 | 不要返回 null,应抛出异常 |
| EXC-004 | 异常信息应包含上下文 |

**安全规则**:
| 规则 | 描述 |
| --- | --- |
| SEC-001 | 禁止 SQL 拼接,使用参数化查询 |
| SEC-002 | 禁止硬编码密码/密钥 |
| SEC-003 | 校验用户输入 |
| SEC-004 | 敏感信息不写入日志 |

**性能规则**:
| 规则 | 描述 |
| --- | --- |
| PERF-001 | 循环内禁止字符串拼接 |
| PERF-002 | 避免 N+1 查询 |
| PERF-003 | 复用数据库连接 |
| PERF-004 | 合理设置集合初始容量 |

**设计规则**:
| 规则 | 描述 |
| --- | --- |
| DES-001 | 方法不超过 50 行 |
| DES-002 | 方法参数不超过 3 个 |
| DES-003 | 避免重复代码 |
| DES-004 | 单一职责原则 |

**资源规则**:
| 规则 | 描述 |
| --- | --- |
| RES-001 | 使用 try-with-resources 释放资源 |
| RES-002 | ThreadLocal 使用后必须 remove |
| RES-003 | 及时关闭连接/流/文件 |
| RES-004 | 避免内存泄漏 |
## 优选实践

1. **提交前审查**:所有代码变更提交前必须经过审查

2. **优先修复 Critical**:Critical 级别问题必须修复后才能提交

3. **修复代码必须可运行**:修复建议中的代码必须完整可用

4. **按严重程度排序**:报告按 Critical → Major → Minor → Suggestion 排序

5. **提供上下文**:问题代码至少包含 3 行上下文

6. **引用规则编号**:每个问题引用对应的规则编号
## 常见问题

### Q1:如何提供审查输入?

```bash
# 方式一:提供 git diff
git diff > changes.diff
# 将 diff 内容粘贴给审查工具

# 方式二:提供源文件
# 直接粘贴或指定 Java 文件路径

# 方式三:审查特定提交
git show COMMIT_ID --stat
git diff COMMIT_ID~1 COMMIT_ID

Q2:空 catch 块如何修复?

// 错误
try {
    // ...
} catch (Exception e) {
    // 空
}

// 修复方式一:记录日志
try {
    // ...
} catch (Exception e) {
    logger.error("操作失败", e);
    throw new BusinessException("操作失败", e);
}

// 修复方式二:重新抛出
try {
    // ...
} catch (SpecificException e) {
    throw new RuntimeException(e);
}

Q3:如何避免 N+1 查询?

// 错误:N+1 查询
List<Order> orders = orderRepository.findAll();
for (Order order : orders) {
    User user = userRepository.findById(order.getUserId());  // N 次查询
}

// 修复:批量查询
Set<Long> userIds = orders.stream()
    .map(Order::getUserId)
    .collect(Collectors.toSet());
Map<Long, User> userMap = userRepository.findByIds(userIds)
    .stream()
    .collect(Collectors.toMap(User::getId, u -> u));
for (Order order : orders) {
    User user = userMap.get(order.getUserId());  // 内存查找
}

Q4:魔法值怎么提取?

// 错误
if (user.getStatus() == 1) {
    // ...
}

// 修复
public static final int STATUS_ACTIVE = 1;
if (user.getStatus() == STATUS_ACTIVE) {
    // ...
}

// 更好:使用枚举
public enum UserStatus {
    ACTIVE(1), INACTIVE(0), BANNED(-1);
    private final int code;
    UserStatus(int code) { this.code = code; }
}

Q5:如何正确释放资源?

// 错误
Connection conn = null;
try {
    conn = dataSource.getConnection();
    // ...
} finally {
    if (conn != null) conn.close();  // 可能抛异常
}

// 正确:try-with-resources
     PreparedStatement stmt = conn.prepareStatement(sql);
    // ...
}

Q6:ThreadLocal 如何正确清理?

// 错误:未清理导致内存泄漏
private static final ThreadLocal<UserContext> context = new ThreadLocal<>();

public void handle() {
    context.set(new UserContext());
    // ... 忘记 remove
}

// 正确
public void handle() {
    context.set(new UserContext());
    try {
        // 业务逻辑
    } finally {
        context.remove();  // 必须清理
    }
}

错误处理

错误场景可能原因处理方式优先级
输入参数缺失用户未提供必要参数提示用户提供所需参数后重试P0
执行超时处理时间过长检查输入数据量,分批处理P1
输出格式错误结果不符合预期格式检查output_format参数配置P1

依赖说明

运行环境

  • Agent 平台: 支持读取 SKILL.md 的任意 AI Agent(Claude Code / Cursor / Codex / Gemini CLI 等)
  • 操作系统: Windows / macOS / Linux
  • JDK 版本: 建议 8 及以上

依赖详情

依赖项类型是否必需获取方式
JDK编译器/运行时推荐oracle.com 或 openjdk.net 下载
Git命令行工具推荐系统包管理器安装
LLM APIAPI必需由 Agent 内置 LLM 提供

API Key 配置

  • 本工具为纯 Markdown 指令驱动,无需额外 API Key
  • 代码编译验证需要 JDK 环境

可用性分类

  • 分类: MD+EXEC(Markdown 指令 + 命令行执行)
  • 说明: 通过自然语言指令驱动 Agent 执行代码审查,编译验证需要 JDK 执行能力

已知限制

  • 需LLM支持,无LLM环境不可用
  • 复杂业务场景建议结合人工经验判断
  • 执行效率受模型能力与网络环境影响
  • 当前为免费版本,如需完整功能请升级到付费版获取全部能力

安全注意事项

风险类型防范措施
API密钥泄露通过环境变量配置,禁止硬编码到代码或配置文件中
命令执行风险仅执行白名单命令,避免拼接用户输入到命令行参数中
网络通信安全使用HTTPS协议,验证SSL证书有效性
敏感数据暴露输出结果中不包含密钥、令牌等敏感信息

使用前请确认已阅读依赖说明章节,确保运行环境满足安全要求。

效率量化分析

操作场景手动耗时自动化耗时效率提升
文件解析与提取5-10分钟/个<5秒/个60-120x
批量文件处理(100个)8-16小时<5分钟96-192x
API调用与响应解析2-3分钟/次<1秒/次120-180x
多接口数据聚合15-30分钟<10秒90-180x
命令执行与结果收集3-5分钟/次<2秒/次90-150x
重复任务批量执行因任务而异线性缩减5-50x
错误排查与修复10-30分钟<30秒20-60x

差异化对比

对比维度本技能传统手动方式通用脚本工具
自动化程度全流程自动完全手动部分自动
错误处理内置错误恢复依赖人工经验基本try-catch
可复用性参数化配置一次性脚本模板化
安全合规内置安全检查无安全保障无安全保障
适用场景核心功能通用场景通用场景

评论与讨论

0/2000

还没有评论,分享你的体验吧。