Jmeter5.X性能测试

Jmeter5.X性能测试


文章目录

  • Jmeter5.X性能测试
  • 一、掌握Http基础协议
    • 1.1 浏览器的B/S架构和C/S架构
    • 1.2 HyperText Transfer Protocol 超文本传输协议
    • 1.3 超文本传输协议Http消息体拆分讲解
    • 1.4 HTTP的九种请求方法和响应码介绍
    • 1.5 Http请求头/响应头
    • 1.6 Http常见请求/响应头content-type内容类型
  • 二、性能测试工具Jmeter使用
    • 2.1 Jmeter5.X基础功能组件+线程组
    • 2.2 Jmeter聚合报告分析和多案例断言
    • 2.3 CSV可变参数实战
    • 2.4 高并发业务下Jmeter集合点应用实战
  • 三、Jmeter二次开发之BeanShell实战
    • 3.1 BeanShell的作用
    • 3.2 BeanShell的使用
    • 3.3 BeanShell响应JSON处理和自定义断言
    • 3.4 Jmeter压测post方式接口和关联接口场景
  • 四、BeanShell使用外部Java文件
  • 五、Jmeter性能测试之html可视化压测报告


一、掌握Http基础协议

1.1 浏览器的B/S架构和C/S架构

  • 什么是CS架构 客户机-服务器,即Client-Server(C/S)结构 但是缺少通用性,系统维护、升级需要重新设计和开发,增加了维护和管理的难度

  • 什么是BS架构 B/S架构即浏览器和服务器架构模式,是WEB兴起后的一种网络架构模式 WEB浏览器是客户端最主要的应用软件 统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用

在这里插入图片描述

  • 什么是URL(统⼀资源定位符,获取服务器资源的一种)

标准格式: 协议://服务器IP:端⼝/路径1/路径N ? key1=value1 & key2=value2
https://editor.csdn.net/md/?articleId=142419810

1.2 HyperText Transfer Protocol 超文本传输协议

什么是Http超文本传输协议

协议是⼀种约定,规定好⼀种信息的格式,如果发送⽅按照这种请求格式发送信息,那么接 收端就要按照这样的格式解析数据,这就是协议

JSON

{
    "name":"xiaoming",
    "age":23
}

xml协议

<user>
    <name> xiaoming </name>
    <age> 12 </age>
</user>

http超文本传输协议

  • 什么是http协议

即超⽂本传送协议(Hypertext Transfer Protocol ),是Web联⽹的基础,也是⼿机PC联⽹常⽤的协议之⼀,HTTP协议是建⽴在TCP协议之上的⼀种应⽤
HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,从建⽴连接到关闭连接的过程称为“⼀次连接”
HTTP请求-HTTP响应

  • 响应码:

1xx:信息
2xx:成功 200 OK,请求正常
3xx:重定向
4xx:客户端错误 404 Not Found 服务器⽆法找到被请求的⻚⾯
5xx:服务器错误 503 Service Unavailable,服务器挂了或者不 可⽤

  • 和https的关系

Hyper Text Transfer Protocol over SecureSocket Layer
主要由两部分组成:HTTP + SSL / TLS
比 HTTP 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性,增加破解成本
缺点:相同网络环境下,HTTPS 协议会使页面的加载时间延长近 50%,增加额外的计算资源消耗,增加 10%到 20%的耗电等;不过利大于弊,所以Https是趋势,相关资源损耗也在持续下降
如果做软件压测:直接压测内网ip,通过压测公网域名,不管是http还是https,都会带来额外的损耗导致结果不准确

1.3 超文本传输协议Http消息体拆分讲解

Http请求消息结构

  • 请求行
    • 请求方法
    • URL地址
    • 协议名
  • 请求头
    • 报文头包含若干个属性 格式为“属性名:属性值”,
    • 服务端据此获取客户端的基本信息
  • 请求体
    • 请求的参数,可以是json对象,也可以是前端表单生成的key=value&key=value的字符串
      在这里插入图片描述

