静态代码检查工具PMD安装、使用

news2024/11/19 5:40:08

介绍

PMD官网:https://pmd.github.io/
文档:https://docs.pmd-code.org/latest/
https://docs.pmd-code.org/latest/pmd_languages_java.html
Java检查规则:https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_java.html

PMD是一款可扩展的跨语言的静态代码检查工具,它可以发现普通的编程错误,例如未使用的变量、空的catch块、不必要的对象创建等。它支持Java、Apex等10几种编程语言。
它还包含CPD检测器(copy-paste-detector),用于检测代码中的重复代码。
在这里插入图片描述

用maven PMD插件扫描生成报告方便,而用eclipse PMD插件可以实时看到结果,修改起来方便。两种是独立的,可以结合起来使用

PMD对Java版本的支持

https://docs.pmd-code.org/latest/pmd_languages_java.html
在这里插入图片描述

PMD源码

https://pmd.github.io/
在这里插入图片描述

用maven安装、运行

安装PMD

第一次执行maven的pmd:pmd这个goal,就会将maven的PMD插件、连同PMD的版本都下载到maven本地仓库。例如执行后,下载的是PMD 6.55.0版本:
在这里插入图片描述
在这里插入图片描述
到maven本地仓库中看:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

安装Maven PMD 插件

https://maven.apache.org/plugins/maven-pmd-plugin/

Maven PMD 插件允许在maven工程的源代码上自动运行PMD代码分析,生成一个检查结果的site报告,它也支持单独的Copy/Paste Detector tool (即CPD)。

Maven PMD 插件3.21.0版本需要Java 8。支持在运行期间升级PMD。

第一次执行maven的pmd:pmd,就会将maven的PMD插件、连同PMD的版本都下载下来:
在这里插入图片描述
在这里插入图片描述

可以看到,下载的是maven PMD插件3.21.0版本。

打开maven-pmd-plugin-3.21.0.pom这个文件,看看内容片段:
在这里插入图片描述
在这里插入图片描述
可以看到,其中指定了对PMD 6.55.0的依赖,所以下载插件的时候,顺便就把PMD的版本下载下来了。

Maven PMD 插件版本和PMD版本之间的关系

https://maven.apache.org/plugins/maven-pmd-plugin/examples/upgrading-PMD-at-runtime.html
在这里插入图片描述

Maven PMD 插件使用的Java检查默认规则集

在maven本地仓库中找到Maven PMD 插件的目录:
在这里插入图片描述
打开maven-pmd-plugin-3.21.0.jar这个文件,在其中可以找到/rulesets/java/maven-pmd-plugin-default.xml,这个就是Maven PMD 插件使用的Java检查默认规则集:
在这里插入图片描述

打开这个文件的内容可以看到,里边只包含了很少一部分规则:

<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->
<ruleset name="Default Maven PMD Plugin Ruleset"
    xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">

    <description>
        The default ruleset used by the Maven PMD Plugin, when no other ruleset is specified.
        It contains the rules of the old (pre PMD 6.0.0) rulesets java-basic, java-empty, java-imports,
        java-unnecessary, java-unusedcode.

        This ruleset might be used as a starting point for an own customized ruleset [0].

        [0] https://pmd.github.io/latest/pmd_userdocs_making_rulesets.html
    </description>

    <rule ref="category/java/bestpractices.xml/AvoidUsingHardCodedIP" />
    <rule ref="category/java/bestpractices.xml/CheckResultSet" />
    <rule ref="category/java/bestpractices.xml/PrimitiveWrapperInstantiation" />
    <rule ref="category/java/bestpractices.xml/UnusedFormalParameter" />
    <rule ref="category/java/bestpractices.xml/UnusedLocalVariable" />
    <rule ref="category/java/bestpractices.xml/UnusedPrivateField" />
    <rule ref="category/java/bestpractices.xml/UnusedPrivateMethod" />

    <rule ref="category/java/codestyle.xml/EmptyControlStatement" />
    <rule ref="category/java/codestyle.xml/ExtendsObject" />
    <rule ref="category/java/codestyle.xml/ForLoopShouldBeWhileLoop" />
    <rule ref="category/java/codestyle.xml/TooManyStaticImports" />
    <rule ref="category/java/codestyle.xml/UnnecessaryFullyQualifiedName" />
    <rule ref="category/java/codestyle.xml/UnnecessaryImport" />
    <rule ref="category/java/codestyle.xml/UnnecessaryModifier" />
    <rule ref="category/java/codestyle.xml/UnnecessaryReturn" />
    <rule ref="category/java/codestyle.xml/UnnecessarySemicolon" />
    <rule ref="category/java/codestyle.xml/UselessParentheses" />
    <rule ref="category/java/codestyle.xml/UselessQualifiedThis" />

    <rule ref="category/java/design.xml/CollapsibleIfStatements" />
    <rule ref="category/java/design.xml/SimplifiedTernary" />
    <rule ref="category/java/design.xml/UselessOverridingMethod" />

    <rule ref="category/java/errorprone.xml/AvoidBranchingStatementAsLastInLoop" />
    <rule ref="category/java/errorprone.xml/AvoidDecimalLiteralsInBigDecimalConstructor" />
    <rule ref="category/java/errorprone.xml/AvoidMultipleUnaryOperators" />
    <rule ref="category/java/errorprone.xml/AvoidUsingOctalValues" />
    <rule ref="category/java/errorprone.xml/BrokenNullCheck" />
    <rule ref="category/java/errorprone.xml/CheckSkipResult" />
    <rule ref="category/java/errorprone.xml/ClassCastExceptionWithToArray" />
    <rule ref="category/java/errorprone.xml/DontUseFloatTypeForLoopIndices" />
    <rule ref="category/java/errorprone.xml/EmptyCatchBlock" />
    <rule ref="category/java/errorprone.xml/JumbledIncrementer" />
    <rule ref="category/java/errorprone.xml/MisplacedNullCheck" />
    <rule ref="category/java/errorprone.xml/OverrideBothEqualsAndHashcode" />
    <rule ref="category/java/errorprone.xml/ReturnFromFinallyBlock" />
    <rule ref="category/java/errorprone.xml/UnconditionalIfStatement" />
    <rule ref="category/java/errorprone.xml/UnnecessaryConversionTemporary" />
    <rule ref="category/java/errorprone.xml/UnusedNullCheckInEquals" />
    <rule ref="category/java/errorprone.xml/UselessOperationOnImmutable" />

    <rule ref="category/java/multithreading.xml/AvoidThreadGroup" />
    <rule ref="category/java/multithreading.xml/DontCallThreadRun" />
    <rule ref="category/java/multithreading.xml/DoubleCheckedLocking" />

    <rule ref="category/java/performance.xml/BigIntegerInstantiation" />

</ruleset>

那么,规则集中参考的ref=“category/java/bestpractices.xml/AvoidUsingHardCodedIP” 引用的规则具体来自哪里呢?这个来自PMD版本的压缩包中:
在这里插入图片描述

打开pmd-java-6.55.0.jar这个包,可以看到携带的Java检查规则集文件,分了8个大类:
在这里插入图片描述

8个大类的规则集文件跟PMD官网中Java规则集正好对应:
https://docs.pmd-code.org/pmd-doc-7.0.0-rc3/pmd_rules_java.html

在这里插入图片描述

打开categories.properties文件,内容 如下:
在这里插入图片描述

打开bestpractices.xml,看看内容片段:
在这里插入图片描述

Maven PMD 插件的goals

https://maven.apache.org/plugins/maven-pmd-plugin/plugin-info.html
在这里插入图片描述

pmd:pmd

https://maven.apache.org/plugins/maven-pmd-plugin/pmd-mojo.html

这个goal生成PMD site报告,默认也生成xml格式的报告。

例如,在cmd窗口下执行mvn pmd:pmd:
在这里插入图片描述

到target目录下查看内容:
在这里插入图片描述
打开pmd.xml文件,里边存放着xml形式呈现的PMD违反项:
在这里插入图片描述

