整洁的代码

清单项目 分类
使用可以表达实际意图(Intention-Revealing)的名称 有意义的名称
每一个概念只用一个词 有意义的名称
使用方案/问题领域名称 有意义的名称
类应该是比较小的!
函数应该是比较小的! 函数
只做一件事 函数
DRY(Don’t Repeat Yourself)原则,(拒绝重复) 函数
用代码来解释自己的做法(译者注:即代码注释) 注释
确定应用了代码格式化 格式
使用异常而不是返回码 异常
不要返回Null 异常

*参考自:http://techbus.safaribooksonline.com/book/software-engineering-and-development/agile-development/9780136083238

安全

清单项目 分类
如果不用于继承,使类为final 基础
避免重复代码 基础
权限限制:程序应该运行在保证功能正常的最小权限模式下。 基础
最小化类和成员的可访问性 基础
注释出安全相关的信息 基础
系统的输入必须检查是否有效和在允许范围内 拒绝服务(Denial of Service)
避免对于一些不寻常行为的过分日志 拒绝服务(Denial of Service)
在任何情况下都释放资源(流,连接等等) 拒绝服务(Denial of Service)
从异常中清除敏感信息(暴露文件路径,系统内部相关,配置)P 私密信息(Confidential Information)
不要把高度敏感的信息写到日志 私密信息(Confidential Information)
考虑把高度敏感的信息在使用后从内存中清除 私密信息(Confidential Information)
限制包,类,接口,方法和域的可访问性 可访问性的扩展(Accessibility Extensibility)
限制类和方法的可扩展性(通过使它为final) 可访问性的扩展(Accessibility Extensibility)
检验输入(有效的数据,大小,范围,边界情况等等) 输入检验(Input Validation)
把从不可信对象得到的输出作为输入来检验 输入检验(Input Validation)
为native方法定义包装类(而不是定义native方法为pulibc) 输入检验(Input Validation)
把从不可信对象得到的输出作为输入来对待 可变性
使public static域为final(避免调用方(caller)修改它的值) 可变性
避免暴露敏感类的构造函数 对象构造
避免安全敏感类的序列化 序列化反序列化(Serialization Deserialization)
通过序列化来保护敏感数据 序列化反序列化(Serialization Deserialization)
小心地缓存潜在的特权操作结果 序列化反序列化(Serialization Deserialization)
只有在需要的时候才使用JNI 访问限制

*参考自: http://www.oracle.com/technetwork/java/seccodeguide-139067.html

性能

清单项目 分类
避免过分的同步 并发
保持同步区域比较小 并发
知道string连接的性能情况 综合编程
避免创建不需要的对象 创建和销毁对象

*参考自: http://techbus.safaribooksonline.com/book/programming/java/9780137150021

综合(译者注:原文中的作者把checklist和category对应的列搞错了,译文中已修正)

清单项目 分类
对可以恢复的情况使用已受检异常(checked exceptions),对于程序错误使用运行时异常(runtime exceptions) 异常
更多地使用标准异常 异常
不要忽略异常 异常
检查参数的有效性 方法
返回空数组或集合,而不是null 方法
最小化类和成员的可访问性 类和接口
在pulibc类中,使用访问器方法(accessor methods)(译者注:访问器方法即我们平常用的get/set方法)而不是public域 类和接口
最小化本地变量的范围 综合编程
通过接口引用对象 综合编程
遵循广泛接受的命名规则 综合编程
避免使用finalizer 创建和销毁对象
当你重写equals时总是重写hashCode 综合编程
总是重写toString 综合编程
使用枚举来代替int常量 枚举和注解(Annotations)
使用标记接口(marker interface)(译者注:标记接口是一种没有任何行为的接口,实现它只是为了让实现类属于某种类型,如JDK中的Serializable,Cloneable等)来定义类型 枚举和注解(Annotations)
对共享可变的数据使用同步访问 并发
使用executors而不是task和thread 并发
注释中描述线程安全情况 并发
存在有效的JUnit/JBehave测试用例 测试

*参考自: http://techbus.safaribooksonline.com/book/programming/java/9780137150021

静态代码分析

清单项目 分类
查看静态代码分析器的报告来进行类的添加和修改 静态代码分析

