代码优化与改善

三个常见的代码性能优化方式 编写有效率的代码是我们的一项基本技能。我们千万不要忽视代码的性能要求。越早考虑性能问题,需要支付的成本就越小,带来的价值就越大,不要等到出现性能问题时,才去临时抱佛脚。如果前期没有看重代码的性能问题,那么后期我们就要付出加倍的精力去维护和重构代码。 代码的性能并不是可以多块地进行加减乘除,而是如何管理内存、磁盘、网络、内核等计算机资源,已达到性能最优化。 在这篇文章里,我选了三个常见且实用的代... 阅读详情

一. 简单指标:Statistic,注释原则

通常情况下如何需要注释的代码块

1.每步主要业务

2.核心方法

3.条件、分支、判断前

4.等.....

idea 有款插件Statistic,可以统计出注释的比例如下图,通常的注释行数在35%以上,说明代码比较完善,当然每个公司的标准不一样,这个值也许不一样

二.代码公约,建议使用 Alibaba Java代码规约,地址 https://github.com/alibaba/p3c,上面提供了相关的插件,按照后可以检查出不合规则的代码

 

三.SonarQube

SonarQube是一个开源的代码质量管理系统,可用来快速定位代码中的Bug、漏洞以及不优雅的代码。它支持几乎所有的常见编程语言,例如Java、JavaScript、TypeScript、Kotlin、Ruby、Go, Scala等。并且还有插件机制,利用插件,可以让SonarQube更加强大,例如可以整合Findbugs、PMD、Checkstyle等。可以说,SonarQube是一款提升项目代码质量必备的工具。

本文手把手搭建、使用SonarQube。

下载

前往 https://www.sonarqube.org/downloads/ ,按照如图说明下载即可。建议下载 LTS 版本,以便获得长期的维护与支持。

图片描述

系统需求

  • X64的操作系统
  • JDK(对于7.9.x,那么需要JDK 11或更高版;对于6.x - 7.8.x,需要JDK 8或更高版本)
  • 2G内存

其他需求详见:https://docs.sonarqube.org/7.9/requirements/requirements/

TIPS

  • 《其他需求》建议大家参照一下,里面探讨如何修改Linux文件描述符限制等说明;
  • 上面贴的是是7.9版的链接,如果你使用的是其他版本,只需将版本名称改掉即可,例如改为7.8即可查看7.8.x的需求。

安装与启动

  • 解压压缩包

  • 将目录切换到SonarQube的 /bin 目录,可看到类似如下的目录结构:

    ├── bin
    │   ├── jsw-license
    │   ├── linux-x86-64
    │   ├── macosx-universal-64
    │   └── windows-x86-64
    
  • 根据你的操作系统,切换到响应目录。例如,您的机器是macOS ,则可切换到 macosx-universal-64 目录。

  • 执行如下命令即可启动SonarQube。

    ./sonar.sh start
    

    当然,该shell还有其他命令,可输入 ./sonar.sh --help 或者 ./sonar.sh 查阅。

  • 稍等片刻,访问 http://localhost:9000/ 即可看到类似如下的界面,说明安装成功。

    图片描述

  • 停止SonarQube,只需执行 ./sonar.sh stop 即可。
  • 如需重启,只需执行 ./sonar.sh restart 即可。

管理员登录

访问:http://localhost:9000

账号:admin

密码:admin

生产环境可用

默认情况下,SonarQube使用的是H2数据库,这是一款非常流行的嵌入式数据库。但生产环境中,SonarQube并不建议使用H2。SonarQube支持多种数据库,例如Qracle、PostgreSQL、SQL Server等。下面,我们以PostgreSQL为例,让SonarQube使用PostgreSQL存储数据。

TIPS

支持的数据库及数据库版本请前往这篇文档查看,避免SonarQube不支持你的数据库版本以及注意点。

https://docs.sonarqube.org/7.9/requirements/requirements/

举个例子:SonarQube 7.9要求使用PostgreSQL 9.3-9.6或者PostgreSQL 10,并且必须配置使用UTF-8

