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