当前位置: 首页 > news >正文

jmeter 接口性能测试 学习笔记

目录

  • 说明
    • 工具准备
    • 工具配置
      • jmeter 界面汉化配置
        • 汉化步骤
        • 汉化结果图
    • 案例1:测试接口
      • 接口准备
      • 线程组
        • 添加线程组
        • 配置线程组值
          • 线程数(Number of Threads)
          • Ramp-Up 时间(Ramp-Up Period)
          • 循环次数(Loop Count)
          • 永远循环(Forever)
          • 延迟(Delay)
      • http请求
        • 添加http请求
        • 配置HTTP请求值
          • 协议 (Protocol)
          • 服务器名称或 IP(Server Name or IP)
          • 端口号(Port)
          • 请求
          • 路径(Path)
      • 察看结果树
        • 添加察看结果树
        • 察看结果树内容
      • 聚合报告
        • 添加聚合报告
        • 聚合报告说明
          • 文件名
          • Label
          • 样本 Samples
          • 平均值 Average
          • 中位数 Median
          • 90%百分位 90% Line
          • 最小值 Min
          • 最大值 Max
          • 异常 Error %
          • 吞吐量 Throughput
          • 传输数据量 KB per Second
          • 建立连接时间 Connect Time
          • 响应时间 Response Time
          • 平均吞吐量 Avg. Throughput
          • 总计 Total
          • 请求计数 Request Counts and Percentages
    • 案例2:导出报告
      • 导出html 报告
    • 案例3: 计算理论的并发用户数
      • 前提
      • 结果分析
        • 关键指标分析
        • 并发用户数估算公式
    • 案例4: 携带cookie请求
      • 说明
      • 接口准备
      • 配置测试计划
      • 线程组
      • http请求
      • 添加结果监听器
        • 添加步骤
        • 添加指定的监听器
      • 执行登录http请求
      • 添加正则表达式提取器
        • 说明
        • 介绍
        • 添加步骤
          • 正则表达式提取器配置说明
      • 添加HTTP Cookie管理器
        • 添加HTTP Cookie管理器步骤
        • 配置HTTP Cookie管理器
        • 添加调试取样器
          • 添加步骤
      • 运行线程组
        • 登录结果
        • list数据查询结果
        • 调试取样器结果

说明

工具准备

  • apache-jmeter-5.4.1
  • jdk8 +

工具配置

jmeter 界面汉化配置

汉化步骤

jmeter 界面默认是英文,配置成中文。

  1. 打开 /bin/jmeter.porperties 文件,
  2. 将 默认的 language=en 改为 language=zh_CN 后,重启jmeter。
汉化结果图

在这里插入图片描述

案例1:测试接口

接口准备

spring mvc 项目创建一个接口,来模拟测试的目标接口。

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Objects;@RestController
@RequestMapping(value = "test")
public class TestController {@GetMapping(value = "test")public Object test() {return new HashMap<String,Object>() {{put("message", "成功");}};}
}

线程组

添加线程组

在这里插入图片描述

配置线程组值

在这里插入图片描述

线程数(Number of Threads)
  • 定义
    这个值指定了要创建的虚拟用户(线程)的数量。每个线程都代表一个独立的用户,因此线程数越多,模拟的并发用户数也就越多。
  • 使用场景
    如果你想模拟 1000 个并发用户,就设置线程数为 1000。
Ramp-Up 时间(Ramp-Up Period)
  • 定义
    Ramp-Up 时间是指所有线程(虚拟用户)启动所需的时间,单位是秒。
    例如,如果设置了 100 个线程,Ramp-Up 时间为 100 秒,那么每秒会启动一个线程,直到所有线程都被启动。Ramp-Up 时间设置得较长可以避免瞬间发起大量请求,从而导致服务器负载过高。
  • 使用场景
    如果你希望所有用户在 100 秒内启动,那么 Ramp-Up 时间应设置为 100 秒。
    通过这种方式,你可以模拟逐步增加负载的场景。
循环次数(Loop Count)
  • 定义
    循环次数指定每个线程将执行的次数。如果设置为 1,则每个线程只执行一次。如果设置为 -1,则表示无限循环,直到测试结束时停止。
  • 使用场景
    如果你希望每个用户执行 10 次请求,可以将 Loop Count 设置为 10;如果希望每个用户一直执行,直到测试结束,则设置为 -1。
永远循环(Forever)
  • 定义
    这是一个复选框,当勾选时,线程将会不停地循环执行测试计划中的请求,直到测试手动停止。
  • 使用场景
    如果你正在进行压力测试,并且希望线程永远执行直到你手动停止,可以勾选此选项。
