《企业实战分享 · SonarQube10.x 代码质量推广手册》

news2024/12/24 2:25:47

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗

🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数,欢迎多多交流。👍

文章目录

  • 写在前面的话
  • Sonar 概述
    • 背景说明
    • 技术简介
    • 参考资料
  • Sonar 开发手册
    • Sonar 网站操作
    • IDEA 插件操作
    • Maven 命令接入
    • GitLab CI/CD 接入
    • pre-commit 拦截
  • Sonar 修复实践
    • 关于问题类型
    • 关于异常级别
    • 若干修复建议
  • Sonar 管理推行
    • 团队协作
    • 持续改进
    • 总结陈词

写在前面的话

本篇文章以企业实战的角度,介绍一下质量管理工具 Sonar 在企业中的实战推广过程,可以覆盖大部分运用场景。


Sonar 概述

背景说明

随着软件开发的复杂性增加,代码质量的管理变得尤为重要。为提升代码质量,降低代码缺陷率,提高代码可维护性和可读性,同时辅助Code Review的工作开展,现引入SonarQube作为代码质量管理工具。


技术简介

【概述】

SonarQube 作为一款开源的代码质量管理工具,能够帮助团队识别和解决代码中的潜在问题,从而提高软件的可维护性和可靠性。本文旨在为团队提供SonarQube的实施指南,确保每位成员了解其重要性、使用方法及最佳实践,从而提升整体代码质量。

SonarQube 是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码味道。它可以与您现有的工作流程集成,以实现跨项目分支和提取请求的连续代码检查。其目的是对代码库的质量进行360°透视。 为此,它会定期分析项目的所有源代码行。

【与 Code Review 的关系】

Code Review(代码审查)和 SonarQube(或Sonar)在软件开发中都是提升代码质量的重要工具,但它们的侧重点和工作方式有所不同。

Code Review
侧重于: 人工审查代码,发现逻辑错误、设计缺陷、代码风格问题等。
优点:
  可以发现 Sonar 静态分析工具难以发现的问题,例如代码逻辑错误、设计缺陷等。
  可以促进团队成员之间的知识共享和代码规范的统一。
  可以提高代码的可读性和可维护性。
缺点:
  需要人工参与,效率较低,耗费时间。
  容易受到个人主观因素的影响,导致代码审查结果不一致。

Sonar
侧重于: 自动化代码分析,识别代码中的潜在问题,例如代码复杂度、重复代码、安全漏洞等。
优点:
  自动化程度高,效率高,可以快速识别代码中的问题。
  能够提供详细的代码质量分析报告,帮助开发人员了解代码质量状况。
  可以帮助团队建立统一的代码质量标准。
缺点:
  无法识别所有代码问题,例如逻辑错误、设计缺陷等。
  需要配置和维护,有一定的学习成本。

关系
互补: Code Review 和 Sonar 相互补充,共同提升代码质量。Sonar 可以帮助开发人员快速识别代码中的问题,而 Code Review 可以帮助开发人员发现 Sonar 难以发现的问题。
协同: Code Review 可以帮助开发人员更好地理解 Sonar 的分析结果,并针对性地进行代码改进。Sonar 可以帮助开发人员在 Code Review 之前识别代码中的问题,提高 Code Review 的效率。

总结:Code Review 和 SonarQube 在提升代码质量方面各有优势,结合使用可以最大化地提高代码的可维护性和可靠性。团队可以通过SonarQube进行初步的代码质量检查,再通过Code Review进行深入的审查和讨论,从而形成一个有效的代码质量管理流程。最佳实践是将 Code Review 和 Sonar 结合起来使用,以达到最佳的代码质量管理效果。

Tips:由于公司项目后端环境采用JDK21,Sonar 也搭配了较新版本的10.6


参考资料

参考:SonarQube 官方文档

参考:SonarQube GitHub Repository

参考:SonarLint 官网


Sonar 开发手册

Sonar 网站操作

【功能描述】

Sonar 提供的Web界面,开发人员可以进入该网站查看项目漏洞,并根据提示修改。

管理人员可以进入该网站,配置规则、质量门阀、权限等内容。

【基础操作】

Step1、访问 Sonar 网站,如下所示。

Step2、点击具体项目,进入项目仪表盘

Step3、按需查看错误,并进行修正

【其他操作】

没有更多了,很简单的操作,可自行尝试。