搭建PostgreSQL

简单起见,我用Docker搭建PostgreSQL。

version: '3.1'

services:
  postgres:
    image: postgres:10
    restart: always
    environment:
      - POSTGRES_USER=itmuch
      - POSTGRES_PASSWORD=itmuch
      - POSTGRES_DB=sonar
    ports:
      - "5432:5432"

修改SonarQube配置

  • 修改配置文件:$SONARQUBE_HOME/conf/sonar.properties 。

  • 找到类似如下的内容:

    #----- PostgreSQL 9.3 or greater
    # By default the schema named "public" is used. It can be overridden with the parameter "currentSchema".
    #sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube?currentSchema=my_schema
    

    在这行下面,添加如下内容:

    sonar.jdbc.url=jdbc:postgresql://localhost/sonar?currentSchema=public
    sonar.jdbc.username=itmuch
    sonar.jdbc.password=itmuch
    

    这里,数据库地址、账号、密码根据你的需求修改。

  • 执行 ./sonar.sh restart ,重启SonarQube。观察PostgreSQL,可以发现,此时SonarQube会自动在PostgreSQL数据库中建表并插入初始化数据。

  • 类似的方式,你也可以为你的SonarQube配置其他数据库。

整合Maven

方法一:全局配置

  • 在Maven的全局配置文件: $MAVEN_PATH/conf/settings.xml (也可能是.m2/settings.xml 看你是怎么配置Maven的)中添加如下内容:

    <profile>
      <id>sonar</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <sonar.jdbc.url>jdbc:postgresql://localhost/sonar?currentSchema=public</sonar.jdbc.url>
        <sonar.jdbc.driver>org.postgresql.Driver</sonar.jdbc.driver>
        <sonar.jdbc.username>itmuch</sonar.jdbc.username>
        <sonar.jdbc.password>itmuch</sonar.jdbc.password>
        <sonar.host.url>http://127.0.0.1:9000</sonar.host.url>
      </properties>
    </profile>
    
  • 到Maven项目的根目录执行如下命令,即可使用SonarQube分析项目:

    mvn sonar:sonar -Dsonar.java.binaries=target/sonar
    

    等待片刻后,项目构建成功:

    [INFO] Spring Cloud YES ................................... SUCCESS [ 12.431 s]
    [INFO] turbine-stream-server .............................. SKIPPED
    [INFO] zuul-server ........................................ SKIPPED
    [INFO] hystrix-dashboard .................................. SKIPPED
    [INFO] commons ............................................ SKIPPED
    [INFO] ms-content-sample-mybatis .......................... SKIPPED
    [INFO] ms-consumer-sample ................................. SKIPPED
    
  • 此时,再次访问 http://localhost:9000 ,即可看到类似如下的界面:

    图片描述

    如右上角所示,此时可以看到SonarQube已经为我们分析了一个项目,该项目有1个Bug、2个脆弱点、31个代码味道问题。点击项目名称(图中的 Spring Cloud YES)即可看到详情,可以根据SonarQube给我们的提示进行修正、重构。

方法二:直接命令行控制

  • 右上角头像 - My Account - Security页中,在 Generate New Token 中填入你的Token名称,并点击Generate 按钮。

  • 点击按钮后,将会看到生成的Token,例如 62b615f477557f98bc60b396c2b4ca2793afbdea

  • 使用如下命令,即可使用Sonar分析项目。

    mvn sonar:sonar \
        -Dsonar.host.url=http://localhost:9000 \
        -Dsonar.login=62b615f477557f98bc60b396c2b4ca2793afbdea \
        -Dsonar.java.binaries=target/sonar
    

插件安装

SonarQube有一个强大的插件机制。以安装汉化插件为例——

  • 按照图示进行操作:

    图片描述

  • 点击 Install 按钮后,将会弹出重启SonarQube的提示,点击即可重启。重启后,可看到类似如下的界面

    图片描述

  • 类似的方式,也可为SonarQube安装其他插件

