性能测试工具篇
文章目录
- 目录
- 1. JMeter介绍
- 1.1 安装JMeter
- 1.2 打开JMeter
- 1.3 JMeter基础配置
- 1.4 JMeter基本使用流程
- 1.5 JMeter元件作用域和执行顺序
- 2. 重点组件
- 2.1 线程组
- 2.2 HTTP取样器
- 2.3 查看结果树
- 2.4 HTTP请求默认值
- 2.5 JSON提取器
- 2.6 用户定义的变量
- 2.7 JSON断言
- 2.8 同步定时器(集合点)
- 2.9 事务控制器
- 2.10 常见监听器
- 2.10.1 聚合报告
- 2.10.2 Response Times Over Time
- 2.10.3 Transactions per Second(TPS)
- 2.11 CSV数据文件设置
- 2.12 HTTP Cookie管理器
- 2.13 Jmeter插件
- 2.13.1 Stepping Thread Group
- 3. 测试报告
- 4. 性能分析
- 4.1 响应时间
- 4.2 错误率(可靠性)
- 4.3 吞吐量
目录
- JMeter介绍
- 重点组件
- 测试报告
- 性能分析
1. JMeter介绍
环境要求:
Apache JMeter 是 Apache 组织基于 Java 开发的压力测试工具,用于对软件做性能测试
1.1 安装JMeter
下载tar包,解压即可:
解压完成后:
1.2 打开JMeter
方式一:点击bat文件
方式二:命令行启动(推荐)
step1:添加JMeter系统环境变量
step2:保存后打开命令行工具
输入命令jmeter即可启动JMeter工具
1.3 JMeter基础配置
修改字体为中文:
在jmeter的bin目录下,修改文件中的内容:language=zh_CN
1.4 JMeter基本使用流程
补充:
- 两个最常用的按钮
- 运行前需要保存
- 启动JMeter
- 在“测试计划”下添加“线程组”
- 在“线程组”下添加“HTTP”取样器
- 填写“HTTP请求”的相关请求数据
- 在“线程组”下添加“查看结果树”监听器
- 点击“启动”按钮运行,查看接口测试结果
1.5 JMeter元件作用域和执行顺序
在JMeter中,元件的作用域和执行顺序是非常重要的概念。
作用域:
JMeter元件的作用域主要由测试计划的树形结构中的元件父子关系来确定。
执行顺序:
取样器(sampler)元件内组件不依赖其他元件就可执行,因此取样器不存在作用问题,元件作用域只对它的子节点有作用,其他作用域默认根据测试计划中树形结构来定。
2. 重点组件
2.1 线程组
控制JMeter将用于执行测试的线程数,也可以把一个线程理解为一个测试用户。
2.2 HTTP取样器
2.3 查看结果树
注:
2.4 HTTP请求默认值
补充:
博客中涉及到的接口协议、IP、端口号全都一样,可以单独抽取出来存放在默认值中,其他接口就可以省略不写协议、IP、端口号。
补充:
在测试博客列表页时,当我们像博客登录接口一样,填写了协议、IP、端口号、请求方法、路径之后,会发现接口会报错,是因为我们没有在请求头中添加登录凭证。(因为只有登录状态下才能查看博客列表页)
在Postman中加上之后是这样的:
在Jmeter中:
但是我们现在给的登录凭证是配置死的(会过期,或者换成其他用户登录就不行了),我们应该要给登录接口返回的data值,接下来我们就来介绍如何实现。
2.5 JSON提取器
接口响应成功,通过提取返回值对应字段,可用于其他接口的参数配置
- 添加JSON提取器
JSON操作符参考:
- 添加JSON配置
- 配置json提取的参数
2.6 用户定义的变量
添加方式:线程组 — 配置元件 — 用户定义的变量
补充:
我们在测试发布博客接口时会遇到下面的问题:
2.7 JSON断言
接口发送请求成功,响应码为200并不能完全代表接口请求成功,我们更多需要关注接口响应数据是否符合预期。
- 添加JSON断言
- 添加JSON配置
注意:
- 若不选Additionally assert value,表示添加断言值,则可用来判断字段是否存在
- 选择Additionally assert value,则必须添加Expected Value期望的断言值(精确匹配,区分大小写)
- 若不选Match as regular expression正则匹配,则Expected Value必须填写完整,少一个字符都会导致断言失败
- 若选择Match as regular expression正则匹配,则Expected Value可以仅写上部分关键词即可断言成功
2.8 同步定时器(集合点)
为了解决这个问题,达到并发的效果,我们可以添加同步计时器:
JMeter同步定时器的作用主要在于模拟多用户并发访问的场景,确保多个线程能够同时执行某个操作,以达到真正的并发效果。
当多个线程同时启动时,它们可能会在不同的时间间隔内执行,这样就无法达到真正的并发效果。同步定时器的作用就是将这些线程的执行时间同步,使它们在同一时间点执行。它可以在多个线程之间制造一定的延迟,直到同时到达指定时间点,再同时执行后续的操作。
此外,同步定时器可以理解为集合点,当线程数量达到指定值后,再一起释放,可以瞬间产生很大的压力。这样,可以更好地模拟真实的用户并发访问场景,提高测试的准确性和可靠性。
在性能测试过程中,为了真实模拟多个用户同时进行操作以度量服务器的处理能力,可以使用同步定时器来设置集合点。不过,虽然通过加入集合点可以约束请求同时发送,但不能确保请求同时到达服务器,所以只能说是较真实模拟并发。
注:
2.9 事务控制器
JMeter事务控制器的作用主要用于测试执行嵌套测试元素所花费的总时间,这相当于模拟用户进行一系列操作的测试。
在进行页面性能测试或API性能测试时,事务控制器是一个非常重要的工具。它可以帮助测试人员更准确地评估系统性能,尤其是在涉及多个接口或操作的复杂场景中。例如,在订单提交的过程中,可能需要调用多个接口,并且某些接口可能依赖于前一个接口的结果。在这种情况下,使用事务控制器可以将这些接口统一视为一个事务进行性能测试,从而得到更接近真实场景的性能测试结果。
若不添加事务控制器,则一个接口即一个事务。
添加了事务控制器后,可以将多个接口统一放到一个事务控制器下作为一个事务。
2.10 常见监听器
2.10.1 聚合报告
从聚合报告可以看到性能测试过程中整体的数据变化。
2.10.2 Response Times Over Time
建议看完下面的监听器插件后再看这里。
Response Times Over Time主要用于监听整个事务运行期间的响应时间。在测试过程中,它可以帮助测试人员观察并分析响应时间的实时平均值以及整体响应时间的走向。通过这一监听器,测试人员能够更直观地了解系统在不同时间点的响应性能,从而发现可能存在的性能问题或瓶颈。
Response Times Over Time的图形展示中,横坐标通常代表运行时间,而纵坐标则代表响应时间(单位是毫秒)。测试人员可以根据图形中的趋势线来判断响应时间的稳定性以及是否存在大的波动。例如,如果响应时间在某个时间点突然增加,这可能意味着系统在该时间点遇到了性能问题。
2.10.3 Transactions per Second(TPS)
建议看完下面的监听器插件后再看这里。
JMeter中的 Transactions per Second(TPS)监听器是一个用于分析系统吞吐量的重要工具。TPS,即每秒事务数,表示一个客户机向服务器发送请求后服务器做出反应的过程。这个指标反映了系统在同一时间内处理业务的最大能力。TPS值越高,说明系统的处理能力越强。
在使用TPS监听器时,横坐标通常代表运行时间,而纵坐标则代表TPS值。通过监听器展示的图表,可以清晰地看到TPS值随时间的变化情况。
2.11 CSV数据文件设置
以登陆接口为例,当我们执行登陆接口的性能测试时,手动配置了用户名和密码为固定的username和password,然而实际使用中不可能只有一个用户登陆,为了模拟更真实的登录环境,我们需要提供更多的用户username和password来实现登录操作。
添加方式:线程组⸺配置元件⸺CSV数据文件设置
操作步骤:
- CSV数据文件设置
- 文件名:填写csv文件的路径,建议使用绝对路径
- 文件编码:UTF-8
- 变量名称:从csv数据文件中读起的数据需要保存到的变量名,有多个变量时用逗号分隔
- 是否忽略首行:是否从csv数据文件第一行开始读取
- 分隔符:要求与csv数据文件中多列的分隔符一致
- 遇到文件结束符再次循环:若选择为True当数据不够的时候会从头取;若选择False,则需要勾选下面的配置,遇到文件结束符停止线程,这里如果不勾选,请求将会报错
- 编写test.csv文件,示例:
- 修改登陆接口及其他涉及到username和password获取的参数
修改完该配置后,登陆接口发起请求时将从csv文件中获取配置好的username和password参数,获取顺序为从上往下依次获取
- 修改线程组中线程数,使得每次取到的username和password都不一样
- 运行结果
2.12 HTTP Cookie管理器
HTTP Cookie管理器像Web浏览器一样存储和发送Cookie。如果HTTP请求并且响应包含cookie,则Cookie管理器会自动存储该cookie,并将其用于将来对该特定网站的所有请求。每个JMeter线程都有自己的“cookie存储区”。因此,正在测试使用cookie存储会话信息的网站,则每个JMeter线程都将拥有自己的会话,此类Cookie不会显示在Cookie管理器显示屏上,可以使用“查看结果树监听器”查看。
缓存配置可选择standard(标准)或compatibility(兼容的),当然也可以手工添加一些cookie。
2.13 Jmeter插件
下载Jmeter插件功能:
将下载好的插件放到jmeter下lib/ext文件夹下:
此时,jmeter界面右上角将会展示一个小蝴蝶形状的工具,该工具即jmeter插件功能,点击该功能可以下载jmeter中支持的各种插件:
在真实企业压测场景中,我们通常为一点一点的逐步增加线程数,因此需要安装新的插件来支持线程数的配置。
通过插件管理工具下载其他插件:
- 在插件中下载其他监听器插件
- 在插件中下载线程组插件
点击Apply Changes and Restart JMeter等待下载完成并重启JMeter:
下载完成后再线程和监听器中可以看到新增的元件:
2.13.1 Stepping Thread Group
梯度压测线程组
- This group will start:启动多少个线程,同线程组中的线程数
- First, wait for:等待多少秒才开始压测,一般默认为0
- Then start:一开始有多少个线程数,一般默认为0
- Next,add:下一次增加多少个线程数
- threads every:当前运行多长时间后再次启动线程,即每一次线程启动完成之后的的持续时间
- using ramp-up:启动线程的时间;若设置为5秒,表示每次启动线程都持续5秒
- then hold load for:线程全部启动完之后持续运行多长时间
- finally,stop / threads every:多长时间释放多少个线程;若设置为5个和1秒,表示持续负载结束之后每1秒钟释放5个线程
3. 测试报告
JMeter测试报告是一个全面而详细的文档,它提供了关于测试执行结果的详细信息,帮助用户全面评估系统的性能并进行性能优化。
生成性能测试报告的命令:
Jmeter -n -t 脚本文件 -l 日志文件 -e -o 目录
-n : 无图形化运行
-t : 被运行的脚本
-l : 将运行信息写入日志文件,后缀为jtl的日志文件
-e : 生成测试报告
-o : 指定报告输出目录
注意: 日志文件和目录可以不存在,若为已经存在的情况下需要保证内容为空,否则会出现错误!
正确演示示例:
性能测试报告生成成功后,在rizhi文件夹下将出现以下内容:
双击index.html文件,界面展示如下:
4. 性能分析
通过三大指标来分析性能问题
4.1 响应时间
如果响应时间超过了要求,代表系统到了瓶颈
注意事项:分析在多少线程的情况下发生了超标
响应时间变化的原因:
系统不稳定,有时快有时慢
随着并发压力变大而慢慢变慢,响应时间变高
4.2 错误率(可靠性)
⾼并发场景下,系统是否能够正常处理业务
要求:99.99% 可靠:99.9999%
错误率高的原因:
接口请求错误
服务器无法继续处理,达到了瓶颈(代码写的不好,内存泄漏、硬件资源等)
后端系统限流(系统里配置了不能超过多少并发)、熔断、降级
什么是熔断、降级?
熔断:防止系统因某个服务的故障而整体崩溃。当电商平台上用户支付时,收银台发现某个支付渠道,如微信支付失败率突增,超时严重,那么就可以临时把这个支付方式熔断掉
降级:主动关闭一些非核心功能,以确保核心功能的正常运行。某次腾讯视频挂了的时候,用户名称默认显示腾讯用户,这也是一种降级方式,用兜底名称做展示
4.3 吞吐量
吞吐量越大,性能越好;吞吐量相对稳定或者变低,可能系统达到了性能瓶颈
吞吐量变化规律:
波动很大:代表系统性能不稳定
慢慢变高,再趋于稳定:和并发量强相关。如果并发量小于吞吐量,慢慢增大并发量,吞吐量也会随之增加
慢慢变低,并发量也减少了:要么说明性能测试要结束了,并发减少;也可能是系统变的卡顿,从而导致响应时间变慢,导致单个线程发起的并发量变少
相关文章:
性能测试工具篇
文章目录 目录1. JMeter介绍1.1 安装JMeter1.2 打开JMeter1.3 JMeter基础配置1.4 JMeter基本使用流程1.5 JMeter元件作用域和执行顺序 2. 重点组件2.1 线程组2.2 HTTP取样器2.3 查看结果树2.4 HTTP请求默认值2.5 JSON提取器2.6 用户定义的变量2.7 JSON断言2.8 同步定时器&#…...
【Hive入门】Hive性能调优之Join优化:深入解析MapJoin与Sort-Merge Join策略
目录 前言 1 Hive Join操作基础 1.1 Join操作的类型与挑战 1.2 Hive Join执行机制 2 MapJoin优化策略 2.1 MapJoin原理 2.2 MapJoin适用场景 2.3 MapJoin关键参数 3 Sort-Merge Join优化策略 3.1 Sort-Merge Join原理 3.2 Sort-Merge Join优势 3.3 关键配置参数 3…...
【Unity】使用XLua实现C#访问Lua文件
先引入XLua文件中的Plugins和XLua文件夹于Unity项目的Asset文件中 XLua_github链接 建立Lua虚拟机:LuaEnv luaEnv new LuaEnv(); 关闭虚拟机,及时释放资源:luaEnv.Dispose(); Resources文件夹下加载lua文件(假设文件路径为Resour…...
AXI中的out of order和interleaving的定义和两者的差别?
AXI中的out of order和interleaving的定义和两者的差别 摘要:在 AXI (Advanced eXtensible Interface) 协议中,Out-of-Order 和 Interleaving 是两个与事务处理顺序和数据传输相关的概念,它们都与 AXI 协议支持的多事务并发处理能力有关&…...
生产级RAG系统一些经验总结
本文将探讨如何使用最新技术构建生产级检索增强生成(RAG)系统,包括健壮的架构、向量数据库(Faiss、Pinecone、Weaviate)、框架(LangChain、LlamaIndex)、混合搜索、重排序器、流式数据接入、评估策略以及实际部署技巧。 引言:检索增强生成的力量 大型语…...
sftp连接报错Received message too long 168449893
sftp连接报错Received message too long 168449893 一、openEuler传文件报错二、分析问题三、解决问题endl 一、openEuler传文件报错 [rootRocky9-12 ~]# scp apache-tomcat-10.1.33.tar.gz root10.0.0.14:Authorized users only. All activities may be monitored and report…...
Java中修饰类的关键字
Java中修饰类的关键字 在web编程课上,老师提问了Java中各种修饰类的关键字的用途和区别,一时间我头脑空白,现在课后重新梳理一遍Java中修饰类的各种关键字的区别和用法。在Java编程中,修饰类的关键字起着至关重要的作用ÿ…...
2025年人工智能火爆技术总结
2025年人工智能火爆技术总结: 生成式人工智能 生成式人工智能可生成高质量的图像、视频、音频和文本等多种内容。如昆仑万维的SkyReels-V2能生成无限时长电影,其基于扩散强迫框架,结合多模态大语言模型和强化学习等技术,在运动动…...
脑机接口技术:开启人类与机器的全新交互时代
在科技飞速发展的今天,人类与机器的交互方式正经历着前所未有的变革。从最初的键盘鼠标,到触摸屏,再到语音控制,每一次交互方式的升级都极大地提升了用户体验和效率。如今,脑机接口(Brain-Computer Interfa…...
Arduino程序函数详解与实际案例
一、Arduino程序的核心架构与函数解析 Arduino程序的核心由两个函数构成:setup() 和 loop()。这两个函数是所有Arduino代码的骨架,它们的合理使用决定了程序的结构和功能。 1.1 setup() 函数:初始化阶段 setup() 函数在程序启动时仅执行一次,用于完成初始化配置,例如设置…...
2025年RAG技术发展现状分析
2025年,大模型RAG(检索增强生成)技术经历了快速迭代与深度应用,逐渐从技术探索走向行业落地,同时也面临安全性和实用性的新挑战。以下是其发展现状的综合分析: 一、技术架构的持续演进 从单一到模块化架构 …...
C++11新特性_范围-based for 循环
based for 循环介绍 范围 - based for 循环(Range-based for loop)是 C11 引入的一种新的 for 循环语法,它可以更简洁地遍历容器和数组。 遍历数组:定义了一个整数数组 arr,使用范围 - based for 循环 for (int num :…...
小牛电动:荣登央视舞台,引领智能出行新潮流
在这个科技飞速发展的时代,出行方式也在不断地变革与创新。而在两轮电动车领域,有一个品牌凭借其卓越的技术、独特的设计和优质的服务脱颖而出,那就是小牛电动。近日,小牛电动荣登央视舞台,成为备受瞩目的焦点…...
Three.js在vue中的使用(一)-基础
Three.js 是一个基于 WebGL 的 JavaScript 3D 图形库,它简化了在网页中创建和渲染 3D 场景的复杂性。Three.js 提供了丰富的功能,如光照、材质、几何体、动画、控制器等,使得开发者可以快速构建交互式的 3D 应用。 🧠 Three.js 原理概述 1. WebGL 基础 Three.js 底层使用…...
开发板型号 ESP32-DevKitC-32模块型号 ESP32-WROOM-32 和主控芯片 ESP32-D0WDQ6-V3
以下是关于开发板型号 ESP32-DevKitC-32、模块型号 ESP32-WROOM-32 和主控芯片 ESP32-D0WDQ6-V3 的详细介绍: 开发板型号:ESP32-DevKitC-32 概述:ESP32-DevKitC 是乐鑫推出的一款基于 ESP32 模组的小型开发板,板上模组的绝大部…...
【C语言练习】015. 声明和初始化指针
015. 声明和初始化指针 015. 声明和初始化指针1. 声明指针示例1:声明一个指向整数的指针2. 初始化指针示例2:将指针初始化为`NULL`示例3:将指针初始化为某个变量的地址示例4:将指针初始化为动态分配的内存地址3. 使用指针访问和修改变量的值示例5:使用指针访问和修改变量的…...
手撕哈希表
引入:unordered_set /map是什么? 库里面除开set和map,还有unordered_set 和 unordered_map,区别在于: ①:set和map的底层结构是红黑树,而unordered_set和unordered_map的底层是哈希表 ②&…...
编程题python常用技巧-持续
1.字典 1.1排序 在Python中,要按照字典的值进行排序,可以按照以下步骤操作: 方法说明 获取键值对列表:使用 dict.items() 获取字典的键值对视图。排序键值对:使用 sorted() 函数,并通过 key 参…...
大模型蒸馏技术
提问:请写一篇关于蒸馏大模型的详细解说(论文),要求配有图并不少于8000字。 Deepseek: 大模型蒸馏技术:原理、方法与产业实践 ——基于知识压缩与效率优化的深度解析 目录 引言:大模型时代的…...
深入理解C语言中的整形提升与算术转换
深入理解C语言中的整形提升与算术转换 一.整形提升:概念与原理 在C语言中,整形提升(Integer Promotion)是一个重要但容易被忽视的概念。它指的是在表达式中,任何小于int类型的整型(如char、short…...
企业经营系统分类及功能详解
近年来互联网行业下行,招聘少,要求离谱,年龄学历背景已经卡的死死的,技术再突出也没用。 但对于软件开发来说,互联网只是一小部分,企业级系统软件开发,虽然不如互联网大起大落,但重…...
IRF2.0IRF3.1
1、IRF3定义 IRF3是一种能够提高网络接入层的接入能力和管理效率的纵向网络整合虚拟化技术,采用IEEE 802.1BR标准协议实现。IRF3将多台PEX设备(Bridge Port Extender)连接到父设备(Parent device)上,将每台…...
【C++】类和对象【中下】
目录 一、类与对象1、运算符重载1.2 赋值运算符重载1.3 <<运算符和>>运算符1.4 前置与后置 2、 const成员函数3、取地址运算符重载 个人主页<—请点击 C专栏<—请点击 一、类与对象 本期的主题是一步步完善日期类的编写,将要讲解的知识融入在代…...
ThreadLocal详解
什么是 ThreadLocal? ThreadLocal 是 Java 中的一个工具类,用于为每个线程提供独立的变量副本,使得每个线程可以独立操作自己的变量,避免多线程环境下的数据竞争问题。它的核心思想是线程封闭(Thread Confi…...
Vue3 + OpenLayers 企业级应用进阶
1. 企业级架构设计 1.1 微前端架构集成 // src/micro-frontend/map-container.ts import { Map } from ol; import { registerMicroApps, start } from qiankun;export class MapMicroFrontend {private map: Map;private apps: any[];constructor(map: Map) {this.map map;…...
如何提升自我执行力?
提升个人执行力是一个系统性工程,需要从目标管理、习惯养成、心理调节等多方面入手。 以下是具体方法,结合心理学和行为科学原理,帮助你有效提升执行力: 一、明确目标:解决「方向模糊」问题 1. 用SMART原则设定目标 …...
L3-041 影响力
下面给出基于“切比雪夫距离”(Chebyshev 距离)之和的高效 O(nm) 解法。核心思想是把 ∑ u 1 n ∑ v 1 m max ( ∣ u − i ∣ , ∣ v − j ∣ ) \sum_{u1}^n\sum_{v1}^m\max\bigl(|u-i|,|v-j|\bigr) u1∑nv1∑mmax(∣u−i∣,∣v−j∣) 拆成两个…...
【ESP32】st7735s + LVGL使用-------图片显示
【ESP32】st7735s + LVGL使用-------图片显示 1、文件准备2、工程搭建3、代码编写4、应用部分5、函数调用6、显示效果移植部分参考这个博客: 【ESP32】st7735s + LVGL移植 1、文件准备 本次图片放在内部存储,先使用转换工具将要显示的图片转换好。 文件名保存为xx.c,xx这…...
MERGE存储引擎(介绍,操作),FEDERATED存储引擎(介绍,操作),不同存储引擎的特性图
目录 MERGE存储引擎(合并) 介绍 创建表 语法 示例 查看.mrg文件 操作 查询结果 示例 重建逻辑表 FEDERATED存储引擎 结盟 介绍 编辑 应用场景 操作 开启 创建表 对本地表进行数据插入 EXAMPLE存储引擎 不同存储引擎的特性编辑 MERGE存储引擎(合并) 介绍…...
初学者如何学习AI问答应用开发范式
本文是根据本人2年大模型应用开发5年小模型开发经验,对AI问答应用的开发过程进行总结。 技术范式 现在超过80%的AI问答是 提示词 大模型, 然后就是RAG 方案,这两种无疑是主流方案。 1、提示词大模型 适合于本身业务不超过大模型的知识范围…...
GESP2024年6月认证C++八级( 第二部分判断题(1-5))
判断题2: #include <iostream> #include <iomanip> using namespace std;int main() {double a 1e308;double b 1e-10;double orig_a a, orig_b b;a a b;b a - b;a a - b;cout << fixed << setprecision(20);cout << "…...
npm命令介绍(Node Package Manager)(Node包管理器)
文章目录 npm命令全解析简介基础命令安装npm(npm -v检插版本)初始化项目(npm init)安装依赖包(npm install xxx、npm i xxx)卸载依赖包(npm uninstall xxx 或 npm uni xxx、npm remove xxx&…...
小刚说C语言刷题—1602总分和平均分
1.题目描述 期末考试成绩出来了,小明同学语文、数学、英语分别考了 x、y、z 分,请编程帮助小明计算一下,他的总分和平均分分别考了多少分? 输入 三个整数 x、y、z 分别代表小明三科考试的成绩。 输出 第 11行有一个整数&…...
python类私有变量
在Python中,要将一个属性定义为类的内部属性(也就是私有属性),通常会在属性名称前加一个下划线(_)或两个下划线(__)。这两种方式有不同的效果: 单下划线(_&a…...
前端如何转后端
前端转后端是完全可行的,特别是你已经掌握了 JavaScript / TypeScript,有一定工程化经验,这对你学习如 Node.js / NestJS 等后端技术非常有利。下面是一条 系统化、实践导向 的路线,帮助你高效完成从前端到后端的转型。 ✅ 一、评…...
数字智慧方案5976丨智慧农业顶层设计建设与运营方案(59页PPT)(文末有下载方式)
详细资料请看本解读文章的最后内容。 资料解读:智慧农业顶层设计建设与运营方案 在现代农业发展进程中,智慧农业成为推动农业转型升级、提升竞争力的关键力量。这份《智慧农业顶层设计建设与运营方案》全面且深入地探讨了智慧农业的建设现状、需求分析、…...
软件工程国考
软件工程-同等学力计算机综合真题及答案 (2004-2014、2017-2024) 2004 年软工 第三部分 软件工程 (共 30 分) 一、单项选择题(每小题 1 分,共 5 分) 软件可用性是指( )…...
linux python3安装
1 安装依赖环境 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel 2 mkdir -p /usr/python3 3 cd usr/python3; tar -zxvf Python-3.8.3.tgz;cd Python-3.8.3 4 ./confi…...
软件测评中心如何保障软件质量与性能?评测范围和标准有哪些?
软件测评中心对保障软件质量与性能有关键作用,它像软件世界里的质量卫士,会评测各类软件,能为用户选出真正优质好用的软件,我将从多个方面向大家介绍软件测评中心。 评测范围 软件测评中心的评测范围很广,它涵盖了常…...
从MCP基础到FastMCP实战应用
MCP(https://github.com/modelcontextprotocol) MCP(模型上下文协议) 是一种专为 基于LLM的工具调用外部工具而设计的协议 , 本质上是 LLM ↔ 工具之间的RPC(远程过程调用) 的一种安全且一致的处理方式, 是…...
【云备份】服务端工具类实现
1.文件实用工具类设计 不管是客户端还是服务端,文件的传输备份都涉及到文件的读写,包括数据管理信息的持久化也是如此,因此首先设 计封装文件操作类,这个类封装完毕之后,则在任意模块中对文件进行操作时都将变的简单化…...
如何在Cursor中使用MCP服务
前言 随着AI编程助手的普及,越来越多开发者选择在Cursor等智能IDE中进行高效开发。Cursor不仅支持代码补全、智能搜索,还能通过MCP(Multi-Cloud Platform)服务,轻松调用如高德地图API、数据库等多种外部服务ÿ…...
PB的框架advgui反编译后控件无法绘制的处理(即导入pbx的操作步骤)
advguiobjects.pbl反编译后,涉及到里面一个用pbni开发的一个绘制对象需要重新导入才可以。否则是黑色的无法绘制控件: 对象的位置在: 操作: 导入pbx文件中的对象。 恢复正常: 文章来源:PB的框架advgui反编译…...
第 11 届蓝桥杯 C++ 青少组中 / 高级组省赛 2020 年真题,选择题详细解释
一、选择题 第 2 题 在二维数组按行优先存储的情况下,元素 a[i][j] 前的元素个数计算如下: 1. **前面的完整行**:共有 i 行,每行 n 个元素,总计 i * n 个元素。 2. **当前行的前面元素**:在行内&#x…...
Python 装饰器基础知识科普
装饰器定义与基本原理 装饰器本质上是一个可调用的对象,它接收另一个函数(即被装饰的函数)作为参数。装饰器可以对被装饰的函数进行处理,之后返回该函数,也可以将其替换为另一个函数或可调用对象。 代码示例理解 有…...
数字基带信号和频带信号的区别解析
数字基带信号和数字频带信号是通信系统中两种不同的信号形式,它们的核心区别在于是否经过调制以及适用的传输场景。以下是两者的主要区别和分析: 1. 定义与核心区别 数字基带信号(Digital Baseband Signal) 未经调制的原始数字信号…...
Nginx Proxy Manager 中文版安装部署
目录 Nginx Proxy Manager 中文版安装部署教程一、项目简介1.1 主要功能特点1.2 项目地址1.3 系统架构与工作原理1.4 适用场景 二、系统要求2.1 硬件要求2.2 软件要求 三、Docker环境部署3.1 CentOS系统安装Docker3.2 Ubuntu系统安装Docker3.3 安装Docker Compose 四、安装Ngin…...
类和对象(拷贝构造和运算符重载)下
类和对象(拷贝构造和运算符重载)下 这一集的主要目标先是接着上一集讲完日期类。然后再讲一些别的运算符的重载,和一些语法点。 这里我把这一集要用的代码先放出来:(大家拷一份代码放在编译器上先) Date.h #include <iostream> #include <cassert> …...
Codeforces Round 1008 (Div. 2) C
C 构造 题意:a的数据范围大,b的数据范围小,要求所有的a不同,考虑让丢失的那个a最大即可。问题变成:构造一个最大的a[i] 思路:令a2是最大的,将a1,a3,a5....a2*n1,置为最大的b,将a4,a…...
操作系统(1)多线程
在当今计算机科学领域,多线程技术已成为提高程序性能和响应能力的关键手段。无论是高性能计算、Web服务器还是图形用户界面应用程序,多线程都发挥着不可替代的作用。本文将全面介绍操作系统多线程的概念、实现原理、同步机制以及实际应用场景,…...