Jmeter对服务端进行压测快速上手
安装
下载
安装jmeter的之前必须先装有JDK
官网下载地址:https://archive.apache.org/dist/jmeter/binaries/
jmeter3.0的对应jdk1.7,jmeter4.0对应jdk1.8以上,否者启用jmeter也会报错
配置
-
配置环境变量
-
在系统变量PATH上加上:
%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar;
-
汉化配置
打开jmeter文件目录下的bin目录的jmeter.properties
,查找language=
,将language
修改为language=zh_CN
-
启动
双击jmeter目录下的bin目录下的jmeter.bat
运行jmeter.bat
的时候会出现cmd命令行窗口,这个窗口不能关闭,关闭之后会直接jmeter
基本使用
基本要素:
- 测试计划:项目名称
- 线程组:测试进程
- HTTP请求:需要压测的接口
工具栏部分功能说明
创建基本压测脚本
1.创建线程组
测试计划 ==> 鼠标右键 ==> 添加 ==> Threads ==> 线程组
线程组配置
参数 | 说明 |
---|---|
线程数 | 虚拟用户数量,一个线程代表一个虚拟用户数 |
Ramp-Up Period(in seconds) | 设置多长时间将线程数启动完毕。如果线程数为10,准备时长为5,则代表5秒内启动10个线程,即每秒启动2个线程 |
循环次数 | 每个线程发送请求的次数。如果线程数为10,循环次数为5,则每个线程发送5次请求,总的请求(并发)为10*5=50。如果勾选了“永远”,则所有线程会一直执行,直到手动选择停止运行(最后一次运行结果是报错的) |
持续时间 | 线程组发送请求持续的时间 |
启动延迟 | 线程组延迟多久后启动 |
2.创建HTTP请求
线程组 ==> 鼠标右键 ==> 添加 ==> Sampler ==> HTTP请求
HTTP配置
请求参数类型中的parameter、Body Data和Files Upload这三个只能选其中一个,不能混合使用
请求头设置
当请求参数是json格式时,需要额外设置请求头的Content-Type
:
线程组 ==> 添加 ==> 配置元件 ==> HTTP信息头管理器
响应断言(可加可不加)
JSON 断言
HTTP请求 ==> 鼠标右键 ==> 添加 ==> 断言 ==> JSON Assertion
一般选断言返回的json数据
JSON表达式,可以参考:https://gotest.hz.netease.com/doc/jie-kou-ce-shi/xin-zeng-yong-li/can-shu-xiao-yan/jsonpi-pei/jsonpathyu-fa.html
断言持续时间
用来断言请求响应的时间,即使请求成功,如果超过了持续断言时间设置的值,那么该请求会被认为请求失败
在断言中配置响应的最大时间:
3.添加查看结果树
结果树可以查看每个请求的请求信息和响应信息
线程组 ==> 添加 ==> 监听器 ==> 查看结果树
绿色的为请求成功,红色的为请求失败,判断依据为添加的响应断言
结果树取样结果参数说明
参数 | 说明 |
---|---|
Thread Name | 发送的线程名称 |
Sample Start | 发送时间 |
Load time | 加载时间,整个请求的消耗时间,从发送到接收完成全程消耗的时间 |
Connect Time | 建立连接时间 |
Latency | 等待时长,从请求发送到开始接收响应时的时间 |
Size in bytes | 发送数据的大小 |
Headers size in bytes | 请求头大小 |
Body size in bytes | 请求体大小 |
Sample Count | 请求发送数量 |
Error Count | 请求失败数量 |
Data type | 数据类型 |
4.添加聚合报告
聚合报告是本次测试的总体报告
线程组 ==> 添加 ==> 监听器 ==> 聚合报告
聚合报告
报告参数说明:
参数 | 说明 |
---|---|
Label | 请求名 |
#Samples | 并发数(线程数*循环次数) |
Average | 平均响应时间 |
Median | 中位数,50%请求的响应时间 |
90% | 90%请求的响应时间 |
95% | 95%请求的响应时间 |
99% | 99%请求的响应时间 |
Min | 最小响应时间 |
Max | 最大响应时间 |
Error% | 在#Samples并发数量下的请求的错误率 |
Throughput | 吞吐量 |
Recived KB/sec | 每秒从服务器接收的数据量 |
Sent KB/sec | 每秒发送给服务器的数据量 |
请求参数参数化
计数器
计数器用于创建一个顺序递增的参数
线程组 ==> 添加 ==> 配置元件 ==> 计数器
计数器配置
与每用户独立的跟踪计数器:每个请求独立一个计数器,当线程组有设置循环次数时,每个请求循环请求的计数器是独立的,都是从初始值根据递增值进行递增。如果不勾选该选项,则所有请求共用该计数器。
Maximum value:计数的最大值,当前的值由计数器计算下一次递增后超过最大值,则后面所有的请求都是当前的值,会从初始值重新开始递增。如初始值为1,递增为2,最大值为10,则计数器达到9的时候,下一次递增的值为11,超过了最大值10,则下一次计数从1开始重新递增
计数器使用
在HTTP请求中的请求参数,或者路径上都可与使用该计数器的值,使用的方式为:${计数器定义引用名称}
,如计数器定义的引用名称为num
,则可以使用${num}
来代表引用了计数器的值,需要注意的是,参数的数据类型,如果是字符串的话需要自行使用双引号包住引用的值
CSV数据文件
即引用外部数据文件来实现参数化
线程组 ==> 添加 ==> 配置元件 ==> CSV数据文件设置
CSV数据文件说明
csv文件跟Excel文件一样都是表格,除非可以创建csv文件,否则由Excel改后缀转成csv,读出来的数据都是乱码。解决方式是直接使用txt文件。内容如:
多列使用英文逗号隔开
CSV数据文件配置
变量名称:与数据文件中的表头无关,这里的变量名称是用来定义在线程组中使用该数据的变量名(读取数据文件是通过顺序读取,从左到右,所以需要保证数据文件的每一列数据对应上需要的变量名称),多个使用英文逗号隔开
CSV数据文件使用
- 与计数器的使用相同,在HTTP请求中的请求参数,或者路径上都可与使用CSV配置中的变量名称,也是同样
${变量名称}
的使用方式,也需要注意请求参数的数据类型 - 当数据文件中数据行数比并发量小的时候,会从头循环数据文件中的数据。如:并发数为5,数据文件只有3行,第一个请求用数据文件第一行的数据,第二个请求用数据文件第二行的数据,第三个请求用数据文件第三行的数据,当第四个请求发起的时候,数据文件没有第四行的数据,则会从第一行开始读起
其他常用组件
HTTP Cookie管理器
在请求中经常会遇到需要Cookie的场景,如登录后的tokenid存放在Cookie,可以使用HTTP Cookie管理器为来添加Cookie
线程组 ==> 添加 ==> 配置元件 ==> HTTP Cookie管理器
HTTP Cookie管理器配置
根据自己的需求添加Cookie即可,Cookie中的值也可以使用全局的变量名称来实现动态变化
HTTP请求默认值
如果多个请求的服务器地址、端口、协议都是同一个,可以使用HTTP请求默认值来处理
线程组 ==> 添加 ==> 配置元件 ==> HTTP请求默认值
HTTP请求默认值配置
-
像配置HTTP请求一样,但不需要填写请求路径
-
后续填写HTTP请求时就不需要再填写协议、服务器地址、端口号和连接编码格式,只需要填写请求路径和请求方法即可
-
如果Body Data中填写了共同参数,则请求会把这个请求参数拼入请求体中,但需要注意填写的格式,如上图HTTP请求默认值中填写了json格式的共同参数,包含了
current
和pageSize
两个参数,而HTTP请求中有独自请求参数,那最终的请求结果为:
请求体变成了:
{"studentName": "张三" }{"current": 1,"pageSize": 10 }
(目前想到的解决办法是各写一半,默认请求写下半段:
"current": 1,"pageSize": 10
}
HTTP请求写上半段
{"studentName": "${studentName}",
但这似乎有些另类并且不好维护)
定时器
当并发请求需要间隔时间发起请求时,可以使用定时器,这里介绍两种定时器
固定定时器
固定延迟指定时候后发起请求
线程组 ==> 添加 ==> 定时器 ==> 固定定时器
Uniform Random Timer定时器
随机定时器,随机延迟后发起请求,总体延迟时间 = 随机时间 + 常量时间
线程组 ==> 添加 ==> 定时器 ==> Uniform Random Timer
Uniform Random Timer配置
其他常见场景
多个请求顺序执行
在Jmeter中,在同一个线程组内,设置的请求是从上到下顺序执行的,也就是排得越靠顶部,越优先执行
使用上一个请求的请求结果作为下一个请求的请求参数
因为同一个线程组内,设置的请求是顺序执行的,经常会出现使用上一个请求的请求结果,作为下一个请求的请求参数。下面以新增后,根据新增的id进行详情查询为例讲解如何实现:
-
HTTP请求默认值:
-
新增的HTTP配置
- 添加JSON Extractor
-
在新增请求上 ==> 右键 ==> 添加 ==> 后置处理器 ==> JSON Extractor
-
- 配置JSON Extractor
-
JSONPath表达式参考:https://gotest.hz.netease.com/doc/jie-kou-ce-shi/xin-zeng-yong-li/can-shu-xiao-yan/jsonpi-pei/jsonpathyu-fa.html
-
- 添加JSON Extractor
-
根据id查询详情的HTTP配置
在请求参数中,使用
${}
来使用动态变量,这里使用${studentId},对应JSON Extractor中的的自定义变量名称 -
测试结果:
-
第一个请求的响应:
-
第二个请求的请求参数:
-
多个不同请求同时并发执行
一个测试计划下面可以有多个线程组,如果选择了工具类上的启动,则会启动所有的线程组,每个线程组的请求都是互不影响的。如果有多个请求不同请求同时并发的话,可以选择创建多个线程组来实现
一些JSONPath表达式
-
json数据体:
{"code":200,"data":{"type":"String","name":"userName","value":"张三"} }
获取到data中value的值:
$.data.value
-
json数据体:
{"code":200,"data":[{"type":"String","name":"userName","value":"张三"},{"type":"Integer","name":"age","value":18}] }
获取到data数组中,第一个元素的value值
$.data[0].value
-
json数据体:
{"code":200,"data":[{"type":"String","name":"userName","value":"张三"},{"type":"Integer","name":"age","value":18 }] }
获取到name为userName的value的值:
$.data[?(@.name=="userName")].value
-
json数据体:
{"code":200,"data":{array:[{"type":"String","name":"userName","value":"张三"},{"type":"Interger","name":"age","value":18}]} }
获取到array数组中name为age的value的值:
$.data.array[?(@.name=="age")].value
相关文章:
Jmeter对服务端进行压测快速上手
安装 下载 安装jmeter的之前必须先装有JDK 官网下载地址:https://archive.apache.org/dist/jmeter/binaries/ jmeter3.0的对应jdk1.7,jmeter4.0对应jdk1.8以上,否者启用jmeter也会报错 配置 配置环境变量 在系统变量PATH上加上: %JMET…...
【嵌入模型与向量数据库】
目录 一、什么是向量? 二、为什么需要向量数据库? 三、向量数据库的特点 四、常见的向量数据库产品 FAISS 支持的索引类型 vs 相似度 五、常见向量相似度方法对比 六、应该用哪种 七、向量数据库的核心逻辑 🔍 示例任务:…...
鸿蒙OSUniApp 开发实时聊天页面的最佳实践与实现#三方框架 #Uniapp
使用 UniApp 开发实时聊天页面的最佳实践与实现 在移动应用开发领域,实时聊天功能已经成为许多应用不可或缺的组成部分。本文将深入探讨如何使用 UniApp 框架开发一个功能完善的实时聊天页面,从布局设计到核心逻辑实现,带领大家一步步打造专…...
React构建组件
React构建组件 React 组件构建方式详解 React 组件的构建方式随着版本迭代不断演进,目前主要有 函数组件 和 类组件 两种核心模式,并衍生出多种高级组件设计模式。以下是完整的构建方式指南: 文章目录 React构建组件React 组件构建方式详解…...
auto.js面试题及答案
以下是常见的 Auto.js 面试题及参考答案,涵盖基础知识、脚本编写、运行机制、权限、安全等方面,适合开发岗位的技术面试准备: 一、基础类问题 什么是 Auto.js?它的主要用途是什么? 答案: Auto.js 是一个…...
OPC UA + ABP vNext 企业级实战:高可用数据采集框架指南
🚀📊 OPC UA ABP vNext 企业级实战:高可用数据采集框架指南 🚀 📑 目录 🚀📊 OPC UA ABP vNext 企业级实战:高可用数据采集框架指南 🚀一、前言 🎯二、系统…...
【springcloud学习(dalston.sr1)】Ribbon负载均衡(七)
该系列项目整体介绍及源代码请参照前面写的一篇文章【springcloud学习(dalston.sr1)】项目整体介绍(含源代码)(一) (一)Ribbon 负载均衡的理解 ribbon是一种客户端的负载均衡。类似于比如我们在火车站窗口…...
编程题 03-树1 树的同构【PAT】
文章目录 题目输入格式输出格式输入样例1(对应图一)输出样例1输入样例2(对应图二)输出样例2 题解解题思路完整代码 编程练习题目集目录 题目 给定两棵树 T 1 T_1 T1 和 T 2 T_2 T2 。如果 T 1 T_1 T1 可以通过若干次左右…...
团结引擎开源车模 Sample 发布:光照渲染优化 动态交互全面体验升级
光照、材质与交互效果的精细控制,通常意味着复杂的技术挑战,但借助 Shader Graph 14.1.0(已内置在团结引擎官方 1.5.0 版本中),这一切都变得简单易用。通过最新团结引擎官方车模 Sample,开发者能切身感受到全新光照优化与编辑功能…...
Chrome安装最新vue-devtool插件
本vue-devtool版本是官方的 v7.6.8版本,兼容性好、功能齐全且稳定。 操作步骤: 方法一: 打开谷歌浏览器 --> 右上角三个点 --> 扩展程序 --> 管理扩展程序 --> 加载已解压的扩展程序, 然后选择解压后的文件夹即可。…...
鸿蒙OSUniApp打造多功能图表展示组件 #三方框架 #Uniapp
使用UniApp打造多功能图表展示组件 在当前移动应用开发领域,数据可视化已成为不可或缺的一部分。无论是展示销售数据、用户增长趋势还是其他业务指标,一个优秀的图表组件都能有效提升用户体验。UniApp作为一款跨平台开发框架,如何在其中实现…...
海量数据Top k 与查重问题
海量数据求top k 问题: - 求最大的前k个元素、求最小的前k个元素 - 求最大的第k个元素、求最小的第k个元素 解法: - 大根堆、小跟堆 -》 优先级队列(priority_queue) - 快速分割函数 priority_queue<int,vector<int>…...
Beats
Beats是一个开放源代码的数据发送器。我们可以把Beats作为一种代理安装在我 们的服务器上,这样就可以比较方便地将数据发送到Elasticsearch或者Logstash 中。Elastic Stack提供了多种类型的Beats组件。 Beats可以直接将数据发送到Elasticsearch或者发送到Logstash&a…...
微型PCB打样厂家选型指南
智能手机、可穿戴设备、医疗电子等高精尖领域,微型PCB(印制电路板)如同设备的“神经中枢”,承载着信号传输、电源分配、元件互联等核心功能。其设计精度与制造质量直接决定了产品的性能上限与可靠性。而打样环节,则是从…...
ISP有感自发
一、黑电平 由于传感器,即便在无光的情况下,依然会产生微小的暗电流,这些暗电流可能是噪点会影响后期的调试。因此,我们便将这些电流处理为0,成为纯黑的颜色。可以在源头消除这些误差。 如何矫正黑电平: …...
编程技能:字符串函数04,直接使用 strcpy,解决报错
专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 (一)WIn32 专栏导航 上一篇:编程技能:字符串函数03,strncpy 回到目录…...
网络编程超时检测,unix域套接字,粘包
刷题: # 超时检测核心要点## 1. 基本类型### 阻塞模式- 永久等待数据,无超时机制- 典型函数:recv()阻塞调用### 非阻塞模式- 立即返回结果(成功/错误)- 设置方式:fcntl(fd, F_SETFL, O_NONBLOCK)### 超时检…...
springboot AOP 接口限流(基于IP的接口限流和黑白名单)
使用 Spring Boot 自定义注解和AOP实现基于IP的接口限流和黑白名单 在我们日常开发的项目中为了保证系统的稳定性,很多时候我们需要对系统做限流处理,它可以有效防止恶意请求对系统造成过载。常见的限流方案主要有: 网关限流: NG…...
Python uv包管理器使用指南:从入门到精通
Python uv包管理器使用指南:从入门到精通 作为一名Python开发者,你是否曾经为虚拟环境管理和依赖包安装而头疼?今天我要向大家介绍一个强大的工具——uv包管理器,它将彻底改变你的Python开发体验。 什么是uv包管理器?…...
【计算机网络】TLS中的对称加密和非对称加密的应用,应对第三方抓包的双向https认证
TLS工作流程简化版 证书验证流程 客户端通过CA的公钥验证服务器数字证书的签名,确保服务器身份可信,防止中间人攻击。 预主密钥加密传输 客户端生成预主密钥,用服务器证书中的公钥加密后发送给服务器,只有服务器(持有…...
Stable Diffusion WebUI 插件大全:功能详解与下载地址
Stable Diffusion WebUI 的强大之处在于其丰富的插件生态,这些插件可以大幅提升 AI 绘画的效率和质量。本文将详细介绍 21 个常用插件,包括它们的功能、效果说明以及下载地址,帮助你更好地使用 Stable Diffusion WebUI。 插件的安装方式 直…...
【行为型之策略模式】游戏开发实战——Unity灵活算法架构的核心实现策略
文章目录 🎮 策略模式(Strategy Pattern)深度解析一、模式本质与核心价值二、经典UML结构三、Unity实战代码(动态伤害计算系统)1. 定义策略接口与上下文2. 实现具体策略3. 客户端使用 四、模式进阶技巧1. 策略组合2. 策…...
第二十九节:直方图处理-直方图均衡化
在数字图像处理中,直方图均衡化(Histogram Equalization)是一种经典的对比度增强技术。它通过重新分配图像像素的亮度值,使图像的灰度级分布更加均匀,从而显著提升图像的视觉效果。 一、直方图基础 1.1 什么是直方图? 直方图(Histogram)是图像处理中用于描述图像像素…...
性能比拼: Nginx vs. Envoy
本内容是对知名性能评测博主 Anton Putra Nginx vs. Envoy performance benchmark 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 Envoy 被设计为服务网格中的高性能代理。 你可以将它部署在虚拟机(VM)中,或作为 sidecar 方式部…...
在 C 语言中,U、UL、ULL、L、LL 等符号使用说明
在 C 语言中,U、UL、ULL、L、LL 等符号是用于明确指定整数字面量类型的后缀,其核心作用是避免数据类型隐式转换导致的溢出或未定义行为。以下是具体分类和使用场景: 一、整数字面量后缀分类 后缀全称适用场景示例说明Uunsigned100U无符号整数…...
一般枚举题目合集
一般枚举题目合集 枚举NOIP 2011 提高组 铺地毯P2327 [SCOI2005] 扫雷蓝桥真题 跑步蓝桥真题 猜年龄 二进制枚举常用的技巧整理子集 - 力扣P10449 费解的开关UVA11464 Even Parity通过Virtual Judge提交代码正解 日期枚举蓝桥真题 跑步NOIP 2016 普及组 回文日期日期统计 写这段…...
MCP(Model Context Protocol,模型上下文协议)
1. 起因, 目的: MCP, 貌似最近很火,简单了解一下, 跟上时代节奏。看似是一个工具,一个新概念,其实是个鸡肋(仅仅代表个人观点)。 2. 先看效果 这里插入图片 3. 过程: 问题1, 什么是 MCP h…...
MQTT 在Spring Boot 中的使用
在 Spring Boot 中使用 MQTT 通常会借助 Spring Integration 项目提供的 MQTT 支持。这使得 MQTT 的集成可以很好地融入 Spring 的消息驱动和企业集成模式。 以下是如何在 Spring Boot 中集成和使用 MQTT 的详细步骤: 前提条件: MQTT Brokerÿ…...
uniapp使用全局组件,
在 Uniapp 中,如果你的组件是应用层组件(例如全局悬浮按钮、全局通知栏等),并且希望它自动出现在所有页面而无需在每个页面模板中手动添加组件标签,可以通过以下两种方案实现: 方案一:通过 app.…...
【三维重建】三维场景生成:综述
标题:《3D Scene Generation: A Survey》 来源:新加坡南洋理工大学 项目:https://github.com/hzxie/Awesome-3D-Scene-Generation 文章目录 摘要一、前言二、准备工作2.1 任务定义2.2 三维场景表示2.3 生成模型 三、方法:分层分类…...
怎样将MM模块常用报表设置为ALV默认格式(MB52、MB5B、ME2M、ME1M等)
【SAP系统研究】 对SAP系统中的报表,最方便的格式就是ALV了,可排序、可导出,非常友好。 但有些常见报表却不是默认ALV界面的,譬如MB52: 是不是有点别扭?但其实是可以后台配置进行调整的。 现将一些常用报表修改为默认ALV的方法进行总结,便于大家使用。 一、MB52、MB5…...
Flutter 开发入门:从一个简单的计数器应用开始
在当今快速发展的移动应用开发领域,Flutter 框架以其高效、跨平台的特点脱颖而出,成为许多开发者的首选。本文将通过一个简单的 Flutter 项目代码,带你深入了解 Flutter 开发的基本概念和流程。这个项目是一个简单的计数器应用,它…...
Python解释器、REPL与脚本的区别
用ChatGPT做软件测试 “初学者写代码,高手理解运行。” 要成为真正理解代码的人,必须透彻理解:Python 是如何运行你的代码的?解释器、REPL 和脚本之间的界限与联系究竟是什么? 一、编程学习常见误区:把“运…...
总共76dp 空出20dp然后放一个控件的写法
<FrameLayout android:id"id/bt_user_agree" android:layout_width"120dp" android:layout_height"76dp" > <ImageView android: 这里里上一个 android:layout_width"wrap_content" android:layout_height"40dp" …...
【PmHub后端篇】PmHub集成 Sentinel+OpenFeign实现网关流量控制与服务降级
在微服务架构中,保障服务的稳定性和高可用性至关重要。本文将详细介绍在 PmHub 中如何利用 Sentinel Gateway 进行网关限流,以及集成 Sentinel OpenFeign 实现自定义的 fallback 服务降级。 1 熔断降级的必要性 在微服务架构中,服务间的调…...
C#扩展方法的入门理解
public static class CanGetModelExtension {public static T GetModel<T>(this ICanGetModel self) where T : class, IModel >self.GetArchitecture().GetModel<T>(); } 前言: 在学习QFramework时,看底层框架代码注意到这个函数&#…...
HTML应用指南:利用POST请求获取全国圆通快递服务网点位置信息
圆通快递作为国内物流行业的领军企业,自2000年成立以来,始终秉持 “客户要求,圆通使命” 的服务宗旨,致力于为客户提供高效、优质的物流服务。凭借其庞大的物流网络、先进的信息技术以及卓越的运营管理,圆通快递在激烈…...
vulnhub靶场——secarmy
靶机:secarmy靶机,IP地址为192.168.230.18 攻击:kali,IP地址为192.168.230.134 靶机和攻击机都采用VMware虚拟机,都采用NAT模式 端口扫描: nmap 192.168.230.18 -O -A -p- --reason -sV 21/tcp (ftp): 开…...
Daily AI 20250514 (迁移学习与元学习)
参考资料:神经网络与深度学习 目录 迁移学习 (Transfer Learning)归纳迁移学习转导迁移学习 元学习 (Meta Learning)基于优化器的元学习模型无关的元学习(Model-AgnosticMeta-Learning,MAML&am…...
牛市买卖数字货币逻辑
在牛市中进行数字货币交易,核心逻辑是顺势而为、控制风险、把握周期。以下是关键策略和逻辑框架: 一、牛市的核心逻辑 资金驱动 牛市由增量资金(新投资者、机构资金、杠杆资金)推动,流动性充裕时,市场情绪乐…...
7.DTH11和PWM波
目录 室内/本地温湿度检测 温湿度传感器介绍 获取手册和例程的方法 从手册中提取重要信息 传感器的分类 温度传感器类型 DHT11 的介绍 温湿度传感器的接口 温湿度传感器的时序 温湿度传感器电路介绍 IO 的配置 定时器输出 PWM 波 PWM 波介绍 PWM 波的作用&#x…...
在UI 原型设计中,交互规则有哪些核心要素?
在UI 原型设计中,交互规则主要有三个核心要素,分别为重要性、原则与实践,具体表现在: 一、交互规则在 UI 原型设计中的重要性 明确交互逻辑:设计阶段制定交互规则,清晰定义界面元素操作响应。 如社交应用…...
树的直径 | 树的最长路径
树的直径: 树上任意两节点之间最长的简单路径即为树的「直径」。 定理: 在一棵树上,从任意节点 u 开始进行一次 DFS,到达的距离其最远的节点 v 必为直径的一端。 B4016 树的直径 - 洛谷 思路: 由于这题中每条边的…...
AbMole解读:脂质体的关键组分和主要合成方法
脂质体(Liposome)是一种由磷脂等两性分子自发形成的封闭囊泡结构,随着纳米技术、材料科学等多学科的交叉发展,脂质体的研究与应用进入了一个新的阶段,并在肿瘤研究、疫苗研发、基因递送等多个领域发挥着关键作用。AbMo…...
Python爬虫之品牌口碑数据抓取
上一篇我们介绍了爬虫营销的优势,这次我就展开详细的说说,如何通过爬取社交媒体或电商平台的公开评论来分析自己或竞争对手的品牌声誉。 选择微博这样的平台,因为它的数据相对公开,而且有API支持,但要注意频率限制和反…...
【android bluetooth 协议分析 12】【A2DP详解 1】【车机侧蓝牙音乐免切源介绍】
“车机蓝牙音乐免切源” 是近年来车载系统(IVI,In-Vehicle Infotainment)中常见的一个用户体验优化功能。它主要是为了简化蓝牙音乐播放流程、减少用户操作,提升使用便捷性。 一、什么是“切源”? 在车机系统中&#…...
眼镜店哪个品牌好,你会选择哪一款眼镜
有些人买眼睛是为了耍帅,有些人买眼镜,可能就是为了调节视力。现在手机以及其他的电子产品越来越普及,近视眼的人群是越来越多了,那么要准备去配眼镜的话,就要找到一个正规的眼镜店,一起来了解一下眼镜店哪…...
基于EFISH-SCB-RK3576/SAIL-RK3576的畜禽养殖监控仪技术方案
(国产化替代J1900的农业物联网解决方案) 一、硬件架构设计 多源环境感知模块 空气质量监测: 集成NH₃/CO₂/H₂S三合一气体传感器(量程0-500ppm,精度2%FS),采样间隔≤1秒激光粉尘检测…...
linux - 权限的概念
目录 用户权限 超级用户与普通用户的区别 超级用户(root): 普通用户: 切换用户身份 使用sudo执行高权限命令 用户管理 用户组管理 文件权限 文件访问者类别 基本权限 权限表示方法 权限修改 chmod chown chgrp u…...
LeRobot 框架的核心架构概念和组件(中)
本文档概述构成 LeRobot 框架的核心架构概念和组件。它介绍主要的子系统,并解释它们如何相互作用以实现机器人学习。 。。。。。。继续。。。。。。 环境接口 环境系统提供与模拟环境交互的统一接口。这些环境允许在部署到物理机器人之前,在受控环境中…...