25、软件开发工具集成与代码优化技巧 本文探讨了软件开发过程中工具集成与代码优化的关键技巧。首先介绍了如何通过集成Mylyn、Bugzilla、SVN等工具提升开发效率,特别是在任务管理和代码审查方面的优势。随后详细讲解了三种提高代码质量的技术:重构、单元测试和持续集成,并通过具体PHP代码示例展示了重构的实践方法。最后,文章深入分析了如何对大型遗留代码进行系统性重构,包括提取常量、封装逻辑、拆分职责等具体步骤,并对比了重构前后的代码结构与可维护性。通过这些方法,开发者可以提升代码质量、增强项目可维护性,并实现更高效的团队协作。 阅读详情

相关推荐

【Isaac Sim】无头服务器远程桌面连接实战:Turbovnc配置与常见问题解决

本文详细介绍了在无头GPU服务器上通过Turbovnc远程桌面连接并运行NVIDIA Isaac Sim的实战教程。针对无图形界面服务器运行仿真软件的核心痛点,文章提供了从Turbovnc安装配置、SSH隧道建立,到以普通用户身份启动服务、解决GLXBadFBConfig等常见图形错误的完整方案,帮助开发者在云端高效部署机器人仿真环境。

weixin_29254673的博客 773

批量修改JAVA项目版本号 1.0.0

使用Python一键替换POM文件版本号

Maverick_Gao的JAVA进阶之旅 2185

滤波器设计实战:Filter Solutions软件从入门到精通

本文是Filter Solutions滤波器设计软件的实战指南,从入门到精通。通过设计一个低通数字滤波器的完整流程,详细讲解了参数设置、FIR/IIR选择、窗函数及逼近函数应用。文章重点介绍了如何利用这款经典工具高效完成滤波器设计、性能权衡,并将设计成果导出至MATLAB等平台进行实际验证与应用,是信号处理工程师提升效率的实用参考。

weixin_29095049的博客 531

用JSONObject将float转为JSONObject类型

用JSONObject将float转为JSONObject类型 之前有一个需求里有一个问题,就是讲float类型转化为JSONObject类型 当时在网上找了很久,然后查了其他资料,最后结合这边的实际情况将这个问题解决了 //计算偏移率 float deviationRate = this.getDeviationRate(resultString, standardScript); //将float转化为string格式 String deviationRate1 = (String)

zhao_799577的博客 932

win10安装openvpn客户端

进入C:\Program Files\TAP-Windows\bin目录,然后右键用管理员权限执行addtap.bat文件,此文件执行会创建一个网卡。链接:https://pan.baidu.com/s/1KAifTiP7qp1i5ZkfdnfwkA。4.2 进入安装目录的config下新建一个文件夹,将证书文件全部挪进去(不移动.ovpn文件)3.4 将拿到的ssl认证文件放入安装目录的config目录下。然后修改ovpn文件 “./”代表当前路径,第二个链接重复。3.1 一直下一步到这里打上勾。

qq_36200932的博客 3万+

Android15 修改触摸点上限为40

把MAX_POINTER_ID从默认的31修改为39,这里为什么要从31修改为39,是因为上面说明用BitSet32极限就只能支持32个点,因为从最小的ID是0,所以要支持40个点ID也要对应改为39.最近有个需求,需要修改Android系统的触摸点数,Android系统默认的点数是16个点,因为现在是大屏项目,有客户需要修改为40个点,好吧,客户最大。6.最后进行编译,开机开启触摸点检测,可以使用开发者模式中的显示触摸点功能,再叫上3个人,用双掌触摸屏幕,发现左上角有显示40个触摸点,修改成功。

tzj1058756809的博客 573

【转】使用这11个编程技巧,你的程序谁都能读懂!

本文转载自嵌入式资讯精选公众号,特此鸣谢有很多理由都能说明为什么我们应该写出清晰、可读性好的程序。最重要的一点,程序你只写一次,但以后会无数次的阅读。当你第二天回头来看你...

wgp2hpp的博客 243

通过python+openCV实现对图片中箭头方向的判断

