jMeter压测环境部署JDK+Groovy+JMeter+Proto+IntelliJ IDEA
为确保 Groovy、JDK 和 JMeter 三者的版本兼容性,需遵循以下核心原则和步骤:
一、版本兼容性对照表
组件 | 推荐版本范围 | 关键兼容规则 |
---|---|---|
JDK | Java 8/11/17 (LTS) | - JMeter 5.6+ 支持 Java 11/17 |
Groovy | Groovy 3.0.7+ 或 4.0+ | - Groovy 3.x 支持 Java 8-17 - Groovy 4.x 支持 Java 11-21 |
JMeter | JMeter 5.6+ | - JMeter 5.6+ 内置 Groovy 3.0.7 - 若需更高版本,需手动替换 lib 目录的 JAR |
二、操作步骤
1. 检查当前版本
-
JDK 版本:
java -version # 输出示例:openjdk 17.0.11
-
JMeter 版本:
-
启动 JMeter → 顶部菜单栏显示版本(如
5.6.3
) -
或命令行:
jmeter -v
-
-
Groovy 版本:
-
JMeter 内置版本:
-
查看
JMETER_HOME/lib
目录下的groovy-*.jar
(如groovy-3.0.7.jar
)
-
-
项目依赖版本(若自定义):
# Maven 项目检查 pom.xml grep '<groovy.version>' pom.xml# Gradle 项目检查 build.gradle grep 'org.apache.groovy' build.gradle
-
2. 调整版本组合(推荐方案)
场景 1:使用 JMeter 默认配置
-
JDK: Java 11 或 17
-
JMeter: 5.6.3
-
Groovy: 3.0.7(JMeter 内置)
-
优点: 无需额外配置,稳定性最佳。
场景 2:需更高版本 Groovy
-
JDK: Java 17
-
JMeter: 5.6.3
-
Groovy: 4.0.21(手动替换)
-
替换步骤:
-
下载 Groovy 4.x JAR:https://groovy.apache.org/download.html
-
删除
JMETER_HOME/lib/groovy-3.0.7.jar
-
将
groovy-4.0.21.jar
放入JMETER_HOME/lib/
-
重启 JMeter
-
-
场景 3:使用 Java 21+
-
JDK: Java 21
-
JMeter: 5.6.3(需手动升级依赖)
-
Groovy: 4.0.21(必须)
-
额外操作:
-
在
JMETER_HOME/bin/jmeter
中设置:JAVA_HOME=/path/to/jdk-21
-
3. 验证兼容性
-
步骤 1:编写测试脚本
在 JMeter 中添加 JSR223 PreProcessor,输入以下代码:log.info("JDK Version: " + System.getProperty("java.version")) log.info("Groovy Version: " + GroovySystem.version)
-
步骤 2:运行脚本
查看 JMeter 日志输出,确认版本匹配:INFO o.a.j.e.StandardJMeterEngine: JDK Version: 17.0.11 INFO o.a.j.e.StandardJMeterEngine: Groovy Version: 4.0.21
三、常见问题解决
问题 1:Unsupported class file major version
-
原因:JDK 版本高于 Groovy 支持范围。
-
解决:
-
降级 JDK 至兼容版本(如 Java 17)。
-
或升级 Groovy 到 4.0+。
-
问题 2:JMeter 启动失败
-
原因:Groovy JAR 版本冲突。
-
解决:
-
删除
lib
目录下所有groovy-*.jar
,重新放入正确版本。
-
问题 3:脚本执行性能差
-
原因:Groovy 3.0.7 默认解释执行,非编译。
-
解决:
-
在 JSR223 组件中选择 Groovy 语言。
-
勾选 Cache compiled script(缓存编译脚本)。
-
四、版本管理最佳实践
-
固定版本:在团队中统一 JDK、JMeter、Groovy 版本。
-
使用 LTS 版本:优先选择 Java 11/17、JMeter 5.6.x。
-
隔离环境:使用 Docker 容器化部署:
FROM eclipse-temurin:17-jdk RUN wget https://dlcdn.apache.org/jmeter/binaries/apache-jmeter-5.6.3.zip && \unzip apache-jmeter-5.6.3.zip
通过以上方法,可确保 Groovy、JDK 和 JMeter 版本兼容,避免因环境配置导致的脚本执行异常。
Groovy、JDK、JMeter 兼容版本安装方案(全平台)
一、环境要求
-
操作系统:Windows 10+/Linux/macOS
-
用户权限:管理员/root权限(用于安装软件)
-
网络:可访问互联网以下载安装包
二、详细安装步骤
1. 安装 JDK 17 (推荐长期支持版本)
Windows
-
下载 JDK 17:
-
访问 Oracle JDK 17 或 Eclipse Temurin JDK 17
-
选择
Windows x64 Installer
下载
-
-
安装:
-
双击安装程序,按提示操作
-
默认安装路径:
C:\Program Files\Java\jdk-17.0.x
-
-
配置环境变量:
-
右键
此电脑
→属性
→高级系统设置
→环境变量
-
新建系统变量:
-
变量名:
JAVA_HOME
-
变量值:
C:\Program Files\Java\jdk-17.0.x
-
-
编辑 Path 变量:
-
添加
%JAVA_HOME%\bin
-
-
-
验证安装:
java -version
Linux (Ubuntu/Debian)
-
下载 JDK 17:
wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_linux-x64_bin.tar.gz
-
解压并安装:
sudo tar -xzf openjdk-17.0.2_linux-x64_bin.tar.gz -C /usr/lib/jvm/
-
配置环境变量:
sudo nano /etc/environment # 添加以下内容: JAVA_HOME="/usr/lib/jvm/jdk-17.0.2" PATH="$PATH:$JAVA_HOME/bin" # 保存后执行: source /etc/environment
-
验证安装:
java -version
macOS
-
Homebrew 安装:
brew install openjdk@17
-
配置环境变量:
echo 'export PATH="/opt/homebrew/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc source ~/.zshrc
-
验证安装:
java -version
2. 安装 JMeter 5.6.3
全平台通用步骤
-
下载 JMeter:
-
官网:Apache JMeter - Download Apache JMeter
-
选择
Binaries
→apache-jmeter-5.6.3.zip
-
-
解压安装:
-
Windows:解压到
D:\Tools\apache-jmeter-5.6.3
-
Linux/macOS:
unzip apache-jmeter-5.6.3.zip -d /opt/
-
-
配置环境变量:
-
Windows:
-
变量名:
JMETER_HOME
-
变量值:
D:\Tools\apache-jmeter-5.6.3
-
编辑 Path:添加
%JMETER_HOME%\bin
-
-
Linux/macOS:
echo 'export JMETER_HOME="/opt/apache-jmeter-5.6.3"' >> ~/.bashrc echo 'export PATH="$JMETER_HOME/bin:$PATH"' >> ~/.bashrc source ~/.bashrc
-
-
验证安装:
jmeter -v # 应输出:5.6.3
3. 配置 Groovy 版本
方案一:使用 JMeter 内置 Groovy 3.0.7
-
无需额外操作,JMeter 5.6.3 默认包含
groovy-3.0.7.jar
方案二:手动升级到 Groovy 4.0.21
-
下载 Groovy 4.0.21:
-
官网:https://groovy.apache.org/download.html
-
选择
Binary release (ZIP)
→apache-groovy-binary-4.0.21.zip
-
-
替换 JAR 文件:
-
删除
JMETER_HOME/lib/groovy-3.0.7.jar
-
将
groovy-4.0.21.jar
复制到JMETER_HOME/lib/
-
-
验证 Groovy 版本:
-
在 JMeter 中添加 JSR223 Sampler,输入:
log.info("Groovy Version: " + GroovySystem.version)
-
查看日志输出是否为
4.0.21
-
4. 安装 Protocol Buffers 编译器(可选)
Windows
-
下载
protoc
:Releases · protocolbuffers/protobuf · GitHub -
解压
protoc-25.1-win64.zip
,将bin/protoc.exe
添加到 Path
Linux/macOS
# 安装 protoc
curl -LO https://github.com/protocolbuffers/protobuf/releases/download/v25.1/protoc-25.1-linux-x86_64.zip
unzip protoc-25.1-linux-x86_64.zip -d $HOME/.local
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
三、Docker 快速部署方案
# 使用预装 JDK 17 + JMeter 5.6.3 的镜像
docker run -it --rm \-v $(pwd)/scripts:/scripts \-v $(pwd)/results:/results \justb4/jmeter:5.6.3 \-n -t /scripts/test.jmx -l /results/result.jtl
四、验证全组件兼容性
-
创建测试脚本 (
compatibility_test.jmx
):-
添加 HTTP Request 到
https://httpbin.org/get
-
添加 JSR223 PreProcessor:
log.info("JDK: " + System.getProperty("java.version")) log.info("Groovy: " + GroovySystem.version) vars.put("protoData", new com.your.proto.Message().toString())
-
-
运行测试:
jmeter -n -t compatibility_test.jmx -l result.jtl
-
检查日志:
-
确认无
Unsupported major.minor version
错误 -
日志中应输出:
INFO o.a.j.p.j.s.JSR223PreProcessor: JDK: 17.0.11 INFO o.a.j.p.j.s.JSR223PreProcessor: Groovy: 4.0.21
-
五、故障排查表
问题现象 | 可能原因 | 解决方案 |
---|---|---|
JMeter启动报JNI 错误 | JDK架构与JMeter不匹配 | 确保JDK与操作系统位数一致(同用64位) |
Groovy脚本执行超慢 | 未启用编译缓存 | 在JSR223组件中勾选 Cache compiled script |
protoc 命令未找到 | Path配置错误 | 检查 protoc 是否在系统 Path 中 |
JMeter无法读取环境变量 | 未重启终端或IDE | 关闭所有终端窗口并重新启动 |
通过以上步骤,您将获得一个完全兼容的 Groovy + JDK + JMeter 测试环境。
生成jMeter需要的jar包
以下是基于 WebSocket 使用 Protobuf 协议进行通信时,生成 .proto
文件对应的 Java 代码,并在 JMeter 中测试的详细步骤:
一、准备工作
1. 安装 protoc
编译器
-
参考前文步骤安装
protoc 3.17.3
并配置环境变量。
2. 编写 .proto
文件
假设你的 WebSocket 服务使用 Protobuf 格式传输数据,例如 message.proto
:
syntax = "proto3";package example;message Request {string query = 1;
}message Response {string result = 1;
}
二、生成 Java 代码
1. 生成 Protobuf 序列化类
在 .proto
文件目录下执行:
protoc --java_out=./generated message.proto
-
生成的
Request.java
和Response.java
会保存在generated/example
目录。
2. 编译并打包为 JAR
javac -d ./out generated/example/*.java
jar cvf message-protobuf.jar -C out .
-
生成
message-protobuf.jar
,后续需将此 JAR 放入 JMeter 的lib
目录。
三、JMeter 配置
1. 安装 WebSocket 插件
JMeter 默认不支持 WebSocket,需安装插件:
-
下载 WebSocket Samplers by Peter Doornbosch
-
将下载的
WebSocketSamplers-1.2.4.jar
放入 JMeter 的lib/ext
目录。 -
重启 JMeter。
2. 导入 Protobuf 依赖
-
将
message-protobuf.jar
和 Protobuf 的 Java 运行时库(如protobuf-java-3.17.3.jar
)复制到 JMeter 的lib
目录。 -
重启 JMeter。
四、创建 JMeter 测试计划
1. 添加线程组
-
右键 Test Plan → Add → Threads (Users) → Thread Group。
2. 添加 WebSocket 连接
-
右键 Thread Group → Add → Sampler → WebSocket Open Connection。
-
配置参数:
-
Server URL:
ws://your-server:port/path
(WebSocket 服务地址) -
Connection Timeout:
5000
(ms)
-
3. 添加 Protobuf 序列化脚本
-
右键 Thread Group → Add → Pre Processor → JSR223 PreProcessor。
-
选择语言为
Groovy
,编写序列化脚本:
import example.Request;// 创建 Protobuf 请求对象
Request request = Request.newBuilder().setQuery("test").build();// 将 Protobuf 对象转为字节数组
byte[] payload = request.toByteArray();// 将字节数组保存到变量中
vars.put("requestBytes", payload);
4. 添加 WebSocket 请求
-
右键 Thread Group → Add → Sampler → WebSocket Write Sampler。
-
配置参数:
-
WebSocket Session:
default
(与 Open Connection 一致) -
Message Type:
Binary
(Protobuf 使用二进制传输) -
Message:
${requestBytes}
(引用前置处理器生成的字节数组)
-
5. 添加响应解析脚本
-
右键 Thread Group → Add → Post Processor → JSR223 PostProcessor。
-
选择语言为
Groovy
,编写反序列化脚本:
import example.Response;// 从响应中获取二进制数据
byte[] responseBytes = prev.getResponseData();// 反序列化为 Protobuf 对象
Response response = Response.parseFrom(responseBytes);// 提取结果并保存到变量
vars.put("result", response.getResult());
6. 添加断言(可选)
-
右键 WebSocket Write Sampler → Add → Assertion → Response Assertion。
-
配置检查点(如验证
${result}
是否包含特定值)。
7. 添加结果监听器
-
右键 Thread Group → Add → Listener → View Results Tree。
-
右键 Thread Group → Add → Listener → Summary Report。
五、执行测试
-
启动 WebSocket 服务
-
确保服务端已运行并监听指定端口(如
ws://localhost:8080/ws
)。
-
-
运行 JMeter
-
点击 ▶️ 启动测试,观察 View Results Tree 中的请求和响应详情。
-
六、关键注意事项
-
二进制传输模式
-
WebSocket 需使用
Binary
类型发送 Protobuf 字节流,而非文本。
-
-
依赖管理
-
确保所有 Protobuf 相关的 JAR(包括生成的
message-protobuf.jar
和官方protobuf-java-3.17.3.jar
)已放入 JMeter 的lib
目录。
-
-
调试技巧
-
在 JSR223 脚本 中使用
log.info()
打印变量值:log.info("Result: " + vars.get("result"));
-
七、常见问题
1. 报错 ClassNotFoundException: com.google.protobuf.Message
-
原因: 未导入
protobuf-java-*.jar
。 -
解决: 将 Protobuf 的 Java 运行时库放入 JMeter 的
lib
目录。
2. 响应数据无法解析
-
原因: 服务端返回的数据格式不符合 Protobuf 定义。
-
解决: 使用 Wireshark 或服务端日志检查实际传输的二进制数据。
通过以上步骤,你可以实现在 JMeter 中通过 WebSocket 发送和接收 Protobuf 格式的数据。
IntelliJ IDEA编写JSR223 脚本
在IntelliJ IDEA中编写JMeter的JSR223,需要结合IDE的编码环境和JMeter的脚本执行逻辑。以下是详细步骤:
1. 环境准备
-
安装IntelliJ IDEA:确保已安装最新版本(社区版或旗舰版)。
-
安装JDK:配置JDK 8或更高版本(建议JDK 17),并在IDEA中设置。
-
安装Groovy插件(推荐):
File -> Settings -> Plugins
,搜索"Groovy",安装并重启IDEA。
2. 创建新项目
-
新建项目:
File -> New -> Project
,选择:-
模板:Maven或Gradle项目(推荐Maven,便于依赖管理)。
-
语言:Java或Groovy。
-
JDK:选择已配置的JDK。
-
-
命名项目:如
JSR223-PreProcessor-Demo
。
3. 添加JMeter依赖
在项目的pom.xml
(Maven)或build.gradle
(Gradle)中添加JMeter核心库依赖:
Maven配置:
<dependencies><dependency><groupId>org.apache.jmeter</groupId><artifactId>ApacheJMeter_core</artifactId><version>5.6.2</version> <!-- 与你的JMeter版本一致 --></dependency>
</dependencies>
Gradle配置:
dependencies {implementation 'org.apache.jmeter:ApacheJMeter_core:5.6.2'
}
4. 创建JSR223预处理器脚本
-
新建Groovy脚本文件:
Right-click src/main/groovy -> New -> Groovy Script
,命名为DemoPreProcessor.groovy
。 -
编写脚本逻辑:
import org.apache.jmeter.threads.JMeterVariables import org.apache.jmeter.util.JMeterUtils// JMeter内置对象(自动注入) def vars = JMeterVariables.INSTANCE.get() def log = JMeterUtils.getLog()// 示例:生成动态参数并存储到变量 def randomValue = new Random().nextInt(100) vars.put("dynamicParam", randomValue.toString())log.info("Generated dynamicParam: " + randomValue)
5. 调试脚本
-
模拟JMeter上下文:在IDE中直接运行脚本可能无法访问真实JMeter变量,建议:
-
在脚本中添加单元测试,模拟
vars
和log
对象。 -
将脚本复制到JMeter的JSR223 PreProcessor中实际测试。
-
6. 集成到JMeter
-
导出脚本:将
DemoPreProcessor.groovy
保存到JMeter测试计划目录(如scripts/
)。 -
配置JMeter元件:
-
添加 JSR223 PreProcessor 到HTTP请求。
-
选择语言为
Groovy
。 -
设置脚本来源:
-
直接粘贴代码:复制Groovy脚本内容到输入框。
-
外部文件引用:勾选"Cache compiled script",路径填写
scripts/DemoPreProcessor.groovy
。
-
-
7. 注意事项
-
性能优化:启用脚本缓存(Cache compiled script)以提高性能。
-
依赖管理:若脚本使用第三方库,需将JAR包放入JMeter的
lib/ext
目录。 -
日志调试:使用
log.info()
输出日志,在JMeter的View Results Tree
中查看。
完整流程图示
IntelliJ IDEA编写脚本 -> 导出为.groovy文件 -> JMeter加载脚本 -> 执行测试计划
通过以上步骤,你可以在IntelliJ IDEA中高效编写和调试JSR223预处理器脚本,并集成到JMeter测试计划中。
相关文章:
jMeter压测环境部署JDK+Groovy+JMeter+Proto+IntelliJ IDEA
为确保 Groovy、JDK 和 JMeter 三者的版本兼容性,需遵循以下核心原则和步骤: 一、版本兼容性对照表 组件推荐版本范围关键兼容规则JDKJava 8/11/17 (LTS)- JMeter 5.6 支持 Java 11/17GroovyGroovy 3.0.7 或 4.0- Groovy 3.x 支持 Java 8-17 - Groovy 4…...
c#建筑行业财务流水账系统软件可上传记账凭证财务管理系统签核功能
# financial_建筑行业 建筑行业财务流水账系统软件可上传记账凭证财务管理系统签核功能 # 开发背景 软件是给岳阳客户定制开发一款建筑行业流水账财务软件。提供工程签证单、施工日志、人员出勤表等信息记录。 # 财务管理系统功能描述 1.可以自行设置记账科目,做凭…...
深度解析 MySQL 与 Spring Boot 长耗时进程:从故障现象到根治方案(含 Tomcat 重启必要性分析)
一、典型故障现象与用户痛点 在高并发业务场景中,企业级 Spring Boot 应用常遇到以下连锁故障: 用户侧:网页访问超时、提交表单无响应,报错 “服务不可用”。运维侧:监控平台报警 “数据库连接池耗尽”,To…...
一种运动平台扫描雷达超分辨成像视场选择方法——论文阅读
一种运动平台扫描雷达超分辨成像视场选择方法 1. 专利的研究目标与意义1.1 研究目标1.2 实际意义2. 专利的创新方法与技术细节2.1 核心思路与流程2.1.1 方法流程图2.2 关键公式与模型2.2.1 回波卷积模型2.2.2 最大后验概率(MAP)估计2.2.3 统计约束模型2.2.4 迭代优化公式2.3 …...
【程序员AI入门:开发】11.从零构建智能问答引擎:LangChain + RAG 实战手册
1、技术选型 组件推荐方案说明文本嵌入模型sentence-transformers/all-MiniLM-L6-v2轻量级且效果较好的开源模型向量数据库FAISS高效的本地向量检索库大语言模型GPT-3.5/开源LLM(如ChatGLM3)根据资源选择云端或本地模型文档处理框架LangChain简化RAG流程…...
《深入理解Linux网络》笔记
《深入理解Linux网络》笔记 前言参考 前言 前段时间看了《深入理解Linux网络》这本书,虽然有些地方有以代码充篇幅的嫌疑,但总体来说还是值得一看的。在这里简单记录一下笔记,记录下对网络新的理解。 内核是如果接受网络包的? 如…...
【计算机视觉】优化MVSNet可微分代价体以提高深度估计精度的关键技术
优化MVSNet可微分代价体以提高深度估计精度的关键技术 1. 代价体基础理论与分析1.1 标准代价体构建1.2 关键问题诊断 2. 特征表示优化2.1 多尺度特征融合2.2 注意力增强匹配 3. 代价体构建优化3.1 自适应深度假设采样3.2 可微分聚合操作改进 4. 正则化与优化策略4.1 多尺度代价…...
致远A8V5-9.0安装包(包含信创版)【附百度网盘链接】
A8适用于中大型企业,基于"以人为中心"的产品理念,致力于为企业构建和完善“数字智能”的协同运营体系,以组织模型为基础,连接各项工作和业务,聚合信息、资源和能力,实现组织内和跨组织的高效协同…...
terminal 共享工具ttyd
ttyd 是一个非常轻量的工具,它可以将你的终端(如 bash)通过 Web 页面共享出去,适合教学、演示、远程协作等场景,而且 支持 macOS、ARM64、Linux 等平台。 ⸻ ✅ 一、ttyd 简介 • 将 shell 包装成 WebSocket 服务&am…...
右值引用的剖析
引入:为什么要有右值引用? 右值引用的存在,就是为了解决左值引用解决不了的问题! 左值引用的问题: 我们知道,左值引用在做参数和做返回值都可以提高效率;但是有时候,我们无法用左…...
MIT XV6 - 1.4 Lab: Xv6 and Unix utilities - find
接上文 MIT XV6 - 1.3 Lab: Xv6 and Unix utilities - primes find 继续实验,实验介绍和要求如下 (原文链接 译文链接) : Write a simple version of the UNIX find program for xv6: find all the files in a directory tree with a specific name. Your solution…...
PyTorch API 8 - 工具集、onnx、option、复数、DDP、量化、分布式 RPC、NeMo
文章目录 torch.nn.inittorch.nn.attention工具集子模块 torch.onnx概述基于 TorchDynamo 的 ONNX 导出器基于TorchScript的ONNX导出器贡献与开发 torch.optim如何使用优化器构建优化器每个参数的选项执行优化步骤optimizer.step()optimizer.step(closure) 基类算法如何调整学习…...
解决使用宝塔Linux部署前后端分离项目遇到的问题
问题一:访问域名转圈圈,显示404,403 没有解决跨域问题,在后端yml中设置content:/prod(生产环境),在前端.env文件中将http://127.0.0.1:8080/替换为公网IP,并在vite.conf…...
力扣top100 矩阵置零
开辟数组来标记元素为0的行和列,然后将对应的行和列的元素全部置为0; class Solution { public:void setZeroes(vector<vector<int>>& matrix) {int n matrix.size();int m matrix[0].size();vector<int> l(m),r(n);for(int i …...
JavaScript基础-作用域概述
在学习JavaScript的过程中,理解其作用域(Scope)机制是至关重要的。它不仅影响变量的生命周期和可见性,还决定了代码执行期间如何查找变量值。本文将深入探讨JavaScript的作用域概念,包括全局作用域、函数作用域、块级作…...
【经验总结】Ubuntu 22.04.5 LTS 将内核从5.15.0-140 升级到6.8.0-60后纽曼无线网卡无法使用解决措施
【经验总结】Ubuntu 22.04.5 LTS 将内核从5.15.0-140 升级到6.8.0-60后纽曼无线网卡无法使用解决措施 问题现象定位过程问题根因解决方案将内核内核从6.8.0-60 降级到5.15.0-140。1、回滚内核版本2、解决重启系统,找不到选择内核版本的菜单问题3、将新版本的kernel卸…...
MQTT协议介绍
一、MQTT定义 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是 IBM 开发的一个即时通讯协议,有可能成为物联网的重要组成部分。 MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议ÿ…...
jetson orin nano super AI模型部署之路(五)tensorrt C++ api介绍
我们基于tensorrt-cpp-api这个仓库介绍。这个仓库的代码是一个非常不错的tensorrt的cpp api实现,可基于此开发自己的项目。 我们从src/main.cpp开始按顺序说明。 一、首先是声明我们创建tensorrt model的参数。 // Specify our GPU inference configuration optio…...
excel函数操作案例
需求分析1:学习时间与最终成绩之间的关系 问题:学习时间的长短是否对学生的最终成绩有显著影响? 操作步骤:选择"study_hours"和"final_grade"列完整数据,选择散点图 单击B,按住ctrl键…...
各种音频产品及场景总结
本文记录和总结各种音频产品以及音频场景,比如音箱、耳机、对讲机、录音笔、助听器、声卡等等。 蓝牙耳机 蓝牙耳机现在已经很普及了,主要功能就是连着手机等设备然后播放音频,所以,肯定要有扬声器模块;然后还可以接打…...
Java后端开发day46--多线程(二)
(以下内容全部来自上述课程) 多线程 1. Lock锁 虽然我们可以理解同步代码块和同步方法的锁对象问题, 但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁, 为了更清晰的表达如何加锁和释放锁,JDK5以…...
U盘制作系统盘(含U盘恢复)
✅ 准备工作 1. 一个至少 8GB 容量的 U 盘 注意:U 盘将被格式化,请提前备份数据。 2. 一台可以联网的 Windows 电脑 📥 下载官方制作工具(推荐) 1. 打开微软官网下载页面: 👉 Windows 11 下载…...
如何阅读、学习 Linux 2 内核源代码 ?
学习Linux 2内核源代码是深入理解操作系统工作原理的绝佳途径,但这无疑是一项极具挑战性的任务。下面为你提供一套系统的学习方法和建议: 一、扎实基础知识 操作系统原理 透彻掌握进程管理、内存管理、文件系统、设备驱动等核心概念。推荐阅读《操作系…...
【字符函数和字符串函数】
【字符函数和字符串函数】 字符分类函数字符转换函数函数的使用strcpy的使用strcat的实现strcmp的实现strncpy,strncat,strncmpstrstrstrtok的使用strerror 1.函数的使用 2.部分函数的模拟实现(工作原理) 字符分类函数 ag1. #include<std…...
[学习]RTKLib详解:rtksvr.c与streamsvr.c
本文是 RTKLlib详解 系列文章的一篇,目前该系列文章还在持续总结写作中,以发表的如下,有兴趣的可以翻阅。 [学习] RTKlib详解:功能、工具与源码结构解析 [学习]RTKLib详解:pntpos.c与postpos.c [学习]RTKLib详解&…...
QMK键盘固件开发全解析:QMK 固件开发的最新架构和规范(2025最新版)
QMK键盘固件开发全解析:QMK 固件开发的最新架构和规范(2025最新版) 📚 前言概述 QMK(Quantum Mechanical Keyboard)作为目前开源键盘固件领域的"扛把子",凭借其强大的功能和活跃的社区支持,已经…...
c++——二叉树进阶
1. 内容安排说明 二叉树在前面C数据结构阶段已经讲过,本节取名二叉树进阶是因为: 1. map和set特性需要先铺垫二叉搜索树,而二叉搜索树也是一种树形结构 2. 二叉搜索树的特性了解,有助于更好的理解map和set的特性 3. 二叉树中部…...
PyTorch API 3 - mps、xpu、backends、导出
文章目录 torch.mpsMPS 性能分析器MPS 事件 torch.xpu随机数生成器流与事件内存管理 torch.mtia流与事件 torch.mtia.memory元设备元张量操作惯用法 torch.backendstorch.backends.cputorch.backends.cudatorch.backends.cudnntorch.backends.cusparselttorch.backends.mhatorc…...
QTableWidget实现多级表头、表头冻结效果
最终效果: 实现思路:如果只用一个表格的话写起来比较麻烦,可以考虑使用两个QTableWidget组合,把复杂的表头一个用QTableWidget显示,其他内容用另一个QTableWidget。 #include "mainwindow.h" #include &qu…...
比 Mac 便笺更好用更好看的便利贴
在苹果电脑上,有自带的便签软件,但问题这个官方应用已经年久失修,界面跟最新的系统完全不搭。像同步、清单等功能也没有。 最近找到了一款更好看好用的桌面便利贴 - Desktop Note。这款应用在超过26个的效率榜排在前10。以下几个点是我认为做…...
【python】json解析:invalid literal for int() with base 10: ‘\“\“‘“
invalid literal for int() with base 10: ‘“”’" 从提供的 JSON 数据中,我可以看到导致 "invalid literal for int() with base 10: \"\"" 错误的具体情况: 错误分析 在 deal_resp 部分中发现了错误信息: &…...
超详细Kokoro-82M本地部署教程
经测试,Kokoro-82M的语音合成速度相比于其他tts非常的快,本文给出Windows版详细本地部署教程。 这里提供原始仓库进行参考:https://github.com/hexgrad/kokoro 一、依赖安装 1.新建conda环境 conda create --n kokoro python3.12 conda a…...
Day28 -js开发01 -JS三个实例:文件上传 登录验证 购物商城 ---逻辑漏洞复现 及 判断js的payload思路
本篇利用3个实例 来引出前端验证的逻辑漏洞 一、文件上传 实例:利用JS实现 【1】代码实现 js:文件后缀筛选 php:文件保存 00x1 先利用js文件上传 就利用之前php原生写的upload.html的模板,再加上script的后缀过滤。 <!…...
宝塔服务安装使用的保姆级教程
宝塔介绍: 宝塔面板(BT Panel) 是一款 国产的服务器运维管理面板,主要用于简化 Linux/Windows 服务器的网站、数据库、FTP、防火墙等管理操作。它通过图形化界面(Web端)和命令行工具(bt 命令&a…...
(四)YOLO_World-SAM-GraspNet的mujoco抓取仿真(操作记录)
一、创建虚拟环境 这里直接克隆之前项目的环境 (二)Graspnet在mujoco的仿真复现(操作记录)_graspnet仿真-CSDN博客 conda create -n graspnet --clone mujoco_graspnet conda activate graspnet 二、安装额外的环境包 pip in…...
Git Github Tutorial
Git & Github Tutorial 教程地址:Git & GitHub Tutorial | Visualized Git Course for Beginner & Professional Developers in 2024 git自动跟踪每个代码更改,允许多个人无缝处理同一个项目,让成员浏览项目历史纪录 1.检查gi…...
提高工作效率的新选择[特殊字符]——Element Plus UI库
在现代前端开发中,UI库的重要性不言而喻。它们不仅加速开发过程,还提高了应用的可维护性,形成了一致的用户体验。今天我们就来介绍一款由Element团队打造的Vue.js 3 UI库——Element Plus。 一、Element Plus:Vue.js 3的全新UI库…...
深入理解 TCP:重传机制、滑动窗口、流量控制与拥塞控制
TCP(Transmission Control Protocol)是一个面向连接、可靠传输的协议,支撑着绝大多数互联网通信。在实现可靠性的背后,TCP 引入了多个关键机制:重传机制、滑动窗口、流量控制 和 拥塞控制。这些机制共同协作࿰…...
从0开始学习大模型--Day05--理解prompt工程
提示词工程原理 N-gram:通过统计,计算N个词共同出现的概率,从而预测下一个词是什么。 深度学习模型:有多层神经网络组成,可以自动从数据中学习特征,让模型通过不断地自我学习不断成长,直到模型…...
全栈开发实战:FastAPI + React + MongoDB 构建现代Web应用
在Web开发领域,技术栈的选型直接影响着开发效率和系统性能。FARM(FastAPI, React, MongoDB)技术栈凭借其高性能、灵活架构和简洁语法,逐渐成为全栈开发的热门选择。本文将通过实际项目案例,详解如何从零搭建一个完整的…...
深入解析进程地址空间:从虚拟到物理的奇妙之旅
深入解析进程地址空间:从虚拟到物理的奇妙之旅 前言 各位小伙伴,还记得我们之前探讨的 fork 函数吗?当它返回两次时,父子进程中同名变量却拥有不同值的现象,曾让我们惊叹于进程独立性与写时拷贝的精妙设计。但你是否…...
Python教程(四)——数据结构
目录 1. 列表1.1 用列表实现堆栈1.2 用列表实现队列1.3 列表推导式1.4 嵌套的列表推导式 2. del语句3. 元组和序列4. 集合5. 字典6. 循环的技巧7. 深入条件控制8. 序列和其他类型的比较参考 1. 列表 方法含义list.append(x)在列表末尾添加一项,类似于a[len(a):] […...
Spring Cloud: Nacos
Nacos Nacos是阿里巴巴开源的一个服务发现,配置管理和服务管理平台。只要用于分布式系统中的微服务注册,发现和配置管理,nacos是一个注册中心的组件 官方仓库:https://nacos.io/ Nacos的下载 Releases alibaba/nacos 在官网中…...
基于 Q-learning 的城市场景无人机三维路径规划算法研究,可以自定义地图,提供完整MATLAB代码
一、引言 随着无人机技术的不断发展,其在城市环境中的应用越来越广泛,如物流配送、航拍测绘、交通监控等。然而,城市场景具有复杂的建筑布局、密集的障碍物以及多变的飞行环境,给无人机的路径规划带来了巨大的挑战。传统的路径规…...
Block Styler——字符串控件
字符串控件的应用 参考官方帮助案例:(这个方式感觉更好,第二种方式也可以)E:\NX1980\UGOPEN\SampleNXOpenApplications\C\BlockStyler\ColoredBlock 普通格式: 读取: //方法一 string0->GetProperti…...
【比赛真题解析】篮球迷
本次给大家分享一道比赛的题目:篮球迷。 洛谷链接:U561543 篮球迷 题目如下: 【题目描述】 众所周知,jimmy是个篮球迷。众所周知,Jimmy非常爱看NBA。 众所周知,Jimmy对NBA冠军球队的获奖年份和队名了如指掌。 所以,Jimmy要告诉你n个冠军球队的名字和获奖年份,并要求你…...
WPF之集合绑定深入
文章目录 引言ObservableCollection<T>基础什么是ObservableCollectionObservableCollection的工作原理基本用法示例ObservableCollection与MVVM模式ObservableCollection的局限性 INotifyCollectionChanged接口深入接口定义与作用NotifyCollectionChangedEventArgs详解自…...
第五天 车载系统安全(入侵检测、OTA安全) 数据加密(TLS/SSL、国密算法)
前言 随着汽车智能化程度不断提升,车载系统安全已成为行业关注焦点。本文将从零开始,带大家系统学习车载系统安全的核心技术,重点解析入侵检测、OTA安全、数据加密三大领域。即使没有安全背景,也能通过本文建立起完整的汽车网络安…...
采用SqlSugarClient创建数据库实例引发的异步调用问题
基于SqlSugar编写的多个WebApi接口,项目初始化时采用单例模式注册SqlSugarClient实例对象,前端页面采用layui布局,并在一个按钮事件中通过Ajax连续调用多个WebApi接口获取数据。实际运行时点击按钮会随机报下面几种错误: Execute…...
unity通过transform找子物体只能找子级
unity通过transform找子物体只能找子级,孙级以及更低级别都找不到,只能找到自己的下一级 如果要获取孙级以下的物体,最快的方法还是直接public挂载...