Http响应消息结构

  • 响应行
    • 报文协议及版本、状态码
  • 响应头
    • 报文头包含若干个属性 格式为“属性名:属性值”
  • 响应正文
    • 响应报文体,我们需要的内容,多种形式比如html、json、图片、视频文件等

1.4 HTTP的九种请求方法和响应码介绍

浏览器请求方法

  • http1.0定义了三种:
    • GET: 向服务器获取资源,比如常见的查询请求
    • POST: 向服务器提交数据而发送的请求
    • Head: 和get类似,返回的响应中没有具体的内容,用于获取报头
  • http1.1定义了六种
    • PUT:一般是用于更新请求,比如更新个人信息、商品信息全量更新
    • PATCH:PUT 方法的补充,更新指定资源的部分数据
    • DELETE:用于删除指定的资源
    • OPTIONS: 获取服务器支持的HTTP请求方法,服务器性能、跨域检查等
    • CONNECT: 方法的作用就是把服务器作为跳板,让服务器代替用户去访问其它网页,之后把数据原原本本的返回给用户,网页开发基本不用这个方法,如果是http代理就会使用这个,让服务器代理用户去访问其他网页,类似中介
    • TRACE:回显服务器收到的请求,主要用于测试或诊断

Http响应码

  • 浏览器向服务器请求时,服务端响应的消息头里面有状态码,表示请求结果的状态
  • 分类

    • 1XX: 收到请求,需要请求者继续执行操作,比较少用

    • 2XX: 请求成功,常用的 200

    • 3XX: 重定向,浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取;

      • 好处:网站改版、域名迁移等,多个域名指向同个主站导流
      • 必须记住
        • 301:永久性跳转,比如域名过期,换个域名
        • 302:临时性跳转
    • 4XX: 客户端出错,请求包含语法错误或者无法完成请求

      • 必须记住
        • 400: 请求出错,比如语法协议
        • 403: 没权限访问
        • 404: 找不到这个路径对应的接口或者文件
        • 405: 不允许此方法进行提交,Method not allowed,比如接口一定要POST方式,而你是用了GET
    • 5XX: 服务端出错,服务器在处理请求的过程中发生了错误

      • 必须记住
        • 500: 服务器内部报错了,完成不了这次请求
        • 503: 服务器宕机

1.5 Http请求头/响应头

  • HTTP请求头(Request Headers)
    • 请求头包含在HTTP请求的消息头部分,用于向服务器提供客户端的请求上下文和其他相关信息。请求头的一些常见字段包括:

      • Accept: 表示客户端可以接受的内容类型。例如,Accept: text/html 表示客户端可以接收HTML格式的内容
      • Accept-Language: 表示客户端首选的语言。例如,Accept-Language: en-US 表示客户端首选语言是美国英语
      • Accept-Encoding: 表示客户端支持的编码方式。例如,Accept-Encoding: gzip, deflate 表示客户端支持GZIP和DEFLATE压缩编码
      • Authorization: 包含用于认证的信息。例如,在使用Basic认证时,会包含一个Base64编码的用户名和密码
      • Content-Length: 表示请求体的长度(单位为字节)。例如,Content-Length: 1024 表示请求体长度为1024字节
      • Content-Type: 表示请求体的MIME类型。例如,Content-Type: application/json 表示请求体是JSON格式的数据。
      • Cookie: 包含客户端的cookie信息,用于识别客户端的身份
      • User-Agent: 描述发送请求的应用程序的信息。例如,User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) - AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3 描述了发送请求的浏览器信息
      • If-Modified-Since: 请求资源是否自某个日期以来已被修改
      • Referer: 请求的来源页面的URL
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1

  • HTTP响应头(Response Headers)
    • 响应头包含在HTTP响应的消息头部分,用于向客户端提供服务器的响应上下文和其他相关信息。响应头的一些常见字段包括:

      • Content-Type: 表示响应体的MIME类型。例如,Content-Type: text/html 表示响应体是HTML格式的数据
      • Content-Length: 表示响应体的长度(单位为字节)
      • Content-Encoding: 表示响应体使用的编码方式。例如,Content-Encoding: gzip 表示响应体经过GZIP压缩。
      • Date: 服务器生成响应的日期和时
      • Server: 服务器软件的名称和版本
      • Set-Cookie: 用于设置客户端的cookie
      • Expires: 响应过期的日期和时间
      • Cache-Control: 控制缓存的行为,如Cache-Control: no-cache 表示不允许缓存
      • Last-Modified: 资源最后一次被修改的时间
      • Location: 用于重定向的情况,提供新的URL
      • Content-Disposition: 指示客户端如何处理响应体,如Content-Disposition: attachment; filename=“example.pdf” 表示响应体应当作为附件下载
      • Content-Language: 响应体的语言
      • Vary: 表示响应的内容可能因请求中的某些头字段而变化