摘要: 针对YOLOv8算法在箭头方向识别效果不佳的问题,提出了一种基于OpenCV的解决方案。该方法通过图像预处理、轮廓分析、几何特征提取(凸包、质心、外接矩形)和方向向量计算,准确判断箭头的上下左右方向。代码示例展示了从图像读取到方向识别的完整流程,并提供了优化建议(如调整二值化阈值、处理多轮廓)。该方案在Windows11+Python3.12+OpenCV环境下验证有效,适用于需要简单几何特征分析的箭头方向检测场景。

AnChenliang_1002的博客 702

我见过的极品代码bug

程序员写代码有bug是很难避免的,也是因为程序员的bug存在,才让另一个职业有了更好的发展,那就是软件测试行业。但是程序员写bug,对于自己肯定是一件非常难忘的事情。我记得我在之前做一个T...

嵌入式Linux 8665

【python股票价格预测】基于LSTM(长短期记忆网络)的股票价格预测(附python代码)

【python股票价格预测】基于LSTM(长短期记忆网络)的股票价格预测(附python代码)

k8291121的博客 1012

5. SAP UI5 视图控制器(Controller)初探

本教程的前一个步骤也就是第四个步骤,我们了解了 SAP UI5 XML 视图的使用方法。在该步骤里,我们在 XML 视图里声明了一个 Text 控件实例,该控件位于 sap.m 这个命名空间内。 本步骤会继续接触 SAP UI5 MVC 框架中三大基石的另一块:C - Controller,即控制器。 先看看本步骤完成之后,我们得到的 SAP UI5 应用能实现一个什么样的效果。 访问如下 url: http://localhost:8080/webapp/index.html 能看到一个 Say Hell

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4598

慕课15、既有代码优化与改善

既有代码优化与改善

wufaqidong1的博客 196

【硬件工程师面经整理18_Smith圆图】

若文中任何内容侵犯了您的合法权益,请相关权益人及时与我联系,我将立即进行核实并采取适当措施,包括但不限于删除相关内容或更新文章以消除影响。**在Smith圆图上,源阻抗表示为圆心,而负载阻抗表示为圆图上的一个点。具体来说,通过将负载阻抗在Smith圆图上移动到特定位置,使其与传输线特性阻抗形成纯电阻或纯电抗的组合,从而实现匹配。例如,反射系数表示为Smith圆图上的一个点,而驻波比则表示为圆图上两个点之间的距离。Smith圆图是用于阻抗匹配和网络分析的工具,它是一种将复阻抗表示为坐标的图形。

LeeYLong的博客 652

《改善java代码》第五章:数组与集合代码优化

码云地址:https://gitee.com/yaohuiqin/codeimprove/tree/master/src/per/yhq/objectimprove/listorarrayprove 性能方面优先考虑数组:对基本类型进行求和运算时,数组的效率是集合的10倍。 对数组扩容方法: public class expandCapacity { public stat...

weixin_30951231的博客 122

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

重构-改善既有代码的设计

《重构-改善既有代码的设计》读书笔记的思维导图如下:

Mark Down Here 687

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

《改善java代码》第二章:java有关基本类型的代码优化

