Jmeter使用介绍
文章目录
- 前言
- Jmeter简介
- 安装与配置
- JDK安装与配置
- JMeter安装与配置
- 打开JMeter
- 方式一
- 方式二
- 设置Jmeter语言为中文
- 方法一(仅一次性)
- 方法二(永久设置成中文)
- Jmeter文件常用目录
- 元件与组件
- 元件
- 组件
- 元件的作用域
- 元件的执行顺序
- 第一个案例
- 添加线程组
- 添加 HTTP 请求
- 添加查看结果树
- 响应结果乱码问题
- 线程组
- 并行与串行
- 线程组的分类
- 线程组参数详解
- HTTP请求
- HTTP请求参数详解
- 查看结果树
- HTTP信息头管理器
- HTTP请求默认值
- HTTP Cookie管理器(HTTP Cookie Manager)
- 参数化
- 用户定义变量(全局变量)
- 用户参数
- CSV数据文件方式
- CSV数据文件设置参数详解
- 函数
- 计数器${__counter(,)}
- 断言
- 响应断言
- JSON断言
- 断言持续时间
- Jmeter关联
- 正则表达式提取器
- XPath提取器
- JSON提取器
- Jmeter属性
- Jmeter录制脚本(仅作介绍)
- Jmeter直连数据库
- 逻辑控制器
- 如果(if)控制器
- 循环控制器
- Foreach控制器
- 定时器
- 同步定时器
- 常数吞吐量定时器
- 固定定时器
- 参考目录
前言
阅读本文前请注意最后编辑时间,文章内容可能与目前最新的技术发展情况相去甚远。欢迎各位评论与私信,指出错误或是进行交流等。
Jmeter简介
JMeter是一个纯Java编写的开源软件,主要用于进行接口测试和性能测试。它支持测试的应用/服务/协议包括Web (HTTP, HTTPS)、SOAP/REST Webservices、FTP、Database via JDBC等。我们最常使用的是HTTP和HTTPS协议。
安装与配置
JDK安装与配置
因为jmeter是java开发的,所以运行的时候必须先要安装jdk才可以。请注意,Jmeter对于JDK的版本有一定的要求,可以在下文Jmeter下载地址中查看,一般要求Java 8+。关于JDK的安装与配置请各位自行资料,网上已有图片配合的详细安装教程。
JMeter安装与配置
下载地址:Apache JMeter - Download Apache JMeter

打开JMeter
注意:不管用使用哪一种方式打开,都会打开一个cmd窗口。如果关闭这个cmd窗口,打开的jmeter也会被关闭。
方式一
Jmeter下载后无需安装,解压后即可使用。解压后到其apache-jmeter/bin目录如下,双击jmeter.bat 即可以运行。

方式二
配置环境变量,利用cmd控制台打开Jmeter。有需求的朋友请自行上网查阅资料进行配置。
设置Jmeter语言为中文
虽然Jmeter自带的翻译并不准确,但由于网上大部分的博客以及学习资料都是中文语言的Jmeter。因此,建议将Jmeter设置为中文。
方法一(仅一次性)

方法二(永久设置成中文)
找到jmeter下的bin目录,打开jmeter.properties 文件

第三十七行,修改为language=zh_CN,并去掉前面的#。重新启动Jmeter即可

Jmeter文件常用目录




元件与组件
Jmeter进行接口测试和性能测试,并不是使用代码来实现。而是使用已经封装好的元件和组件进行操作。
元件
元件:多个具有类似功能的组件的容器(集合,类似于面向对象中的类)

Jmeter中的元件按功能分为这么多类,如上图所见。例如 取样器元件,其中的组件主要功能都是发送请求。
组件
组件:实现独立的某个功能(类似于方法)

例如,取样器中的组件都是用于发送请求的。但HTTP请求是用于发送HTTP请求的,JDBC Request组件是用于连接数据库 并进行发送请求的。
元件的作用域