延迟(Delay)
  • 定义
    该选项可以为每个线程设置一个固定的启动延迟时间。这意味着每个线程启动时,会等待指定的时间,然后再开始执行请求。
  • 使用场景
    这种配置适合于模拟用户之间有间隔的启动情况。

http请求

添加http请求

在这里插入图片描述

配置HTTP请求值
协议 (Protocol)
  • 定义
    指定协议类型,可以选择 http 或 https。
  • 使用场景
    如果你测试的是 HTTPS 服务,选择 https
服务器名称或 IP(Server Name or IP)
  • 定义
    指定请求目标服务器的地址,可以是域名(如 www.example.com)或 IP 地址(如 192.168.1.1)。
  • 使用场景
    如果目标服务器是 www.example.com,就填写 www.example.com。如果是通过 IP 地址访问,则填写 IP。
端口号(Port)
  • 定义
    指定服务器的端口号,默认情况下 HTTP 使用端口 80,HTTPS 使用端口 443。如果服务器使用其他端口,可以在此处指定。
  • 使用场景
    如果你的服务器监听在 8080 端口,则需要设置 8080。
请求
  • 定义
    选择 HTTP 请求方法,常见的方法包括:
    GET:获取资源。
    POST:提交数据。
    PUT:更新数据。
    DELETE:删除资源。
    HEAD:请求资源的头信息。
    OPTIONS:请求可用的方法。
    PATCH:部分更新资源。
  • 使用场景
    根据目标 API 或 Web 页面请求类型选择合适的 HTTP 方法。
路径(Path)
  • 定义
    指定访问的具体路径或资源。例如,/login、/api/getData 等。
  • 使用场景
    请求的具体接口路径,如 https://www.example.com/api/getData 中,/api/getData 为路径。
    在这里插入图片描述

察看结果树

添加察看结果树

在这里插入图片描述

察看结果树内容

在这里插入图片描述

聚合报告

添加聚合报告

在这里插入图片描述

聚合报告说明

在这里插入图片描述

文件名

报告数据输出的文件。必须要先创建此文件,才能指定。报告结果写入此文件。用于导出报告。具体查看本文的导出html报告部分

Label
  • 定义
    测试请求的名称。通常是测试中每个 HTTP 请求的名称。
  • 使用场景
    每个请求(或事务)的标识符,可以通过它来查看特定请求的性能表现。
样本 Samples
  • 定义
    样本数量,表示此请求在整个测试过程中被执行的次数。
  • 使用场景
    查看某个请求执行的次数。例如,HTTP 请求可能执行了 100 次。
平均值 Average
  • 定义
    所有请求响应时间的平均值,单位是毫秒(ms)。
  • 使用场景
    表示请求的平均响应时间。较高的平均响应时间可能表示服务器存在性能瓶颈。
中位数 Median
  • 定义
    响应时间的中位数,单位是毫秒(ms)。
  • 使用场景
    中位数是将所有响应时间按升序排列后处于中间位置的值。中位数可以更好地反映出“典型”响应时间,避免了极端值的影响。
90%百分位 90% Line
  • 定义
    响应时间的第 90 百分位数,表示 90% 的请求响应时间低于该值。
  • 使用场景
    此值可以帮助分析大多数请求的响应时间,特别是对用户体验影响较大的长时间响应请求。
最小值 Min
  • 定义
    响应时间的最小值,单位是毫秒(ms)。
  • 使用场景
    表示最短的响应时间。可以帮助判断在测试过程中是否有异常的快速响应。
最大值 Max
  • 定义
    响应时间的最大值,单位是毫秒(ms)。
  • 使用场景
    表示最长的响应时间。非常高的最大响应时间可能表示系统在某些时刻出现了严重的性能瓶颈。
异常 Error %
  • 定义
    错误率,表示在所有请求中,失败请求所占的百分比。
  • 使用场景
    错误率高通常意味着系统存在故障或性能瓶颈,可能需要检查相关的错误日志来进一步定位问题。
吞吐量 Throughput
  • 定义
    吞吐量,表示每秒请求的数量(requests per second, RPS)。
  • 使用场景
    吞吐量是衡量系统在单位时间内处理请求的能力,较高的吞吐量通常意味着系统能够处理更多的用户请求。
传输数据量 KB per Second
  • 定义
    每秒传输的数据量,单位是千字节(KB/s)。
  • 使用场景
    表示在每秒钟内系统传输的数据量。较高的值通常表示系统处理大数据量的能力较强。