下面是自动拷贝过来的规则集:
在这里插入图片描述

下面是生成的html形式的报告:
在这里插入图片描述

打开报告看看内容:
在这里插入图片描述

pmd:aggregate-pmd

https://maven.apache.org/plugins/maven-pmd-plugin/aggregate-pmd-mojo.html

当maven过程中包含几个模块的时候,可以用这个goal生成一个PMD集成报告。这个goal生成PMD site报告,默认也生成xml格式的报告。

例如,在cmd窗口下执行mvn pmd:aggregate-pmd(输出太长,只部分截屏):
在这里插入图片描述
在这里插入图片描述

到target目录下查看:
在这里插入图片描述

自动拷贝过来的规则集文件:
在这里插入图片描述
pmd.xml是xml形式的集成报告:
在这里插入图片描述

html形式的集成报告:
在这里插入图片描述
在这里插入图片描述

pmd:cpd

https://maven.apache.org/plugins/maven-pmd-plugin/cpd-mojo.html

用PMD的 Copy/Paste Detector (CPD) 工具生成一个拷贝、粘贴的报告。这个goal生成PMD site报告,默认也生成xml格式的报告。

例如,在cmd下执行mvn pmd:cpd:
在这里插入图片描述

到target目录下看看内容:
在这里插入图片描述
cpd.xml是xml形式的报告:
在这里插入图片描述

html形式的报告:
在这里插入图片描述
在这里插入图片描述

pmd:aggregate-cpd

https://maven.apache.org/plugins/maven-pmd-plugin/aggregate-cpd-mojo

当maven过程中包含几个模块的时候,可以用这个goal调用PMD的 Copy/Paste Detector (CPD) 工具生成一个拷贝、粘贴的集成报告。这个goal生成PMD site报告,默认也生成xml格式的报告。

例如,在cmd下执行mvn pmd:aggregate-cpd:
在这里插入图片描述
在这里插入图片描述

到target目录下查看:
在这里插入图片描述
xml形式的报告:
在这里插入图片描述
html形式的报告:
在这里插入图片描述
在这里插入图片描述

pmd:check

https://maven.apache.org/plugins/maven-pmd-plugin/check-mojo.html

如果在源代码中发现PMD的违反项就停止构建。在调用自身之前,会先自动调用pmd:pmd。这个goal生成PMD site报告,默认也生成xml格式的报告。

例如,在cmd下执行mvn pmd:check:
在这里插入图片描述
在这里插入图片描述

到target目录下查看下内容:
在这里插入图片描述

xml形式的报告:
在这里插入图片描述

html形式的报告:
在这里插入图片描述
在这里插入图片描述

pmd:aggregate-pmd-check

https://maven.apache.org/plugins/maven-pmd-plugin/aggregate-pmd-check-mojo.html

如果一个工程包含几个模块,执行这个goal的时候,在源代码中发现PMD的违反项就停止构建。在调用自身之前,会先自动调用pmd:aggregate-pmd。这个goal生成PMD site报告,默认也生成xml格式的报告。

例如,在cmd下执行mvn pmd:aggregate-pmd-check(结果很长,只有部分截屏):
在这里插入图片描述
在这里插入图片描述

到target目录下看看内容:
在这里插入图片描述

xml形式的报告:
在这里插入图片描述

html形式的报告:
在这里插入图片描述

在这里插入图片描述

pmd:cpd-check

https://maven.apache.org/plugins/maven-pmd-plugin/cpd-check-mojo.html

执行拷贝、粘贴检查,如果有违反项,就停止构建。在执行这个goal之前,会自动先调用pmd:cpd这个goal。生成xml和html形式的报告。

在cmd下执行mvn pmd:cpd-check:
在这里插入图片描述
在这里插入图片描述
到target目录下查看内容:
在这里插入图片描述

xml形式的报告:
在这里插入图片描述

html形式的报告:
在这里插入图片描述
在这里插入图片描述

pmd:aggregate-cpd-check

https://maven.apache.org/plugins/maven-pmd-plugin/aggregate-cpd-check-mojo.html