IDEA 插件操作

SonarLint 是一个Sonar IDE插件,可以接收和连接 SonrarQube 对代码库扫描的结果从而通知 Developer,本身也可以基于一些规则对代码IDE中的代码进行即时的检测。它的目的是在您键入代码时提供即时反馈。 为此,它着重于要添加或更新的代码。

SonarLint 是一个免费的开源IDE 扩展,可识别并帮助您在编写代码时解决质量和安全问题,像拼写检查器一样,会显示缺陷并提供实时反馈和清晰的修复指导,以便从一开始就提供干净的代码。


【功能描述】

搭配 Sonarqube 网站使用,开发人员在 IDEA 本地编码时,可以很方便的提前发现代码问题,而不需要事后从线上地址进入整改。该方式更加灵活,弥补了目前手工扫描 + 定时扫描机制的不及时性,也减轻了服务端频繁构建的压力。

Tips:适合本地发现错误提示和修改,不会影响线上结果。

【安装配置】

Step1、插件安装,IDEA直接搜索 SonarLint 插件并下载,重启IDEA。

Step2、服务端配置

打开 IDEA 的“设置面板 - SonarLint“,添加公司的远程数据源,按下面图示操作。

1、选择新增配置,输入服务地址输入,如下图所示。

2、下拉框选择 Token 或 Login/Passwor 认证方式,输入下方信息。

3、点击Next,即操作完成。

Step3、具体项目配置

配置完服务器之后,需要针对具体工程进行配置,下面以添加某具体项目为例。

绑定 Sonar 服务端上的具体项目,具体参考下图操作。

Step4、关闭实时扫描

下方配置项(图一),建议取消勾选,不然每次修改保存代码,都会进行Sonarlint的检查(如图二)。

【插件使用 - 手动触发扫描】

选择需要进行检查的类或者目录,右键,找到sonarlint的图标,进行sonarlint检查。

结果展示效果如下,这里的错误级别和线上版本是对应的。

【插件使用 - 提交代码时检查】

在commit代码的时候,勾选Perform Sonarlint analysis,会针对你要提交的代码进行Sonarlint检查。

仅仅会给出提示,可以继续提交。


Maven 命令接入

【功能描述】

IDEA 环境中,可以直接使用Maven命令的方式,手动触发代码扫描,如下图所示。

Tips:适合本地修复完问题后,但又未提交代码之前的动作,扫描结果会修改线上漏洞结果。

【接入步骤】

Step1、添加 Maven 插件

Tips:核心框架已统一集成该插件,这步可忽略。

<plugin>
    <groupId>org.sonarsource.scanner.maven</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>3.10.0.2594</version>
</plugin>

Step2、执行 Maven 命令

mvn sonar:sonar -Psonar -Dmaven.test.skip=true -Dsonar.inclusions=**/*.java -Dsonar.projectKey=xxxxx -Dsonar.host.url=xxxxx -Dsonar.token=squ_c4b705291d74fd1bf9db9b1ea429dab64d9f2b59

Tips:认证信息也可以通过在 pom.xml 或 settings.xml 配置的方式,如下所示,这些都是灵活的。

<!-- SonarQube服务器地址-->
<sonar.host.url>xxxx</sonar.host.url>
<!-- 访问令牌或⽤户名密码 -->
<sonar.token>sqa_21f5d7a5d8a2d155b9d102676281364ee660fcb6</sonar.token>
<!--        <sonar.login>admin</sonar.login>-->
<!--        <sonar.password>sonar</sonar.password>-->

Step3、查看扫描结果,直接登录Sonar网站,查看具体项目的错误即可。


GitLab CI/CD 接入

【功能描述】

将 SonarQube 集成到持续集成/持续部署(CI/CD)流程中,确保每次代码提交或合并请求时都进行代码质量检查。

Tips:适合漏洞已修复完成,对代码相对自信,可以提交合并到主分支的场景,会自动触发 Sonar 扫描。

【操作步骤】

现以demo为例说明,该项目使用的.gitlab-ci.yml为项目根目录的,修改该文件,可以实现提交代码到主分支,自动触发 Sonar 扫描的效果。

Tips:下方仅为示例配置,可按实际需要调整,仅显示代码分析部分脚本

stages:
  - Code Analysis

.tag_def: &tag_def
  tags:
    - sky-lb-docker

Code Analysis:
  <<: *tag_def
  stage: Code Analysis
  rules:
    - if: '$CI_PIPELINE_SOURCE == "sonar"'
    - if: '$CI_COMMIT_BRANCH == "master"'
  script:
    - echo SONAR_HOST_URL=$ZT_SONAR_HOST_URL,  SONAR_LOGIN_TOKEN=$ZT_SONAR_LOGIN_TOKEN
    - mvn clean verify sonar:sonar -Psonar -Dmaven.test.skip=true -Dsonar.inclusions=**/*.java -Dsonar.projectKey=$CI_PROJECT_NAME -Dsonar.host.url=$ZT_SONAR_HOST_URL -Dsonar.login=$ZT_SONAR_LOGIN_TOKEN  -s settings_zoe.xml

