PMD规则开发实战:打造自己的代码质量检测工具

2023-11-20

  1. PMD介绍:介绍 PMD。
  2. 安装和配置:如何安装和配置 PMD 插件以在的项目中使用。
  3. IDEA中如何使用PMD插件。
  4. Java项目中如何使用PMD。
  5. PMD规则开发介绍:介绍如何编写和使用自定义 PMD 规则。
  6. SonarQube如何集成PMD:SonarQube如何集成 PMD 以自动化代码质量检查。
  7. 如何降低误报:介绍如何避免 PMD 报告错误,并分析如何正确地使用 PMD 规则。

1. PMD介绍

PMD是一款开源的静态代码分析工具,用于检查Java、JavaScript、PLSQL和其他语言的代码中的潜在问题,如未使用的变量、未使用的方法、无效的if语句等。PMD通过解析代码,并应用各种规则来检查代码中的潜在问题。这些规则可以根据代码质量标准进行配置,并且可以自定义规则集合。PMD提供了多种输出格式,包括控制台输出、HTML、XML和JSON格式,方便用户进行代码分析和结果处理。此外,PMD还提供了Eclipse、IntelliJ IDEA等多种IDE的插件,可以方便地在IDE中进行代码分析和问题修复。通过使用PMD,开发人员可以更快地发现和修复代码中的问题,从而提高代码质量和可维护性。

2. 安装和配置

在Mac环境下,可以通过Homebrew包管理器安装PMD。下面是安装和配置PMD的步骤:

  1. 打开终端应用程序。
  2. 安装Homebrew包管理器。在终端中输入以下命令并按回车键:

/bin/bash -c "$(curl -fsSL raw.githubusercontent.com/Homebrew/in…%22)

  1. 使用Homebrew安装PMD。在终端中输入以下命令并按回车键:

brew install pmd

  1. 验证PMD是否已正确安装。在终端中输入以下命令并按回车键:

pmd -version

如果PMD已正确安装,则终端应该显示PMD的版本号。

  1. 配置PMD。可以通过创建一个PMD配置文件来配置PMD。在终端中输入以下命令并按回车键:

pmd config > ~/pmd.conf

该命令将在用户目录下创建一个名为pmd.conf的PMD配置文件。可以在该文件中指定要使用的规则和其他配置选项。

  1. 运行PMD。可以在终端中使用以下命令来运行PMD:

pmd -d /path/to/your/code -R /path/to/your/ruleset.xml -f text