如果工程有几个模块,执行拷贝、粘贴集成检查,如果有违反项,就停止构建。在执行这个goal之前,会自动先调用pmd:aggregate-cpd这个goal。生成xml和html形式的报告。

在cmd下执行mvn pmd:aggregate-cpd-check(输出很长,只部分截屏):
在这里插入图片描述
在这里插入图片描述

到target目录下查看:
在这里插入图片描述

xml形式的报告:
在这里插入图片描述

html形式的报告:
在这里插入图片描述
在这里插入图片描述

maven PMD插件引用定制的规则集文件

例如,定制的规则集文件的路径:D:\temp\eclipse-workspace\java_work\config\pmd\java\pmd-java-rules.xml

maven工程的pom文件增加如下配置:

  <build>
	<pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-pmd-plugin</artifactId>
          <version>3.21.0</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-pmd-plugin</artifactId>
          <configuration>
            <rulesets>
              <ruleset>D:/temp/eclipse-workspace/java_work/config/pmd/java/pmd-java-rules.xml</ruleset>
            </rulesets>
          </configuration>
        </plugin>
     </plugins>
  </build>
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <configuration>
          <rulesets>
            <ruleset>D:/temp/eclipse-workspace/java_work/config/pmd/java/pmd-java-rules.xml</ruleset>
          </rulesets>
        </configuration>
      </plugin>
    </plugins>
  </reporting>

eclipse PMD插件安装、运行

安装eclipse PMD插件

进入Eclipse Marketplace:
在这里插入图片描述
在搜索框中输入PMD,回车:
在这里插入图片描述

点击后面的install按钮:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

点击Finish按钮:
在这里插入图片描述
在这里插入图片描述

安装一会后,弹出如下窗口:
在这里插入图片描述

点击Select All按钮:
在这里插入图片描述

点击Trust Selected按钮:
在这里插入图片描述

安装完成后,弹出如下窗口:
在这里插入图片描述

点击Restart Now按钮,重启eclipse。eclipse重启后,点击Window->Preferences菜单:
在这里插入图片描述
在这里插入图片描述

点击左侧导航栏的PMD,出现如下界面,说明已经安装成功:
在这里插入图片描述

右侧窗口中,可以看到PMD违反项每个基本的名字、符号:
在这里插入图片描述

右边窗口下边可以看到eclipse PMD插件的版本、PMD的版本:
在这里插入图片描述

配置eclipse PMD插件的信息

在这里插入图片描述
在这里插入图片描述

CPD(拷贝、粘贴检测器)配置

点击Launch CPD按钮:
在这里插入图片描述
在这里插入图片描述

有多个选项,例如可以选择源文件的根目录、语言是Java或者其它的语言:
在这里插入图片描述

Rule Configuraton配置

在这里插入图片描述

  • 在右侧最上面勾选Use global rule management以后,下面的规则集就可以选上、或者不选。这个设置会覆盖工程特有的选择:
    在这里插入图片描述

  • 在Rules grouped by选择Rule set,可以按照类来分组,共8个大类:
    在这里插入图片描述

  • 点击右面的Import按钮,可以导入外部规则集,跟现在的合并:

在这里插入图片描述
在这里插入图片描述

  • 点击右边的Export按钮,可以将现在的规则集导出到一个文件中:

在这里插入图片描述
在这里插入图片描述

  • 如果规则有属性,在Properties栏会有显示,在下面的Properties这个Tab页,可以设置属性:

在这里插入图片描述

在工程上执行PMD检查

鼠标右键点击工程,选择PMD->Check Code:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以展开:
在这里插入图片描述

在下面点击某个违反项,可以在代码中高亮显示:
在这里插入图片描述

定制PMD规则集文件

https://docs.pmd-code.org/pmd-doc-6.55.0/pmd_userdocs_making_rulesets.html
https://docs.pmd-code.org/pmd-doc-6.55.0/pmd_userdocs_configuring_rules.html
https://docs.pmd-code.org/pmd-doc-6.55.0/pmd_userdocs_best_practices.html