如图,如果(if)控制器是HTTP请求2的父节点会对其起作用。注:如果(if)控制器属于逻辑控制器元件,HTTP请求属于取样器元件。
固定定时器是HTTP请求3的子节点,该定时器只对HTTP请求3起作用。
固定定时器1的父节点是线程组(并不是取样器),那么其作用域就是该线程组下的所有节点。
图中的例子仅供理解与学习,现实的脚本设计不会如此混乱。
元件的执行顺序

第一个案例

添加线程组
右键点击“测试计划” -> 添加 -> 线程(用户) -> 线程组,添加测试需要的线程组

添加 HTTP 请求
JMeter的HTTP请求是测试中常用的功能,用于模拟用户向服务器发送HTTP请求并获取响应。
右键点击线程组 -> 添加 -> 取样器 -> HTTP请求,添加一个HTTP请求

点击HTTP请求,输入请求所需信息 http://www.baidu.com/s?ie=utf-8&wd=jmeter 参考下图

添加查看结果树
JMeter 的结果查看树用于查看和分析HTTP请求的响应结果。
右键点击线程组 -> 添加 -> 监听器 -> 查看结果树,添加一个查看结果树

将查找下方的响应数据格式改为 HTML Source Formatted(自行指定响应数据的展现格式),点击上方的绿色三角按钮,运行http请求
运行结果如下
取样器结果

HTTP响应体内容为,搜索返回结果页面标题为“JMeter性能测试_百度搜索”,与之前设置的查询参数相吻合。

响应结果乱码问题

注:从此处开始介绍一些常用的元件和组件,其余没有提到的元件和组件可自行查阅资料和查看Jmeter自带文档学习
线程组
作用:控制JMeter将用于执行测试的线程数,也可以把一个线程理解为一个测试用户。

并行与串行

如上图可知,我们设置了三个线程组。且内部有不同的HTTP请求,从执行结果来看。HTTP请求发送顺序是随机的,并不是按照从上到下的顺序。因此,多个线程组默认是并行的。

点击测试计划,勾选独立运行每个线程组(例如在一个组运行结束后启动下一个),即可实现串行。
线程组的分类

即,Setup线程组会在其他所有线程组之前执行,Teardowm会在其他所有线程组之后执行。
线程组参数详解

HTTP请求
作用:向服务器发送HTTP和HTTPS请求
位置:选中线程组->右键->添加->取样器->HTTP请求
HTTP请求参数详解


注:如果要一次性添加多个参数,可以将参数的键值对复制到剪切板,点击窗口最下方的从剪切板添加按钮即可批量添加参数。
查看结果树
作用:查看HTTP请求的请求和响应结果
位置:选中测试计划/线程组->右键->添加->监听器->查看结果树
注:对于取样结果 尤其是响应数据 我们可以通过切换数据展现方式进行查看,例如图中默认的是Text方式,可以点击切换成想要的方式 例如HTML Json等格式

HTTP信息头管理器
作用:给HTTP请求添加请求头信息,信息头即请求头。
位置:点击HTTP请求->右键->添加->配置元件->HTTP信息头管理器
添加方式与HTTP请求的查询参数方式相同, 也是用键值对的方式表示。
HTTP请求默认值
作用:针对HTTP请求中的相同部分(例如:协议、IP地址、端口、编码格式)进行统一设置
位置:测试计划->右键->添加->配置元件->HTTP请求默认值

HTTP Cookie管理器(HTTP Cookie Manager)
作用:如果你有一个 HTTP 请求,其返回结果里包含一个 cookie,那么 Cookie 管理器会自动将该 cookie 保存起来,而且以后所有的对该网站的请求都使用同一个 cookie
位置:右键 -> 添加 -> 配置元件 -> HTTP Cookie管理器

