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

整洁的代码

清单项目 分类
使用可以表达实际意图(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要做的事

时间: 2024-10-13 12:03:23

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

JAVA编程“性能说”(java编程需要做的26件事)

转载于 http://www.csdn.net/article/2012-06-01/2806249 最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方. 1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面: 控

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

iOS专项总结 一个应用经过多次迭代后告一段落,接下去我们在技术上还可以做些什么呢?答案是提高代码的整体质量.关于这方面,除了我们常喊的 重构,测试也非常重要. 博主近期给我们的 iOS客户端代码来了一次专项测试.主要从常规的 辅助测试 入手,来了次代码大清理,找到代码中的问题,并一一改掉它们.惊喜的是,这对于提高本人的代码水平有很大的帮助.其实,这套代码的质量本身已经很高了,也非常整洁.而这主要得益于严格的代码规范和pull request机制. 关于测试,App常关注的往往是一些功能性的,包

java开发中的那些事(5)--------一点经历,败给2分钟的2个小时

特意记下这个经历,这个让我感慨万千又斗志昂扬的一次经历,这是经验,也是生活. 故事的始末是这样的,先给大家上几句代码,现在身在家中,只能凭记忆敲打几行,大致意思倒不会错: {field:'code',align:'center'} {field:'btfid',align:'center',hidden:'true', formatter:function(value,row,rowIndex){ return "<a href="javascript:void(0)"

.NET开发和java开发是做什么的?

.NET开发和java开发是做什么的?     .NET开发可以开发C/S结构的东西,如QQ,铁路售票的 可以开发企业级的管理系统,如酒店管理系统可以开发B/S结构的网站,如B2C,B2B,企业门户网站,可以开发企业级的管理系统,也就网页形式的. .NET就是微软用来实现XML,Web Services,SOA(面向服务的体系结构service-oriented architecture)和敏捷性的技术.对技术人员,想真正了解什么是.NET,必须先了解.NET技术出现的原因和它想解决的问题,必须

无责任励志一则-成功就是把你做的事做精致

无责任励志一则-成功就是把你做的事做精致 读tomcat和spring的源码,结果根本没能坚持下去.因为根本没那么多时间去阅读代码,也坚持不下去,最后都是不了了之.现在想来,根本不是对这些项目感兴趣,其实平时用到的功能也不全,完全是因为觉得它们很牛逼. HDFS是Nutch为了保存海量文件而开发的,而Hadoop本身也是起源于项目需要. 现在的工作,我一直在做一些跑job的事情,大家都觉得挺无聊.但是想想,其实那么高端大气的Hadoop也是从跑job开始的.何不好好干呢?

java开发中的那些事(3)-------最常用到的几个快捷键

今天去看了韩寒的<后会无期>,感慨颇多. 这里记录下现在常会用到的几个快捷键,不多,却是当前最常用到: 1.ctrl+f  ----------------"搜索", 这个应该在大多数人来说都太简单了,可惜我也是知道不长时间: 2.ctrl+shift+r  --------"工程内搜索",这个也是搜索,不过是搜索整个工程的,这个知道后美滋滋了好久: 3.ctrl+/  ----------------"简单注释","//&

尽量别做自己不想做的事

愈来愈不懂得客气是怎么一回事儿. 为了礼貌,有时向人说:"有空去饮茶." 这一说不得了了,天天闲着,却又没时间,有空时想想:"值不值得去?" 最后,还是勉强去应酬,深觉没意思. 所以,"有空去饮茶"这句话,少说了.如果没有心的话,说来干什么?自己找辛苦. 吃完饭大家抢着付账,要付就让人家去付好了,已经学会接受这种方式. 最糟糕的是,想请客,先把信用卡交上柜台,但对方坚持要付,把你的卡退回给你.应付这种情形,唯有让他们去结账,再买一份重礼他日送上.

Ubuntu系统安装后的10件真正必做之事

更新: 30 JUL 2016 晚上更新了Ubuntu 16.04,虽然重要文件都经过了备份,但是系统设置还是需要重新来过.由于经常重装系统,已经体会到了装系统中最辛苦的要数重新设置了(这也是后来不愿意再重装Win10只是按着MS一步步更新的原因).为了方便以后的更新换代,在此一边重新设置,一边总结记录,以作参考.今后如有再次升级,必定更新此文. 好了,现在你已经完整地完成了Ubuntu(16.04)的安装,但是迎接你的是一个中看不中用的壳子:-P 下面做的事才是你真正开始在这个Linux平台上

dllmain不能做的事

首先,参看这篇文章: http://msdn.microsoft.com/en-us/library/windows/desktop/dn633971%28v=vs.85%29.aspx loadlibrary时,会先加锁,然后调用dllmain,然后解锁返回. 所以dllmain中,要做的初始化或清理越简单越好.该做的复杂的初始化,应该延迟,在loadlibrary之后. 不能做的事: LoadLibrary CreateThread CreateProcess GetModuleFileNa