HTTP/1.1 200 OK
Date: Fri, 25 Oct 2019 13:00:00 GMT
Server: Apache/2.4.41 (Ubuntu)
Content-Type: text/html; charset=UTF-8
Content-Length: 1778
Connection: close
Set-Cookie: session_id=d41d8cd98f00b204e9800998ecf8427e; Path=/; HttpOnly
Last-Modified: Wed, 23 Oct 2019 11:45:33 GMT
Expires: Thu, 26 Oct 2019 13:00:00 GMT
Cache-Control: max-age=86400

1.6 Http常见请求/响应头content-type内容类型

  • Content-type: 用来指定不同格式的请求响应信息,俗称 MIME媒体类型
  • 常见的取值
    • text/html :HTML格式
    • text/plain :纯文本格式
    • text/xml : XML格式
    • image/gif :gif图片格式
    • image/jpeg :jpg图片格式
    • image/png:png图片格式
    • application/json:JSON数据格式
    • application/pdf :pdf格式
    • application/octet-stream :二进制流数据,一般是文件下载
    • application/x-www-form-urlencoded:form表单默认的提交数据的格式,会编码成key=value格式
    • multipart/form-data: 表单中需要上传文件的文件格式类型

二、性能测试工具Jmeter使用

2.1 Jmeter5.X基础功能组件+线程组

什么是线程组

  • 就是一组线程,并发执行,每个线程可以认为是一个请求

特殊线程组

  • setUP:最先执行,前置工作
  • 线程组:中级执行,常规处理
  • tearDown:最后执行,收尾工作

在这里插入图片描述

Sampler(采样器)
在这里插入图片描述
查看测试结果

查看结果树
位置:
放在http采集器级别,获取兄弟节点数据
放在http采样器下面,获取当前http采样器数据

在这里插入图片描述

Http采样器复用和Http请求头管理

  • 需求
    • 如果有多个接口,每个接口都需要重复配置http协议、ip、端口等相同参数,维护起来麻烦
    • 可以通过配置 http请求默认值 进行默认配置,那对应的线程组则不用重复配置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
Http请求头管理

  • 多数HTTP接口请求需要添加HTTP Header请求头,如何添加?
  • 通过HTTP信息头管理器即可

在这里插入图片描述

2.2 Jmeter聚合报告分析和多案例断言

性能测试的关键点

  • TPS

    • Transactions Per Second 每秒事务数, 可以是一个接口、多个接口、一个业务流程
    • 包括增删改操作
  • QPS

    • Queries Per Second, 每秒查询数, 指一台服务器每秒能够响应的查询次数
    • QPS 只是一个简单查询的统计,不能描述增删改等操作
    • 如果只是查询操作 TPS = QPS
  • RT

    • 响应时间


      在这里插入图片描述