选项(Options)
(1)每次反复清除Cookies?:每次迭代时,都将 Cookies 清空
(2)Use Thread Group configuration to control cookie clearing:用户线程组去配置清空 Cookie
(3)Cookie 格式
standard:标准格式
standard-strict:严格格式
ignoreCookies:此规格忽略所有 Cookie。被用来防止 HttpClient 接受和发送的 Cookie
netscape:是最原始的 Cookies 规范,同时也是 RFC2109 的基础。尽管如此,还是在很多重要的方面与 RFC2109 不同,可能需要特定服务器才可以兼容
default:默认
rfc2109:是 HttpClient 使用的默认 Cookies 协议
rfc2965:定义了版本2并且尝试去弥补在版本1中 Cookie 的 rfc2109 标准的缺点。规定 rfc2965 最终取代 rfc2109 发送 rfc2965 标准 Cookies 的服务端,将会使用 Set-Cookie2 header 添加到 Set-Cookie Header 信心中,rfc2965 Cookies 是区分端口的
compatibility:推荐选择此种策略。这种兼容性设计要求是适应尽可能多的不同的服务器,尽管不是完全按照标准来实现的。如果你遇到了解析 Cookies 的问题,你就可能要用到这一个规范。有太多的 web 站点是用 CGI 脚本去实现的,而导致只有将所有的 Cookies 都放入 Request header 才可以正常的工作。这种情况下最好设置 http.protocol.single-cookie-header 参数为 true
存储在Cookie管理器中的Cookie:表示已经存储的Cookie,用户也可以手动添加
参数化
参数化测试:把测试数据组织起来,用不同的测试数据调用相同的测试方法,实现测试数据与测试方法的分离。
用户定义变量(全局变量)
作用:定义全局变量
位置:测试计划/线程组–>配置元件–>用户定义的变量
变量声明也是用键值对的方式表示。

使用方法:在需要变量处,使用${变量名}引用。

用户参数
假设有多个用户同时请求, 每个用户在登录请求时需要不同的用户名和密码进行登录,可以使用用户参数。
作用:针对同一种方法,当不同的用户来访问时,可以获取到不同的值。
位置:线程组–>前置处理器–>用户参数

添加变量(变量可多个),用户即是变量的值。

由于有两个用户,我们将线程组的线程数改为2,模拟两个用户。

随后建立HTTP请求,访问百度。并在参数中引用用户参数,使用方法也是${变量名}。
创建查看结果数后运行。


从结果看,一共发送了两次请求,两次请求引用的参数分别就是设置好的两个用户参数。
CSV数据文件方式
作用:在多次循环中,取到不同的值。
位置:线程组—>配置元件—>CSV数据文件设置(CSV Data Set Config)
CSV数据文件设置参数详解

使用步骤:
-
定义csv文件

-
添加线程组,设置循环次数为3(根据CSV文件的行数来确定,该例子为3)

-
添加CSV数据文件设置,文件名选择CSV文件路径即可。变量名称用于Jmeter中引用,可自行指定,并不要求与CSV文件中的严格相同。由于我们定义的CSV首行是数据,所以不忽略首行。分隔符CSV文件中使用的是逗号

-
添加HTTP请求并引用参数,引用参数的方法同样是${变量名}

-
添加查看结果数并执行
函数
Jmeter内部已定义好了一些函数供用户使用,函数格式为双下划线开头,后面跟着函数名称,且函数名称严格区分大小写。
位置:Jmeter菜单栏->工具->函数助手对话框
以下为一些常用的函数
${__counter(,)} 计数器
${__dateTimeConvert(,)} 时间格式转换
${__digest(,)} 加密 简单加密 *****
${__intSum(,)} 整数相加函数
${__P(,)} 获取属性函数 *****
${__property(,)} 获取属性函数 *****
${__setProperty(,)} 设置属性函数 *****
${__Random(,)} 随机数
${__RandomString(,)} 随机字符串
${__threadNum} 获取线程号函数
${__time(,)} 获取当前时间戳函数 *****
${__timeShift(,)} 数据格式化
${__V(,)} 拼接函数 *****
本文以计数器函数为例进行介绍,其他函数以及具体用法可以参考网络资料以及Jmeter自带的文档。
计数器${__counter(,)}
在函数助手对话框中选择counter函数,点击生成,即可获得计数器函数表达式${__counter(,)}。且生成了一个从1开始的计数器函数,初始值从1开始

