专栏首页光变Java Code Review 指南

Java Code Review 指南

Java代码俯身指南,主要为Java开发人员提供代码复审参考,快捷有效提出修改意见。

目的

  • 发现代码错误:一个人写的代码可能会有一些思想和设计盲点,多个人尽早的发现BUG。
  • 统一代码风格:统一的代码风格,可以提高代码的可读性和可维护性。
  • 优化代码结构:比较复杂的业务处理逻辑,多个人同时思考,可以想出较为优秀的解决方案。
  • 共同成长:相互之间分享编码经验,可以共同进步。避免发生类似错误。

原则

  • 统一性:看上去像一个人写的
  • 可读性:提供代码的可读性
  • 可维护性:降低其他人的维护成本

时间

审查的时间点顺序如下

  1. 接口定义完成时,需要进行第一轮审查,此审查最重要。
  2. 数据库初步设计完成,在数据库完成时,需要进行审查。
  3. 接口开发完成,静态语法检测完成,提测之前,需要进行审查。

心态

  1. 聆听:先把别人要讲的话听完。可以先记录当前的疑问。
  2. 开放:有疑问的地方一定要提出,不仅可以完善当前程序的逻辑,也可以完善自己的逻辑。
  3. 公正:把个人的成果当作团队的成果,把团队的成果也当作个人的成果。对待代码,不要进行人身攻击。
  4. 统一:当不同的方法都可以实现程序逻辑时,应该以统一性、可读性、可维护性为准则。

人员

以下人员必须参与代码审核。

  1. 结对编程的另一个人。
  2. 项目的具体负责人。
  3. 一名有经验的开发人员。

其他人员可以选择自愿参与。

Java Review

通用

  • 代码是否符合需求,是否可以输出正常结果。
  • 是否有明确错误。
  • 不要返会null数组/集合。使用Collection.emptyList()等静态方法返回空集合。
  • 不要有反思维的系统设计。使用大多数人容易理解的逻辑处理问题。如果有通用的算法模型除外。
  • 不要有明显的性能问题。比如大量的数据库交互、文件交互、RPC接口交互。
  • 类注释。描述该类的功能和接口范围。
  • 方法注释。所有对外提供的接口,必须进行详细的注解说明,说明返回的数据类型和特殊情况处理。
  • 方法内部注释。当一个方法体超过20行时,需要对具体的业务,作说明解释,而不仅仅是实现作解释。
  • 理解本次更改的功能设计。进行code review的人必须完全理解每一个接口的具体功能。
  • 理解本次更改的实现细节。理解开发者的实现具体想法。
  • 不可以大量拷贝代码,又不做细节调整。不需要的代码必须都删除。
  • 使用枚举定义的标识分组,而不是使用int/long定义常量标识。比如订单的所有状态、用户状态等。
  • static变量必须要携带final修饰符。所有的静态变量为了线程安全必须被final标注。如过允许多线程变更静态变量,应当提供静态方法进行修改。
  • 在任何情况下都要释放资源,io.close\pool.return\connection.close
  • 日志记录。在必要的接口开始和结束位置记录参数日志。日志记录方法详见Java使用slf4j输出日志
  • 避免过度多日志记录。不要记录太多无用的日志。
  • 对外接口使用可处理的返回码,而不是抛出Exception。
  • 代码一定要格式化
  • 不允许修改原有API接口的参数。
  • 避免循环引用。
  • 避免内存泄漏。不需要的类,及时清空自己的属性引用。
  • 调用第三方的接口和第三方类方法,是否捕获了所有异常。
  • 对内提供的RPC接口统一使用Response类和RespCode响应码。
  • 和业务结合的算法,要明确注释清楚。
  • 每个变量必须有实际意义,不可以随便使用 i、j、temp等通用变量(经典的for i遍历可以例外)。

入参

  • 对所有的入参进行有效验证。
  • 对入参的边界值进行校验。
  • 对入参进行注释。

配置文件

  1. 不准引用其他所有包中的属性配置文件(xx.properties)。
  2. 配置文件需要统一放在最终项目启动包中。
  3. 不准引用非本项目的配置文件,包括Spring的Bean声明文件、Log的配置文件等。

SQL Review