Jmeter实战之压测结果响应断言

  • 什么是断言assert

    • 指期望用户指定的条件满足,它是当用户定义的约束条件不满足时触发异常

    • 简单说:**判断程序结果是否符合预期 **

    • 什么时候应该用断言

      • 多数情况都可以,但是推荐使用较为简单的断言,比如响应断言

      • 复杂断言会消耗压测机器的性能

在这里插入图片描述

  • 测试字段(选择哪些字段进行断言)
    • 响应文本 Text response: 响应服务器返回的文本内容
    • 响应代码 Response Code: 断言Http 响应码是否符合预期,比如 200
    • 响应消息 Response Message : 验证响应消息是否按预期显示
    • 响应标头 Response Headers : 断言查看特定的 HTTP 标头是否存在
    • 文档(文本)Document (text): 基本不用,高负载可能会占用大量内存导致OOM
    • URL样例 URL Sampled : 针对请求的 URL 使用以确保它符合预期
  • 模式匹配的规则
    • 包括 Contains: 响应内容【包含】需要匹配,支持正则表达式。

    • 匹配 Matches: 响应内容要【完全匹配】需要匹配代表响应成功,大小写不敏感,支持正则表达式。

    • 相等 Equals: 响应内容要【完全等于】需要匹配代表响应成功,大小写敏感,内容是字符串

    • 字符串Substring: 响应内容【包含需要匹配】的内容才代表响应成功,大小写敏感,内容是字符串

    • 不相等 Not: 取反操作,不相等

    • OR: 应用 OR 组合中的每个断言,将多个断言模式进行OR连接

高并发业务下Jmeter压测之持续时间断言

  • 什么是持续时间断言Duration to assert

    • 用于判断服务器的响应时间,作用对象是服务器
    • Duration in milliseconds:响应时间设置(单位毫秒),如果响应时间大于设置的响应时间,断言失败,否则成功

在这里插入图片描述

在这里插入图片描述

  • 应用场景

    • 高并发下的,接口响应时间增加,如果超过一定时间则认为是超时
  • 建议

    • 断言类型很多,常规Duration Assertion与Response Assertion基本就足够使用了
    • 常规业务里面会有状态码断言,还有RT响应时间要求,这样的话聚合报告的异常错误率就会更满足业务需求

2.3 CSV可变参数实战

Jmeter性能测试之CSV多个可变参数压测实战

  • 需求

    • 业务开发里面参数一般不是固定方式,而是采用可变参数进行压测
    • 比如压测商品详情,查看id从1~100 的商品详情

解决方案 CSV可变参数

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

2.4 高并发业务下Jmeter集合点应用实战

  • 性能测试

    • 是多用户并发测试,但真正的并发其实是不存在的,用工具模拟并发
    • 前面的测试“线程数”是并发用户数,启动需要时间,不是并发同一时刻访问
    • 常规压测需要模拟全部用户同一时刻访问,比如 秒杀 案例场景
    • 需求:先让全部请求 同时集合在一起,然后再一起访问,实现真正的并发

解决方式 :Jmeter的同步定时器

  • 将多个请求同步并发操作,同步定时器又可称之为“集合点”
  • 将需要做并发的请求集合在一起后再进行请求

在这里插入图片描述
注意事项

  • 设置的值不能大于线程组 数量
  • 最好的情况是 【线程组】 可以被 【用户组】整除
  • 超时时间以毫秒为单位:指定人数 多少毫秒没集合到算超时
  • 超时时间是0则无限等待,如果是大于0,则未达到集合的【用户组】数量,会在超时后执行

三、Jmeter二次开发之BeanShell实战

3.1 BeanShell的作用

什么是BeanShell

  • 用Java写成的 小型、免费的Java源代码解释器
  • 可以执行标准Java语句和表达式,完全符合java语法的java脚本语言(需要会javase语言)
  • 包括一些脚本命令,有自己的一些语法和方法,是一种松散类型的脚本语言(这点和JS类似)
  • 用于一些复杂的个性化需求,使用更灵活,功能更强大
  • 官网地址:http://www.beanshell.org