建立连接时间 Connect Time
  • 定义
    建立连接的时间,单位是毫秒(ms)。通常用于 HTTP 请求的连接阶段。
  • 使用场景
    较高的连接时间可能意味着网络延迟或服务器响应慢,特别是在多用户场景下,连接时间的优化尤为重要。
响应时间 Response Time
  • 定义
    响应时间,单位是毫秒(ms)。
  • 使用场景
    响应时间是指从发送请求到收到完整响应的时间,它是评估系统性能最直接的指标之一。通常越低越好。
平均吞吐量 Avg. Throughput
  • 定义
    平均吞吐量,表示所有请求的吞吐量的平均值。
  • 使用场景
    平均吞吐量可以帮助判断系统的处理能力。如果某一时刻吞吐量明显下降,可能存在性能瓶颈。
总计 Total
  • 定义
    总计行,表示所有请求的合计数。
  • 使用场景
    提供该测试计划所有请求的总的统计数据。
请求计数 Request Counts and Percentages
  • 定义
    聚合报告还会显示每个请求成功和失败的计数,以及它们在所有请求中的比例。
  • 使用场景
    可以帮助我们快速评估在负载测试中出现的错误情况和系统的稳定性。

案例2:导出报告

导出html 报告

  1. 在空文件夹中创建一个 report.txt 的文件。
  2. 在聚合报告的文件名中填写该文件的全路径。
    在这里插入图片描述
  3. 执行测试。测试执行完成后, report.txt 文件中会有测试结果数据。在这里插入图片描述
  4. report.txt 文件的后缀名称更换成csv, 即 report.csv
  5. 创建一个空的文件夹,存放生成的html。
  6. 打开导出配置界面
    在这里插入图片描述
  7. 配置导出,点击 Generate report 按钮开始导出。
    Results file: 选择步骤4中的report.csv文件
    user.properties: 选择Jmeter 安装目录 bin 下的user.properties 文件。如下图
    Output directory:选择步骤5中创建的空文件夹
    在这里插入图片描述
  8. 查看导出结果
    导出结束之后,在步骤5的文件夹中会生成报告html。用浏览器打开index.html 即可查看。如下图:
    在这里插入图片描述

案例3: 计算理论的并发用户数

前提

按照案例1 步骤配置完成后,能正常执行完成得到聚合报告。
将报告导出html后,在html报告中可以查看到以下统计报告表。
例如统计报告表如下:
在这里插入图片描述

结果分析

注意:最大并发数需要结合其他信息如测试工具的配置、服务器资源利用率等来确定。以下分析只是基于html导出的统计报告表中的值推断的理论结果。

关键指标分析
  1. Samples (请求数): 100
  2. Error % (错误率): 0.00%
  3. Average (平均响应时间): 198.56 ms
  4. Min (最小响应时间): 98 ms
  5. Max (最大响应时间): 269 ms
  6. Transactions/s (每秒事务数): 362.32
并发用户数估算公式

并发用户数 = 平均响应时间(单位:毫秒) * 每秒事务数 (单位:次/秒)
上例的统计结果表中的理论并发用户估算值为: (198.56 * 1000) * 362.32 = 0.19856 * 362.32 约等于 72

案例4: 携带cookie请求

说明

在进行接口测试的时候需要先进行登录,对于传统的登录,登录成功后,后端使用session存储登录信息并将cookie信息返回给前端,前端请求接口的时候需要携带上cookie进行请求。为此,需要获取到登录成功返回的cookie信息存储在请求头中进行测试。

接口准备

package www.zhang.tomcat.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Objects;@RestController
@RequestMapping(value = "test")
public class TestController {/*** 模拟的登录接口*/@GetMapping(value = "login")public Object login(HttpServletRequest request) {// 登录成功后设计session 设置sessionrequest.getSession().setAttribute("user", "admin");return new HashMap<String,Object>() {{put("message", "成功");}};}/*** 模拟的查询接口*/@GetMapping(value = "list")public Object list(HttpServletRequest request) {// 获取sessionObject user = request.getSession().getAttribute("user");// 没有获取到对应登录信息if(Objects.isNull(user)){return new HashMap<String,Object>() {{put("message", "fail not user");}};}return new HashMap<String,Object>() {{put("message", "成功"+user.toString());}};}
}

配置测试计划

线程组

按照案例1 添加线程组的步骤添加线程组,此处省略

http请求

按照案例1 添加http请求的步骤添加线程组,添加2个http请求。
登录请求login :
在这里插入图片描述
查询请求 list:
在这里插入图片描述

添加结果监听器

添加步骤

在这里插入图片描述

添加指定的监听器

此处主要是为了查看、学习不同监听器的结果而已。按照下图添加以下结果监听器。
在这里插入图片描述

执行登录http请求

按实际填写完成http登录请求相关的配置后,启动1次登录测试,并保证此次登录测试要成功。
在察看结果树监听器中可以看到请求记录。点击请求记录,查看响应内容,即可看到登录成功后返回的cookie的信息。如下图
在这里插入图片描述

添加正则表达式提取器

说明

由于登录成功后会在响应头中返回cookie的信息,此时可以用提取器获取到响应头中的cookie的信息。

介绍

正则表达式提取器用于从服务器返回的响应数据中提取特定的信息。你可以使用它来提取匹配正则表达式的内容,并将提取到的数据保存为 JMeter 变量,供后续的请求使用。

添加步骤

在这里插入图片描述

正则表达式提取器配置说明

在这里插入图片描述

