摘抄-----java codeReview要做的事
整洁的代码
| 清单项目 | 分类 |
|---|---|
| 使用可以表达实际意图(Intention-Revealing)的名称 | 有意义的名称 |
| 每一个概念只用一个词 | 有意义的名称 |
| 使用方案/问题领域名称 | 有意义的名称 |
| 类应该是比较小的! | 类 |
| 函数应该是比较小的! | 函数 |
| 只做一件事 | 函数 |
| DRY(Don’t Repeat Yourself)原则,(拒绝重复) | 函数 |
| 用代码来解释自己的做法(译者注:即代码注释) | 注释 |
| 确定应用了代码格式化 | 格式 |
| 使用异常而不是返回码 | 异常 |
| 不要返回Null | 异常 |
安全
| 清单项目 | 分类 |
|---|---|
| 如果不用于继承,使类为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要做的事的更多相关文章
- 不愿看到Java开发者再做的10件事
William F. Buckley.Jr 曾经说过,“保守主义者是那些逆着历史潮流不断喊停的人,其他人都不愿意这么做或者对他们这么做显得没有耐性”.虽然我对此了解不多,但是每次看到有Java开发人员 ...
- 程序计数器(关于java虚拟机内存的那些事)
<深入理解java虚拟机> 读书感悟 作者:淮左白衣 --------------写于2018年4月9日17:44:48 关于java虚拟机内存的那些事之程序计数器 关于java虚拟机内存 ...
- Java你可能不知道的事(3)HashMap
概述 HashMap对于做Java的小伙伴来说太熟悉了.估计你们每天都在使用它.它为什么叫做HashMap?它的内部是怎么实现的呢?为什么我们使用的时候很多情况都是用String作为它的key呢?带着 ...
- 开发完iOS应用,接下去你该做的事
iOS专项总结 关于 analyze Clang 静态分析器 Slender Faux Pas Warning Leaks Time Profiler 加载时间 iOS App启动过程 帧率等 如何优 ...
- 转载:安装Ubuntu 15.10后要做的事
转载:安装Ubuntu 15.10后要做的事 原文转载于:http://blog.csdn.net/skykingf/article/details/45267517 Ubuntu 15.10发布了, ...
- 开发完 iOS 应用,接下去你该做的事
iOS专项总结 一个应用经过多次迭代后告一段落,接下去我们在技术上还可以做些什么呢?答案是提高代码的整体质量.关于这方面,除了我们常喊的 重构,测试也非常重要. 博主近期给我们的 iOS客户端代码来了 ...
- Redis还可以做哪些事?
在上一篇文章中,讲到了redis五大基本数据类型的使用场景,除了string,hash,list,set,zset之外,redis还提供了一些其他的数据结构(当然,严格意义上也不算数据结构),一起来看 ...
- java你可能不知道的事(2)--堆和栈
在java语言的学习和使用当中你可能已经了解或者知道堆和栈,但是你可能没有完全的理解它们.今天我们就一起来学习堆.栈的特点以及它们的区别.认识了这个之后,你可能对java有更深的理解. Java堆内存 ...
- 7件你不知道但可以用CSS做的事
不管你信不信,CSS和JavaScript开始重叠,就像CSS增加了更多功能一新.在我写“你可能不知道的CSS和JavaScript互相影响的5种方式”一文时,人们对于JavaScript和CSS是如 ...
随机推荐
- EasyUI查询
<script type="text/javascript"> <!-- js --> function search_xxx() { var search ...
- Web标准:一、xhtml css基础知识
说明:这些知识是我看<十天学会DIV+CSS教程完整版 完美整理+完整代码>这篇文章后记下来的一些内容,包括少部分不懂得地方去百度到的一些解释等,该文章的地址: http://wenku. ...
- url获取参数
参考http://www.runoob.com/w3cnote/js-get-url-param.html function getQueryVariable(variable) { var quer ...
- zoj1109-Language of FatMouse 【字典树】
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=109 Language of FatMouse Time Limit: 10 S ...
- ROI
1.ROI简介 ROI(region of interest),感兴趣区域.机器视觉.图像处理中,从被处理的图像以方框.圆.椭圆. 不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI.在H ...
- 虚拟机安装Centos6.5服务器系统
前言: 工作需要,研究Linux数日,写下此教程,意在给其他初学者参考学习,亦是给自己留作备用.好记性不如烂笔头,毕竟只是偶尔使用,留下教程,以备不时之需. 对于学习研究Linux的新手,个人推荐VM ...
- React Native 首次加载白屏优化
RN首次加载都会有个白屏过程,一般都会有500ms+的白屏时间,原生页面开发同样的页面会能够快速显示而在RN页面中有个明显的等待过程,这个会影响用户体验. 1.使用过渡页面 简单处理可以在白屏过程中加 ...
- iOS codeview
1.环境配置 oclint:http://oclint.org/ xcpretty:https://github.com/supermarin/xcpretty 使用Mac安装xcpretty过程可能 ...
- IIS 访问不了,IIS有问题,IIS右击浏览没反应
查看是否是下面的问题 web服务扩展中,下面三项设置为 “允许” CGI扩展 ISAPI扩展 Active Server Pages
- 【JVM】浅谈双亲委派和破坏双亲委派
一.前言 笔者曾经阅读过周志明的<深入理解Java虚拟机>这本书,阅读完后自以为对jvm有了一定的了解,然而当真正碰到问题的时候,才发现自己读的有多粗糙,也体会到只有实践才能加深理解,正应 ...