BeanShell常用分类

  • 采样器BeanShell
  • 前置处理器 BeanShell PreProcessor:提前对参数处理比如加密编码
  • 后置处理器 BeanShell PostProcessor :对返回结果做处理
  • 断言 BeanShell Assert :验证请求接口是否满足要求

在这里插入图片描述

  • BeanShell内置对象,可以直接使用

    SampleResult, ResponseCode, ResponseMessage, IsSuccess, Label, FileName, ctx, vars, props, log
    

在这里插入图片描述

3.2 BeanShell的使用

使用Bean shell内置对象vars对【变量】进行存取操作,作用在当前线程组

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
使用Bean shell内置对象props 对【属性】进行存取操作,作用在跨线程组使用

在这里插入图片描述
使用Bean shell内置对象log

在这里插入图片描述

  • Http采样器和BeanShell组合应用实战

    • 定义Http采样器

    • BeanShell里面定义变量 var

    • 读取var变量

      ${id}、${title}
      

3.3 BeanShell响应JSON处理和自定义断言

步骤

  • 新增BeanShell断言
  • 核心变量

使用JSON工具

  • jar包放入jmeter目录下的 \lib\ext 中
import org.json.*;

String data = prev.getResponseDataAsString();  //获取响应信息
String httCode = prev.getResponseCode(); //获取响应code

log.info("data="+data);

JSONObject jsonobj = new JSONObject(data);  //转json对象
log.info(jsonobj.toString());

int code = jsonobj.getInt("code");
log.info("code="+code);

在这里插入图片描述

3.4 Jmeter压测post方式接口和关联接口场景

背景

假设你正在负责一款在线购物平台的性能测试工作。该平台的核心功能包括用户注册、登录、浏览商品、加入购物车、下单支付等。为了保证平台在高并发访问下的稳定性,需要对关键业务流程中的各个接口进行性能测试
业务流程:
用户注册:新用户通过注册页面提交个人信息
用户登录:已注册用户通过登录页面提交用户名和密码
浏览商品:用户在主页浏览商品列表,并点击进入商品详情页
加入购物车:用户将喜欢的商品添加至购物车
下单支付:用户从购物车结算,填写订单信息并完成支付

接口描述:
注册接口:通过POST请求提交用户的姓名、邮箱、密码等信息
登录接口:通过POST请求提交用户的登录凭证
商品列表接口:通过GET请求获取商品列表
商品详情接口:通过GET请求获取具体商品的信息
加入购物车接口:通过POST请求将商品ID添加至用户的购物车
订单提交接口:通过POST请求提交订单信息,包括商品清单、收货地址等

测试目标:
负载测试:评估系统在一定并发用户数下的响应时间和吞吐量
稳定性测试:检测系统在长时间高负载情况下的表现,确保没有内存泄漏等问题
容量测试:确定系统可以处理的最大并发用户数
压力测试:超过最大容量限制,观察系统崩溃点及其恢复能力

关联接口需求

在这个场景中,有些接口之间存在依赖关系

例如:
登录接口的响应可能包含了后续请求所需的token或session ID,这些信息需要在后续的请求中使用

因此
需要在JMeter中设置相应的提取器(如正则表达式提取器或JSON提取器)来捕获这些值,并将其保存为变量,以便在后续的请求中使用

实现步骤简述

  1. 构建测试计划:在JMeter中创建一个测试计划,设置好虚拟用户数、迭代次数等参数。
  2. 配置HTTP请求:为每个接口配置一个HTTP请求取样器,指定正确的URL、请求类型(GET/POST)、参数等。
  3. 添加依赖处理逻辑:使用Beanshell/Groovy脚本或JMeter内置的逻辑控制器来处理接口间的依赖关系。
  4. 添加监听器:添加监听器来记录测试结果,如查看结果树、聚合报告等。
  5. 运行测试:执行测试计划,监控系统表现。
  6. 分析结果:根据测试结果分析系统的性能瓶颈,并提出改进建议

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

