sonarQube常见问题及分析
阻断
1、Close this"FileInputStream" in a "finally" clause.
在finally中关闭FileInputStream,这个最为常见,主要是关闭方式不对,finally代码块中,应该要对每个stream进行单独关闭,而不能统一写在一个try-catch代码中,jdk 7 可以考虑try-resources方式关闭,代码相对优雅。
另外数据库操作的statement和resultRs没有关闭的情况也非常多。这个也是要重点留意的地方。
2、A"NullPointerException" could be thrown; "tom" is nullablehere
空指针,极为讨厌的问题,主要是编码经验缺少的体现。一般的高手在编码过程中,就会第一时间考虑到这类情况,并做相应的处理。解决方式无它,先判断或者先实例化,再访问里面的属性或者成员。
严重
1、Define and throw a dedicated exception instead of using a generic one
定义并抛出一个专用的异常来代替一个通用的异常。
2、Removethis hard-coded password
移除代码里硬编码的密码信息。会有少许的误判的情况,一般是变量包含:PWD或者password,所以如果真的不是硬编码,可以考虑更换变量名称,比如PWD改PW等等。
3、Eitherlog or rethrow this exception
catch异常之后,使用log方式或者throw异常的方式解决。如果业务上真的没有throw或者记录日志的话,可以使用log.debug的方式填充来解决问题。
4、Makethis IP "127.0.0.1" address configurable
将IP弄到配置文件中,不要硬编码到代码里。个人觉得改动稍大!
5、Make this"public static JSAPI" field final
如果你将这个变量设置为public访问方式,同时又是静态Static方式,就要考虑将它设置为final了,因为这个是共享变量,其它类可以随时随地将它设置为别的值。所以如果是只是当前类使用,可以考虑将公开访问方式改为私有。
6、Makethe enclosing method "static" or remove this set
见代码:
public class MyClass {
private static int count = 0;
public void doSomething() {
//...
count++; // Noncompliant
}
}
不要使用非静态方法去更新静态字段,这样很难获得正确的结果,如果有多个类实例和/或多个线程,则很容易导致错误。理想情况下,静态字段仅从同步静态方法中更新。
7、Override"equals(Object obj)" to comply with the contract of the"compareTo(T o)" method
如果重写了compareTo方法,同时也应重写equals方法。
8、Make"body" transient or serializable.
public class Address {
//...
}
public class Person implements Serializable {
private static final long serialVersionUID = 1905122041950251207L;
private String name;
private Address address; // Noncompliant; Address isn't serializable
}
如果person已经序列化,其成员变量Address也进行序列化。不然转化时会有问题。
9 Floating point numbers should not be tested for equality
浮点类型的数字,不要通过==或者!=方式其它类型比较,因为浮点是不精确的,所以在比较时,会进行类型升级升级原则如下:
· 如果运算符任意一方的类型为double,则另一方会转换为double
· 否则,如果运算符任意一方的类型为float,则另一方会转换为float
· 否则,如果运算符任意一方的类型为long,则另一方会转换为long
· 否则,两边都会转换为int
以下的方式得到的结果都是false。
float myNumber = 3.146;
if ( myNumber == 3.146f ) { //Noncompliant. Because of floating point imprecision, this will be false
if ( myNumber != 3.146f ) { //Noncompliant. Because of floating point imprecision, this will be true
if (myNumber < 4 || myNumber > 4) { // Noncompliant; indirect
float zeroFloat = 0.0f;
if (zeroFloat == 0) { // Noncompliant. Computations may end up with a value close but not equal to zero.
}
所以,要比较浮点数是否相等,需要做的事情是:
排除NaN和无穷
在精度范围内进行比较
正确的例子:
public boolean isEqual(double a, double b) {
if (Double.isNaN(a) || Double.isNaN(b) || Double.isInfinite(a) || Double.isInfinite(b)) {
return false;
}
return (a - b) < 0.001d;
}
10、Thiscall to "contains()" may be a performance hot spot if the collectionis large.
如果collection的记录数非常大的话,它的contains方法的时间复杂度是很高的。所以开发过程中要注意这一点。下面的是列表:
· ArrayList
contains
remove
· LinkedList
get
contains
· ConcurrentLinkedQueue
size
contains
· ConcurrentLinkedDeque
size
contains
· CopyOnWriteArrayList
add
contains
remove
· CopyOnWriteArraySet
add
contains
remove
sonarQube常见问题及分析的更多相关文章
- HBase工程师线上工作经验总结----HBase常见问题及分析
阅读本文可以带着下面问题:1.HBase遇到问题,可以从几方面解决问题?2.HBase个别请求为什么很慢?你认为是什么原因?3.客户端读写请求为什么大量出错?该从哪方面来分析?4.大量服务端excep ...
- (转)HBase工程师线上工作经验总结----HBase常见问题及分析
阅读本文可以带着下面问题:1.HBase遇到问题,可以从几方面解决问题?2.HBase个别请求为什么很慢?你认为是什么原因?3.客户端读写请求为什么大量出错?该从哪方面来分析?4.大量服务端excep ...
- 集成TFS Build生成与SonarQube获取代码分析结果
软件项目在开发过程中,往往由于任务重.时间紧等原因忽略软件代码的质量和规范检查,只注重软件功能的开发和交付.等软件交付上线以后,由于代码质量导致的问题会耗费开发和运维人员的大量时间.研发表明,项目上线 ...
- sonarqube+sonar runner分析C#代码
最近研究一个代码覆盖率和代码分析工具.遇到一些比较坑的问题,现在分享给大家. 1.Sonar介绍 Sonar是一个用于代码质量管理的开源平台,用于管理Java源代码的质量.通过插件机制,Sonar 可 ...
- SonarQube执行代码分析时,报错ERROR: Unable to create symbol table for : /**/*.java java.lang.IllegalArgumentException: Unsupported class file major version 55
若要转载本文,请务必声明出处:https://www.cnblogs.com/zhongyuanzhao000/p/11686633.html 起因: 最近正在尝试SonarQube的简单使用,但是当 ...
- 使用SonarQube+Eclipse来分析python代码
背景 最近在项目中推广集成测试的理念以及相关工具,在jenkins中集成sonar去分析项目的java代码的时候,意外的发现,sonarqube上还有对应python的插件,而自己写的测试工具大部分都 ...
- EasyNVR网页摄像机无插件H5、谷歌Chrome直播方案安装使用常见问题的分析
EasyNVR对于互联网的视频直播还是有着一定的贡献的.为了方便用户的体验使用,我们也在互联网上放置了对应的试用版本,并且也会随着功能是更新也会定期的更新上去.软件包也会配置对应的使用文档和说明. 许 ...
- 基于Win10极简SonarQube C#代码质量分析
博客有些好些时间未更新了,这几个月的时间里,离开了实习的公司.大学毕了业.来了新公司.转了户口,有点忙,最近总算稍微闲下来了,打算重新拾起博客,坚持写下去. 言归正转,什么是SonarQube ? S ...
- 11个 常见UI/UX设计师调查问卷分析
作为专业人员,设计出优秀的作品是UI/UX设计师必备的技能,同样重要的是良好的沟通能力.进一步来讲,提出正确的问题也是作为设计师的技能之一. 任何项目的首要任务都是收集需要的信息,以便正确有效地完成我 ...
随机推荐
- C#语法之泛型
前面两篇C#语法主要是回顾委托相关的.这篇主要回顾了泛型. 一.为什么要有泛型? 我们在写一些方法时可能会方法名相同,参数类型不同的方法,这种叫做重载.如果只是因为参数类型不同里面做的业务逻辑都是相同 ...
- UIKit 框架之UITableView一
UITableView在开发中是用的最多的控件,它包含两个代理:UITableViewDataSource,UITableViewDelegate,先熟悉下API 1.初始化 - (instancet ...
- [转]WebForm中使用MVC
本文转自:https://www.cnblogs.com/encoding/articles/3556046.html 前言 掐指一算,3年没写博了,好懒的说... 众所周知,MVC现在越来越火了,不 ...
- C语言读取配置文件
自从大学学完C之后,就再也没用过它了, 在网上找代码,七拼八凑之后,终于成形~~勉强能用,不喜勿喷,^_^! int GetValue(const wchar_t *key, wchar_t *val ...
- dubbo的重试机制
对dubbo熟悉的人对下面的配置一定不会陌生: <dubbo:reference id="xxxx" interface="xx" check=" ...
- spring boot入门笔记 (二) - application.properties配置文件
项目最重要的一个东西,用来定义整个项目的一些东西(端口.访问项目的名称.数据源.日志.集成mybatis等框架.静态资源目录.thymeleaf.热部署等),很重要很重要的. #整个项目的端口号,默认 ...
- 动态计算area位置
window.onresize = adjuest; function adjuest(){ var picw = $(".imgbox img").width(); var pi ...
- package.json参数简单介绍
概述: 每个项目的根目录下都会有一个package.json文件,定义了项目所需的模块,以及项目信息.执行npm install 命令会自动下载package.json中配置的模块,也就是配置项目的运 ...
- 【代码笔记】iOS-archive保存图片到本地
一,工程图: 二,代码: RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIVi ...
- react生命周期获取异步数据
当react组件需要获取异步数据的时候,建议在ComponentDidMount周期里执行获取动作, 如果非异步数据,可以在ComponentWillMount获取 因为ComponentWillMo ...