代码走查具体考察点

一、参数检验

  1. 公共方法都要做参数的校验,参数校验不通过,需要明确抛出异常或对应响应码。
  2. 在接口中也明确使用验证注解修饰参数和返回值,作为一种协议要求调用方按注解约束传参,返回值验证注解约束提供方按注解要求返回结果。

二、魔法数字(幻数)

在代码中要杜绝幻数,幻数可定义为枚举或常量以增强其可读性。

三、空指针检验

  1. 不确定返回集合是否可为空时,要先做非空判断,再做for循环。
  2. 尽量返回空对象,或者空集合,而不是null。
  3. 判断字符串为空时,先判断是否为空,再判断是否空串,最好将其提出公共方法。
  4. 使用a.equal(b)时,把常量放在左边。

四、下标越界

如果方法传入数组下标作为参数,要在一开始就做下标越界的校验,避免下标越界异常。

五、重复代码检验

不允许写重复代码(四行左右重复计算重复代码),重复代码要使用重构工具提取重构。

六、命名规范

  1. 包、类、方法、字段、变量、常量的命名要遵循规范。
  2. 命令要名副其实,一方面增加可读性,另一方面促使我们在起名的过程中思考方法、变量、类的职责是否合适。
  3. 尽量不要在循环中调用服务,不要在循环中做数据库等跨网络操作。
  4. 循环或者递归,要注意其是否一定包含了停止循环/递归的条件。
  5. 尽量避免while(true),一定要写的话,循环开始要加一个sleep,这样避免一上来就异常,跑死CPU。

七、注意循环

八、关心频率

写每一个方法时都要关心这个方法的调用频率,一天多少,一分多少,一秒多少,峰值可能达到多少,调用频率高的一定要考虑性能指标,考虑是否会打垮数据库、缓存等。

九、差错控制

  1. 避免过大的 try 块,不要把不会出现异常的代码放到 try 块里面,尽量保持一个 try 块对应一个或多个异常。
  2. 细化异常的类型,不要不管什么类型的异常都写成 Excetpion。
  3. catch 块尽量保持一个块捕获一类异常,不要忽略捕获的异常,捕获到后要么处理,要么重新抛出新类型的异常。
  4. 方法内部,不要把自己能处理的异常抛给别人。
  5. 不要用 try...catch 参与控制程序流程,异常控制的根本目的是处理程序的非正常情况。

十、关于长度

如果一行代码过长,要分解开来;如果一个方法过长,要重构方法;如果一个类过长要考虑拆分类

十一、外部依赖的性能

如果调用了外部依赖,要搞清楚这个外部依赖可以提供的性能指标,考量其是否能够提供符合我们使用场景的服务。

十二、避免重复造轮子

不要重复造轮子,如果已经有成熟类库实现了类似功能,要优先使用成熟类库的方法,这是因为成熟类库中的方法都经过很多人的测试验证,已经非常可靠了。

十三、注意多线程

多线程环境中,要注意数据的原子性与可见性等线程安全问题,最典型的HashMap,SimpleDateFormat,ArrayList是非线程安全的,另外如果使用Spring自动扫描服务,那么这个服务默认是单例,其内部成员是多个线程共享的,如果直接用成员变量是有线程不安全的。

十四、日志打印

  1. 打印日志要设定合理的日志级别。
  2. 生成长字符串的toString()时,通过日志级别和if语句达到控制打印量的目的。原因是,长字符传拼接会占用很多gc年轻代内存。
  3. 要通过log4j打印日志而不是直接把日志打印到控制台。

十五、方法实现的简洁

这个无法说的太细,总之是不要啰里啰嗦的写代码,具体问题要具体分析。

十六、正向依赖

不能让底层模块依赖于上层模块;不能让数据层依赖于服务层;也不能让服务层依赖于UI层;更不能在模块之间形成循环依赖关系。

十七、分治

分而治之,复杂的问题要分解成几个相对简单的问题来解决,首先要分析出核心问题,然后分析出核心的入参是什么,结果是什么,入参通过几步变化可以得出结果。(该条与第十条:关于长度,有一定的重合)

十八、代码健壮性意识

该条是前面几条的整合,比较综合。考虑各种边界条件(例如第四条下标越界、用户输入数据超出最大值等)、处理失败或出异常的方法(参考第九条、差错控制)、校验入参和返回值(参考第一条参数校验)