四、BeanShell使用外部Java文件

  • 需求

  • 常规beanshell里面写代码,适合简单的逻辑

  • 工作里面还会用到更多方法逻辑,需要在idea编辑器里面写,然后进行调用

  • 方式

    • jar包:放到的lib目录或ext目录下,前面演示过json工具类操作
    • java文件
  • 步骤

    • 使用 source加载源码,路径可以是绝对路径和相对路径
    • 加载源文件后可以直接使用 类名.方法名(参数)
  1. 编写Java类:首先,编写一个Java类,比如 MyUtils.java,并编译成 .class 文件
// MyUtils.java
public class MyUtils {
    public static String getHello(String name) {
        return "Hello, " + name;
    }
}
  1. 编译Java类:使用命令行或IDE编译上述Java文件
javac MyUtils.java
  1. 将编译后的类添加到JMeter的类路径:

    • 将编译好的 .class 文件复制到 JMeter 的 lib 目录下,或者将其打包成 .jar 文件,然后将 .jar 文件放入 lib/ext 目录下
      重启JMeter以加载新的类
  2. 在BeanShell中调用:

    • 在BeanShell Sampler、PreProcessor、PostProcessor或Assertion中,你可以直接调用这个类的方法
// BeanShell Sampler 示例
import com.example.MyUtils; // 假设包名为com.example

String result = MyUtils.getHello("World");
log.info(result);

五、Jmeter性能测试之html可视化压测报告

  • 测试报告

    • 聚合报告(前面讲过)
      • 有收集到性能数据,但显示比较单一
    • Jmeter 可以生成 HTML 性能测试报告
  • 步骤

    • 保存jmx到本地
    • 进到jmeter的bin目录下
jmeter -n -t <test_plan.jmx> -l <output_file.jtl> -e -o <report_folder>

其中,<test_plan.jmx> 是你的测试计划文件,<output_file.jtl> 是输出结果文件,<report_folder> 是生成报告的目录

参数说明

  • -n 非gui方式运行jmeter
  • -t :jmx 脚本路径
  • -l :result.jtl 运行结果保存路径,注意:.jtl 文件名不能重复,文件夹需要存在
  • -e :在脚本运行结束后生成 HTML 报告
  • -o :用于存放 HTML 报告的目录,文件夹需要存在

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

  • dashboard讲解
    • Test and Report informations
      • Source file:jtl文件名
      • Start Time :压测开始时间
      • End Time :压测结束时间
      • Filter for display:过滤器
      • Lable:sampler采样器名称
    • APDEX(Application performance Index)
      • apdex:应用程序性能指标,范围在0~1之间,1表示达到所有用户均满意
      • T(Toleration threshold):可接受阀值
      • F(Frustration threshold):失败阀值
    • Requests Summary
      • OK:成功率
      • KO:失败率
    • Statistics 统计数据
      • lable:sampler采样器名称
      • samples:请求总数,并发数*循环次数
      • KO:失败次数
      • Error%:失败率
      • Average:平均响应时间
      • Min:最小响应时间
      • Max:最大响应时间
      • 90th pct: 90%的用户响应时间不会超过这个值
      • 95th pct: 95%的用户响应时间不会超过这个值
      • 99th pct: 99%的用户响应时间不会超过这个值 (存在极端值)
      • throughtput:Request per Second吞吐量 qps
      • received:每秒从服务器接收的数据量
      • send:每秒发送的数据量
  • charts讲解
    • Over Time(随着时间的变化)
      • Response Times Over Time:响应时间变化趋势
      • Response Time Percentiles Over Time (successful responses):最大,最小,平均,用户响应时间分
      • Active Threads Over Time:并发用户数趋势
      • Bytes Throughput Over Time:每秒接收和请求字节数变化,蓝色表示发送,黄色表示接受
      • Latencies Over Time:平均响应延时趋势
      • Connect Time Over Time :连接耗时趋势
    • Throughput
      • Hits Per Second (excluding embedded resources):每秒点击次数
      • Codes Per Second (excluding embedded resources):每秒状态码数量
      • Transactions Per Second:即TPS,每秒事务数
      • Response Time Vs Request:响应时间和请求数对比
      • Latency Vs Request:延迟时间和请求数对比
    • Response Times
      • Response Time Percentiles:响应时间百分比
      • Response Time Overview:响应时间概述
      • Time Vs Threads:活跃线程数和响应时间
      • Response Time Distribution:响应时间分布图

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring 配置绑定原理分析