  • 要检查的信息头
    此处要在响应头中获取数据,选择信息头。

  • 引用名称
    自定义变量名称,获取到的值会赋值给这个变量。其他地前方使用此变量格式:${变量名称}

  • 正则表达式
    根据填写的正则表达式规则来匹配到对应的值。
    (.*) 通配符,表示所有。
    例如:
    根据登录成功后返回的响应头可得cookie中携带的sessionId的格式如下:

HTTP/1.1 200 
Set-Cookie: JSESSIONID=DFB85D3D2C35B36792B052E881400A4B; Path=/; HttpOnly
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 20 Dec 2024 09:12:14 GMT
# JSESSIONID=sessionId;
JSESSIONID=(.*); Path=/

从cookie中获取到sessionId 后,只要携带此数据请求接口,后端会自动根据此sessionId 找到登录信息。

  • 模板
    模板用于指定在响应中提取内容的位置。通常,在正则表达式中使用捕获组,模板就是指定使用哪个捕获组的内容.
    例如,此处只需要获取第一个捕获到的值。
    模板格式: $序号$
    例如:匹配第1个 $1$;匹配第2个 $2$

  • 匹配数字
    用于指定你想要提取第几个匹配项:
    0 表示提取所有匹配项。
    1 表示提取第一个匹配项(默认值)。