注意, Z T S O N A R H O S T U R L 和 ZT_SONAR_HOST_URL和 ZTSONARHOSTURLZT_SONAR_LOGIN_TOKEN是变量方式配置,也可以直接写死,如下。

【效果展示】

可以在该项目的 Gitlab 界面,查看CI/CD的进展,如下所示。

【关于gitlab-ci 配置位置】

目前测试阶段,.gitlab-ci.yml文件采用项目本地的,后续可以调整为通过公用配置文件,统一管控,包括变量信息的维护。


pre-commit 拦截

【功能描述】

使用 pre-commit 钩子来阻止代码提交,直到 SonarQube 检测通过,是一种有效的代码质量管理策略。

Tips:适合想本地提交代码时,先根据 Sonar 扫描检测的场景,前期规则不完善时,不推荐。

【什么是 Pre-commit 钩子】

Pre-commit 钩子是 Git 提供的一种机制,允许在执行 git commit 命令之前运行自定义脚本。通过这个钩子,可以在代码提交之前执行一些检查,比如代码风格、测试覆盖率、静态分析等。

  • 确保代码质量:通过在提交前检查代码质量,确保只有符合标准的代码才能被提交。
  • 减少后期修复成本:在开发过程中及时发现问题,避免在后期发现并修复,降低维护成本。

【效果示例】

【效果示例】

【特别注意】

注意,这方案还存在问题:

1、每次提交执行还得先触发sonar动作,然后再查结果,提交效率降低,而且还有时效问题;

2、规则库目前不明确,制度也不明确,还是作为一个辅助功能;

Tips:还可以借助 SonarQube Scanner 的 exitCode 属性,搭配 pre-commit 或 gitlab-ci 完成校验。


Sonar 修复实践

关于问题类型

这些问题分类,可以帮助开发者识别和修复不同类型的问题,从而提高代码质量和安全性。

1、漏洞(Vulnerability)

指代码中存在的安全问题,可能导致安全漏洞或被攻击者利用。

指代码中存在的安全缺陷,可能被恶意攻击者利用,导致系统安全风险。例如,SQL 注入漏洞、跨站脚本攻击漏洞等。

建议优先修复所有漏洞,以确保应用程序的安全性。

2、BUG

指代码中的缺陷或错误,可能导致程序在运行时出现意外行为或崩溃。

指代码中的错误,会导致程序运行错误或异常。例如,逻辑错误、语法错误、数据类型错误等。

建议尽快修复,尤其是那些影响用户体验或功能的 bug。

3、异味(Code Smell)

指代码中的潜在问题,虽然不一定会导致错误或漏洞,但可能影响代码的可读性、可维护性或性能。

指代码中存在的设计缺陷或不良编码习惯,虽然不会导致程序错误,但会降低代码的可读性、可维护性和可扩展性。例如,重复代码、过长函数、过度复杂的设计等。

虽然不一定需要立即修复,但建议定期审查和修复异味,以提高代码质量。


关于异常级别

这些异常级别,用于表示代码质量问题的严重性,帮助开发者优先处理最重要的问题。

在 SonarQube 10.x 版本中,确实对异常级别进行了简化,分为高(High)、中(Medium)和低(Low)三个级别。这种变化旨在简化用户体验,使得问题的优先级更加明确。

【9.x 版本的级别】

两者对照关系】


若干修复建议

SonarQube 内置的 Java 规则是基于广泛的最佳实践和行业标准设计的,旨在帮助开发者提高代码质量和安全性。

但是,难免有部分规则,不符合公司场景,需要做灵活调整,这个磨合过程可能需要一定时间。

