Turn China 3C launch inputs into executable routes, messaging, channel actions, risk checks, and review decisions.
Coding
Java开发手册免费版
Try itJava 开发规约速查手册,覆盖命名、异常、并发、数据库等 7 大维度核心规范。Use when 需要代码生成、编程辅助、调试测试、开发部署时使用。不适用于无明确技术栈的模糊需求。适用于独立开发者、企业团队和自动化工作流场景。支持中文交互,无需复杂配置即开即用。输出结果可直接使用,减少二次加工成本。
What it does
本工具为 Java 开发者提供开发规约的速查能力,覆盖编程规约、异常日志、单元测试、安全规约、数据库规约、工程结构、设计规约共 7 大维度。规约按约束力强弱分为【强制】、【推荐】、【参考】三级,帮助开发者编写规范、可维护的 Java 代码。免费版聚焦个人开发者的规约速查场景,提供简明的速查表与代码示例。
The skill document
功能说明: 本技能涵盖 中文交互、化工作流场景 等核心能力。
Java 开发手册(免费版)
概述
本工具为 Java 开发者提供开发规约的速查能力,覆盖编程规约、异常日志、单元测试、安全规约、数据库规约、工程结构、设计规约共 7 大维度。规约按约束力强弱分为【强制】、【推荐】、【参考】三级,帮助开发者编写规范、可维护的 Java 代码。免费版聚焦个人开发者的规约速查场景,提供简明的速查表与代码示例。
核心能力
| 维度 | 描述 | 规约数量 |
|---|---|---|
| 编程规约 | 命名、格式、OOP、并发、集合 | 20+ 条 |
| 异常日志 | 错误码、异常处理、日志规范 | 10+ 条 |
| 单元测试 | 测试用例、覆盖率、Mock | 8+ 条 |
| 安全规约 | SQL 注入、XSS、CSRF、脱敏 | 8+ 条 |
| 数据库规约 | 建表、索引、SQL、ORM | 15+ 条 |
| 工程结构 | 分层架构、依赖管理 | 8+ 条 |
| 设计规约 | UML、设计模式、设计原则 | 6+ 条 |
技术实现要点:核心能力基于input_params参数与output_format配置实现,支持创建/查询/修改/删除等操作模式,通过config_options进行运行时配置。 |
核心功能执行
用input_params参数进行配置。
输出: 返回核心功能执行的执行结果,包含操作状态和输出数据。
- 执行此能力时使用
input_params参数,支持创建/查询/导出操作
参数配置与调用
用config_options参数进行配置。
输出: 返回参数配置与调用的执行结果,包含操作状态和输出数据。
- 执行此能力时使用
config_options参数,支持修改/重置/导入操作
结果处理与输出
用output_format参数进行配置。
输出: 返回结果处理与输出的执行结果,包含操作状态和输出数据。
- 执行此能力时使用
output_format参数,支持导出/保存/转换操作 能力覆盖范围:本skill的核心能力覆盖以下场景关键词:Java、开发规约速查手册、覆盖命名、数据库等、大维度核心规范、开发者的开发规约、速查工具、大维度的规约指引、大维度规约速查、命名规范、格式规范、规范速查、并发处理与集合操、作规范、异常处理与日志规、范模板等。这些关键词对应description中声明的使用场景,均已在上述能力点中提供对应的操作支持。
使用场景
场景一:命名规范查询
开发者编写代码时需要查询命名规范。
用户:Java 类名和变量名的命名规范是什么
助手:
类名:UpperCamelCase
public class UserService { }
public class UserDO { } // DO/DTO/VO 例外
方法名/变量:lowerCamelCase
private String userName;
public void getUserById() { }
常量:全大写+下划线
public static final int MAX_RETRY_COUNT = 3;
包名:全小写
package com.company.project.service;
禁止:
- 拼音命名(如 yonghuMing)
- 中英文混合
- 使用下划线(常量除外)
场景二:并发处理规范查询
开发者需要查询线程池和 ThreadLocal 的使用规范。
用户:线程池创建和 ThreadLocal 使用的规范
助手:
线程池创建规范:
- 【强制】禁止使用 Executors 创建线程池(可能 OOM)
- 【强制】使用 ThreadPoolExecutor 显式创建
ThreadPoolExecutor executor = new ThreadPoolExecutor(
corePoolSize,
maximumPoolSize,
keepAliveTime,
TimeUnit.SECONDS,
new LinkedBlockingQueue<>(queueCapacity),
new ThreadFactory() {
private AtomicInteger counter = new AtomicInteger(1);
public Thread newThread(Runnable r) {
return new Thread(r, "worker-" + counter.getAndIncrement());
}
},
new ThreadPoolExecutor.CallerRunsPolicy()
);
ThreadLocal 使用规范:
- 【强制】使用后必须 remove,避免内存泄漏
try {
threadLocal.set(value);
// 业务逻辑
} finally {
threadLocal.remove();
}
场景三:数据库建表规范查询
开发者需要查询数据库建表和索引命名规范。
-- 建表必备字段
CREATE TABLE example (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 索引命名规范
-- 主键: pk_字段名
-- 唯一: uk_字段名
-- 普通: idx_字段名
-- 禁止事项
-- 禁止 SELECT *
-- 禁止字符串拼接 SQL
-- 禁止使用存储过程处理业务逻辑
不适用场景
以下场景Java开发手册免费版不适合处理:
- 无明确技术栈的模糊需求
- 纯架构设计决策
- 运维部署管理
触发条件
需要代码生成、编程辅助、调试测试、开发部署时使用。不适用于非本工具能力范围的需求。
快速开始
- 阅读## 核心能力章节了解skill功能
- 按## 依赖说明配置环境
- 执行所需能力对应的命令
- 参考## 错误处理章节处理异常
- 查看## FAQ解答常见疑问
禁止事项速查
| 禁止 | 原因 |
|---|---|
| 拼音命名 | 可读性差 |
| 魔法值 | 难以维护 |
SELECT * | 性能和可维护性 |
| Executors 创建线程池 | 可能 OOM |
| 字符串拼接 SQL | 注入风险 |
| finally 中 return | 丢失 try 返回值 |
| foreach 中 remove | ConcurrentModificationException |
| 空 catch 块 | 隐藏问题 |
必须事项速查
| 必须 | 原因 |
|---|---|
| 覆写方法加 @Override | 避免签名错误 |
| 表必备三字段 | id, create_time, update_time |
| 敏感数据脱敏 | 隐私保护 |
| 参数校验 | 安全防护 |
| ThreadLocal 回收 | 避免内存泄漏 |
| 日志用占位符 | 性能优化 |
错误处理
// 正确的异常处理
try {
// 业务逻辑
} catch (SpecificException e) {
logger.error("操作失败, 参数: {}", params, e);
throw new BusinessException("用户友好提示", e);
} finally {
// 资源关闭(JDK7+ try-with-resources)
}
// try-with-resources
try (Connection conn = dataSource.getConnection();
PreparedStatement stmt = conn.prepareStatement(sql)) {
// ...
} catch (SQLException e) {
logger.error("数据库操作失败", e);
throw new RuntimeException(e);
}
| 序号 | 错误场景 | 原因 | 处理方式 | 优先级 |
|---|---|---|---|---|
| 1 | 输入参数缺失 | 用户未提供必要参数 | 提示用户提供所需参数后执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令 | P0 |
| 2 | 执行超时 | 处理时间过长 | 检查输入数据量,分批处理 | P1 |
| 3 | 输出格式错误 | 结果不符合预期格式 | 检查output_format参数配置 | P1 |
示例
命名规范速查表
| 类型 | 规范 | 正确示例 | 错误示例 |
|---|---|---|---|
| 类名 | UpperCamelCase | UserService | userService |
| 方法名 | lowerCamelCase | getUserById() | GetUserById() |
| 变量名 | lowerCamelCase | userName | user_name |
| 常量 | 全大写下划线 | MAX_RETRY | maxRetry |
| 包名 | 全小写 | com.company.service | com.Company.Service |
| 枚举 | UpperCamelCase | HttpStatus.OK | HttpStatus.ok |
日志规范速查
// 使用 SLF4J 占位符(不要用字符串拼接)
logger.info("用户登录: userId={}", userId);
// 异常日志必须包含堆栈
logger.error("操作失败: {}", params, e); // e 作为最后一个参数
// 日志级别使用规范
logger.debug("调试信息: {}", detail); // 调试
logger.info("用户注册: {}", userId); // 重要业务
logger.warn("缓存未命中: {}", key); // 告警
logger.error("数据库异常", e); // 错误
// 禁止
System.out.println("..."); // 禁止使用控制台输出
logger.info("用户" + userId + "登录"); // 禁止字符串拼接
集合操作速查
// 集合转 Map 的正确方式
Map userMap = userList.stream()
.collect(Collectors.toMap(User::getId, u -> u));
// 指定初始容量
Map map = new HashMap<>(expectedSize / 0.75 + 1);
List list = new ArrayList<>(expectedSize);
// 安全的删除方式
// 错误
for (User u : userList) {
if (u.getStatus() == 0) {
userList.remove(u); // ConcurrentModificationException
}
}
// 正确
Iterator it = userList.iterator();
while (it.hasNext()) {
if (it.next().getStatus() == 0) {
it.remove();
}
}
// 或使用 removeIf
userList.removeIf(u -> u.getStatus() == 0);
优选实践
-
常量代替魔法值:所有硬编码值提取为常量
public static final int STATUS_ACTIVE = 1; -
使用 try-with-resources:自动管理资源关闭
-
异常信息包含上下文:便于问题定位
throw new BusinessException("用户[" + userId + "]不存在"); -
日志用占位符:避免不必要的字符串拼接
-
集合指定初始容量:减少扩容开销
-
参数校验前置:在方法入口校验参数
-
避免在循环中创建对象:减少 GC 压力
-
使用 Optional 替代 null:更安全地处理空值
常见问题
Q1:为什么禁止使用 Executors?
// Executors.newFixedThreadPool() 使用无界队列,可能 OOM
ExecutorService executor = Executors.newFixedThreadPool(10);
// 内部使用 new LinkedBlockingQueue<>(),队列无上限
// 正确:使用 ThreadPoolExecutor 并指定有界队列
ExecutorService executor = new ThreadPoolExecutor(
10, 10, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(1000) // 有界队列
);
Q2:foreach 中为什么不能 remove?
// foreach 使用 Iterator 遍历
// remove 会修改 modCount,导致 ConcurrentModificationException
// 正确方式一:Iterator.remove()
Iterator it = list.iterator();
while (it.hasNext()) {
if (condition) it.remove();
}
// 正确方式二:removeIf
list.removeIf(u -> condition);
Q3:如何正确处理 NPE?
// 使用 Optional 避免空指针
public String getUserName(User user) {
return Optional.ofNullable(user)
.map(User::getName)
.orElse("未知用户");
}
// 集合返回空集合而非 null
public List getUsers() {
return Collections.emptyList(); // 不返回 null
}
// 字符串判空
if (StringUtils.isNotBlank(name)) { }
Q4:数据库索引怎么建?
-- 索引命名
-- 主键: pk_字段名
-- 唯一: uk_字段名
-- 普通: idx_字段名
-- 索引原则
-- 1. 查询频繁的字段建索引
-- 2. 区分度高的字段优先
-- 3. 避免过多索引(影响写入性能)
-- 4. 联合索引遵循最左前缀原则
-- 示例
CREATE INDEX idx_user_status ON users(status, create_time);
-- 支持查询: WHERE status = ?
AND create_time > ?
-- 不支持: WHERE create_time > ?
Q5:日志级别怎么选?
| 级别 | 使用场景 | 示例 |
|---|---|---|
| ERROR | 影响业务功能的错误 | 数据库连接失败 |
| WARN | 可预期的异常,不影响主流程 | 缓存未命中 |
| INFO | 重要的业务操作 | 用户注册、订单创建 |
| DEBUG | 调试信息 | 方法参数、中间结果 |
| TRACE | 详细执行流程 | SQL 执行详情 |
Q6:如何做参数校验?
// 使用 JSR-303 注解校验
public class UserDTO {
@NotBlank(message = "用户名不能为空")
private String username;
@Min(value = 0, message = "年龄不能为负数")
private Integer age;
@Email(message = "邮箱格式不正确")
private String email;
}
// Controller 中使用
@PostMapping("/users")
public Result create(@Valid @RequestBody UserDTO dto) {
// dto 已通过校验
}
依赖说明
运行环境
- Agent 平台: 支持读取 SKILL.md 的任意 AI Agent(Claude Code / Cursor / Codex / Gemini CLI 等)
- 操作系统: Windows / macOS / Linux
- JDK 版本: 建议 8 及以上
依赖详情
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| JDK | 编译器/运行时 | 推荐 | oracle.com 或 openjdk.net 下载 |
| SLF4J | 日志框架 | 推荐 | maven 中央仓库 |
| Lombok | 工具库 | 可选 | maven 中央仓库 |
| LLM API | API | 必需 | 由 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 |
| 可复用性 | 参数化配置 | 一次性脚本 | 模板化 |
| 安全合规 | 内置安全检查 | 无安全保障 | 无安全保障 |
| 适用场景 | 核心功能 | 通用场景 | 通用场景 |
Related skills
Convert Word, PDF or PPT into browser-ready HTML slides with step animations, fullscreen and offline delivery.
Tests whether you genuinely understand something or just recognize it — exposes the gaps in your mental model.
Join video meetings as a voice bot, visual avatar, or avatar with live screen sharing.
Make irreversible life decisions by projecting to 80 and naming which regret you'd rather live with.
Automated browser control via CLI with Playwright — open pages, interact, extract session credentials.
More from thcjp
Browse all skillsGenerate and process images, videos, or audio by routing each request to an appropriate CLI model.
Routes prompts to an appropriate CLI model for speech, dialogue, music, sound effects, or voice cloning.
Query and manage Pipedrive deals, contacts, organizations, and activities via a managed OAuth proxy.
Query and manage Linear work items through GraphQL with managed OAuth authentication.
Search Jira Cloud and manage issues, projects, comments, assignments, and workflow transitions.
常见办公流程自动化中枢,覆盖文档处理、数据整理、邮件管理、日程协调、报表生成与工作流编排。 聚焦批量操作容错、格式保真、PII 脱敏、模板复用四大痛点,让繁琐办公一键稳妥完成。 核心能力: - 文档批处理:Word/PDF/Excel/PPT 批量生成、转换、合并拆分,含失败隔离与重试 - 数据整理:清洗、转换、...