整洁的代码
| 清单项 | 分类 | 
|---|---|
| 使用可以表达实际意图的名称 | 有意义的名称 | 
| 每一个概念只用一个词 | 有意义的名称 | 
| 使用方案/问题领域名称 | 有意义的名称 | 
| 类应该是比较小的 | 类 | 
| 函数应该是比较小的 | 函数 | 
| 只做一件事 | 函数 | 
| DRY(拒绝重复) | 函数 | 
| 用代码来注释自己的做法 | 注释 | 
| 确定应用了代码格式化 | 格式 | 
| 使用异常而不是返回码 | 异常 | 
| 不要返回NULL | 异常 | 
安全性问题
| 清单项 | 分类 | 
|---|---|
| 如果不用继承,使用final类 | 基础 | 
| 避免重复代码 | 基础 | 
| 权限限制:程序应该运行在保证功能正常的最小权限模式下 | 基础 | 
| 最小化类和成员的可访问性 | 基础 | 
| 注释安全相关的信息 | 基础 | 
| 系统的输入必须检查是否有效和在允许范围内 | 拒绝服务 | 
| 避免对于一些不寻常行为的过分日志 | 拒绝服务 | 
| 在任何情况下都释放资源(流,连接等) | 拒绝服务 | 
| 从异常中清楚敏感信息(暴露文件路径,系统内部相关,配置,IP等) | 秘密信息 | 
| 不把高敏感度的信息写到日志 | 秘密信息 | 
| 考虑把高度敏感的信息在使用后从内存中删除 | 密码信息 | 
| 限制包,类,接口,方法和域的可访问性 | 可访问性的扩展 | 
| 限制类和方法的可扩展性 | 可访问性的扩展 | 
| 检验输入(有效数据,大小,范围,边界) | 输入检验 | 
| 把从不可信对象得到的输出作为输入来检验 | 输入检验 | 
| 为native方法定义包装类(而不是定义native方法为public) | 输入检验 | 
| 把从不可信对象得到的输出作为输入来对待 | 可变性 | 
| 使public static域为final(避免调用方法(caller)修改它的值) | 可变性 | 
| 避免暴露敏感类的构造函数 | 对象构造 | 
| 避免安全敏感类的序列化 | 序列化反序列化(Serialization Deserialization) | 
| 通过序列化来保护敏感数据 | 序列化反序列化 | 
| 小心地缓存潜在的特权操作结果 | 序列化反序列化 | 
性能
| 清单项目 | 分类 | 
|---|---|
| 避免过分的同步 | 并发 | 
| 保持同步于去比较小 | 并发 | 
| 知道String连接的性能情况 | 综合编程 | 
| 避免创建不需要的对象 | 创建和销毁对象 |