命名

  1. 表名字段名都必须使用小写,单次之间使用下划线( _ )作分割。如user_centerpatient_namearea_id
  2. 索引命名。
    • 普通索引使用idx_作为前缀,后面根据索引顺序用下划线( _ )连接各个字段名,字段名使用驼峰格式。如idx_patientName_areaId等。
    • 唯一索引使用uni_作为前缀,后面根据索引顺序用下划线( _ )连接各个字段名,字段名使用驼峰格式。如uni_patientName_areaId等。

数据类型

  1. 表引擎使用InnoDB,编码使用utf8。特定情况例外,需要与组内讨论和DBA确认。
  2. 每张表必须有唯一主键。建议使用自增主键。
  3. 每张表建议包含创建时间(字段名:gmt_created,类型:datetime)、修改时间(字段名:gmt_modified,类型:datetime)。
  4. 如果是后台用到的数据表,也可以考虑加入创建员工(字段名:staff_created,类型:long),修改员工(字段名:staff_modified,类型:long)
  5. 日期类型(yyyy-MM-dd)使用date类型,日期时间类型(yyyy-MM-dd HH:mm:ss)使用datetime。
  6. 自增主键建议使用bigint(20)。枚举类型除外,可以适当考虑使用int(10)。
  7. 在字段中尽量不要使用tinyint和smallint。
  8. 经常使用的查询组合可以考虑联合索引。
  9. 如果字段包含特殊字符,比如emoji表情等,需使用utf8mb4字符集。用户可输出的地方,都应该对此进行印证。

SQL语句

  1. 所有的查询都必须走索引。
  2. 每一条使用join语句必须由DBA和主管确认。

安全

  1. 代码应确保多线程访问的数据一致性。

提交

提交原则

  • 单一提交:一个commit变更应该以一个功能、一种类型的修改为主。多次提交可以保证每次修改可以正确记录和错误回滚。
    • 以下分类最好不要同时提交。修复BUG新功能修改原接口
    • 在定义完一系列接口、修复完一个BUG等情况即可提交。
  • 完整性:一个commit提交后,程序应该仍然可以正常运行。
    • 不要提交过于小且没有完整意义的commit。

提交说明

提交的message英石解释两个方面,做了什么和为什么要做。 提交标题总结本次提交都做了什么,提交细则详细描述为什么要这么做。

不推荐

修复了一个BUG
新增了两个接口
修改了两个接口

推荐

1.修复用户密码登录接口BUG。用户登录名,需要大小写敏感。之前未做大小写敏感处理。
1.新增用户微信第三方登录接口。
2.用户绑定微信第三方登录。
支持用户微信第三方登录和绑定。
1.修改用户注册接口
用户注册的时候可以传递邀请码。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【C】腾讯人心中的产品运营

    一直想给产品运营下个系统的定义,或者总结一个方法论如何做好产品运营,产品运营需要包含的素质等。听过很…

    白凡
  • Java使用slf4j输出日志

    白凡
  • 你所不知道的Java之Integer

    以下内容为作者辛苦原创,版权归作者所有,如转载演绎请在“光变”微信公众号留言申请,转载文章请在开始处显著标明出处。

    白凡
  • RSA 创新沙盒盘点| BluBracket:让安全的保障和代码迭代一样快

    2020年2月24日-28日,网络安全行业盛会RSA Conference将在旧金山拉开帷幕。在RSAC官方宣布入选今年创新沙盒十强初创公司中,已经为大家介绍过...

    绿盟科技研究通讯
  • 如何使用git上传代码到coding代码仓库中?

    当然,首先你得先去注册一个coding账号,官网为:http://coding.net; ? 然后你就可以创建你自己的项目或者是被其他项目的管...

    benny
  • Go代码重构:23倍的性能爆增

    几周前,我读了一篇名为“ Good Code vs Go Code中的错误代码 ”的文章,作者指导我们逐步完成实际业务用例的重构。

    sunsky
  • Python高级进阶#016 pyqt5载入图片QPixmap应用

    刘金玉编程
  • 聊聊 Object.defineProperty()

    如果我们直接为对象添加一个属性,比如 obj.a = 10 我们说 a 是 普通属性,他的值既可以被改变,也可以被删除,还可以被for..in 或 Object...

    mafeifan
  • Java 异常处理的误区和经验总结

    本文着重介绍了 Java 异常选择和使用中的一些误区,希望各位读者能够熟练掌握异常处理的一些注意点和原则,注意总结和归纳。只有处理好了异常,才能提升开发人员的基...

    Java后端工程师
  • Django使用Markdown排版、语法高亮和生成目录

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    菲宇

扫码关注云+社区

领取腾讯云代金券