Spring 配置绑定原理分析 前言 Spring 应用中存在诸多配置&#xff0c;有的是系统配置&#xff0c;有的命令行启动参数配置&#xff0c;有的是yaml配置&#xff0c;有的是分布式配置中心配置&#xff0c;但对使用者而言总是可以通过ConfigurationProperties将它关联到一个Java…

爬虫下载网页文夹

爬虫下载网页pdf文件 import os import requests from bs4 import BeautifulSoup from urllib.parse import urljoin from urllib.parse import urljoin, unquote from tqdm import tqdm # 设置网页的URL base_url "http://119/download/dzz/pdf/"# 创建保存文件的…

数据结构-归并排序笔记

【数据结构】八大排序(超详解附动图源码)_数据结构排序-CSDN博客 看这个学思路 一 归并排序介绍: 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法&#xff0c;该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解&#xf…

编译器优化乌龙——记一次死循环不进入问题

记一次死循环不生效问题 看如下代码&#xff0c;本意是我们模拟一次死循环&#xff0c;然后会在中断处理函数中更改waiting的值&#xff0c;更改waiting的值后&#xff0c;跳出死循环。 int waiting 0; while(waiting0){}运行起来发现&#xff0c;程序根本就没有进入这个死循…

构建第一个ArkTs应用

1、新建第一个页面文件。在“Project”窗口&#xff0c;点击“entry > src > main > ets > pages”&#xff0c;打开“Index.ets”文件&#xff0c;进行页面的编写。 2、新建第二个页面文件。在“Project”窗口&#xff0c;打开“entry > src > main > e…

一文搞懂Linux kernel编译步骤

一、前言 什么是Linux的内核编译呢&#xff1f;简单来说&#xff0c;Linux内核编译是一个将内核源代码转换成可在特定的硬件架构上运行的二进制文件的过程。通过编译内核&#xff0c;我们可以根据自己的需求和兴趣对内核进行定制和优化&#xff0c;以满足特定的应用场景。下文…

IDEA构建JavaWeb项目,并通过Tomcat成功运行

目录 一、Tomcat简介 二、Tomcat安装步骤 1.选择分支下载 2.点击下载zip安装包 3.解压到没有中文、空格和特殊字符的目录下 4.双击bin目录下的startup.bat脚本启动Tomcat 5.浏览器访问Tomcat 6.关闭Tomcat服务器 三、Tomcat目录介绍 四、WEB项目的标准结构 五、WEB…

消息通知——公众号、小程序、短信对比

消息通知——公众号、小程序、短信对比 引言 在数字化时代&#xff0c;高效、准确的消息通知对于提升用户体验、增强用户粘性至关重要。本报告将深入分析三种常见的消息通知方式&#xff1a;微信公众号推送、微信小程序推送以及手机短信推送&#xff0c;从实现方式、优缺点及细…

三维测量与建模笔记 - 3.2 直接线性变换法标定DLT

DLT - Direct Linear Transform 上图中&#xff0c;透视成像对应的公式是共线方程&#xff0c;可以参考以下链接&#xff1a; https://zhuanlan.zhihu.com/p/101549821https://zhuanlan.zhihu.com/p/101549821 对于标定来说&#xff0c;需要找到。已知量是。 (u,v)是…