添加一个访问百度的HTTP请求,且引用计数器函数。使用方法在参数中直接引用
${__counter(,)},并将线程组循环次数进行调整。此处例子将循环次数设置为10

点击执行并查看结果,从结果树中我们可以看到。进行了10次请求,且每次引用的参数即计数器函数每次递增。

注意:计数器函数每次递增只能加1,若想用递增加2或递增更多的时候,需要使用配置原件中的 “计数器”;
断言
断言:让程序自动判断实际结果是否与预期结果一致
响应断言
作用:对HTTP请求的任意格式的响应结果进行断言
位置:测试计划->线程组->HTTP请求->右键->添加->断言->响应断言


忽略状态是复选框,由于Jmeter会自动判断状态码,并将例如400等状态码判为错误。假如我们就是要模拟错误,就选择忽略状态。


如果填写了多个预期结果,他们是逻辑与的关系。
JSON断言
作用:对HTTP请求的JSON格式的响应结果进行断言
位置:测试计划->线程组->HTTP请求->右键->添加->断言->JSON断言


Assert JSON Path exists:填写JSON元素所在的路径,$为根节点。例 $.weatherinfo.city,断言根节点下的weatherinfo节点,weatherinfo节点下的city节点值。
Additionally assert value:勾选之后,才能填写Expected Value(期望值)。即JSON节点的值与期望值进行对比是否相等,如果此外还勾选了Match as regular expression,则在期望值框里输入正则表达式,进行对比结果。
断言持续时间
作用:测试HTTP请求的响应时间是否满足需求
位置:测试计划->线程组->HTTP请求->右键->添加->断言->断言持续时间

Jmeter关联
当请求之间有关联, 比如一个请求的参数是另一个请求的响应数据,这时候就需要用到关联处理来进行提取响应数据中的值。
正则表达式提取器
作用:针对任意格式的响应结果进行提取
位置:测试计划->线程组->HTTP请求->右键->添加->后置处理器->正则表达式提取器
关于正则表达式如何书写,有需要的朋友请自行上网查阅。此外,可以用网页版的正则表达式测试器来判断自己所书写的正则表达式是否正确。


模板中提到的正则表达式中的多个提取值,指的是 如果正则表达式中有多个(),也就是一次匹配中提取多个值,要取第一个()中的值,就填写数字几 且前后用$符号。
匹配数字指的是,正则表达式匹配到多组数值,取多组数值中的哪一个。
假如有多组数据,匹配数字为-1,那就是全部取值,那么引用参数中存储的是一个列表形式,
在引用列表中其中一个参数,格式是${变量名_索引}
XPath提取器
作用:针对HTML格式的响应数据进行提取
位置:测试计划->线程组->HTTP请求->右键->添加->后置处理器->XPath提取器


JSON提取器
作用:针对JSON格式的响应数据进行提取
位置:测试计划->线程组->HTTP请求->右键->添加->后置处理器->JSON提取器


Jmeter属性
作用:当有关联的两个请求不在同一个线程组中时,可以使用Jmeter属性进行数据传递。
位置:测试计划->线程组->右键->添加->取样器->BeanShell取样器
要使用BeanShell取样器进行属性设置, 要搭配其他的提取器和函数助手进行使用。
工作流程:提取器将数据提取后保存到变量中,通过_setProperty函数将提取器提取的变量值保存到Jmeter属性中,在要使用该Jmeter属性的地方通过_property函数引用。