因此,这个过程不建议做强制修复完毕后,才允许提交,主要当作代码审查的辅助手动。

下方是一些 Sonar 的最佳实践,来源 Gpt:

在企业开发中,SonarQube(通常简称为 Sonar)是一个非常有用的工具,用于持续集成和代码质量管理。
以下是一些最佳实践,可以帮助您在企业开发中有效地使用 Sonar。

1. 集成到 CI/CD 流程中
将 SonarQube 集成到持续集成/持续部署(CI/CD)流程中,确保每次代码提交或合并请求时都进行代码质量检查。
使用 Jenkins、GitLab CI、GitHub Actions 等工具自动化 SonarQube 扫描。
2. 定义质量门
设置质量门(Quality Gates),以确保代码在合并之前满足特定的质量标准(如代码覆盖率、漏洞、代码气味等)。
质量门可以帮助团队在代码合并之前识别潜在问题。
3. 定期审查和修复问题
定期审查 SonarQube 报告,关注高风险问题和技术债务。
设定时间周期(如每 sprint 或每月)来修复 SonarQube 报告中的问题。
4. 使用自定义规则
根据团队的需求和项目的特性,创建和使用自定义规则,以确保代码符合企业的编码标准。
定期更新和审查这些规则,以适应项目的变化。
5. 培训团队成员
对团队成员进行 SonarQube 的培训,确保他们理解如何使用工具以及如何解读报告。
鼓励团队成员在开发过程中主动关注代码质量。
6. 监控技术债务
使用 SonarQube 的技术债务指标来监控和管理项目的技术债务。
制定计划逐步减少技术债务,确保项目的可维护性。
7. 关注代码覆盖率
设定代码覆盖率的目标,并确保在 SonarQube 中进行监控。
鼓励团队编写单元测试和集成测试,以提高代码覆盖率。
8. 使用分支分析
利用 SonarQube 的分支分析功能,确保在开发新特性或修复 bug 时,代码质量不会下降。
在合并请求中查看分支的质量报告,以便在合并之前解决问题。
9. 定期更新 SonarQube
定期更新 SonarQube 及其插件,以利用新功能和改进。
关注 SonarQube 的发布说明,了解新版本中的重要变化。
10. 生成报告和可视化
利用 SonarQube 提供的报告和可视化功能,向管理层和利益相关者展示代码质量的变化和改进。
使用这些报告来支持决策和资源分配。
11. 设置警报和通知
配置 SonarQube 的警报和通知功能,以便在代码质量下降时及时通知相关人员。
通过邮件或其他通知方式,确保团队成员能够及时响应问题。
12. 鼓励文化变革
在团队中建立代码质量的文化,鼓励开发人员在编码时关注质量,而不仅仅是在提交代码时。
通过代码审查和团队讨论,促进对代码质量的重视。
通过实施这些最佳实践,您可以在企业开发中有效地利用 SonarQube,提高代码质量,减少技术债务,从而提升团队的整体开发效率和软件质量。

Sonar 管理推行


团队协作

团队角色划分:

  • 代码质量负责人:负责制定代码质量管理策略,并监督执行。
  • 代码扫描管理员:负责管理SonarQube服务器,并配置扫描规则(可以是各项目的owner)。
  • 开发人员:负责编写代码,并修复代码中的问题。
  • 测试人员:负责测试代码,并验证代码质量。

沟通机制:

  • 定期召开代码质量管理会议,讨论代码质量问题,并制定改进措施。
  • 建立代码质量管理群组,方便团队成员之间沟通交流。

培训计划:

  • 为所有研发人员提供SonarQube使用培训,包括基本操作、扫描规则、问题修复等。
  • 定期组织代码质量管理知识分享会,提升团队成员的代码质量意识。

持续改进

数据分析与改进:

  • 利用SonarQube的数据分析代码质量问题,例如哪些代码模块存在较多问题,哪些代码规范需要改进等。
  • 根据数据分析结果,制定改进措施,例如优化代码结构、加强代码规范、提高测试覆盖率等。

规则定制与扩展:

  • 根据项目需求,定制SonarQube规则,例如添加自定义代码规范、修改漏洞检测规则等。
  • 扩展SonarQube功能,例如集成其他工具、开发自定义插件等。