Java代码走查具体考察点的更多相关文章

  1. Sonar+maven+jenkins集成,Java代码走查

    Sonar服务在Sonar安装与使用篇已经介绍过,此文章不再说了 Jenkins的安装与配置方法参考http://www.cnblogs.com/chenchen-tester/p/6408815.h ...

  2. java代码走查审查规范

    分类 重要性 检查项 备注 命名         重要 命名规则是否与所采用的规范保持一致? 成员变量,方法参数等需要使用首字母小写,其余单词首字母大写的命名方式,禁止使用下划线(_)数字等方式命名不 ...

  3. Jenkins+Gradle+Sonar进行Java项目代码分析

    Jenkins+Maven+Sonar与Jenkins+Gradle+Sonar配置方法很相似,区别就是Java项目所用的编译工具不同,一个是maven,一个是gradle 使用maven编译工具的可 ...

  4. 2019年6月份,阿里最新Java高频面试真题汇总,仅供参考(附福利)

    目录 技术一面(23问) 技术二面(3大块) JAVA开发技术面试中可能问到的问题(17问) JAVA方向技术考察点(33快) 项目实战(7大块) 必会知识(48点) 面试小技巧 注意事项 1. 阿里 ...

  5. 架构师小跟班:送你一份2019年阿里巴巴最新Java面试题,以供参考

    大家都说大厂面试造飞机,工作拧螺丝.这话只对了一部分,大厂是平时拧螺丝,一旦需要飞机时也能造的起来. 目录 技术一面(23问) 技术二面(3大块) JAVA开发技术面试中可能问到的问题(17问) JA ...

  6. 【转】2019年7月份,阿里最新Java高频面试真题汇总

    技术一面(23问)技术二面(3大块)JAVA开发技术面试中可能问到的问题(17问)JAVA方向技术考察点(33快)项目实战(7大块)必会知识(48点)面试小技巧注意事项1. 阿里技术一面 Java I ...

  7. 2018年4月份,阿里最新的java程序员面试题目,仅供参考。

    目录 技术一面(23问) 技术二面(3大块) 性能优化(21点) 项目实战(34块) JAVA方向技术考察点(15点) JAVA开发技术面试中可能问到的问题(17问) 阿里技术面试1 1.Java I ...

  8. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  9. java代码开发完成后,代码走查规范

    代码走查注意事项: 1.不变的值,尽量写个常量类 2.尽量使用if{}else,不要一直if去判断 3.减少循环调用方法查询数据库 4.dao层尽量不要用逻辑,尽量在service里写业务逻辑 5.金 ...

随机推荐

  1. python中unicode 和 str相互转化

    python中的str对象其实就是"8-bit string" ,字节字符串,本质上类似java中的byte[]. 而python中的unicode对象应该才是等同于java中的S ...

  2. ora-01017 和oracle database link

    DB link ,创建完了后总是报密码错误.我感到奇怪.明明密码是对的.怎么可能错误呢. SQL> create public database link kk40 connect to khf ...

  3. Java设计模式系列 — 构造器模式

    想象下你有一个类,像下图所示有许多属性.假设你想让你的类不可变(顺便说一下,除非有一个好的理由不这样做,否则你应该坚持.但是我们会以另一种方式来达到要求.) public class User { p ...

  4. input属性为number时,如何去掉右边的 +、-号

    修改css /* 谷歌 */ input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit-appearan ...

  5. juqery 回车事件 回车操作 回车搜索

    html <form class="search_wrap" method="post" action=""> <div ...

  6. Python学习之旅(三十二)

    Python基础知识(31):图形界面(Ⅱ) Python内置了turtle库,可以在计算机上绘图 运动控制: 1.画笔定位到坐标(x,y):turtle.goto(x,y) 2.向正方向运动 dis ...

  7. TCP/IP HTPP

    TCP/IP:Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协 ...

  8. [数学]MIT牛人解说数学体系

    本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://www.penglixun.com/study/science/mit_math ...

  9. mybatis入门--配置

    1.导入jar包 mybatis-x.x.x.jar 导入到lib目录下, 如果使用 Maven 来构建项目,则需将下面的 dependency 代码置于 pom.xml 文件中: <depen ...

  10. Jenkins在windows服务器上依赖的maven仓库目录

    1.在windows server 2008上,maven仓库路径为: C:\Users\用户名\.m2 2.在windows server 2003上(加入域的服务器),maven仓库路径为: C: ...