设置函数_setProperty,这里表示Jmeter属性的变量名称为pro_city,其值为${city}(该值一般由提取器提取),点击生成函数。

使用函数_property,在属性名称中输入要使用的Jmeter属性,点击生成即可。The result of the function is 表示pro_city中值是什么。
操作步骤
- 添加线程组1
- 在线程组1下添加HTTP请求
- 添加JSON提取器(仅作演示)将HTTP请求响应结果 提取存为变量city
- 添加BeanShell取样器 利用函数_setProperty,将JSON提取器变量city 设置为Jmeter属性

- 添加线程组2
- 在线程组2下添加HTTP请求(并读取Jmeter属性)

Jmeter录制脚本(仅作介绍)
用于在没有API文档时,编写HTTP请求。Jmeter作为代理服务器,拦截和转发请求与响应数据。(功能与抓包工具一样)


Jmeter直连数据库
使用场景
- 请求需要的参数, 从数据库中获取
- 断言的预期结果从数据库中获取
- 清理接口测试后所留下的测试数据
- 通过数据库获取大量的测试数据
操作步骤,以mysql数据库为例

位置:测试计划->线程组->右键->添加->配置元件->JDBC Connection Configuration


Password:连接数据库密码,如实填写
配置完成后,相当于连接数据库成功,接下来就要执行SQL语句。
添加JDBC请求
位置:测试计划->线程组->右键->添加->取样器->JDBC Request


通过JDBC Request的SQL语句将返回结果存在变量里,在要使用的地方通过${变量名_索引}的方式进行引用
逻辑控制器
如果(if)控制器
作用:控制它下面的Jmeter组件是否运行
位置:测试计划->线程组->右键->添加->逻辑控制器->if控制器

利用JS语法的方式书写,表示判断 变量name是否等于itcast 且注意要加双引号 并不勾选下面的Interpret Condition as Variable Expression

循环控制器
作用:通过设置循环次数,实现循环发送请求
位置:测试计划->线程组->右键->添加->逻辑控制器->循环控制器

思考:线程组也可以设置循环次数,为什么还要使用循环控制器?
答:线程组会使其下的所有HTTP请求循环一定次数,循环控制器会使其下的HTTP请求循环一定次数。他们两的作用范围不同,循环控制器可实现更精准的范围控制。
此外,假设线程组设置了循环M次, 其下循环控制器又设置了循环N次, 那么循环控制器下的HTTP请求会循环执行 M*N 次
Foreach控制器
作用:遍历变量中的值(值以列表的方式存在),搭配正则表达式提取器等进行使用。
位置:测试计划->线程组->右键->添加->逻辑控制器->Foreach控制器

由上文的正则表达式提取器内容可知,如果变量值是列表形式,那么使用其中的某个值则是${变量名_索引}。所以 变量名即是输入变量前缀,且在提取的时候要添加下划线。因此需要勾选Add’_’ before number ?
如果列表是用户自定义的数据,没有下划线 而是${变量名索引}的方式 那就取消勾选。
要循环使用Foreach控制器提取的变量 通过${输出变量名称}引用
定时器
同步定时器
作用:先阻塞线程,当在规定时间内达到一定的线程数量后,这些线程会在同一时间点一起释放,瞬间产生很大的压力,用于模拟高并发场景。
位置:测试计划->线程组->右键->添加->定时器->Synchronizing Timer


此处,设置的并发线程数应该为小于等于线程数n,如果大于的话 则取n。
常数吞吐量定时器
作用:让Jmeter按照指定的吞吐量执行, 以每分钟为单位,大多用于模拟系统稳定运行下的吞吐量,进行稳定测试。
位置:测试计划->线程组->右键->添加->定时器->Constant Throughout Timer

固定定时器
作用:让其父节点等待设定的时间后运行。
位置:测试计划->线程组->右键->添加->定时器->固定定时器