判断变量为偶数还是奇数,要用偶数判断,而不是奇数判断,如:if(inputNum % 2 == 1) 判断是否为奇数,则如果inputNum为-1是,通过(inputNum % 2 == 1) 则被判为偶数,原因是java求余的方法为:divident - divident / divisor * divisor; 如果inputNum为-1时,则返回的结果仍为-1;因此需要改成if(inp...

weixin_30702887的博客 68

《改善java代码》第三章:关于类、对象、方法的java代码优化

实例化顺序:子类实例化时,会首先初始化父类,也就是初始化父类的变量,调用父类的构造函数,然后才会初始化子类的变量,调用子类自己的构造函数,最后生成一个实例对象。 因此要做到构造函数尽量简化,要达到一眼洞穿的境界。 不要在构造函数中初始化其他类,容易造成栈内存溢出。 让工具类不可实例化:将构造函数为private访问权限,除了类本身外,谁都不能产生一个实例。 代码的拷贝: Student...

weixin_30569033的博客 85

《重构:改善既有代码的设计》 重新组织数据  之 3

《重构:改善既有代码的设计》中提到过很多重构方法,关于重新组织数据的方法有8种。本文介绍: 将值对象改为引用对象 change value to reference 名称:将值对象改为引用对象 change value to reference 概要:从一个类衍生出许多彼此相等的实例,希望将它们替换为同一个对象。将这个值对象变成引用对象 动机: 你希望给这个对象加入一些可修改数据,并确保对任...

giantmfc123 224

重构,改善既有代码的设计

最近在读《重构,改善既有代码的设计》这本书,整理了些书中对于一些代码优化的笔记,暂时先更这些吧。 1,重复代码(Duplicated Code): 1,同一个类的两个函数含有相同的表达式 方法:1 提炼函数(Extract Method) 1,无局部变量 2,有局部变量 2, 1> 两个互为兄弟的子类内含有相同的表达...

努力让自己更优秀的博客 1088

重构改善既有代码的设计(github源码)

  refactoring improving the design of existing code(重构改善既有代码的设计) https://github.com/CoderDream/refactoring-improving-the-design-of-existing-code

oTianKuaiLe的博客 5051

Android优化(一)_Java代码优化

性能优化总纲: 大概会花一个月左右的时间出7-8个专题来分享一下在工作和学习中积累下来的android性能优化经验。 希望大家会持续关注。 现在是专题一:java代码优化 但这也仅仅是为大家提供一些思路与较为全面的总结,算不上什么,希望有错误或问题在下面评论。 最后完结以后会将思维导图与优化框架整理出来,请期待。 题记: 如何确保Java应用在A

花落惊雨辰---要做一个影响身边的人 5227

改善代码设计 —— 总结篇(Summary)

系列博客 1. 改善代码设计 —— 优化函数的构成(Composing Methods) 2. 改善代码设计 —— 优化物件之间的特性(Moving Features Between Objects) 3. 改善代码设计 —— 组织好你的数据(Composing Data) 4. 改善代码设计 —— 简化条件表达式(Simplify...

weixin_30595035的博客 165

2021片段代码记录-智能感知

// 前 if(newValue.length === 0){ this.btn_disable = true } else{ this.btn_disable = false } // 后 this.btn_disable = newValue.length === 0 // 前 watch: { startTime (newValue, oldValue) { const diff = (this.endTime - newValue) / 1000 / 60 c

芳草萋萋鹦鹉洲哦 503

新一代智能代码优化利器

新一代智能代码优化利器 在当今快速发展的科技时代,编程已经成为推动创新和进步的核心力量。然而,随着项目规模的扩大和技术复杂性的增加,编写高质量、高效的代码变得越来越具有挑战性。为了应对这一难题,新一代智能代码优化工具应运而生,它们不仅能够简化开发流程,还能显著提升代码质量和开发效率。本文将介绍一款引领智能编程新时代的强大工具,并探讨其应用场景和巨大价值。 最新接入DeepSeek-V3模型,点击下...

inscode_025的博客 749

智能优化算法优化svm代码_为何需要代码优化的10个原因

编者注:本文是我们的代码优化系列的一部分,我们在其中探讨如何优化编码以提高效率,以期成为更好的编码人员。 在编写代码时,我们会不断做出决策,并在最初看起来似乎是等效的解决方案之间进行选择。 后来通常会发现, 某些选择会导致程序效率更高 ,因此自然会出现对最佳编码实践和优化技术的追求,并且我们开始将整个开发过程视为要解决的优化问题 。 尽管优化问题不是开发人员经常处理的唯一问题 ,例如决...

cune1359的博客 551

Unity 代码优化记录

Unity 修复性能问题:https://learn.unity.com/tutorial/fixing-performance-problems-2019-3?考虑判断原来一致不重复赋值考虑使用整形存储代替枚举。

l773575310的博客 935
上一篇: linux下jmap,jstat和jstack使用
下一篇: linux常用端口指令
旺仔哥
博客等级 码龄19年 162粉丝 195原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值