可以在maven PMD插件默认规则集的基础上定制。

建议每条采用引用单个规则的方式,例如:
在这里插入图片描述
前面章节说过,category/java/errorprone.xml/EmptyCatchBlock这样的源在PMD发布包中。
引用单个规则的好处是自己可以完全控制,因为每个规则有很多属性可以利用。

当然,每条也可以采用大块引用的方式(引用了xml文件中的所有规则,但不推荐这种方式),例如:
在这里插入图片描述
这种添加方式是简单、快捷,但自己不能完全控制,PMD以后的版本可能增加、或者减少规则,默认都会被引用进来,而自己可能还不知情。

可以把定制的规则集文件放到某个目录下面,被引用。例如:
D:/temp/eclipse-workspace/java_work/config/pmd/java/pmd-java-rules.xml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/955940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

掌握这个工具,轻松管理所有物流信息

在电子商务高度发达的今天&#xff0c;物流快递行业在全球范围内发挥着至关重要的作用。然而&#xff0c;在如此复杂的物流环境中&#xff0c;快递退回件的管理和查询成为了一个难题。为了解决这个问题&#xff0c;我们有一个神奇的工具——快递批量查询高手。 快递批量查询高…

OpenGL-入门-BMP像素图glReadPixels(2)保存显示的界面

用glReadPixels保存显示的界面 #include <GL/glut.h> #include <iostream> #include <fstream> #include <vector>// Save pixel data as BMP image void saveBMP(const std::string& filename, int width, int height, const std::vector<GLu…

OA项目之左侧菜单动态选项卡

目录 1.左侧导航 参考地址&#xff1a;http://layui.org.cn/doc/element/nav.html 2.导入数据表及无限级分类 1) 数据导入&#xff08;此步骤在第一次文章已完成&#xff09; 2) 无限级分类&#xff1a;父亲找儿子的过程&#xff0c;将对应的儿子放在父亲下面&#xff0c;形…

无涯教程-Flutter - 简介

Flutter是一个由谷歌开发的开源移动应用软件开发工具包&#xff0c;用于为Android、iOS、 Windows、Mac、Linux、Google Fuchsia开发应用。 通常&#xff0c;创建移动应用程序是一个非常复杂和具有挑战性的任务。有许多框架可用&#xff0c;它提供了开发移动应用程序的出色函数…

yolov5的pytorch配置

1. conda create -n rdd38 python3.82、pip install torch1.8.0 torchvision0.9.0 torchaudio0.8.0 -f https://download.pytorch.org/whl/cu113/torch_stable.html -i https://pypi.tuna.tsinghua.edu.cn/simple 3、conda install cudatoolkit10.2

Flutter的未来与趋势,23年还学吗?

随着移动应用市场的不断扩大&#xff0c;跨平台开发框架的需求也越来越大。Flutter框架可以帮助开发者在不同平台上快速开发高质量的移动应用程序&#xff0c;这种趋势将进一步推动Flutter的发展和普及。 作为一名前端开发工程师&#xff0c;学习Flutter框架是非常有必要的。因…

NameError: name ‘_mysql‘ is not defined