持续优化:

  1. 持续优化SonarQube的使用流程,例如简化扫描流程、提高扫描效率等。
  2. 跟踪代码质量指标的变化,并及时调整代码质量管理策略。
  3. 反馈机制,定期收集团队对Sonar使用的反馈,了解其在实际工作中的效果和不足。
  4. 定期评审,每季度进行一次Sonar实施效果的评审会议,讨论改进措施和下一步计划。

总结陈词

💗 本篇文章介绍了质量检测工具 Sonar 在企业中的实战接入,属于 DevOps 的一部分,希望可以帮助到大家。

💗 后续会逐步分享企业实际开发中的实战经验,有需要交流的可以联系博主。

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

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

相关文章

【AI算法岗面试八股面经【超全整理】——CV】

AI算法岗面试八股面经【超全整理】 概率论【AI算法岗面试八股面经【超全整理】——概率论】信息论【AI算法岗面试八股面经【超全整理】——信息论】机器学习【AI算法岗面试八股面经【超全整理】——机器学习】深度学习【AI算法岗面试八股面经【超全整理】——深度学习】NLP【A…

vbox创建虚拟机后用户没有root 权限

XXX is not in the sudoers file. This incident will be reported. 打开终端输入 Su - 输入密码进入root账户 终端visudo修改配置文件 添加如下代码&#xff1a;Syy ALL(ALL:ALL) ALL 编写完成后保存文件 ctrlO 后输入文件名 sudoers.tmp 后按Enter键 退出编辑器&#xf…

018 发布商品

文章目录 获取分类关联的品牌CategoryBrandController.javaCategoryBrandServiceImpl.javaBrandVo.java 获取分类下的所有分组&关联属性AttrGroupController.javaAttrGroupServiceImpl.java 保存七张表sqltb_spu_info.sqltb_spu_info_desc.sqltb_spu_images.sqltb_product_…

UE4 材质学习笔记06(布料着色器/体积冰着色器)

一.布料着色器 要编写一个着色器首先是看一些参考图片&#xff0c;我们需要找出一些布料特有的特征&#xff0c;下面是一个棉织物&#xff0c;可以看到布料边缘的纤维可以捕捉光线使得边缘看起来更亮 下面是缎子和丝绸的图片&#xff0c;与棉织物有几乎相反的效果&#xff0c;…

基于SPI的flash读写操作

1、实验目标 使用页写或连续写操作向Flash芯片写入数据&#xff0c;再使用数据读操作读取之前写入数据&#xff0c;将读取的数据使用串口传回PC机&#xff0c;使用串口助手传回数据并与之前写入数据比较&#xff0c;判断正误。 注意&#xff1a;在向Flash芯片写入数据之前&…

【Redis原理】数据结构(上)

文章目录 动态字符串(SDS)概念SDS特点SDS的优势 IntSet概念IntSet的特点升序统一的编码格式IntSet自动升级 Dict概念Dict特点Dict的伸缩Dict的扩容Dict收缩 Dict的rehash渐进式哈希 总结Dict的结构Dict的伸缩 动态字符串(SDS) 概念 Redis是使用C语言实现的,C语言字符串底层是…

【后端开发】自动化部署、服务管理、问题排查工具(cicd流水线,k8s集群,ELK日志)

【后端开发】自动化部署、服务管理、问题排查工具&#xff08;cicd流水线&#xff0c;k8s集群&#xff0c;ELK日志&#xff09; 文章目录 1、Devops与CICD流水线(TeamCity, Jenkins&#xff0c;GitHub Actions)2、Kubernetes 集群的管理和操作&#xff08;对比Portainer&#x…

【解决】Set-ExecutionPolicy不是内部或外部命令

简介 当使用 VsCode 配置Django项目时&#xff0c;需要配置环境&#xff0c;但是当切换至虚拟环境时&#xff0c;出现了下面的情况。 无法加载文件&#xff1a;D:\django\Scripts\Activate.ps1&#xff0c; 上述问题可通过下面的命令进行解决 解决方法 1 命令行(最好是管理员…

JVM进阶调优系列(1)类加载器原理一文讲透

今天开始写JVM调优系列&#xff0c;并发编程系列也会继续穿插连载&#xff0c;让各位同学闲暇之余有更多阅读选择。 起笔写第一篇&#xff0c;并不好写。首先要构思整个系列的大概框架&#xff0c;一个好的框架一定是深度上由浅入深、逻辑上有严格顺序&#xff0c;读者订阅跟踪…

免费获取的8个SVG图标库,轻松下载与复制!

