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设计师必备的技能,同样重要的是良好的沟通能力.进一步来讲,提出正确的问题也是作为设计师的技能之一. 任何项目的首要任务都是收集需要的信息,以便正确有效地完成我 ...
随机推荐
- Pyltp使用
1.先使用pip安装pyltp-0.2.1-cp36-cp36m-win_amd64.whl 2.再参考API文档进行具体的使用:http://pyltp.readthedocs.io/zh_CN/d ...
- C语言中的按位移动及其简单引用
C语言中的按位移动及其简单应用 在C语言中按位左移用”<<”表示,按位右移用”>>”表示. 按位左移和按位右移运算经常被用来替换乘二和除二运算,但是要注意,这两者之间并不完全等 ...
- java面试②基础部分
2.1.3 讲一下java中int数据占几个字节 java中有几种基本数据类型? 2.1.4. 面向对象的特征有哪些方面 有四大基本特征:封装.抽象.继承.多态 1)封装,即将对象封装成一个高度自治和 ...
- Aviator 表达式求值引擎开源框架
简介¶ Aviator是一个高性能.轻量级的java语言实现的表达式求值引擎,主要用于各种表达式的动态求值.现在已经有很多开源可用的java表达式求值引擎,为什么还需要Avaitor呢? Aviato ...
- IDEA中Maven切换国内源
国内访问Maven仓库非常慢,笔者今天忘记切换国内源更新Maven仓库竟然更新了一下午.如果改成国内的源,那么很快就更新完成了. 在IDEA中打开“Settings”(快捷键++): 在搜索框中输入“ ...
- MVC 导出Execl 的总结几种方式 (四)
这种方式我个人还是比较喜欢的,使用部分视图的方式,导出Execl 这样在编辑样式上也是很方便的 第一步: 编辑导出视图页 @using H5UpdateImage.Models; @{ Layout ...
- (利用DOM)在新打开的页面点击关闭当前浏览器窗口
1.在开发过程中我们前端的用户体验中有时候会要求点击一个按钮,关闭当前浏览器窗口.用html DOM就可做到. 2.注意:本次写法要求在新窗口中关闭. target="_blank" ...
- vue-quill-editor 富文本集成quill-image-extend-module插件实例,以及UglifyJsPlugin打包抱错问题处理
官网 vue-quill-editor Toolbar Module - Quill vue-quill-image-upload 图片支持上传服务器并调整大小 1.在 package.json 中加 ...
- Nib加载的方式实现自定义TableView
实现的效果 实现原理: 通过在主界面中用Bundle 的LoadNib的方式进行自定义窗体文件加载并渲染界面 实现步骤 Step One 创建TableViewCell 窗体 Step Two 定义接 ...
- MPVUE - 使用vue.js开发微信小程序
MPVUE - 使用vue.js开发微信小程序 什么是mpvue? mpvue 是美团点评前端团队开源的一款使用 Vue.js 开发微信小程序的前端框架.框架提供了完整的 Vue.js 开发体验,开发 ...