消息队列面试——打破沙锅问到底

消息队列的面试连环炮 前言 你用过消息队列么&#xff1f;说说你们项目里是怎么用消息队列的&#xff1f; 我们有一个订单系统&#xff0c;订单系统会每次下一个新订单的时候&#xff0c;就会发送一条消息到ActiveMQ里面去&#xff0c;后台有一个库存系统&#xff0c;负责获取…

【论文复现】KAN卷积:医学图像分割新前沿

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀知识图谱推理 1. 概述2. 核心创新点3. 模块介绍KANUNext模块 4. 本文主要结构5. 主要代码6. 数据集7. 结果展示8. 参考文献 前言&#xff1a;…

Oracle与SQL Server的语法区别

1&#xff09;日期和日期转换函数。 SQL: SELECT A.*, CASE WHEN NVL(PAA009,) OR PAA009 >Convert(Varchar(10), SYSDATE,120) THEN Y ELSE N END AS ActiveUser FROM POWPAA A WHERE PAA001admin or PAA002admin Oracle: SELECT A.*, CASE WHEN NVL(PAA009,) or PAA009&…

基于TRIZ理论的便携式光伏手机充电装置创新

随着智能手机功能的日益强大&#xff0c;电量消耗问题也日益凸显&#xff0c;尤其是在户外活动时&#xff0c;电量告急常常让人措手不及。面对这一挑战&#xff0c;基于TRIZ&#xff08;发明问题解决理论&#xff09;的创新思维&#xff0c;一款全新的便携式光伏手机充电装置应…

Vue3父传子

1. App.vue - 父组件 咱们先来看左边的 App.vue&#xff0c;它扮演的是“父亲”角色——你可以想象它是一位热心的老爸&#xff0c;手里拿着一条消息&#xff0c;正准备把这条消息送到“儿子”那里。 <script setup> // 这个 setup 就像一个神奇的开关&#xff0c;一开…

前端 算法 双指针

文章目录 三数之和移动零盛最多水的容器接雨水 三数之和 leetcode 三数之和 题目链接 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有…

EPSON机械手与第三方相机的校准功能设计By python

EPSON机械手与第三方相机的校准功能设计By python 使用Python来实现EPSON机械手与第三方相机的校准功能是一个复杂但可行的任务。这通常涉及以下几个步骤:硬件接口通信、图像处理、标定算法实现和控制逻辑编写。 1. 环境准备 首先,库 pip install numpy opencv-python pyse…

NPU 可不可以代替 GPU

结论 先说结论&#xff0c;GPU分为可以做图形处理的传统意义上的真GPU&#xff0c;做HPC计算的GPGPU和做AI加速计算的GPGPU&#xff0c;所以下面分别说&#xff1a; 对于做图形处理的GPU&#xff0c;这个就和NPU 一样&#xff0c;属于DSA&#xff0c;没有替代性。当然&#xf…

python画图|hist()函数画直方图进阶

【1】引言 前序已经学习了hist()函数画直方图的基础教程&#xff0c;相关文章见下述链接&#xff1a; python画图|hist()函数画直方图初探-CSDN博客 在这里我们初步认识了hist()函数&#xff0c;并使用该函数画出了8个直方图。 之后又用bar(&#xff09;函数进行对比&#…

推荐一款非常好用的C/C++在线编译器

C/C作为一门底层、高效的编程语言&#xff0c;广泛应用于系统开发、游戏引擎、嵌入式系统等领域。然而&#xff0c;C/C的开发环境配置会让开发者把部分时间消耗在这件事上&#xff0c;也经常会遇到各种各样的环境问题。 本地开发的痛点 环境配置复杂&#xff1a;C/C的开发环境…

kafka如何获取 topic 主题的列表?

大家好&#xff0c;我是锋哥。今天分享关于【kafka如何获取 topic 主题的列表&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; kafka如何获取 topic 主题的列表&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中&#xff0c;可以…