命令分析:

  • -d选项指定要分析的代码的目录
  • -R选项指定规则集合的路径
  • -f选项指定输出格式(在这种情况下,输出将是文本格式,也可以根据需要更改这些选项。

3. IDEA中如何使用PMD插件

在IDEA中使用PMD插件可以帮助我们在开发过程中自动检测代码质量问题,提高代码质量和可维护性。下面是在IDEA中使用PMD插件并实践的步骤:

  1. 安装PMD插件:在IDEA中,打开Settings -> Plugins,搜索并安装PMD插件。
  2. 配置PMD插件:在IDEA中,打开Settings -> Other Settings -> PMD,配置PMD的相关参数,如PMD的安装路径、规则集、输出格式等。
  3. 运行PMD检测:在IDEA中,右键点击要检测的代码目录或文件,选择Run PMD检测,即可运行PMD检测并查看检测结果。
  4. 分析检测结果:在IDEA中,打开PMD检测结果窗口,可以查看PMD检测结果的详细信息,包括问题类型、问题所在的代码行数和文件名等,方便我们快速定位问题并进行修复。

4. Java项目中如何使用PMD

PMD这么强大,那么在开发项目中如何使用PMD进行代码扫描代码潜在问题呢?咱们就以Spring boot项目为例,看下如何实操。

Spring Boot项目中使用PMD的步骤:

  1. 在Spring Boot项目中添加PMD依赖。可以通过在pom.xml文件中添加以下代码来添加PMD依赖:
 

xml

复制代码

<dependency> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-pmd-plugin</artifactId> <version>3.17.0</version> </dependency>

  1. 配置PMD插件。可以在pom.xml文件中添加以下配置来定制PMD的行为:
 

xml

复制代码

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-pmd-plugin</artifactId> <version>3.17.0</version> <executions> <execution> <goals> <goal>check</goal> </goals> </execution> </executions> <configuration> <rulesets> <ruleset>/path/to/ruleset.xml</ruleset> </rulesets> <sourceEncoding>UTF-8</sourceEncoding> <minimumTokens>30</minimumTokens> <targetJdk>1.8</targetJdk> <failOnViolation>true</failOnViolation> </configuration> </plugin> </plugins> </build>

这里配置了要使用的规则集、源代码编码、最小标记数量、目标JDK版本和违规时是否失败等选项。

  1. 运行PMD分析。可以使用Maven命令来运行PMD分析。例如,在命令行中执行以下命令:

mvn pmd:check

此命令将在项目中执行PMD分析,并生成一个名为“pmd.html”的HTML报告。可以在浏览器中打开该报告以查看分析结果。

  1. 分析结果展示。可以将PMD的分析结果显示在Spring Boot项目的页面上,以便开发人员查看并修复问题。可以将生成的HTML报告添加到Spring Boot项目的静态资源目录中,并使用Spring Boot内置的静态资源处理器来将其显示在页面上。

例如,在Spring Boot的应用类中添加以下代码:

 

typescript

复制代码

@SpringBootApplication public class MyApplication implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/pmd/**").addResourceLocations("classpath:/static/pmd/"); } public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }

此代码将创建一个静态资源处理器,并将生成的HTML报告添加到“/pmd”路径下。然后可以在Spring Boot应用程序的页面中添加一个链接来查看PMD分析结果。例如:

PMD Report

这将在页面中创建一个名为“PMD Report”的链接,单击该链接将打开PMD分析结果的HTML报告。

5. PMD规则开发介绍

PMD是一个非常强大的静态代码分析工具,它能够识别出代码中的各种问题,如潜在的错误、低效的代码、不良的编码习惯等等。然而,尽管PMD已经提供了很多内置的规则,但是在实际的项目中,我们往往会有一些特定的需求,需要自定义一些规则来满足我们的需求

5.1 开发步骤

PMD自定义规则开发的一般步骤:

  1. 了解PMD的API和规则配置格式:在开始开发自定义规则之前,需要了解PMD的API,以及PMD规则配置文件的格式和基本元素。
  2. 定义规则:确定想要编写的规则。应该选择在代码库中发现的最常见的代码问题之一,然后制定相应的规则。
  3. 编写规则代码:使用PMD API编写自定义规则代码。可以使用Java或其他语言编写规则。
  4. 测试规则:编写单元测试,以确保的规则按预期工作,并捕获所有预期和非预期的情况。
  5. 打包规则:将规则打包成JAR文件。这可以通过使用Maven或其他构建工具来完成。
  6. 部署规则:将JAR文件部署到PMD或PMD插件中。
  7. 配置规则:在PMD或PMD插件中配置的规则。这通常涉及指定JAR文件的位置和指定规则的名称。
  8. 运行规则:在的代码库中运行PMD,以应用的规则并查找违规的代码。

5.2 常用API

PMD提供了一系列API,可以用于开发自定义规则和扩展PMD的功能。以下是一些重要的PMD API:

  1. Rule:表示PMD规则的类。规则包括要检查的问题和相应的解决方案。可以通过继承AbstractRule类来创建自定义规则。
  2. RuleContext:表示PMD规则的执行上下文。该类维护当前分析的代码和规则集合,并提供一些实用程序方法,例如报告问题。
  3. Node:表示抽象语法树(AST)中的节点。 AST是代码的结构化表示,用于分析和转换代码。 PMD使用AST表示代码,并将其用于规则检查。
  4. Parser:表示将源代码解析为AST的类。PMD支持许多不同的语言和框架,因此有多种解析器可用。
  5. RuleViolation:表示违反规则的代码问题。当检查到违反规则的代码时,PMD将创建一个RuleViolation实例,并将其添加到RuleContext中。
  6. Renderer:表示将规则违规报告渲染为文本、HTML或其他格式的类。 PMD提供了许多不同的渲染器,可以根据需要选择。
  7. XPathRule:表示使用XPath表达式来查找问题的规则。XPath是一种用于选择XML文档中特定元素的语言。PMD可以将XPath应用于AST,以选择符合特定条件的节点。
  8. RuleChain:表示一组规则,按特定顺序执行。例如,可以将规则按复杂性排序,并将它们作为一个规则链执行。

5.3 自定义规则开发实践

下面是一个简单的DuplicateImports规则的实现(检查代码中是否有重复导入类)。

  1. 创建类

创建一个类,继承AbstractJavaRule类,该类提供了访问Java源代码的方法,如visit方法可以访问Java类或方法。

 

scala

复制代码

public class DuplicateImportsRule extends AbstractJavaRule { @Override public void visit(CompilationUnit node, Object data) { List<ImportDeclaration> imports = node.getImports(); Map<String, ImportDeclaration> importMap = new HashMap<>(); for (ImportDeclaration importDeclaration : imports) { String importName = importDeclaration.getNameAsString(); if (importMap.containsKey(importName)) { addViolationWithMessage(data, importDeclaration, "Duplicate import: " + importName); } else { importMap.put(importName, importDeclaration); } } } }

在visit方法中,我们首先获取编译单元中的所有导入语句,然后遍历这些导入语句,并将其名称存储在一个Map中。如果遇到重复的名称,则将其添加到违规列表中。

  1. 配置规则

创建一个配置文件,定义规则的名称和描述,以及实现该规则的类。

 

xml

复制代码

<rule name="DuplicateImports" language="java" message="Duplicate import: {0}"> <description> Checks for duplicate import statements. </description> <priority>3</priority> <example> <![CDATA[ // Good import java.util.List; import java.util.ArrayList; // Bad import java.util.List; import java.util.List; ]]> </example> <ruleclass> DuplicateImportsRule </ruleclass> </rule>

在这个配置文件中,我们定义了规则名称、描述、优先级、示例以及实现该规则的类。

  1. 添加规则

在PMD配置文件中添加自定义规则。

 

ini

复制代码

<rule ref="rulesets/java/imports.xml"> <exclude name="DuplicateImports"/> <rule ref="rules/custom.xml/DuplicateImportsRule"/> </rule>

在这个配置中,我们从默认规则集中排除了DuplicateImports规则,并添加了我们自定义的DuplicateImportsRule规则。

  1. 运行PMD

运行PMD来检查重复导入语句。

mvn pmd:check

6.SonarQube如何集成PMD

  1. 下载并安装SonarQube

可以在SonarQube官网上找到最新版本的下载链接。下载完成后,可以通过以下命令将其解压缩到/opt目录中:

sudo tar -xzf sonarqube-.tar.gz -C /opt

其中,是SonarQube的版本号。解压缩完成后,可以使用以下命令启动SonarQube服务器:

sudo /opt/sonarqube-/bin/macosx-universal-64/sonar.sh start

  1. 安装PMD插件

打开SonarQube管理页面并导航到“Marketplace”选项卡。搜索“PMD”,然后选择“PMD”插件并单击“Install”按钮。安装完成后,将在“Installed”选项卡中看到“PMD”插件。

  1. 配置PMD规则

在SonarQube管理页面中导航到“Quality Profiles”选项卡并单击“Create”按钮。为配置文件设置名称,并将“PMD”选为静态代码分析工具。选择要使用的规则集并单击“Create”按钮以创建新的配置文件。

  1. 配置Maven

在Maven项目的pom.xml文件中添加以下代码段以配置Maven插件:

 

xml

复制代码

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-pmd-plugin</artifactId> <version>3.17.0</version> <executions> <execution> <phase>check</phase> <goals> <goal>pmd</goal> </goals> </execution> </executions> </plugin> </plugins> </build>

将Maven的PMD插件版本设置为3.17.0,并将它配置为在“check”阶段运行PMD分析。

  1. 运行PMD分析

在命令行中导航到Maven项目的根目录,并运行以下命令来运行PMD分析:

 

ini

复制代码

mvn clean verify sonar:sonar \ -Dsonar.projectKey=my_project_key \ -Dsonar.host.url=[http://localhost:9000](http://localhost:9000/) \ -Dsonar.login=my_token

其中,将“my_project_key”替换为SonarQube中的项目的唯一标识符;将“http://localhost:9000”替换为的SonarQube实例的URL;将“my_token”替换为的SonarQube访问令牌。

运行命令后,Maven将运行PMD分析并将结果上传到SonarQube服务器。可以登录到SonarQube管理页面并导航到的项目以查看PMD分析结果。

7. 如何降低误报

PMD也可能会导致一些误报,这可能会降低开发人员对其分析结果的信任度。下面是一些避免PMD误报的建议:

  1. 使用适当的规则集:PMD提供了多个规则集,每个规则集都有不同的目的。使用适当的规则集可以帮助减少误报的数量。
  2. 自定义规则集:PMD允许用户自定义规则集,并添加或删除规则。通过创建自定义规则集,可以根据项目需要定制规则,从而减少误报的数量。
  3. 配置规则参数:PMD的某些规则可以通过参数进行配置。例如,可以设置最大块大小或最大类长度等参数,以减少误报的数量。
  4. 排除特定文件或目录:如果代码中的某些文件或目录不需要进行PMD分析,可以通过在配置文件中添加exclude元素来排除这些文件或目录。
  5. 使用IDE插件:许多集成开发环境(IDE)都提供了PMD插件,这些插件可以帮助开发人员在编写代码时及时发现潜在的问题。使用IDE插件可以避免在构建过程中出现过多的误报。
  6. 定期检查和修复问题:虽然PMD可以帮助开发人员发现潜在问题,但最终修复问题仍需要人工干预。定期检查并修复问题可以减少误报的数量,并提高代码的质量。

作者:软件质量保障
链接:https://juejin.cn/post/7234893047283597370
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PMD规则开发实战:打造自己的代码质量检测工具 的相关文章

  • 我应该使用什么 IronPython IDE?

    这个问题可能看起来很像Windows 上的 IronPython IDE https stackoverflow com questions 755883 ide for ironpython on windows关于 stackoverf
  • Eclipse 中有重新运行最近启动的程序的快捷方式吗?

    我使用 Eclipse 最常做的事情之一就是重新运行上一个程序 我这样做是为了运行 gt 运行历史记录 gt 最上面的项目 有没有快捷键可以做到这一点 I know of CTRL F11 but this does not work fo
  • 如何在 Eclipse 中使用 PHPdoc

    我们目前正处于一个新项目的开始阶段 希望 这一次 从一开始就尽可能多地发表评论 以帮助未来的发展 我试图找出在 Eclipse 中使用 phpDoc 的最佳实践 但结果非常有限 您能分享一下在 Eclipse 中使用 phpDoc 注释内容
  • 有什么好的可视化 HTML5 编辑器或 IDE? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 看起来 Dreamweaver CS5 将在几年内 实际上是几周 尝试使 HTML5 变得更加流畅 似
  • 在 Windows 上使用 Emacs 编译 C++ 程序

    我已经使用 Emacs 进行基本文本编辑有一段时间了 但从今天开始 我尝试使用它进行 C 编译 在过去的几个小时里 我一直在寻找如何解决这个问题 但我在他们的技术中不断遇到障碍 我认为其中一些与教程过时有关 基本上 我想做的就是能够通过 M
  • 编写自定义重构脚本的最佳 Java 库是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 Eclipse 中运行具有 main() 的单个 Java 文件,而不创建整个 Java 项目?

    这是我所得到的 我有一个TestFile java具有相同的类名 这个类有一个有效的main method 该文件可以通过终端使用 javac 和 java 轻松运行 给出预期的输出 但是 当我将文件拖放到 或打开 到 Eclipse 中并
  • 自动同步 Visual Studio 的类视图

    是否可以让 Visual Studio 的 类视图 窗格 在 视图 gt 类视图 下可用 自动同步到当前符号 基本上只要当前符号发生变化就会执行 View SynchronizeClassView See here https stacko
  • Lighttable,设置字体大小

    我是 Light Table IDEAS 的新手 有谁知道如何设置workspace和 Windows 字体大小 我可以更改编辑器字体大小 但不知道如何设置font size对于其他元素 或者更改所有 IDE 字体的全局字体大小 打开命令窗
  • 哪个 IDE 支持 Node.js 应用程序的 CoffeeScript 调试(源映射、断点和调用堆栈)?

    我对整个 CoffeeScript 场景还很陌生 是否有任何 IDE 支持调试在 Node js 上运行的 CoffeeScript 源代码 我希望能够在 coffee 文件中设置断点并查看调用堆栈并检查变量 WebStorm 似乎还不符合
  • Eclipse 中是否有键盘快捷键可以折叠当前方法/块?

    问题说明了一切 我在 Eclipse v3 4 中打开了折叠功能 并且不必单击页面装订线中的小 我想知道是否有一个键盘快捷键 折叠当前方法 快速浏览一下 Eclipse 中的菜单和其他内容不会显示它的菜单项 所以也许您无法做到这一点 Any
  • 用于 PHP 开发的 Eclipse PDT 与 NetBeans [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 对于 PHP 开发 Eclipse PDT 与 NetBeans 相比如何 我刚刚买了一台装有 Windows 7 的新电脑 我开始设置
  • 更改 Eclipse 启动配置中的默认“要运行的程序”

    我时不时地使用以下命令从 Eclipse 中启动 JUnit 测试 运行方式 gt JUnit 插件测试 默认情况下 Eclipse 假设您正在运行需要工作台的东西 并在启动配置的 Main 部分中进行选择 LaunchConfig gt
  • 在 Codeblocks 中启用编译器输出窗格

    This is probably a really noob question but the fact of the matter is that my Code blocks wouldn t show me errors when i
  • “完美”的 Python 调试器具有哪些功能? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 请告诉我您希望当前的 Python 调试器具有哪些功能 我正在创建一个新的 Python IDE 调试器 并期待着具有挑战性的请求 请原谅我无耻
  • Netbeans 版本控制文件颜色代码?

    我试图找到一个图例来帮助解释 NetBeans 用于描述文件状态的不同颜色 我的一些文件颜色是 Grey Blue Green 还有其他我还没有发现的 如果有帮助 我将使用带有 CVS 的 Netbeans 6 7 这些颜色是什么 绿色意味
  • 如何在 Intellij Idea 12 中重命名/移动项目?

    就像声明的那样here http link sheidaei com mozcw人们可以更改项目的名称 但是 它仅更改项目名称 不会更改文件夹结构 例如 如果您的项目名为sample1并且位于 user1 development IdeaP
  • android studio 和 android SDK 捆绑的 eclipse 版本有什么区别

    我没有 Android 开发经验 我想开始编写应用程序 The 官方开发者工具页面 http developer android com tools index html包含两个不同 IDE 的链接 第一个包含捆绑的 ADT 版本Eclip
  • Selenium IDE-自动化Select2搜索框

    我正在尝试自动化 selenium IDE 中的 select2 搜索框 我打开它并输入了我正在搜索的搜索关键字 但是 即使我有用于显示结果的代码 它也不起作用 问题是我猜字符输入得太快 因此结果不会显示在搜索框中 我确信我在某个地方出错了
  • 如何在 Windows 上的 Eclipse 中设置 Clang 工具链?

    我为一个愚蠢的问题道歉 但我在网上找不到答案 我正在努力为 64 位计算机上的 Windows 7 中的 Eclipse 设置 Clang 编译器 链接器 我对 C 的了解非常过时 并且从未在 Eclipse 中工作过 我想要实现的是在 W

随机推荐

  • Android 中的AIDL 和 binder机制

    一 Binder 1 线程间通信Handler Handler和Binder是Android通信的两大支柱 Handler是线程间通信的基础 一个App的运行一定是多个线程相互协作的过程 特别是Android子线程不能更新UI界面的限制使得
  • 微信使用精准位置 wx.getLocation步骤

    微信小程序 gt 开发设置 gt 接口设置 gt 开通 wx getLocation 申请理由 应当前业务涉及周边服务推荐需要 需获取用户地理位置信息 调试基础库 2 24 4 在app json中添加 requiredPrivateInf
  • VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题...

    VC9编译的程序在没有装过VC9 确切的说是 Net Framework3 5 的机器上运行时 如果提示 由于应用程序配置不正确 应用程序未能启动 重新安装应用程序可能会纠正这个问题 这个错误 那么就说明该程序动态链接了VC9的运行时库 如
  • Java 实现 SCP 携带密码拷贝文件

    package com miracle luna scp import org apache sshd client SshClient import org apache sshd client session ClientSession
  • 线上阿里云短信盗刷问题实录

    背景 营销系统中有定时任务处理将待支付订单变更为已取消 执行时间五分钟一次 业务执行处理异常会发送短信给相关开发人员进行短信提醒 从下午一点二十五开始 开发人员间隔五分钟就会收到业务执行异常的短信提醒 最初因为测试或是正式环境中确实有异常的
  • 国产化系统下操作PDF

    本文围绕使用netcore 跨平台在国产系统 麒麟和统信 操作PDF 首先netcore 需要第三方dll 在Nuget里搜索itextsharp 选择图片中 安装即可 版本写了 itextsharp 是4 16 比较靠后 但是基本功能都有
  • Android反调试方法总结以及源码实现之检测篇(一)

    好久没有更新博客了 主要是忙项目的事 今日总结一下在Android中常遇到的反调试方法 一来帮助需要之人 二来加深自己的理解 反调试在代码保护中扮演着很重要的角色 虽然不能完全阻止攻击者 但是还是能加大攻击者的时间成本 一般与加壳结合使用
  • 手写SSH2服务器连接池

    初衷 在工作中遇到一个要与远程服务器建立连接并进行上传 下载的场景 所以在课余就试着写了一个ssh2服务器连接池的小demo 仅供参考 欢迎指正 目录概要 pom文件引入依赖
  • 内网信息收集(一)

    内网信息收集 收集本机信息 拿到一台服务器权限需要收集的信息 包括操作系统 IP 是否存在杀毒软件 打过的补丁等信息 查询网络配置信息 ipconfig all Linux下使用ifconfig 查询用户列表 net user 查看本机列表
  • 《重构的时机和方法》一本值得程序员都认真读的书

    写在前面 重构的时机和方法 是一本关于软件开发中重构技术的书籍 它以独特的风格和内容优势 为读者提供了全面而易于理解的指导 帮助他们在实际项目中应用重构技术 提高代码质量和开发效率 这本书由两个不同风格的部分组成 旨在满足不同读者群体的需求
  • 预训练模型与微调

    前言 预训练模型已经火了这么久了 但作为菜本菜的我却还在用lstm 在生成任务上与同门学长用的预训练模型相比 效果差的比较明显 所以 我决定走上预训练的不归路 以下分享我的学习过程 了解模型 小说故事生成模型 万事开头难 上视频 视频我喜欢
  • 汕头大学医学院物理与计算机教研室,药剂学教研室 - 汕头大学医学院 Shantou University Medical College...

    凌凯 男 中国医学科学院 北京协和医学院 清华大学医学部 生物医学工程 医学博士 副研究员 从事生物纳米检测新技术的研究与新型纳米肿瘤药物及疗法的研究 以第一作者和通讯作者发表SCI论文8篇 以项目负责人承担国家自然科学基金青年基金项目 广
  • spring过滤器、拦截器

    文章目录 一 二者对比 二 过滤器 过滤器的分类 过滤器的作用 过滤器的实现方式 三 拦截器 拦截器的实现方式 四 二者总结 一 二者对比 实现原理不同 过滤器是基于函数回调 拦截器是基于java的反射机制的 使用范围不同 过滤器依赖与se
  • 基于python图书馆管理系统和读者系统(附完整代码以及打包好的exe文件)

    摘要 本文基于python的图书馆管理系统和读者系统 实现了登录 注册 忘记密码 书籍查询 借阅 归还 修改等功能 通过csv文件将数据存储在本地 注册时采用了邮箱验证码 模拟了现实场景 全部源代码地址见文末 如果有其他奇思妙想或者bug欢
  • 【pytorch目标检测】创新之作:Fast R-CNN算法解读

    背景 2015年 提出了Fast RCNN算法 训练步骤实现端到端 CNN 基于VGG6 Fast R CNN是基于R CNN和SPPnets进行的改进 成果 训练速度比RCNN块9倍 测试速度快乐23倍 准确率68 4 SPPnets网络
  • Python实现PDF合并工具(含源码)

    在工作中 每个月都会要遇到报账的情况 在现如今很多都是使用电子发票 获得的电子发票很多都是PDF格式 偶尔也有图片格式的 而且还是一张发票一个pdf文档 在打印贴票时 就需要一个文档一个文档的打开打印 十分的不便捷 当然也可以使用某某PDF
  • Trello中的Scrum

    Trello的用户数量近期超越了1000万的大关 它正迅速成为各色敏捷团队中流行的工具 它的简洁及在Web 移动端优秀的体验 使它从众多更复杂的解决方案中脱颖而出 赢得了更多的团队 因为Trello完全不在意用户如何使用 所以导致用户在用它
  • Mysql 基础

    判断数据库是否存在 存在就删除 drop database if exists testdb 创建数据库表的操作 create database testdb 使用数据库 use testdb 判断创建的表是否存在 存在就删除 drop t
  • 2021年12月-电子学会青少年等级考试C语言(一级)真题与解析

    2021年12月软件编程 C语言 等级考试 一级 分数 100 题数 5 时间限制 1000 ms 内存限制 65536 kB 1 输出整数部分 题目描述 输入一个双精度浮点数 输出其整数部分 输入 一个双精度浮点数f 0 lt f lt
  • PMD规则开发实战:打造自己的代码质量检测工具

    PMD介绍 介绍 PMD 安装和配置 如何安装和配置 PMD 插件以在的项目中使用 IDEA中如何使用PMD插件 Java项目中如何使用PMD PMD规则开发介绍 介绍如何编写和使用自定义 PMD 规则 SonarQube如何集成PMD S