SVG图标相比传统的JPG、PNG图标具有诸多优势&#xff0c;适用于各种类型的图像&#xff0c;不仅能在不同尺寸下保持清晰度&#xff0c;还具备高度压缩性和轻量特性&#xff0c;支持静态和动态效果。因此&#xff0c;SVG格式在网页设计中往往是优选。尽管如今有很多免费的图标库…

风扇PD协议取电协议芯片-ECP 5702

随着USB-C的普及&#xff0c;市面上消费者PD充电器越来越多&#xff0c;如何让小家电产品也能够支持PD协议快充呢&#xff1f;加入一颗能芯科技PD协议取电协议芯片ECP5702试试看 USB PD协议受电端诱骗协议芯片 1、概述 ECP5702是能芯科技开发的一款专门PD协议的Sink控制器。 …

【论文速看】DL最新进展20241010-扩散模型、目标检测、行人检测

目录 【扩散模型】【目标检测】【行人检测】 【扩散模型】 []Faster Diffusion: Rethinking the Role of UNet Encoder in Diffusion Models 论文链接&#xff1a;https://arxiv.org/pdf/2312.09608 代码链接&#xff1a;https://github.com/hutaiHang/Faster-Diffusion 扩散…

No.10 笔记 | PHP学习指南:PHP数组掌握

本指南为PHP开发者提供了一个全面而简洁的数组学习路径。从数组的基本概念到高级操作技巧&#xff0c;我们深入浅出地解析了PHP数组的方方面面。无论您是初学者还是寻求提升的中级开发者&#xff0c;这份指南都能帮助您更好地理解和运用PHP数组&#xff0c;提高编码效率和代码质…

java批量发送邮件:如何实现高效邮件群发?

java批量发送邮件的教程指南&#xff1f;利用Java实现邮件批发&#xff1f; 随着技术的进步&#xff0c;java批量发送邮件已经成为企业实现高效邮件群发的关键工具。AokSend将探讨如何利用java批量发送邮件技术&#xff0c;实现高效的邮件群发&#xff0c;提升营销效果。 jav…

相当炸裂!495页看漫画学Python(全彩版)通俗易懂!Git首发破万Star

今天给大家分享一份由清华大学出品的《看漫画学Python》&#xff0c;本书作者对每一幅漫画表达的准确性也进行了N遍的推敲和打磨&#xff0c;向广大读者奉献一本精品漫画Python技术书。 总共495页&#xff0c;书中结合了幽默的故事情节和实用的编程知识&#xff0c;使得学习过…

【LeetCode】动态规划—673. 最长递增子序列的个数(附完整Python/C++代码)

动态规划—673. 最长递增子序列的个数 前言题目描述基本思路1. 问题定义2. 理解问题和递推关系3. 解决方法3.1 动态规划方法3.2 优化方法 4. 进一步优化5. 小总结 代码实现PythonPython3代码实现Python 代码解释 CC代码实现C 代码解释1. 初始化&#xff1a;2. 动态规划过程&…

Basic Pentesting靶机打靶记录

一、靶机介绍 下载链接&#xff1a;https://download.vulnhub.com/basicpentesting/basic_pentesting_1.ova 二、信息收集 确认靶机ip&#xff1a;192.168.242.136 arp-scan -l 扫描端口 nmap -p- -A -sS 192.168.242.136 这里开放了21&#xff0c;22&#xff0c;80端口 扫…

美发店数字化转型:SpringBoot管理系统

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

鸿蒙开发:文件推送到沙箱路径

最近一个项目需要基于沙箱路径下的文件进行操作&#xff0c;奈何应用沙箱路径下没有。找来找去方法都是要把文件推送进去。以下是我的一些拙见&#xff0c;请各位看官老爷指点一二。 沙箱路径 沙箱路径&#xff08;Sandbox Path&#xff09;通常是指在计算机安全和软件开发中…

【大学学习-大学之路-回顾-电子计算机相关专业-学习方案-自我学习-大二学生(2)】

【大学学习-大学之路-回顾-电子&计算机相关专业-学习方案-自我学习-大二学生&#xff08;2&#xff09;】 1、前言2、总体说明1-保证课程原因1&#xff1a;原因2&#xff1a; 2-打比赛3-自我适应 - 享受大学生活 3、 保证课程1、英语课程2、专业课程3、其他课程 4、 打比赛…