AI工程师的效率工具箱:让你每天多出2小时的工具和方法
AI工程师的效率工具箱:让你每天多出2小时的工具和方法
date: 2026-10-21 tags: [效率工具, AI工具, 工程师效率, 职业发展]
开篇故事:每天多出2.5小时,半年完成一年的学习量
2025年5月,刚工作3年的Java工程师何源遇到了职业瓶颈。
他不缺勤奋。每天9点到岗,晚上9点才走,周末还经常学习。但年度绩效评分是B,和他同期进来的同事小李拿了A+,还升了职级。
最让何源困惑的是:小李看起来并不比他努力。每天6点半就下班了。
终于有一天何源忍不住问了小李:你怎么做到的?
小李打开电脑,给何源看了他的工作流。
一个普通工作日,小李是这样工作的:
- 09:00 收到需求文档,用AI提取Action Items(3分钟 vs 何源手动整理20分钟)
- 09:30 开始开发,Cursor AI自动补全70%的样板代码(何源在自己手写)
- 10:30 遇到一个陌生的框架,用AI结构化学习新概念(30分钟学完何源需要2小时的内容)
- 14:00 调试一个诡异的NPE,把堆栈丢给AI分析,1分钟定位(何源找了1小时)
- 15:00 写设计文档,AI帮写初稿,他只做Review修改(节省1.5小时)
- 16:00 做代码Review,AI预审后只剩关键问题(节省30分钟)
- 17:30 下班
测算结果: 小李每天通过AI工具节省的时间:约2.5小时。 这2.5小时,小李用来:深度学习AI大模型技术(6个月 = 1年的学习量)。
何源当天就开始改变。
半年后,他也升了职,成了团队的AI技术负责人。
这篇文章,是何源向我分享的那套工具箱的完整版本。
一、编码效率:GitHub Copilot / Cursor 高级用法
1.1 大多数人只用了10%的功能
Copilot/Cursor的初级用法:等它自动补全。 Copilot/Cursor的高级用法:主动驱动AI写出你想要的代码。
核心技巧:注释驱动开发(Comment-Driven Development)
// 错误用法:等待AI猜你想要什么
public void processOrder(Order order) {
// AI补全了一堆可能不对的代码
}
// 正确用法:用注释精确描述意图
/**
* 处理订单
* 1. 校验库存(调用inventoryService.checkStock)
* 2. 扣减库存(调用inventoryService.deductStock,幂等,用orderId作为幂等key)
* 3. 创建支付单(调用paymentService.createPayment)
* 4. 发送订单创建事件到Kafka(topic: order.created)
* 5. 所有步骤在同一事务内,任何步骤失败全部回滚
* 异常处理:库存不足抛InsufficientStockException,支付创建失败抛PaymentException
*/
@Transactional
public OrderResult processOrder(Order order) {
// AI现在能生成90%正确的代码
}1.2 Cursor的高效工作流
技巧1:用Chat模式理解陌生代码库
在Cursor Chat中:
@codebase 解释这个项目的认证流程是怎么工作的?
从JWT token的生成到验证,列出关键文件和调用链。技巧2:用Compose模式批量生成代码
在Cursor Compose中描述任务:
在 UserService 中添加以下功能:
1. getUsersByDepartment(String deptId) - 按部门查询用户,支持分页
2. transferUserDepartment(Long userId, String newDeptId) - 转移用户部门,需要记录变更历史
3. batchDeactivateUsers(List<Long> userIds) - 批量停用用户,发送通知邮件
参考现有的 createUser 方法的代码风格。
同时生成对应的 Controller 接口(参考现有接口的Swagger注解风格)和单元测试。技巧3:代码重构的精确描述
将以下代码从命令式风格重构为Stream API风格:
- 保持完全相同的功能
- 添加适当的注释
- 保证空指针安全
[粘贴代码]技巧4:Cursor Rules文件(关键!)
在项目根目录创建.cursorrules文件:
# 项目AI编码规范
## 技术栈
- Spring Boot 3.2, Java 21
- JPA + MySQL, Redis
- 统一使用 Result<T> 返回格式
## 代码规范
1. 注入方式:构造器注入(@RequiredArgsConstructor)
2. 异常:业务异常用 BusinessException(code, message),不要用RuntimeException
3. 日志:@Slf4j,方法入参必须记录debug,异常必须记录error
4. 事务:查询方法加 @Transactional(readOnly=true),写操作加 @Transactional
5. 返回值:列表查询返回 List<DTO>,单个查询返回 Optional<DTO>
6. 分页:使用 Pageable,返回 Page<DTO>
7. 时间:统一使用 LocalDateTime
## 禁止事项
- 不要使用@Autowired字段注入
- 不要在Service层捕获Exception后不处理(静默吞异常)
- 不要在循环里调用数据库(N+1问题)
## 测试规范
- 使用JUnit5 + Mockito
- 测试方法名:方法名_场景_预期(eg: createUser_whenEmailExists_shouldThrowException)
- 每个方法至少3个测试用例有了这个文件,Cursor生成的所有代码都会遵循你的团队规范。
1.3 10个必须掌握的提示词模式
模式1:单元测试生成
"为 [方法名] 生成完整的单元测试,覆盖:
正常流程、边界条件(null/empty/max)、每种异常场景"
模式2:代码解释
"用简洁的语言解释这段代码的作用,
特别说明:为什么这样写、有什么潜在问题、如何改进"
模式3:Bug分析
"这段代码在[具体场景]下会出现[具体问题]。
请分析根本原因,并提供修复方案(不要改变方法签名)"
模式4:性能优化
"分析这段代码的性能问题:
1. 找出O(n²)或更差的操作
2. 找出不必要的数据库查询
3. 找出可以利用缓存的地方
给出具体的优化建议和预估改善比例"
模式5:安全审查
"对这段代码做安全审查:
检查SQL注入、XSS、CSRF、权限校验、敏感数据泄露等安全问题"
模式6:接口设计
"设计一个RESTful API用于[业务描述]:
要求:符合REST规范、支持分页和过滤、
返回格式统一、错误码语义明确、兼顾性能"
模式7:数据库设计
"设计[业务]的数据库表结构:
要求:满足3NF、合理索引、考虑分库分表可能性、
字段说明完整"
模式8:文档生成
"为这个类生成完整的JavaDoc:
每个public方法都要有@param和@return,
标注@throws,用中文写description"
模式9:代码Review
"扮演资深Java工程师,Review以下代码:
重点关注:设计模式应用、代码可读性、潜在bug、
性能问题、测试覆盖。以表格形式输出问题列表(严重程度、问题描述、建议)"
模式10:学习加速
"我要学习[技术名],请用费曼学习法教我:
1. 用日常语言解释核心概念(避免行话)
2. 举一个Java生产环境中的实际例子
3. 指出初学者最常见的3个误解
4. 给我3个练习题来验证理解"二、代码理解:快速理解陌生代码库
2.1 3步理解任何代码库
Step 1:架构扫描(10分钟)
提示词模板:
"我是一个新加入这个项目的Java工程师。
以下是项目的目录结构:[粘贴目录树]
主要的pom.xml依赖:[粘贴关键依赖]
请帮我:
1. 推断项目的整体架构(分层架构/微服务/DDD等)
2. 识别核心业务领域(主要业务模块)
3. 识别技术架构(数据库、缓存、消息队列等)
4. 找出最重要的5个入口文件(从这些文件开始读最高效)"Step 2:关键流程追踪(30分钟)
提示词模板:
"以下是[用户下单]流程相关的代码文件:
[粘贴OrderController.java关键部分]
[粘贴OrderService.java关键部分]
请追踪这个流程:
1. 绘制调用链(从Controller到数据库)
2. 标注每个步骤的数据转换
3. 标注事务边界
4. 指出异常处理点
用Mermaid序列图表示"Step 3:业务规则提取(20分钟)
提示词模板:
"分析以下代码,提取隐藏在代码里的业务规则:
[粘贴复杂业务逻辑代码]
用自然语言总结:
1. 什么条件下允许/拒绝某操作
2. 数据的状态机(状态转换规则)
3. 计算逻辑的规则(特别是条件分支)
输出为可以直接给产品经理看的业务规则文档"2.2 建立项目Wiki的工作流
// 用AI自动生成项目Wiki的脚本思路(伪代码)
// 实际可以用Python + OpenAI API实现
void generateProjectWiki(String projectPath) {
// 1. 扫描所有Java文件
List<String> javaFiles = scanJavaFiles(projectPath);
// 2. 对每个Service类生成业务文档
for (String serviceFile : filterServiceFiles(javaFiles)) {
String code = readFile(serviceFile);
String doc = aiClient.generateDoc("""
分析这个Service类,生成业务文档:
1. 这个Service负责什么业务
2. 每个public方法的业务含义(非技术描述)
3. 重要的业务规则
代码:""" + code);
writeWikiPage(serviceFile, doc);
}
// 3. 生成API文档
// 4. 生成数据字典
}三、调试辅助:AI分析Java异常堆栈
3.1 异常分析的黄金提示词
模板1:基础异常分析
"分析以下Java异常堆栈,找出根本原因:
[粘贴完整堆栈]
请告诉我:
1. 直接原因(第一行说了什么)
2. 根本原因(真正触发的代码在哪里)
3. 最可能的3个触发场景
4. 修复建议(具体代码修改)"
模板2:生产环境OOM分析
"这是线上Java进程的OOM Heap Dump分析摘要:
[粘贴jmap -histo输出的前30行]
[粘贴gc日志片段]
请分析:
1. 哪种对象消耗了最多内存
2. 内存泄漏的可能位置
3. 紧急处理建议(扩内存还是重启还是修bug)
4. 根本解决方案"
模板3:并发问题分析
"这是Java线程Dump(Thread Dump):
[粘贴jstack输出]
请分析:
1. 是否存在死锁(标出死锁的线程和锁)
2. 哪些线程在BLOCKED状态(等待什么)
3. 有没有线程池耗尽的迹象
4. 给出解决建议"3.2 建立异常知识库
把每次分析的异常-原因-解决方案记录下来:
# 异常知识库模板(Obsidian笔记)
## [异常类型] + [场景关键词]
### 异常表现
[异常堆栈关键部分]
### 根本原因
[AI分析的根本原因]
### 解决方案
[具体的代码修改]
### 预防措施
[如何防止下次出现]
### 相关文章/PR
[链接]四、文档生成:自动化工作流
4.1 JavaDoc自动生成
提示词:
"为以下Java代码生成完整的JavaDoc注释:
[粘贴代码]
要求:
1. 类级别注释:业务用途(1-2句)、主要功能列表
2. 方法级别:@param(说明含义和约束,不只是类型)
@return(说明返回值的语义)
@throws(列出所有可能的检查异常和非检查异常)
3. 中文描述,技术术语保留英文
4. 不要生成废话(不要@param userId 用户ID这种)"4.2 设计文档自动生成
提示词:
"基于以下代码,生成一份技术设计文档:
代码清单:
[粘贴Controller.java]
[粘贴Service.java]
[粘贴数据库Schema]
文档结构要求:
1. 功能概述(业务视角)
2. 系统架构(模块划分)
3. 核心流程(用Mermaid序列图)
4. 数据模型(表结构和字段说明)
5. 接口列表(API清单)
6. 异常处理策略
7. 性能考量
8. 待优化点
输出Markdown格式"4.3 周报自动生成
建立每日工作记录的习惯(1-2分钟),然后用AI生成周报:
提示词:
"将以下本周工作记录整理成一份专业的工作周报:
[周一] [粘贴简单笔记]
[周二] [粘贴简单笔记]
...
周报格式:
1. 本周完成事项(量化:功能数、PR数、Bug数)
2. 重点工作说明(1-3条有亮点的工作)
3. 遇到的挑战及解决方案
4. 下周计划
5. 需要协调的事项(如果有)
语气专业但不官僚,突出技术难点和价值。"五、学习加速:费曼学习法+AI
5.1 系统学习新技术的框架
传统学习路径:文档→视频→做Demo→...(效率低) AI加速学习路径:
步骤1:概念建立(30分钟)
提示词:
"我是一个有3年Spring Boot经验的Java工程师,
现在要学Kafka。用费曼学习法教我:
1. 用厨房类比解释消息队列是什么
2. Kafka和普通数据库有什么本质区别(用一句话)
3. 我已知的HTTP请求-响应模式,Kafka是如何不同的?
4. Kafka解决了什么具体问题(举电商场景例子)"
步骤2:实践问题(边学边做,1-2小时)
提示词:
"给我5个Kafka的动手练习,难度从简单到复杂:
练习1:能5分钟完成的Hello World
练习2:能30分钟完成的实际场景
练习3-5:逐步增加难度...
每个练习给出验收标准(怎么知道做对了)"
步骤3:知识检验(费曼的精髓)
提示词:
"我来给你讲解Kafka的Consumer Group,你来判断我理解对了吗:
[自己用简单语言解释]
如果有任何错误或遗漏,指出来并纠正。"
步骤4:生产实践(最有价值的部分)
提示词:
"给我3个Kafka在电商系统中的生产级使用案例:
1. 描述业务场景
2. 为什么用Kafka(不用其他方案的理由)
3. 关键配置和注意事项
4. 常见的坑和解决方案"5.2 技术对比的高效学习
提示词:
"我需要选择分布式事务方案。
用表格对比:Seata AT模式、Seata TCC模式、本地消息表、Saga。
对比维度:
- 开发难度(1-5分)
- 性能影响(1-5分)
- 最适合的场景
- 不适合的场景
- 主流公司的选择(如果知道的话)
最后给出:如果是电商下单场景,你推荐哪个?为什么?"六、会议效率:AI会议纪要
6.1 推荐工具
| 工具 | 适用场景 | 价格 | 特点 |
|---|---|---|---|
| 飞书妙记 | 内部会议 | 免费 | 中文识别好,自动分配发言人 |
| 腾讯会议 AI 总结 | 内部会议 | 免费 | 接入方便 |
| Otter.ai | 英文会议 | 免费版可用 | 英文识别最好 |
| Claude/ChatGPT | 会议转录后处理 | 按需 | 结构化输出最灵活 |
6.2 会议纪要提示词模板
将以下会议转录文本整理为结构化会议纪要:
[粘贴会议转录]
输出格式:
# 会议纪要
- 会议主题:
- 参会人:
- 时间:
## 核心结论
(3-5条最重要的决策/结论)
## 讨论要点
(按主题分组,省略闲话和重复内容)
## Action Items
| 负责人 | 事项 | 截止日期 |
|-------|------|---------|
## 下次会议
- 议题预告:
- 建议时间:
- 需要提前准备的材料:
注意:如果某个问题没有达成明确结论,标注"[待定]"6.3 防遗忘的提醒工作流
在会议结束后5分钟内:
1. 复制AI整理的Action Items
2. 发给相关人确认
3. 转成日历提醒
提示词:
"将以下Action Items转换为日历事项,
每项包含:事项描述、建议开始时间(工作日)、预估耗时:
[粘贴Action Items列表]
今天是[日期],下次会议是[日期]"七、测试辅助:AI生成测试用例
7.1 测试生成的黄金模板
/**
* 提示词示例(可直接在Cursor中使用):
*
* 为下面的方法生成完整的JUnit5 + Mockito测试:
*
* 覆盖所有测试场景:
* 1. 正常流程(Happy Path)- 验证核心业务逻辑
* 2. 边界条件:null参数、空列表、最大值/最小值
* 3. 异常场景:每种抛出的异常
* 4. 幂等性验证(如果方法是幂等的)
*
* 测试规范:
* - 方法名:methodName_scenario_expected(中文或英文都可以)
* - 使用 AssertJ 断言
* - 异常测试用 assertThatThrownBy
* - 不要使用 assertTrue(condition == true) 这种冗余断言
*/
// 被测方法示例
@Service
public class OrderService {
@Transactional
public OrderDTO createOrder(CreateOrderRequest request) {
// 1. 校验用户存在
User user = userRepository.findById(request.getUserId())
.orElseThrow(() -> new UserNotFoundException(request.getUserId()));
// 2. 校验库存
for (OrderItem item : request.getItems()) {
int stock = inventoryService.getStock(item.getProductId());
if (stock < item.getQuantity()) {
throw new InsufficientStockException(item.getProductId(),
item.getQuantity(), stock);
}
}
// 3. 计算总金额
BigDecimal total = request.getItems().stream()
.map(item -> item.getPrice().multiply(BigDecimal.valueOf(item.getQuantity())))
.reduce(BigDecimal.ZERO, BigDecimal::add);
// 4. 创建订单
Order order = Order.builder()
.userId(request.getUserId())
.items(request.getItems())
.totalAmount(total)
.status(OrderStatus.PENDING)
.createdAt(LocalDateTime.now())
.build();
Order saved = orderRepository.save(order);
// 5. 发送事件
eventPublisher.publishEvent(new OrderCreatedEvent(saved));
return OrderMapper.toDTO(saved);
}
}AI生成的测试(示例):
@ExtendWith(MockitoExtension.class)
class OrderServiceTest {
@Mock UserRepository userRepository;
@Mock InventoryService inventoryService;
@Mock OrderRepository orderRepository;
@Mock ApplicationEventPublisher eventPublisher;
@InjectMocks
OrderService orderService;
// ============ 正常流程 ============
@Test
void createOrder_whenValidRequest_shouldReturnOrderDTO() {
// Given
CreateOrderRequest request = buildValidRequest();
User user = buildUser(request.getUserId());
Order savedOrder = buildOrder(request);
when(userRepository.findById(request.getUserId()))
.thenReturn(Optional.of(user));
when(inventoryService.getStock(anyLong())).thenReturn(100);
when(orderRepository.save(any(Order.class))).thenReturn(savedOrder);
// When
OrderDTO result = orderService.createOrder(request);
// Then
assertThat(result).isNotNull();
assertThat(result.getUserId()).isEqualTo(request.getUserId());
assertThat(result.getStatus()).isEqualTo(OrderStatus.PENDING);
verify(eventPublisher).publishEvent(any(OrderCreatedEvent.class));
}
// ============ 异常场景 ============
@Test
void createOrder_whenUserNotFound_shouldThrowUserNotFoundException() {
// Given
CreateOrderRequest request = buildValidRequest();
when(userRepository.findById(request.getUserId())).thenReturn(Optional.empty());
// When/Then
assertThatThrownBy(() -> orderService.createOrder(request))
.isInstanceOf(UserNotFoundException.class)
.hasMessageContaining(request.getUserId().toString());
}
@Test
void createOrder_whenInsufficientStock_shouldThrowInsufficientStockException() {
// Given
CreateOrderRequest request = buildValidRequest(10); // quantity=10
when(userRepository.findById(any())).thenReturn(Optional.of(buildUser()));
when(inventoryService.getStock(anyLong())).thenReturn(5); // stock=5
// When/Then
assertThatThrownBy(() -> orderService.createOrder(request))
.isInstanceOf(InsufficientStockException.class);
}
// ============ 边界条件 ============
@Test
void createOrder_whenEmptyItems_shouldThrowValidationException() {
CreateOrderRequest request = buildValidRequest();
request.setItems(Collections.emptyList());
assertThatThrownBy(() -> orderService.createOrder(request))
.isInstanceOf(ValidationException.class);
}
@Test
void createOrder_whenNullRequest_shouldThrowNullPointerException() {
assertThatThrownBy(() -> orderService.createOrder(null))
.isInstanceOf(NullPointerException.class);
}
// ============ 金额计算验证 ============
@Test
void createOrder_shouldCalculateTotalAmountCorrectly() {
// Given:2个商品,价格100.00,数量3;价格50.00,数量2
// 期望总额:100.00×3 + 50.00×2 = 400.00
CreateOrderRequest request = CreateOrderRequest.builder()
.userId(1L)
.items(List.of(
OrderItem.builder().productId(1L).price(new BigDecimal("100.00"))
.quantity(3).build(),
OrderItem.builder().productId(2L).price(new BigDecimal("50.00"))
.quantity(2).build()
))
.build();
when(userRepository.findById(1L)).thenReturn(Optional.of(buildUser()));
when(inventoryService.getStock(anyLong())).thenReturn(100);
when(orderRepository.save(any())).thenAnswer(inv -> inv.getArgument(0));
OrderDTO result = orderService.createOrder(request);
assertThat(result.getTotalAmount())
.isEqualByComparingTo(new BigDecimal("400.00"));
}
}八、技术调研:AI辅助选型框架
8.1 技术选型调研模板
技术选型调研Prompt:
"我需要为[业务场景]选择[技术类型]。
背景:
- 系统规模:[QPS/数据量/团队规模]
- 技术栈:[现有技术栈]
- 约束:[时间/预算/运维能力]
请帮我:
1. 列出主流候选方案(3-5个)
2. 对比维度:
- 学习曲线(团队上手时间)
- 性能特性(适合什么规模)
- 运维复杂度
- 社区活跃度和文档质量
- 我们场景的适配度
- 已知的坑和局限性
3. 基于我的场景推荐方案并说明理由
4. 给出POC验证的关键测试项"8.2 POC验证的提示词
"我要验证[技术X]是否适合[我们的场景]。
给我设计一个1天能完成的POC方案:
1. 测试目标(3-5个关键指标)
2. 最小化的测试代码(Java示例)
3. 性能测试脚本
4. 评估标准(达到什么指标算通过)
5. 如果POC失败,下一步怎么办"九、个人知识管理:AI+Obsidian工作流
9.1 技术笔记的AI整理流程
9.2 Obsidian + AI的工作流
每日记录(2分钟):
## 2025-10-21 工作记录
### 学到的
- Kafka消费者组rebalance的trigger条件
- @Transactional在自调用时失效的原因
### 解决的问题
- 解决了Redis Key过期导致的并发问题:使用Lua脚本保证原子性
### 需要深入研究
- [x] Kafka重平衡的详细原理
- [ ] Spring事务传播机制的边界case每周整理(10分钟 + AI 20分钟):
将一周的碎片记录丢给AI:
"将以下本周的碎片笔记整理为结构化的技术知识:
[粘贴本周所有日记条目]
对每个技术点:
1. 写一个清晰的标题(可以作为Obsidian笔记标题)
2. 核心概念说明(2-3句话)
3. 使用场景(什么时候用)
4. 关键注意事项(踩坑点)
5. 相关概念链接(哪些概念相关,用[[双括号]]格式)
6. 代码示例(如果有的话)
输出格式:每个知识点一个独立的Markdown块"9.3 快速检索的提示词
在Obsidian中安装AI插件后,可以用自然语言检索笔记:
"我记得学过一个关于Redis和并发的内容,
好像是用Lua脚本解决什么原子性问题,帮我找一下"
"列出我所有关于Kafka的笔记,
按照从基础到高级的顺序排列,
我想系统复习一下"十、量化你的效率提升
10.1 建立效率基线
第一周(不用AI工具):
记录每类任务的实际时间:
- 写CRUD接口:___小时
- 调试一个Bug:___小时
- 学习新技术:___小时
- 写技术文档:___小时
- 每周总工作时间:___小时
第二周开始(用AI工具):
同样记录,每周对比。
目标:4-8周后节省20-30%的时间。10.2 工具投入产出表
| 工具 | 月费用 | 每天节省时间 | 月ROI |
|---|---|---|---|
| Cursor Pro | $20/月 | 1.5小时 | 每小时价值×45小时 |
| Claude Pro | $20/月 | 0.8小时 | 每小时价值×24小时 |
| 飞书妙记 | 免费 | 0.5小时 | ∞ |
| 合计 | $40/月 | 2.8小时/天 | 极高 |
结论:对于工程师来说,AI工具订阅是回报率最高的投资之一。
FAQ
Q1:用AI写代码,会不会让自己的技术退化?
不会,反而会提升。AI帮你处理重复性的样板代码,让你有更多精力思考架构设计、性能优化、业务逻辑等真正需要工程判断力的问题。就像计算器不会让人失去数学能力,但让数学家能解更复杂的问题。关键是要养成Review AI生成代码的习惯,不能无脑接受。
Q2:Copilot和Cursor我应该选哪个?
如果你大部分时间在IntelliJ IDEA里,先试GitHub Copilot($10/月),它的IDE插件最成熟。如果你愿意切换到VSCode,Cursor($20/月)的整体AI体验更好,特别是Composer功能(多文件生成)远超Copilot。建议都试用一个月后再决定。
Q3:如何让AI生成的代码更符合公司规范?
三步走:1)创建.cursorrules文件明确规范;2)在提示词中附上现有代码样例让AI模仿;3)对重复生成的错误建立"修正提示词"(比如"每次生成完检查是否有@Autowired字段注入,如果有,改为构造器注入")。坚持2-3周后,你的提示词会越来越精准。
Q4:用AI学习新技术,深度够吗?还需要看书吗?
AI适合快速建立概念、理解应用场景、解决具体问题,但深度不够。对于核心技术(JVM原理、并发编程、分布式系统),还是需要读书或系统课程。推荐的组合:AI帮你快速入门+建立框架→看书深入原理→AI帮你解决实践中的具体问题。
Q5:工作中用AI会被公司限制吗?担心数据泄露怎么办?
大部分公司的AI政策是"不传公司代码到外部AI"。实际操作:调试时只粘贴函数签名和问题描述,不粘贴完整业务代码;生成代码时描述需求而不是粘贴现有业务逻辑;使用公司内部部署的AI工具(许多大公司已经有了)。这些习惯养成后,既合规又高效。
总结
让我们再回到何源的故事。
半年后,他升职了。但更重要的是,他说:"我现在做的事情,比以前更有价值了。"
这就是AI效率工具的真正意义——不是让你更快地做重复的事,而是让你有时间做更重要的事。
何源的效率变化:
之前:
代码 ████████████████ 70%(大量样板代码)
思考 ████ 20%
学习 ██ 10%
现在:
代码 ████ 15%(AI处理了大部分)
思考 ████████████ 50%(架构、设计、优化)
学习 ████████ 35%(系统学习AI/大数据/云原生)选择你最需要提升的1个环节,从今天开始用AI工具优化它。一个月后,再优化下一个环节。半年后,你会惊讶于自己的变化。
附录:工具配置速查手册
A. Cursor完整配置示例
.cursorrules 完整模板(Spring Boot项目):
# Cursor AI 编码规范(Spring Boot 3.x + Java 21)
## 项目技术栈
- Spring Boot 3.2, Java 21 (使用 Record、Text Block、Switch Expression)
- Spring Data JPA + MySQL 8
- Spring Cache + Redis
- Spring Security + JWT
- Swagger/OpenAPI 3
- Lombok + MapStruct
## 代码风格规范
### 依赖注入
✅ 正确:构造器注入 + @RequiredArgsConstructor
❌ 错误:@Autowired字段注入
### 返回格式
所有接口统一返回 Result<T>:
\`\`\`java
// 成功
return Result.success(data);
// 失败
return Result.error(ErrorCode.USER_NOT_FOUND, "用户不存在");
\`\`\`
### 异常处理
✅ 使用自定义异常:throw new BusinessException(ErrorCode.XXX, "message")
❌ 不要:throw new RuntimeException("message")
所有异常在 GlobalExceptionHandler 中统一处理
### 日志规范
- 方法入口:log.debug("methodName called, param={}", param)
- 业务关键节点:log.info("order created, orderId={}, userId={}", orderId, userId)
- 异常:log.error("operation failed, id={}", id, e)
- 不要打印完整对象(log.info("user={}", user)),只打印关键字段
### 数据库操作
- 查询方法加 @Transactional(readOnly = true)
- 写操作加 @Transactional
- 禁止在循环中查询数据库(N+1问题)
- 分页统一用 Pageable
### 命名规范
- Controller: XxxController
- Service接口: XxxService
- Service实现: XxxServiceImpl
- Repository: XxxRepository
- DTO(入参): CreateXxxRequest, UpdateXxxRequest
- DTO(出参): XxxDTO, XxxResponse
- 常量类: XxxConstants
## 生成代码必须包含的内容
1. 完整的Swagger注解(@Tag, @Operation, @Parameter)
2. 参数校验(@Valid + Jakarta Validation注解)
3. 完整的JavaDoc(中文,方法、参数、返回值、异常)
4. 关键业务日志(info级别)
## 禁止生成的内容
- TODO注释(必须完整实现)
- System.out.println(只用Slf4j)
- @SuppressWarnings("unchecked")(除非真的需要)
- Magic number(用常量代替)B. 最高效的10个AI调试场景
场景1:Spring事务不生效
我的@Transactional方法没有生效,代码如下:
[粘贴代码]
可能的原因:
1. 是否是自调用(同一个类内部调用)?
2. 方法访问修饰符是什么(必须是public)?
3. 异常类型是否正确(默认只回滚RuntimeException)?
4. 是否被catch了没有重新throw?
请逐一排查并给出修复方案。场景2:Redis缓存击穿
我的缓存配置如下,但发现有大量请求穿透到数据库:
[粘贴配置和代码]
分析:
1. 是缓存击穿、缓存穿透还是缓存雪崩?
2. 哪里可能导致这个问题?
3. 给出具体修复代码场景3:JPA N+1问题排查
以下JPA查询产生了N+1问题:
[粘贴实体关联配置和查询代码]
请:
1. 解释为什么产生N+1
2. 给出3种解决方案(JOIN FETCH / EntityGraph / DTO投影)
3. 说明各方案的适用场景
4. 给出推荐方案的完整代码场景4:并发下的数据一致性问题
以下代码在高并发下出现了数据不一致:
[粘贴代码]
并发量:[QPS]
症状:[具体描述]
请分析:
1. 竞争条件在哪里(哪两行代码间)?
2. 用分布式锁、乐观锁还是数据库唯一索引解决?
3. 给出完整的修复代码场景5:内存溢出(OOM)分析
线上出现OOM,JVM参数:-Xmx4g
以下是heap dump分析(jmap -histo前20行):
[粘贴输出]
请分析:
1. 哪种对象消耗内存最多?
2. 最可能的泄漏原因(代码层面)
3. 如何用MAT等工具进一步分析
4. 短期缓解方案和长期修复方案C. 每周效率复盘模板
建议每周五花15分钟做效率复盘:
# 效率复盘 - 2025年第XX周
## AI工具节省的时间
| 任务 | 传统方式(分钟) | 用AI(分钟) | 节省 |
|------|-----------------|-------------|------|
| 写XXX功能的CRUD | 180 | 35 | 145分钟 |
| 排查XXX的Bug | 60 | 8 | 52分钟 |
| 写XXX的设计文档 | 90 | 20 | 70分钟 |
| **本周合计** | | | **267分钟** |
## 最有效的AI提示词(记录下来复用)
1. [场景] -> [提示词关键部分]
## 失败的AI尝试(AI没帮上忙的场景)
1. [场景] - [原因分析] - [改进方法]
## 下周重点优化的环节
[ ]
## 技术学习进展
- 学了:
- 实践了:
- 下周计划:D. 入门工具推荐路径
对于还没开始使用AI工具的工程师,建议按这个顺序开始:
第1周:GitHub Copilot(最低风险入门)
→ 安装IntelliJ IDEA插件
→ 只用Tab接受补全,不主动提问
→ 感受AI补全如何节省击键
第2周:ChatGPT/Claude(解决具体问题)
→ 遇到Bug时先问AI
→ 学新概念时让AI解释
→ 记录节省了多少时间
第3周:Cursor(系统升级)
→ 将项目迁移到Cursor
→ 设置.cursorrules文件
→ 学习Chat和Compose功能
第4周:建立知识管理系统
→ 安装Obsidian
→ 建立每日工作记录习惯
→ 用AI整理一次笔记
一个月后:评估效果,坚持使用节省时间最多的2-3个工具E. 代码Review效率提升:AI预审工作流
团队代码Review是一个被严重低估的效率消耗点。传统流程:提交PR → 等待Review → Reviewer花大量时间在格式/规范问题上 → 来回多轮。
AI预审工作流(节省Review时间50%+):
步骤1:提交PR前,自己先用AI做一轮Review
提示词:
"扮演一个挑剔的资深Java工程师,Review以下代码:
[粘贴diff或完整代码]
检查维度(按重要性排序):
1. 潜在的Bug(逻辑错误、空指针、边界条件)
2. 性能问题(N+1查询、不必要的循环、内存泄漏风险)
3. 安全问题(注入、权限、敏感数据)
4. 代码可读性(命名、注释、复杂度)
5. 单元测试覆盖(缺少测试的关键逻辑)
6. 代码规范(团队规范:构造器注入、Result返回等)
输出格式:
| 严重程度 | 文件:行号 | 问题描述 | 修改建议 |
|---------|---------|---------|---------|
(严重程度:CRITICAL/MAJOR/MINOR/SUGGESTION)"
步骤2:修复AI发现的所有CRITICAL和MAJOR问题
步骤3:提交PR,在描述中附上"AI Review通过,已修复X个问题"
这会让真人Reviewer把时间集中在架构和业务逻辑上
步骤4:收到Review意见后,用AI帮你理解和处理有争议的意见
提示词:
"Reviewer对我的代码有这个意见:[意见内容]
我原来的实现是:[代码]
他建议改为:[建议代码]
请分析:
1. Reviewer的意见是否合理?从哪些角度看合理/不合理?
2. 两种方式各有什么优缺点?
3. 如果我不同意,我应该如何用技术语言回复?"F. 构建个人AI提示词库
随着使用AI工具的时间增长,你会积累出大量经过验证的提示词。建立一个结构化的提示词库,是让AI工具复利增长的关键。
提示词库结构建议(Obsidian):
prompts/
├── coding/
│ ├── generate-crud.md # CRUD代码生成
│ ├── write-unit-test.md # 单元测试生成
│ ├── review-code.md # 代码Review
│ ├── refactor.md # 代码重构
│ └── debug-exception.md # 异常分析
├── learning/
│ ├── explain-concept.md # 概念解释
│ ├── tech-comparison.md # 技术对比
│ └── poc-design.md # POC设计
├── documentation/
│ ├── javadoc.md # JavaDoc生成
│ ├── design-doc.md # 设计文档
│ └── weekly-report.md # 周报生成
└── communication/
├── meeting-minutes.md # 会议纪要
└── tech-proposal.md # 技术方案提示词模板格式:
# [提示词名称]
## 适用场景
[什么时候用这个提示词]
## 提示词
[直接可粘贴的提示词,用{{变量}}标记需要替换的部分]
## 示例
输入:[示例输入]
输出:[期望的输出样例]
## 注意事项
- [使用技巧或限制]
## 版本历史
- v1.0: [初始版本]
- v1.1: [优化:说明优化了什么]提示词迭代的关键习惯:
每次AI输出不满意时,不要直接换一个提示词,而是:
- 分析哪里不满意(格式?深度?方向?)
- 在原提示词上做针对性修改
- 记录修改原因
- 积累到提示词库
3个月后,你的提示词库将成为你最有价值的职业资产之一。
G. AI辅助的技术方案写作
技术方案文档是Java工程师晋升的重要材料,也是需要大量时间的工作。AI可以将这个工作效率提升3-5倍。
技术方案写作提示词:
"帮我写一份技术方案,主题:[主题]
背景信息:
- 业务需求:[描述]
- 现有系统:[简单说明]
- 约束条件:[技术栈/时间/人力]
- 核心问题:[要解决的核心问题]
方案文档结构:
1. 背景与目标(现状+痛点+目标)
2. 方案设计
2.1 整体架构(包含Mermaid架构图)
2.2 核心流程(包含Mermaid序列图)
2.3 数据模型设计
2.4 接口设计(关键API)
3. 技术选型(为什么选这个,不选备选方案的原因)
4. 关键风险和应对措施(至少3条)
5. 分阶段实施计划(里程碑+交付物)
6. 性能预估(QPS/延迟/存储)
7. 监控和告警方案
语言:专业、简洁,有理有据,突出方案的优越性和可行性。
面向读者:技术总监 + 业务方(需要同时让技术人和非技术人看懂)"AI生成初稿(5分钟)→ 你补充细节和数据(1小时)→ 完整技术方案(通常需要4-8小时)
这就是AI效率提升的本质:从空白开始,到AI生成80%的骨架,你只需要填充20%最有价值的内容。