摘抄-----java codeReview要做的事的更多相关文章

  1. 不愿看到Java开发者再做的10件事

    William F. Buckley.Jr 曾经说过,“保守主义者是那些逆着历史潮流不断喊停的人,其他人都不愿意这么做或者对他们这么做显得没有耐性”.虽然我对此了解不多,但是每次看到有Java开发人员 ...

  2. 程序计数器(关于java虚拟机内存的那些事)

    <深入理解java虚拟机> 读书感悟 作者:淮左白衣 --------------写于2018年4月9日17:44:48 关于java虚拟机内存的那些事之程序计数器 关于java虚拟机内存 ...

  3. Java你可能不知道的事(3)HashMap

    概述 HashMap对于做Java的小伙伴来说太熟悉了.估计你们每天都在使用它.它为什么叫做HashMap?它的内部是怎么实现的呢?为什么我们使用的时候很多情况都是用String作为它的key呢?带着 ...

  4. 开发完iOS应用,接下去你该做的事

    iOS专项总结 关于 analyze Clang 静态分析器 Slender Faux Pas Warning Leaks Time Profiler 加载时间 iOS App启动过程 帧率等 如何优 ...

  5. 转载:安装Ubuntu 15.10后要做的事

    转载:安装Ubuntu 15.10后要做的事 原文转载于:http://blog.csdn.net/skykingf/article/details/45267517 Ubuntu 15.10发布了, ...

  6. 开发完 iOS 应用,接下去你该做的事

    iOS专项总结 一个应用经过多次迭代后告一段落,接下去我们在技术上还可以做些什么呢?答案是提高代码的整体质量.关于这方面,除了我们常喊的 重构,测试也非常重要. 博主近期给我们的 iOS客户端代码来了 ...

  7. Redis还可以做哪些事?

    在上一篇文章中,讲到了redis五大基本数据类型的使用场景,除了string,hash,list,set,zset之外,redis还提供了一些其他的数据结构(当然,严格意义上也不算数据结构),一起来看 ...

  8. java你可能不知道的事(2)--堆和栈

    在java语言的学习和使用当中你可能已经了解或者知道堆和栈,但是你可能没有完全的理解它们.今天我们就一起来学习堆.栈的特点以及它们的区别.认识了这个之后,你可能对java有更深的理解. Java堆内存 ...

  9. 7件你不知道但可以用CSS做的事

    不管你信不信,CSS和JavaScript开始重叠,就像CSS增加了更多功能一新.在我写“你可能不知道的CSS和JavaScript互相影响的5种方式”一文时,人们对于JavaScript和CSS是如 ...

随机推荐

  1. Mybatis中传入时间值

    <if test="search_content2 != null and search_content2 != ''"> AND add_time <![CDA ...

  2. Zabbix 监控端口状态并邮件报警

    Zabbix监控端口 前提 zabbix安装 zabbix邮件报警 添加监控项 添加触发器 添加动作 设置完成后,在配置过报警媒介后也就是 邮件报警  后就完成了.

  3. 开始一个Android的appium实例

      1.查看Android的应用包名和activity的方法   (网上有很多种方法,这里应用的是查看日志的方法) CMD中输入>adb logcat -c                   ...

  4. Web标准:一、xhtml css基础知识

    说明:这些知识是我看<十天学会DIV+CSS教程完整版 完美整理+完整代码>这篇文章后记下来的一些内容,包括少部分不懂得地方去百度到的一些解释等,该文章的地址: http://wenku. ...

  5. hdoj1069 Monkey and Banana(DP--LIS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 思路: 由题意,显然一种block可能有6种形式,且一种形式最多使用一次,因此最多有30×6=1 ...

  6. 3.Longest Substring Without Repeating Characters(string; HashTable)

    Given a string, find the length of the longest substring without repeating characters. For example, ...

  7. Petya and Graph(最小割,最大权闭合子图)

    Petya and Graph http://codeforces.com/contest/1082/problem/G time limit per test 2 seconds memory li ...

  8. CSS中的各种width(宽度)

    一 window对象的innerWidth.outerWidth innerWidth是可用区域的宽度(内容区 + 滚动条) outerWidth是浏览器窗口的宽度(可用区域的宽度+审查元素区域的宽度 ...

  9. 移动端 输入框 如果类型是number,用户也可以输入汉字和字母

    <input type="number" id="input-age" placeholder="请输入你的年龄" /> //i ...

  10. HTML5新协议介绍 WebSocket

    WebSocket protocol 是HTML5一种新的协议(protocol).它是实现了浏览器与服务器全双工通信(full-duplex). 现在,很多网站为了实现即时通讯(real-time) ...