关于codereview,在平时的开发中,经常忽略的环节,参照目前介绍写好代码的几本书和之前掉进的坑,做了一个总结,分享出来。

为什么要做

  • 通过review规避一些代码层面的问题
  • 提升可读性,方便后续扩展和维护
  • double check 确保代码质量

检查列表

注释

  • 写有意义的注释
  • DO属性上,名字无法识别业务含义的,加注释
  • service接口和manager接口,注明方法的说明
  • 代码块中的复杂逻辑,添加注释

风格

  • 域名不要写死
  • 不同环境下差异的,注意使用配置项

日志

  • 合理分配日志级别,warn和error要分开
  • 日志中,异常信息要记录,第一个参数简短说明,第二个异常信息
  • 日志异常注意把相关的参数信息记录下来,例如userId等
  • 异常抛日志的情况下,主要不要引入二次异常
  • 配置参数

线程安全

  • 需要被多个线程访问的对象是否线程安全,检查有无通过同步方法保护
  • 在保证线程安全的同时,要注意避免过度使用同步,导致性能降低
  • 不用使用Java原生的线程处理方法,推荐使用JUC框架中的类
  • 根据场景选择不用的线程池来实现,会用简化版Executors,理解处理过程

异常处理

  • 不要直接e.printStackTrace,用Logger记录下来
  • 异常捕获之后,要做响应的处理,返回错误提示或者记录日志,切忌啥都不做
  • 当前程序中能够处理的异常,捕获即可,无法处理的,抛出
  • 异常只为异常服务,不要掺杂业务逻辑到异常中

性能

  • 避免多重的RPC或者网络IO的循环,尽量批处理
  • 避免无穷循环,要有终止条件判断
  • 不要主动进行垃圾回收,代码中不要有System.gc()
  • String的split方法不要用,用开源包中的StringUtil工具类
  • 字符串的拼接,使用StringBuilder和StringBuffer

代码逻辑

  • 不要在finally中return(try中的返回值,屏蔽异常)
  • volatile不具有原子性,划分好synchronized的粒度问题
  • 推荐使用Guava作为工具处理类
  • 推荐joda来处理时间,然后SimpleDateFormat是非线程安全的
  • 单个方法超过50行,要做抽取,否则无法保证可读性
  • 方法入参超过5个,抽取到QueryTO中进行处理
  • for或if的层级嵌套,不要超过4层
  • if的逻辑判断中,多个||和&&的组合,注意拆分处理
  • case语句后面,需要加break
  • if后面,记得写大括号
  • 文件资源,访问后,记得close掉
  • 排序优先使用Comparator,一个类的扩展排序工具
  • 使用addAll、retainAll、removeAll优雅实现并集、交集、差集
  • List的remove,使用迭代器来进行删除

事务处理

  • 多表同时更新操作,需要事务包裹,并验证过
  • 批量插入,使用iBatis的batchInsert特性,需要在事务下才生效,可以通过wireshark查看网络情况
  • 分布式场景下,可以使用消息中间件来保证最终一致性
  • 声明式事务注解标签,尽量在manager层搞掉,不要搞到service层或者web层
  • 一些可能出现重复处理的方法,记得做幂等操作

重复代码

  • don’t repeat yourself
  • 同样的业务逻辑处理,不要有两份代码

安全问题

XSS

  • cookie设置httponly属性
  • jsonp输入输出检查

CSRF

  • 服务端增加CSRF校验,增加token
  • 必要的验证码

水平权限

  • 不用用户之间的不能相互操作

标准

  • 代码整洁
  • 可读性好
  • 可维护性高
  • 性能优

http://iamzhongyong.iteye.com/blog/2149463