报错信息 Traceback (most recent call last):File "/Users/xuruilong/Desktop/cmabc_back/.enve/lib/python3.9/site-packages/MySQLdb/__init__.py", line 18, in <module>from . import _mysql ImportError: dlopen(/Users/xuruilong/Desktop/cmabc_back/.…

报文信息转换器

HttpMessageConverter HttpMessageConverter:报文信息转换器&#xff0c;将请求报文转换为Java对象&#xff0c;或将Java对象转换为响应报文。它提供了两个注解和两个类型&#xff1a; RequestBody, ResponseBody, RequestEntity, ResponseEntity(响应用的较多) 准备 创建模块并…

HCIP学习--扩展知识点

端口镜像-SPAN 抓包软件只能抓取经过本地的网卡的流量 也就是抓取流量只能抓取本设备的流量 [r1]observe-port interface GigabitEthernet 0/0/2 定义一个SPAN的会话&#xff0c;然后定义监控接口&#xff08;也就是你要用的接口&#xff0c;你连接这个接口来对其他接口抓包…

IDEA批量处理行尾注释

前言 行尾注释写起来比较方便&#xff0c;所以很多时候我们都会习惯把注释写在行尾。 但这个是不符合编程规范的&#xff0c;写的代码注释主要是给后续接手人进行阅读帮助的。按照正常的阅读方式都是先读注释&#xff0c;然后再看代码&#xff0c;如果先看代码再看注释&#…

创建智能问答机器人:上线智能机器人客服,实时为客户提供解决方案

随着企业扩大规模和业务增长&#xff0c;客户咨询和服务请求增加。传统人工客服难以处理大量咨询&#xff0c;而智能化的AI客服可以同时满足多个客户需求。 智能问答机器人 创建智能问答机器人后&#xff0c;能自动化处理大量客户咨询&#xff0c;显著降低企业运营成本&#xf…

Multimedia-播放器-架构1

目录 引言 概念 播放器 播放器的工作流程 播放器的架构 IO模块 Parser&Demuxer模块 Decoder模块 渲染模块 小结 引言 什么是播放器&#xff1f; 播放器是做什么的&#xff1f;怎么做的&#xff1f; 概念 播放器 可以指软件&#xff0c;也可以指硬件 软件&am…

代码随想录算法训练营之JAVA|第四十一天|139. 单词拆分

今天是第 天刷leetcode&#xff0c;立个flag&#xff0c;打卡60天。 算法挑战链接 139. 单词拆分https://leetcode.cn/problems/word-break/ 第一想法 看完之后完全没有想法。 看完代码随想录之后的想法 这是一个完全背包的问题&#xff0c;使用完全背包的解法。 单词就…

「C++程序设计 (面向对象进阶)」学习笔记・一

0、引言 本专栏的系列文章是在学习 北京邮电大学 崔毅东 老师的《C程序设计 (面向对象进阶)》课程过程中整理的。欢迎前往专栏了解更多相关内容~ &#x1f600; 有关于现代 C 的基本介绍&#xff0c;请前往《现代C基本介绍》&#xff01; &#x1f514; 先决条件 本专栏的系列…

微信小程序发布一个npm包

参考:https://developers.weixin.qq.com/miniprogram/dev/devtools/npm.html 同npm一样流程 npm install weixin_heath_apis

gRPC-Gateway 快速实战

今天来分享一波 gRPC-Gateway &#xff0c; 之前咱们有分享过什么是 gRPC 及其使用方式&#xff0c;可以看看这些关于 gRPC 的历史文章&#xff1a; gRPC介绍 gRPC 客户端调用服务端需要连接池吗&#xff1f; gRPC的拦截器 gRPC的认证 分享一下 gRPC- HTTP网关 I 今天主要是分…

大门设得好,财旺运也旺

大门作为我们家庭里一扇保护家人的屏障&#xff0c;可以说是非常重要的&#xff0c;它不仅能起到安全作用&#xff0c;在风水上也是非常关键的。大门在风水中是财运进气的门道&#xff0c;大门风水的好坏直接影响到房屋的整体风水&#xff0c;好的大门风水可以让主人旺财又旺运…

Jaeger的经典BUG原创

前端&#xff0c;笔者在使用Jaeger进行Trace监控的时候&#xff0c;当数据量增大到一定数量级时&#xff0c;出现了一次CPU暴增导致节点服务器挂了的经典案例&#xff0c;这里对案例进行一个简单的抽象&#xff0c;供大家参考&#xff1a; 首先通过pprof对耗时的函数进行定位&…

华为云CodeArts IDE快速入门和使用详解

华为云CodeArts IDE使用详解 一、用户界面1. 初始界面2. 打开项目界面3. 资源管理器4. 编辑器5. 命令面板6. 扩展应用7. Git管理 二、设置1. 设置编辑器2. settings.json 三、代码编辑1. 快捷操作2. 代码补全 四、RemoteShell1. 添加主机连接 文档参考: 华为云CodeArts IDE文档…