本文关于Jmeter的部分使用介绍就到此为此了, 关于更多的Jmeter使用方法请各位自行查阅资料,或者参考Jmeter自带文档。
参考目录
https://blog.csdn.net/u014045237/article/details/143368211
https://blog.csdn.net/cool_tao6/article/details/142441207
https://blog.csdn.net/qq_45138120/article/details/130478599
https://www.bilibili.com/video/BV12Q4y1C7Wf
https://www.bilibili.com/video/BV19Q4y167Qo
https://www.bilibili.com/video/BV1Ne411M7Gb
相关文章:
Jmeter使用介绍
文章目录 前言Jmeter简介安装与配置JDK安装与配置JMeter安装与配置 打开JMeter方式一方式二 设置Jmeter语言为中文方法一(仅一次性)方法二(永久设置成中文) Jmeter文件常用目录 元件与组件元件组件元件的作用域元件的执行顺序第一个案例添加线程组添加 H…...
【商城实战(13)】购物车价格与数量的奥秘
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
Spring使用@Scheduled注解的参数详解
在现代Java开发中,定时任务是一个常见的需求。Spring框架提供了Scheduled注解,让我们能够以简单、直观的方式定义和管理这些定时任务。接下来,我们来深入探讨这个注解的使用,以及它的参数都有哪些含义和作用。 Scheduled注解可以…...
【网络】HTTP协议、HTTPS协议
HTTP与HTTPS HTTP协议概述 HTTP(超文本传输协议):工作在OSI顶层应用层,用于客户端(浏览器)与服务器之间的通信,B/S模式 无状态:每次请求独立,服务器不保存客户端状态(通过Cookie/Session扩展状态管理)。基于TCP:默认端口80(HTTP)、443(HTTPS),保证可靠传输。请…...
【Windows下Gitbook快速入门使用】
Windows下Gitbook快速入门使用 1 工具安装1.1 Node.js下载安装1.1 环境变量1.2 npm配置1.3 安装gitbook 2 gitbook使用2.1 gitbook 无法执行2.2 gitbook常用命令 Gitbook是一个软件,使用Git和Markdown来编排书本; GitBook helps you pushlish beautiful …...
创建Electron35 + vue3 + electron-builder项目,有很过坑,记录过程
环境: node v20.18.0 npm 11.1.0 用到的所有依赖: "dependencies": {"core-js": "^3.8.3","vue": "^3.2.13","vue-router": "^4.5.0"},"devDependencies": {"ba…...
FPGA 实验报告:四位全加器与三八译码器仿真实现
目录 安装Quartus软件 四位全加器 全加器、半加器 半加器: 全加器: 四位全加器电路图 创建项目 半加器 全加器 四位全加器 代码实现 半加器 全加器 四位全加器 三八译码器 创建项目 代码展示 modelsim仿真波形图 四位全加器 三八译码…...
动态规划详解(二):从暴力递归到动态规划的完整优化之路
目录 一、什么是动态规划?—— 从人类直觉到算法思维 二、暴力递归:最直观的问题分解方式 1. 示例:斐波那契数列 2. 递归树分析(以n5为例) 3. 问题暴露 三、第一次优化:记忆化搜索(Memoiza…...
前端学习——HTML
HTML VSCode常用快捷键HTML标签文本标签列表标签表格Form表单表单元素 块元素与行内元素新增标签 VSCode常用快捷键 代码格式化:ShiftAltF 向上或向下移动一行:AltUp或AltDown 快速复制一行代码:ShiftAltUp或者ShiftAltDown 快速替换&#x…...
12.【线性代数】——图和网络
十二 图和网络(线性代数的应用) 图 g r a p h { n o d e s , e d g e s } graph\{nodes, edges\} graph{nodes,edges}1.关联矩阵2. A A A矩阵的零空间,求解 A x 0 Ax0 Ax0 电势3. A T A^T AT矩阵的零空间,电流总结电流图结论 …...
[环境搭建篇] Windows 环境下如何安装repo工具
Windows 环境下如何安装repo工具 1. 安装前置依赖2. 配置Repo引导脚本方法一:通过Gitee镜像安装(推荐)方法二:通过清华镜像安装 3. 解决依赖问题4. 初始化Repo仓库5. 常见问题解决 前言: 在Windows环境下安装Repo工具需…...
LeetCode 热题 100_字符串解码(71_394_中等_C++)(栈)
LeetCode 热题 100_字符串解码(71_394) 题目描述:输入输出样例:题解:解题思路:思路一(栈): 代码实现代码实现(栈):以思路一为例进行调…...
「DataX」数据迁移-IDEA运行DataX方法总结
背景 业务需求希望把Oracle数据库中的数据,迁移至MySql数据库中,因为需要迁移全量和增量的数据,所以希望想用数据迁移工具进行操作。 经过一些调研查询,最终打算使用DataX进行数据的迁移。 DataX简单介绍 DataX 是阿里云 DataW…...
【 <一> 炼丹初探:JavaWeb 的起源与基础】之 Servlet 过滤器:实现请求的预处理与后处理
<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、过滤器&…...
DeepSeek与浏览器自动化AI Agent构建指南
文章使用到的模型可以用硅基流动中的: 注册链接:硅基流动统一登录 邀请码:FytHp9Xa 一、技术选型阶段 1. 基础组件选择 AI模型:DeepSeek-R1开放API(对话/推理)或DeepSeek-Coder(代码生成&#…...
面试中常问的mysql数据库指令【杭州多测师_王sir】
数据库中的修改表结构、增删改查、用户权限操作DDL 》数据库定义语言 create database,create table drop tableDML 》数据库操作语言 insert into,delete from,update set,DQL 》数据库查询语言 select .... from....crea…...
深度学习驱动的智能化革命:从技术突破到行业实践
第一章 深度学习的技术演进与核心架构 1.1 从浅层网络到深度学习的范式转变 深度学习的核心在于通过多层次非线性变换自动提取数据特征,其发展历程可划分为三个阶段:符号主义时代的规则驱动(1950s-1980s)、连接主义时代的浅层网络(1990s-2000s)以及深度学习时代的端到端…...
基于编译器特性浅析C++程序性能优化
最近在恶补计算机基础知识,学到CSAPP第五章的内容,在这里总结并且展开一下C程序性能优化相关的内容。 衡量程序性能的方式 一般而言,程序的性能可以用CPE(Cycles Per Element)来衡量,其指的是处理每个元素…...
服务器上通过ollama部署deepseek
2025年1月下旬,DeepSeek的R1模型发布后的一周内就火了,性能比肩OpenAI的o1模型,且训练成本仅为560万美元,成本远低于openAI,使得英伟达股票大跌。 下面我们来看下如何个人如何部署deepseek-r1模型。 我是用的仙宫云的…...
Android Coil总结
文章目录 Android Coil总结概述添加依赖用法基本用法占位图变形自定义ImageLoader取消加载协程支持缓存清除缓存监听 简单封装 Android Coil总结 概述 Coil 是一个用于 Android 的 Kotlin 图像加载库,旨在简化图像加载和显示的过程。它基于 Kotlin 协程࿰…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
0x-3-Oracle 23 ai-sqlcl 25.1 集成安装-配置和优化
是不是受够了安装了oracle database之后sqlplus的简陋,无法删除无法上下翻页的苦恼。 可以安装readline和rlwrap插件的话,配置.bahs_profile后也能解决上下翻页这些,但是很多生产环境无法安装rpm包。 oracle提供了sqlcl免费许可,…...
【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)
旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据!该数据集源自2025年4月发表于《地理学报》的论文成果…...
深入解析 ReentrantLock:原理、公平锁与非公平锁的较量
ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...