    -1 表示提取最后一个匹配项。

添加HTTP Cookie管理器

在数据查询接口 list中 添加HTTP Cookie管理器,用于把在登录接口中通过正则表达式提取到的登录sessionid数据获取,放到请求头中。

添加HTTP Cookie管理器步骤

在这里插入图片描述

配置HTTP Cookie管理器

根据响应头中的格式数据进行填写
在这里插入图片描述

添加调试取样器

调试取样器来获取变量值,用于查看正则表达式的变量是否能提取到值。

添加步骤

在这里插入图片描述

运行线程组

运行线程组查看结果

登录结果

在这里插入图片描述

list数据查询结果

请求头
在请求头
响应结果
在这里插入图片描述

调试取样器结果

在这里插入图片描述

相关文章:

jmeter 接口性能测试 学习笔记

目录 说明工具准备工具配置jmeter 界面汉化配置汉化步骤汉化结果图 案例1&#xff1a;测试接口接口准备线程组添加线程组配置线程组值线程数&#xff08;Number of Threads&#xff09;Ramp-Up 时间&#xff08;Ramp-Up Period&#xff09;循环次数&#xff08;Loop Count&…...

SpringBoot3整合Knife4j

文章目录 1. 引入依赖2. yml配置文件3. 常用注解3.1 类级别注解3.2 方法级别注解3.3 参数级别注解3.4 模型类注解 4. 访问界面 1. 引入依赖 <!--swagger--> <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-j…...

Dhatim FastExcel 读写 Excel 文件

Dhatim FastExcel 读写 Excel 文件 一、说明1、主要特点2、应用场景 二、使用方法1、引入依赖2、Sheet 数据3、读取 Excel4、写入 Excel 一、说明 Github 地址&#xff1a;Dhatim FastExcel Dhatim FastExcel是一个高性能、轻量级的Java库&#xff0c;专门用于读取和写入Exce…...

精读 84页华为BLM战略规划方法论

这篇文档主要介绍了华为的BLM战略规划方法论&#xff0c;该方法论旨在帮助企业制定战略规划&#xff0c;并确保战略规划的可执行性和有效性。以下是该文档的核心知识点和重点需要关注的内容&#xff1a; 战略规划的定义&#xff1a;战略规划是企业依据企业外部环境和企业自身的…...

如何评估并持续优化AI呼入机器人的使用效果

如何评估并持续优化AI呼入机器人的使用效果 作者&#xff1a;开源呼叫中心FreeIPCC 随着人工智能技术的快速发展&#xff0c;AI呼入机器人在客户服务、技术支持等多个领域得到了广泛应用。这些智能系统不仅提高了工作效率&#xff0c;降低了运营成本&#xff0c;还显著改善了…...

基于.NetCore 的 AI 识别系统的设计与实现

目录 项目背景与概述 技术架构与选型 后端技术 前端技术 系统功能模块 登录注册 数据大屏 练题系统 AI模块 工具箱 个人中心 项目背景与概述 在当今数字化快速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正逐渐渗透到各个领域&#xff0c;展现出…...

java list 和数组互相转换的一些方法

在Java中&#xff0c;List 和 数组&#xff08;Array&#xff09; 之间的转换是一个常见的操作。由于它们是不同的数据结构&#xff0c;Java提供了一些方法来在它们之间进行转换。我们会从List到数组和数组到List两种情况分别讨论。 1. List 转 数组 假设你有一个 List 类型的…...

【WiFi】WiFi6 5G 802.11ax 最大速率对应表

5GHz 频段 1x1 MIMO 速率 20MHz 信道宽度 MCS 0: 8.6 MbpsMCS 1: 17.2 MbpsMCS 2: 25.8 MbpsMCS 3: 34.4 MbpsMCS 4: 51.6 MbpsMCS 5: 68.8 MbpsMCS 6: 77.4 MbpsMCS 7: 86.0 MbpsMCS 8: 103.2 MbpsMCS 9: 114.7 MbpsMCS 10: 129.0 MbpsMCS 11: 143.4 Mbps 40MHz 信道宽度 …...

智能座舱进阶-应用框架层-Handler分析

首先明确&#xff0c; handler是为了解决单进程内的线程之间的通信问题的。我也需要理解Android系统中进程和线程的概念&#xff0c; APP启动后&#xff0c;会有三四个线程启动起来&#xff0c;其中&#xff0c;有一条mainUITread的线程&#xff0c;专门用来处理UI事件&#xf…...

颜色空间之RGB和HSV互转

参考文档&#xff1a; https://blog.csdn.net/shandianfengfan/article/details/120600453 定点化实现&#xff1a; #define FRAC_BIT 10 // 小数精度 #define MIN3(x,y,z)int min3(int a, int b, int c) {int ret_val a < b ? (a < c ? a : c) : (b < c ? b :…...

程序员之路:编程语言面向过程的特征

以下是面向过程编程语言所具有的一些典型特征&#xff1a; 一、以过程&#xff08;函数、子程序&#xff09;为核心组织代码 强调函数的作用&#xff1a; 在面向过程编程中&#xff0c;函数&#xff08;或子程序等不同语言中的类似概念&#xff09;是代码组织的关键单元。程序…...

matlab的一些时间函数【转】

看到就记下来&#xff0c;感觉挺好玩的。 原文&#xff1a;MATLAB-一些时间函数 - 简书 (jianshu.com) 注明出处了&#xff0c;原文是公开的&#xff0c;应该不算侵权。若有侵权请告知删除谢谢。...

OpenGL —— 2.6.1、绘制一个正方体并贴图渲染颜色(附源码,glfw+glad)

源码效果 C++源码 纹理图片 需下载stb_image.h这个解码图片的库,该库只有一个头文件。 具体代码: vertexShader.glsl #version...

【ETCD】【源码阅读】深入解析 EtcdServer.applyEntries方法

applyEntries方法的主要作用是接收待应用的 Raft 日志条目&#xff0c;并按顺序将其应用到系统中&#xff1b;确保条目的索引连续&#xff0c;避免丢失或重复应用条目。 一、函数完整代码 func (s *EtcdServer) applyEntries(ep *etcdProgress, apply *apply) {if len(apply.…...

【数据分析】数据分析流程优化:从数据采集到可视化的全面指南

目录 引言一、数据采集&#xff1a;高质量数据的起点1.1 数据采集的目标1.2 数据采集的常用方法1.3 数据采集的注意事项 二、数据清洗&#xff1a;确保数据质量2.1 数据清洗的重要性2.2 常见的数据清洗步骤 三、数据分析&#xff1a;从数据中挖掘有价值的洞察3.1 数据分析的目的…...

【华为OD-E卷-字符串重新排序 字符串重新排列 100分(python、java、c++、js、c)】

【华为OD-E卷-字符串重新排序 字符串重新排列 100分&#xff08;python、java、c、js、c&#xff09;】 题目 给定一个字符串s&#xff0c;s包括以空格分隔的若干个单词&#xff0c;请对s进行如下处理后输出&#xff1a; 1、单词内部调整&#xff1a;对每个单词字母重新按字典…...

Mybatis二级缓存

一、二级缓存的概念 MyBatis 的二级缓存是基于命名空间&#xff08;namespace&#xff09;的缓存&#xff0c;它可以被多个 SqlSession 共享。当开启二级缓存后&#xff0c;在一个 SqlSession 中执行的查询结果会被缓存起来&#xff0c;其他 SqlSession 在查询相同的语句&…...

C语言中的宏定义:无参宏与带参宏的详细解析

C语言中的宏定义&#xff1a;无参宏与带参宏的详细解析 在C语言中&#xff0c;宏定义是一种非常强大的预处理功能&#xff0c;通过#define指令可以定义一些常量或者代码片段&#xff0c;用来减少代码重复&#xff0c;提高可读性。本文将详细讲解无参宏与带参宏的使用方法&…...

unity 最小后监听键盘输入

当Untiy最小化后&#xff0c;游戏窗口不会立刻失去焦点&#xff0c;此时依然可以使用Input来获取按键&#xff0c;但是点击其他窗口后&#xff0c;就会失去焦点&#xff0c;此时系统会把按键输入分配到其他窗口里&#xff0c;此时要用windowsAPI获取按键输入&#xff0c;应对两…...

python使用Flask框架创建一个简单的动态日历

0. 运行效果 运行代码&#xff0c;然后在浏览器中访问 http://127.0.0.1:5000/&#xff0c;将看到一个动态日历&#xff0c;能够通过点击按钮切换月份。 1. 安装 Flask 首先&#xff0c;确保你已经安装了Flask。如果没有&#xff0c;可以使用以下命令安装&#xff1a; pip i…...

力扣438-找到字符串中所有字母异位词

力扣438-找到字符串中所有字母异位词 力扣438-找到字符串中所有字母异位词原题地址&#xff1a;https://leetcode.cn/problems/find-all-anagrams-in-a-string/description/ 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找到 s 中所有 p 的 异位词的子串&#x…...

七、网络安全-企业数据脱敏

文章目录 前言一、数据脱敏方法二、企业脱敏方案1. 数据库脱敏方案2. 历史数据脱敏3. 具体实现 三、日志脱敏方案四、输出脱敏 前言 数据脱敏‌ 随着用户对个人隐私数据的重视和法律法规的完善&#xff0c;数据安全显得愈发重要。一方面可以加强权限管理&#xff0c;减少能够接…...

电子应用设计方案-62:智能鞋柜系统方案设计

智能鞋柜系统方案设计 一、引言 随着人们生活水平的提高&#xff0c;对家居用品的智能化需求也日益增加。智能鞋柜作为一种创新的家居产品&#xff0c;能够有效地解决鞋子的收纳、消毒、除臭和保养等问题&#xff0c;为用户提供更加便捷和健康的生活体验。 二、系统概述 1. 系…...

C++ 引用的基本用法

通过使用引用&#xff0c;可以创建该对象的另一个名字&#xff0c;而不会引入额外的内存开销。引用在函数参数传递、返回值以及避免拷贝大型对象时特别有用。 引用的基本用法 创建引用&#xff1a; 引用必须在创建时被初始化&#xff0c;且一旦被绑定到一个对象后&#xff0…...

全面解析 Golang Gin 框架

1. 引言 在现代 Web 开发中&#xff0c;随着需求日益增加&#xff0c;开发者需要选择合适的工具来高效地构建应用程序。对于 Go 语言&#xff08;Golang&#xff09;开发者来说&#xff0c;Gin 是一个备受青睐的 Web 框架。它轻量、性能高、易于使用&#xff0c;并且具备丰富的…...

element plus的table组件,点击table的数据是,会出现一个黑色边框

在使用 Element Plus 的 Table 组件时&#xff0c;如果你点击表格数据后出现了一个黑色边框&#xff0c;这通常是因为浏览器默认的焦点样式&#xff08;outline&#xff09;被触发了。如图&#xff1a; 你可以通过自定义 CSS 来隐藏这个黑色边框&#xff0c;代码如下&#xff1…...

三种国产大语言模型Python免费调用

基础三大模型&#xff0c;需要先去官方注册获得key&#xff1b;后续可以使用下列代码调用 1.腾讯 安装&#xff1a; pip install -i https://mirrors.tencent.com/pypi/simple/ --upgrade tencentcloud-sdk-python 实例&#xff1a; import jsonimport typesfrom tencentcl…...

Ansible playbook 详解与实战操作

一、概述 playbook 与 ad-hoc 相比,是一种完全不同的运用 ansible 的方式&#xff0c;类似与 saltstack 的 state 状态文件。ad-hoc 无法持久使用&#xff0c;playbook 可以持久使用。 playbook 是由一个或多个 play 组成的列表&#xff0c;play 的主要功能在于将事先归并为一…...

linux普通用户使用sudo不需要输密码

1.root用户如果没有密码&#xff0c;先给root用户设置密码 sudo passwd root #设置密码 2.修改visudo配置 su #切换到root用户下 sudo visudo #修改visudo配置文件 用户名 ALL(ALL) NOPASSWD: ALL #下图所示处新增一行配置 用户名需要输入自己当前主机的用户名...

linux-----数据库

Linux下数据库概述 数据库类型&#xff1a; 关系型数据库&#xff08;RDBMS&#xff09;&#xff1a;如MySQL、PostgreSQL、Oracle等。这些数据库以表格的形式存储数据&#xff0c;表格之间通过关系&#xff08;如主键 - 外键关系&#xff09;相互关联。关系型数据库支持复杂的…...

【Linux进程】进程间的通信

目录 1. 进程间通信 1.1 进程间通信的目的 2. 管道 2.1 什么是管道 2.2. 匿名管道 匿名管道的特性 管道的4种情况 联系shell中的管道 2.3. 命名管道 代码级建立命名管道 2.4. 小结 总结 1. 进程间通信 进程间通信&#xff08;Inter-Process Communication&#xff0c;IPC&…...

面试题整理4----lvs,nginx,haproxy区别和使用场景

LVS、Nginx、HAProxy&#xff1a;区别与使用场景 1. LVS&#xff08;Linux Virtual Server&#xff09;1.1 介绍1.2 特点1.3 使用场景 2. Nginx2.1 介绍2.2 特点2.3 使用场景 3. HAProxy3.1 介绍3.2 特点3.3 使用场景 4. 总结对比 在构建高可用、高性能的网络服务时&#xff0c…...

开放词汇目标检测(Open-Vocabulary Object Detection, OVOD)综述

定义 开放词汇目标检测&#xff08;Open-Vocabulary Object Detection, OVOD&#xff09;是一种目标检测任务&#xff0c;旨在检测和识别那些未在训练集中明确标注的物体类别。传统的目标检测模型通常只能识别有限数量的预定义类别&#xff0c;而OVOD模型则具有识别“开放词汇…...

Python读写JSON文件

import jsondef writeJSONFile(self):with open(g_updateFilePath, "w" encodingutf-8) as fiel:json.dump(dictData, fiel, indent4, ensure_asciiFalse)fiel.close()def readJsonToDict(file):with open(file, r, encodingutf-8) as f: # 确保文件以 UTF-8 编码打…...

使用Python开发高级游戏:创建一个3D射击游戏

在这篇文章中,我们将深入介绍如何使用Python开发一个简单的3D射击游戏。我们将使用Pygame库来创建2D游戏界面,并结合PyOpenGL来进行3D渲染。这个项目的目标是帮助你理解如何将2D和3D图形结合起来,创建更复杂的游戏机制,包括玩家控制、敌人AI、碰撞检测和声音效果。 一、开…...

springboot 配置Kafka 关闭自启动连接

这里写自定义目录标题 springboot 配置Kafka 关闭自启动连接方法一&#xff1a;使用 ConditionalOnProperty方法二&#xff1a;手动管理Kafka监听器容器方法三&#xff1a;使用 autoStartupfalse结语 springboot 配置Kafka 关闭自启动连接 在Spring Boot应用程序中&#xff0c…...

Jenkins中添加节点实战

Jenkins是一个开源的自动化服务器,用于持续集成和持续交付(CI/CD)。为了提高构建和测试的效率,我们可以在Jenkins中添加节点(也称为代理或从属节点)。本文将详细介绍如何在Jenkins中添加节点,包括安装Java 11、Git、设置凭证、多种配置Jenkins Agent的方法以及验证。 &#…...

DL作业11 LSTM

习题6-4 推导LSTM网络中参数的梯度&#xff0c; 并分析其避免梯度消失的效果 LSTM&#xff08;长短期记忆网络&#xff09;是一种特殊的循环神经网络&#xff08;RNN&#xff09;&#xff0c;旨在解决普通 RNN 在处理长序列时遇到的梯度消失和梯度爆炸问题。它通过设计多个门…...

用 Python 实现井字棋游戏

一、引言 井字棋&#xff08;Tic-Tac-Toe&#xff09;是一款经典的两人棋类游戏。在这个游戏中&#xff0c;玩家轮流在 3x3 的棋盘上放置自己的标记&#xff0c;通常是 “X” 和 “O”&#xff0c;第一个在棋盘上连成一线&#xff08;横、竖或斜&#xff09;的玩家即为获胜者。…...

构建MacOS应用小白教程(打包 签名 公证 上架)

打包 在package.json中&#xff0c;dependencies会被打进 Electron 应用的包里&#xff0c;而devDependencies则不会&#xff0c;所以必要的依赖需要放到dependencies中。files中定义自己需要被打进 Electron 包里的文件。以下是一个完整的 mac electron-builder的配置文件。 …...

如何高效使用 Facebook Business Manager (商务管理平台)

在数字营销的浪潮中&#xff0c;Facebook Business Manager&#xff08;商务管理平台&#xff09;已成为众多企业管理社交广告活动、品牌资产和团队协作的核心工具。无论你是刚刚进入社交广告领域的小型企业主&#xff0c;还是经验丰富的大型品牌经理&#xff0c;掌握 Facebook…...

每天学习一个思维模型 - 损失规避

定义 损失规避&#xff08;Loss aversion&#xff09;&#xff0c;又称损失厌恶&#xff0c;指人们面对同样数量的利益和损失时&#xff0c;认为损失更加令他们难以忍受。损失带来的负效用为收益正效用的2至2.5倍。损失厌恶反映了人们的风险偏好并不是一致的&#xff0c;当涉及…...

Python知识分享第三十一天-Numpy和Pnadas入门

NumPy Numpy介绍 Numpy是Python中科学计算的基础包,它是一个Python库提供多维数组对象 各种派生对象(如掩码数组和矩阵),以及用于对数组进行快速的各种例程,包括数学 ,逻辑, 形状操作,排序,选择,I/O,离散傅里叶变换,基本线性代数,基本统计运算,随机模拟等等(Numpy的核心是nda…...

mlr3超参数Hyperparameter 自动寻找auto

底层还是根据你本来在R跑单独那一个机器学习的函数&#xff0c;例如randomForest::randomForest()&#xff0c;里面可以填入什么&#xff0c;然后跟你的实际数据取值范围去设个范围。然后用auto_tuner()函数对学习器的超参数自动调参 随机森林randomforest learner_rf <- …...

双臂机器人

目录 一、双臂机器人简介 二、双臂机器人系统的组成 三、双臂机器人面临的主要挑战 3.1 协调与协同控制问题 3.2 力控制与柔顺性问题 3.3 路径规划与轨迹优化问题 3.4 感知与环境交互 3.5 人机协作问题 3.6 能源与效率问题 3.7 稳定性与可靠性问题 四、双臂机器人…...

MATLAB中cvx工具箱的使用

CVX 是 MATLAB 中一个用于解决凸优化问题的建模工具箱。它使得定义、求解和分析凸优化问题变得简单。CVX 允许用户用类似数学表达的方式编写凸优化问题&#xff0c;而不需要过多关注底层的优化算法。CVX 的核心功能是将一个简单的数学问题转化为 MATLAB 可以理解并求解的标准形…...

EGO Swarm翻译

目录 摘要 Ⅰ 介绍 Ⅱ 相关工作 A . 单四旋翼局部规划 B . 拓扑规划 C. 分布式无人机集群 Ⅲ 基于梯度的局部规划隐式拓扑轨迹生成 A.无需ESDF梯度的局部路径规划 B.隐式拓扑轨迹生成 Ⅳ 无人机集群导航 A 机间避碰 B. 定位漂移补偿 C. 从深度图像中去除agent Ⅴ …...

Webpack简单介绍及安装

一、介绍 Webpack 是一个现代 JavaScript 应用程序的静态模块打包器&#xff08;module bundler&#xff09;。它将应用程序中的所有依赖项&#xff08;JavaScript、图片、CSS 等&#xff09;打包成一个或多个 bundle。这样做的主要目的是减少加载时间和提高应用程序的加载性能…...

如何在Anaconda的虚拟环境中下载Python包

一、首先查看conda下的虚拟环境 使用conda info -e查看当前conda下的虚拟环境&#xff1a; conda info -e 二、激活要添加Python包的虚拟环境 其中base是基础环境&#xff0c;这里我们选择conda_env这个虚拟环境 conda activate conda_env 三、使用conda命令安装需要的Pyth…...

React 事件机制和原生 DOM 事件流有什么区别

发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【宝藏入口】。 React 的事件机制与原生 DOM 事件流在设计和实现上有一些显著的区别。了解这些区别有助于我们更好地理解 React 是如何管理事件的…...