关于CodeReview(java)(转)的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. java中的codereview

     关于codereview,在平时的开发中,经常忽略的环节,参照目前介绍写好代码的几本书和之前掉进的坑,做了一个总结,分享出来. 为什么要做 通过review规避一些代码层面的问题 提升可读性,方 ...

  3. 摘抄-----java codeReview要做的事

    整洁的代码 清单项目 分类 使用可以表达实际意图(Intention-Revealing)的名称 有意义的名称 每一个概念只用一个词 有意义的名称 使用方案/问题领域名称 有意义的名称 类应该是比较小 ...

  4. CodeReview是开发中的重要一个环节,整理了一些关于jupiter for java

    什么是代码评审(CodeReview)? 代码评审也称代码复查,是指通过阅读代码来检查源代码与编码标准的符合性以及代码质量的活动. Jupiter提供了代码行级别的评审批注功能,方便评审参与人了解具体 ...

  5. 分享总结:更好地CodeReview

            代码质量分享    2016_06_24_舒琴_代码质量.key    For 代码提交人     基本原则 Review时机: 对于普通bugfix或优化,CodeReview最迟要 ...

  6. 使用golang+java实现基于ecb的3eds加解密

    http://www.100hack.com/2014/04/14/golang%E4%B8%AD%E7%9A%84des%E5%8A%A0%E5%AF%86ecb%E6%A8%A1%E5%BC%8F ...

  7. codereview介绍

    1. 定义: Code review is systematic examination (often known as peer review) of computer source code. I ...

  8. 【Java】关于Java8 parallelStream并发安全的思考

    背景 Java8的stream接口极大地减少了for循环写法的复杂性,stream提供了map/reduce/collect等一系列聚合接口,还支持并发操作:parallelStream. 在爬虫开发 ...

  9. 老司机告诉你高质量的Java代码是怎么练成的?

    一提起程序员,首先想到的一定是"码农",对,我们是高产量的优质"码农",我们拥有超跃常人的逻辑思维以及不走寻常路的分析.判别能力,当然,我们也有良好的编码规范, ...

随机推荐

  1. linux ftp批量上传和下载文件

    一.登录ftp 输入 ftp 192.168.1.111 输入用户名:ftpuser 输入密码:aaa123 二.转到目标目录 输入:cd   test   ----test为文件夹 三.批量上传 输 ...

  2. EDStarRating(IOS星级评定)

    链接地址:https://github.com/erndev/EDStarRating EDStarRating

  3. 基于visual Studio2013解决C语言竞赛题之1056素数序列

       题目 解决代码及点评 /* 56. 编程序求3至39之间满足下列条件的各组素数:每组有3个素数,第2个比第一个大2,第3个比第2个大4.例如 5,7,11就是满足条件的一组. 要求: ...

  4. 学习了LINUX下用C语言遍历文件夹,一些心得

    struct dirent中的几个成员: d_type:4表示为目录,8表示为文件 d_reclen:16表示子目录或文件,24表示非子目录 d_name:目录或文件的名称 具体代码如下,仅供参考 # ...

  5. QT---系统托盘图标不显示原因

    很久没用QT写UI相关的东西了,有些东西都忘记了,今天竟然忘记了系统托盘图标是怎么显示的了.下面说下解决方法 1.现象, 设置了QSystemTrayIcon的Icon图标,但就是不显示自己设置的图片 ...

  6. OS X 10.10 Yosemite Beta能够下载了

    刚刚启动迅雷.蹦出一消息.点击后出现-- watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdmlzdGE5OTk5OQ==/font/5a6L5L2T/fon ...

  7. ContentProvider简要

    1.什么是ContentProvider  数据库在Android其中是私有的,当然这些数据包含文件数据和数据库数据以及一些其它类型的数据.  不能将数据库设为WORLD_READABLE,每一个数据 ...

  8. [精读]Spationtemporal Saliency Detection Using Textural Contrast and Its Applications

    Spationtemporal Saliency Detection Using Textural Contrast and Its Applications Last Edit 2013/12/3 ...

  9. C++(MFC)中WebBrowser去除3D边框的方法(实现IDocHostUIHandler接口)

    先说实在的:最终解决办法是实现IDocHostUIHandler接口,在GetHostInfo方法里解决,但“实现接口”意味着QueryInterface.AddRef.Release三个方法必须实现 ...

  10. Delphi -- 创建 桌面、发送到...、快速启动栏、开始菜单、程序菜单、右键菜 单

    {================================================================= 功 能: 创建 桌面.发送到....快速启动栏.开始菜单.程序菜单 ...