DeepSeek 让同事的bug无所遁形

前言

今天试试DeepSeek都能帮我识别到哪些bug,看看DeepSeek 实力如何。 插件我用的是MarsCode,模型选择 DeepSeek R1,今天看看都有哪些严重bug吧,这可比人工复查方便多了。

DeepSeek Code Review 使用感受

使用的是 MarsCode fix 功能,检查了两个项目,一个是线上运行的项目,一个是正在开发调试的项目。

检测出最多的问题就是NPE,这个东西也是java程序员遇到过最多的一个错误。很多地方实际上从业务上就避免了NPE

这个东西对于初级开发👦来说在调试过程中用处非常大🚀,还有就是我们在开发过程帮我检测XML还是不错的,我发现,对于中高级开发程序员🧓来说,xml 是最容易出现问题的,因为集成工具不能直接检测到一些语法问题。

当然,AI给出的建议还是需要我们具备辨别的能力,下面看看我用AI 扫描出的一些问题,以及AI 给出的一些错误建议

发现的问题

1. 导出接口FileInputStream未正确关闭

当然还有很多问题,其他问题从业务上应该是不会报错,这个inputStream 关闭方式确实 存在很大问题,和业务无关,纯技术问题。

java 复制代码
public void exportData(Long exportRecordId) throws Exception {
    ExportRecord exportRecord = exportRecordService.getById(exportRecordId);
    try {
        ................... 查询数据................
        IPage<Record> page = service.queryPage(req);
        String excelName = "本年记录" + System.currentTimeMillis() + ".xlsx";
        String excelNameFilePath = ExportConstant.EXPORT_TEMP_FILE_PATH_STAR_CURRENT_APPLY + excelName;
        File file = new File(excelNameFilePath);
        if (file.exists()) {
            FileUtil.del(file);
        } else {
            FileUtil.touch(file);
        }
        .......................封装数据.............
         // 5.4、读写内容到excel。
        EasyExcel.write(file).head(headerList).sheet().doWrite(rowsList);

        // 6、将excel文件上传文件服务器。
        InputStream inputStream = new FileInputStream(file);
        // 上传到minio,upload 方法有关闭 inputStream.close(),没有处理IOException
        String uploadFilePath = MinioUtil.upload(inputStream, excelNameFilePath.substring(1));
       
        // 7、最后删除临时文件。
        FileUtil.del(file);
        
    }catch (Exception e){
        e.printStackTrace();
        log.error("导出失败",e);
    }
}

2.XML 中的SQL问题

最近不是在裁员么,昨天临时接手了一个半成品项目,发现SQL 在报错,于是就扫描了一下。果然没有测试的代码,用AI测试还是挺不错的。直接帮我把问题都扫描出来了

AI主要修复点说明:

  1. 连接条件错误:原c.district_industry_org_id = c.id改为c.district_industry_org_id = d.id,确保正确关联组织表
  2. 多余条件语法:<if test="req.workUnitNature != null and ">改为<if test="req.workUnitNature != null">,移除无效的and判断
  3. 错误排序字段:order by a.status改为a.assessment_result,保持与查询字段一致
  4. 简化CDATA语法:统一使用更简洁的||连接符,移除冗余的CDATA声明

3.错误的异常抛出

java 复制代码
if (!allDeptsNotEmpty) {
    // 如果有任意一个deptId为空,抛出异常或返回错误信息
    throw new JedisDataException("部门需要全部配置");
}

AI修复说明如下:

错误的解决方案

事务不完整

提醒了我加事务,但是事务方法不能 用 private,并且我这个方法还是本类的 this 调用的

like 查询优化建议,该语法在某些库不支持

SQL 复制代码
and company like ('%'<![CDATA[||]]>#{req.company}<![CDATA[||]]>'%')

AI优化建议:

java 复制代码
and company like concat('%', #{req.company}, '%')  <!-- 优化like语法 -->

concat 在某些库不支持两个参数

总结

希望大家在开发过程中,经常使用AI插件 FIX的功能,能减少很多粗心大意 引起的bug,能提供我们自测 和 联调的效率。

最后AI的优化建议,也有可能发生错误,所以我们得具备辨别的能力。

相关推荐
EnigmaCoder10 分钟前
Java多线程:核心技术与实战指南
java·开发语言
攀小黑13 分钟前
阿里云 使用TST Token发送模板短信
java·阿里云
麦兜*19 分钟前
Spring Boot秒级冷启动方案:阿里云FC落地实战(含成本对比)
java·spring boot·后端·spring·spring cloud·系统架构·maven
自由鬼1 小时前
正向代理服务器Squid:功能、架构、部署与应用深度解析
java·运维·服务器·程序人生·安全·架构·代理
袁煦丞1 小时前
【局域网秒传神器】LocalSend:cpolar内网穿透实验室第418个成功挑战
前端·程序员·远程工作
Goboy1 小时前
打造梦幻又实用的 Mermaid 马卡龙渐变风主题 —— 技术博主必备视觉指南
程序员·产品·设计
爱钓鱼的老毕登1 小时前
2025编程革命:氛围编码崛起,开发者如何成为AI策展人?
人工智能·程序员·cursor
fouryears_234171 小时前
深入拆解Spring核心思想之一:IoC
java·后端·spring
玩转AGI2 小时前
Dify篇-基于ChatFlow搭建文章理解助手
人工智能·程序员·llm
codervibe2 小时前
使用 Spring Boot + JWT 实现多角色登录认证(附完整流程图)
java·后端