性能测试学习——项目环境搭建和Jmete学习二

项目环境搭建、Jmeter学习二

  • 环境的部署
    • 虚拟机的安装
    • 虚拟机中添加项目
      • 操作步骤
  • 使用环境的注意事项
  • Jmeter的安装和简单使用
    • Jemter的使用的进阶
      • Jemter元件
    • Jmeter属性
    • 执行顺序和作用域
      • 作用域
        • 以自定义用户变量和用户参数(前置处理器)为例
        • 如何解决用户变量和线程组同级时,参数的重复调用?
        • 配置元件中的用户定义变量和前置处理中的用户参数有什么区别?
      • jemter的执行顺序
    • 配置元件——Jemter信息头管理器
    • 配置元件——jmeter设置cookies
    • 配置元件——设置HTTP请求的默认值
    • Jemte参数化
      • 自定义用户变量
      • 前置处理器——用户参数
      • Jmeter函数
        • 函数中的参数信息的引用
        • 获得属性和设置属性
        • Beanshell函数——功能能用,性能不能用
        • 计数器函数
        • CSV函数
        • 加密算法的函数
        • V函数
        • 其他函数
        • 扩展函数

  • 学习目标:
    • linux服务器搭建项目环境
    • jmeter环境搭建
  • 环境搭建方式:虚拟机+ova文件
    • ova文件:操作系统+项目依赖的环境+项目包
    • 操作系统:centos7
  • 关于环境的问题:为什么环境要搭建在本地,而不是使用云服务器
    • 如果使用云服务器,同一个时间多个人进行性能测试的话,就会出现多个人相互干扰的情况
    • 就像在企业项目中,一般不建议同时多个同事对项目进行性能测试
  • Jmeter的元件,属性,执行顺序,作用域名,函数和参数化的学习

环境的部署

虚拟机的安装

  • 直接在VMware的官网上或者商店的store中下载VMware软件,然后找一个秘钥激活即可

虚拟机中添加项目

  • 项目是已经部署好的ova文件,可以在云盘中找相应的项目文件
  • 实际工作过程中,项目已经部署到相应的服务器,就并不需要再去部署使用

操作步骤

  • 1.打开VMware虚拟机
  • 2.点击左上角文件——打开——在弹框中选择要加入的ova文件,如图
    在这里插入图片描述
    在这里插入图片描述
  • 3.设置虚拟机的名字和存放路径,名字自定义,路径自定义,最好不要存入C盘,点击【导入】即可
    在这里插入图片描述
  • 安装完成之后,虚拟机上会显示项目的基本信息,如下图
    在这里插入图片描述
  • 点击图中的编辑虚拟机的按钮,可编辑虚拟机的信息
  • 启动虚拟机,点击上图中绿色的三角按钮即可,或者如下图示
    在这里插入图片描述
  • 查看网络信息:下图中ens33中,第一行inet后面的就是网络ip地址
    在这里插入图片描述
    • 如果ifconfig查看不到网络ip,需要确认:
    • 1.安装的时候有没有启用虚拟网卡
    • 2.安装完VMware后,有没有重启电脑
  • 可以在项目中查看其apache、启动apache并查看相应日志信息
    在这里插入图片描述
  • 验证项目启动成功的方式:浏览器打开http://ip:8080/app,出现以下界面即可
    在这里插入图片描述

使用环境的注意事项

  • 首先自己的电脑需要安装VMware或者virtualbox
  • 安装虚拟机的原因,不实用云服务器?
    • 给云服务的话,多个人同时进行性能测试(都用多个并发用户数请求),就会存在相互干扰的情况
    • 相应的,在企业项目中,一般不建议同时有多个同事进行同一个服务器的性能测试
    • 在自己的电脑上,可以使用虚拟机+ova,随时随地的进行联系,没有时常限制
  • 安装VMware之后,一定要进行重启
  • 需要检查本机电脑上的“查看网络连接”中,是否存在VMent1和VMent8这两个,且是启动状态,如果没有就无法联网,如下图
    在这里插入图片描述
  • 然后打开虚拟机,打开ova的文件,导入文件时名字可以随便起,新虚拟机的默认路径不要放置在C盘(只有一个硬盘除外),
  • 导入点击确定后,可能会出现导入失败的提示,不用管,直接点击【重试】即可
    • 出现这个情况的原因,是VMware默认支持ovf的文件
  • 用VMware导入虚拟机成功之后,虚拟机的网络适配器必须用NAT,其他的任何都不行
    • NAT设置之后,虚拟机的网络和本机在一个小的局域网中
  • 打开此虚拟机,使用账号和密码登录,执行ifconfig命令就可以查看虚拟机的地址
    • 如果ip无值,就需要检查网络是否是NAT,然后检查网络信息是否可以使用
    • 如果是Vment1/Vment8 不能用,就需要重新安装虚拟机,直到网络可用为止
  • 使用终端工具连接linux服务器,为什么要使用终端工具?
    • 实际工作过程中,要用到多个窗口操作linux系统,直接在虚拟机中工作,是不可以打开多个窗口的
  • 启动项目,命令:cd /opt/apache……/bin,然后执行 sh startup.sh
  • 项目数据库是使用docker部署的,是开机自启动,可使用docker ps查看
    • 注意mysql的端口是3337,数据库的账号和密码也是
    • 数据库的账号密码:root。123456
  • 然后就可以按照接口文档来写脚本即可

Jmeter的安装和简单使用

  • 参考文章
  • Jmeter的开发,测试都是在jdk1.8上进行的,因此,做性能测试的jmeter还是要使用jdk1.8
  • jmeter的版本建议使用5.1.1版本,最新的版本可能没有部分检测工具,没那么好用
  • 在企业或者自己联系的过程中,jmeter绝对不允许被测项目的机器上的/自己用的话,就是虚拟机
  • jmeter建议不要设置环境变量,直接将bin洗面的jmeter.bat设置快捷方式放在桌面上即可
  • Jmeter中,线程组和线程的区别:线程组是Jmeter中用于性能场景设计的;线程是Jmeter中模拟多个人并发请求的,并不是同一个性质的定义
  • Jmeter中可以直接运行的语言有:java、beanshell、is、grovvy、jython(java+python的结合体,其用的python2)

Jemter的使用的进阶

  • jmeter本身对并发用户数没有限制,理论上可以无限量的并发用户数
    • 如果并发用户数比较多的时候,可以考虑分布式请求
  • http协议性能测试时,一个jmeter可能产生2000以内的并发用户数

Jemter元件

  • Jemter的组件特别多,有自行的运行规则,当前我们来学习Jemter的八大元件和八大元件的规则
  • jemter的八大元件有:
    • 取样器:jemter接口测试的核心,我们发送接口请求的配置都必须在取样器中完成;根据不同的协议来选择不同的取样器
    • 逻辑控制器:可以控制jemter其他元件的运行方式,主要有循环和if判断等
    • 监听器:用来采集取样器运行完成之后的运行结果,者说从不同的维度来展示测试结果
    • 配置元件:可以配置全局变量,即整个脚本的公共信息,CSV文件,数据库配置等,其优先级是最高的,运行脚本的时候最先被执行
    • 断言:断言运行的结果
    • 定时器:主要对各个接口请求,用来控制运行节奏的
    • 前置处理:取样器运行之前(例如发送HTTP请求之前),先运行前置处的代码(要执行的元件)
    • 后置处理:取样器运行之后(例如发送HTTP请求,并接受响应结果之后),要执行好的元件

Jmeter属性

  • jmeter属性分为系统属性和jmster属性两种
  • jmeter的系统属性,基本不变,也不需要去修改
  • jmeter的属性,又分为静态属性和动态属性
    • 静态属性,写在properties文件中的属性
    • 动态属性:运行过程中,动态设置的属性,关闭Jmeter工具的时候,会自动消失
  • 可以通过函数设置和获取,详见常见函数

执行顺序和作用域

  • 元件处理顺序:jemter的八大元件,都有自己的影响范围和执行顺序
    • Jemter时典型的树形结果,也就是父子关系
    • Jemter的作用域主要对取样器生效

作用域

  • 取样器:取样器元件不和其他元件相互作用,因此不存在作用域的问题
    • 常见的取样器:HTTP请求
  • 逻辑控制器:对逻辑控制器下的所有子元件和取样器生效
    • 常见的逻辑取样器:事务,for循环,while循环,if判断等
  • 其他六大元件:
  • 如果是取样器(接口)A的子节点,则该元件只有A取样器(接口)才能调用,A取样器(接口)后面的B接口可以引用元件执行后得到的结果变量;A取样器(接口)之前的接口不能使用
    • 例如元件在HTTP请求下方,那么元件只对HTTP请求生效
  • 如果该节点的父节点不是取样器,则对父节点以下的所有字节点生效,包括子节点的子节点,不能跨线程组
    • 例如元件的父节点是线程组,那么其作用域就是整个线程组,包括线程组中的所有取样器请求节点及其子节点
以自定义用户变量和用户参数(前置处理器)为例
  • 只有一个接口的情况下,将参数的值,用随机函数来生成,放在用户自定义变量和用户参数中
    • 在功能测试的时候,使用用户定义变量,用户参数,每运行调用1次,参数中变量的值都会变一次
    • 但是在做性能测试的时候,多并发用户数运行,用户自定义变量中,参数中变量的值不会变化,但是用户参数多线程会发生变化
  • 一个线程组下有登录+注册两个接口,对两个接口中的用户名(手机号)进行参数化,用户自定义的变量的请求情况如下:
    • 功能测试时,自定义用户变量多次请求两个接口都可以注册+登录成功(登录和注册用的一个账号,再次发起请求用户名会变化);
    • 性能测试时,自定义用户变量多次请求两个接口中,登录可成功,首次注册成功,其他注册失败(提示账号已存在)
  • 1.用户参数为注册接口的子节点时
    • 即注册和登录实时使用到的手机号码是一个,放置在用户参数中不论功能就还是性能都可以成功
    • 因为注册的时候只需要调用用户参数一次,登录的时候可以直接使用,不需要重新生成
  • 2.当用户参数的位置是线程组的子节点时(用户参数和注册接口同一级)
    • 登录和注册的时候,接口获取到的手机号码是不一样的;每次(不论功能还是性能)注册会成功,登录会提示手机号码不存在
    • 因为注册的时候,调用用户参数生成了手机号,登录的时候又调用了用户参数生成了新的手机号,因此两个手机号码会不相同
  • 3.如果将用户参数放置在登录接口的子节点
    • 注册,拿不到用户参数中的值,登录可以获取到相应的值,但是手机号码可能没有注册;性能测试和功能测试都可能不成功
    • 注册的时候,没有调用用户参数,无手机号码生成;登录的时候调用了用户参数生成手机号码,但是手机号码没有注册,因此失败
  • 用户参数(前置处理)定义的变量,不能直接跨线程组引用,但是用户定义的变量(配置元件)可以跨线程组引用
如何解决用户变量和线程组同级时,参数的重复调用?
  • 勾选用户参数详情中的“每次迭代更新”的复选框
  • 迭代:线程组下面的所有接口执行完一遍,才算一次迭代
  • 循环:某个接口重复调用n次,就是一个循环n遍
    在这里插入图片描述
配置元件中的用户定义变量和前置处理中的用户参数有什么区别?
  • 用户参数不能跨线程组被引用;用户定义变量可以
  • 用户定义的变量每次启动运行之前(接口请求之前),会调用获取一次数值,在运行过程中,不会再次调用,也就是说值永远不会变
  • 用户参数的在每次运行的时候都会动态获取值(根据其放置的位置不同,其作用域也不相同)
  • 用户定义的变量的执行顺序在用户参数之前

jemter的执行顺序

  • 按照深度便利的原则,现将每个节点下的所有元件都执行完毕,才会执行下一个
  • 统计节点的顺序,以下图为例:
  • 配置元件(用户定义的变量)、前置处理器(用户参数)、定时器、取样器(HTTP请求)、后置处理器、断言、监听器(查看结果树)
  • 同一类元件,有多个的时候,优先级是从上往下执行
  • 监听器中的查看结果树的显示顺序,根据响应的顺序来显示的,先收到先显示,和取样器的执行顺序是不一样的
  • 取样器的执行顺序:前面发起的请求收到响应之后才会发起下一个请求,这和HTTP时同步协议决定的
    • 执行顺序还有特殊规则:
      • 用户定义的变量及配置元件,会始终优先执行
      • 数据库配置元件也会始终优先执行
      • CSV配置元件
        在这里插入图片描述

配置元件——Jemter信息头管理器

  • 在互联网中,接口测试都是采用HTTP协议进行测试
  • 我们可以通过HTTP请求来设置请求方法、URL、请求体,而请求头和Cookies处理在jmeter中由单独的元件来进行处理
  • jmeter设置请求头
    • jmeter通过配置元件中的HTTP信息头管理器来添加请求头
    • 添加方法:取样器——配置元件——HTTP信息头管理器
      在这里插入图片描述
  • 这个HTTP请求头信息只放在当前的HTTP下(HTTP的子节点),只会对这一个HTTP生效;如果和HTTP请求同一个级别(线程组的子节点),就会对线程组下的所有HTTP请求生效

配置元件——jmeter设置cookies

    • jmeter有一个专门用来管理Cookies的组件,添加之后,可以实现自动保存Cookies的功能
    • 添加方法:线程组——添加——配置元件——HTTP Cookies管理器
    • 添加之后,Cookie管理器会自动变管理服务器返回的Cookies
      在这里插入图片描述
  • 设置好cookies管理器之后,如果接口返回了cookies,cookies管理器会自动引用,不需要再请求头中添加了
  • 绝大多数情况下,直接添加cookies管理器即可,不需要对这个元件做任何的改动

配置元件——设置HTTP请求的默认值

  • HTTP请求默认值
    • 作用:设置HTTP请求默认值;当HTTP取样器中没有设置某些参数的时候,就会从默认值中查找相应的信息补充
  • 优点:在进行接口测试中,大部分接口、协议、域名、端口都是一样的,因此可以将这些一样的数据设置为默认值,就不需要对每个请求设置重复的内容了
  • 添加方式:线程组——添加——配置元件——HTTP请求默认值
    在这里插入图片描述
  • 在HTTP请求默认值中设置完协议、路径和端口号等公用信息后,和HTTP默认值同等级的HTTP请求,都不需要再设置这些信息,只要关注路径、方法和参数信息即可
  • 常用于环境切换等场景

Jemte参数化

  • 参数化:用变量代替数据的过程,就是参数化,这样值就可以动态的发生变化
  • 参数化的变量名,可以包含字母、数字、下划线和大小写敏感
  • jmeter提供了很多方式来设置变量,从而替换数据实现参数话
  • 主要设置方法有:
    • 用户自定义的变量
    • 用户参数
    • CSV数据文件设置
    • Jmeter函数
  • 所有动态参数在使用的时候,引用变量的方式是:${变量名}

自定义用户变量

    • 用户自定义变量有两种方法:
      • 一种是通过测试计划面板中的用户定义的变量设置,此种方式对所有的测试计划都会生效
  • 名称遵循变量名的设置规则,不建议用中文
  • 在这里添加的用户变量是没有类型的,因此在引用的时候,json参数的值就必须加双引号,否则类型就会发生变化
    • 引用样式示例:{"mobile":"${puser}"}
      在这里插入图片描述
      • 另外一种是:线程组——添加——配置元件——用户定义变量
        在这里插入图片描述
    • 使用方式:在这里插入图片描述
    • 用户自定义参数中,不仅仅可设置变量,也可以设置请求头中的信息

前置处理器——用户参数

    • jmeter的线程就是用户,用户参数就是传递给线程的数量
    • 用户参数的作用:在变量名的情况下,可以对每个线程设置不同的变量值
    • 应用:例如需要3个不同的手机号码登录,就可以设置一个手机号码phone,然后分别设置phone不同的属性值,实现方式如下:
      • 添加用户参数:线程组——添加——前置处理器——用户参数
      • 然后在界面中设置不同的属性值
        在这里插入图片描述

Jmeter函数

  • 工作过程中,使用Jmeter函数时,尽可能的使用函数助手来生成,不要手写,因为很容易出错
  • jmeter提供了内部函数的功能,可以生成特殊的测试数据,例如时间戳、随机数等等
    • 可以理解为jmeter中已经封装好的方法,使用的时候直接使用某种方式调用即可
    • 函数就是方法,因为Jmeter是基于Java开发的,因此Jmeter就是Java方法
    • Jmeter函数,是以双下划线开头,后面跟函数名称
      • 函数名称严格来说区分大小写如果函数有参数,就需要带小括号,没有参数,就可以不要小括号
      • 多个参数之间,要使用英文的都好来隔开
  • 函数和变量引用是不同的
    • 变量引用是没有双下划线的,格式是:${变量引用名称}
  • jmeter函数用法参考【函数助手对话框】,然后利用函数助手对话框,生成函数,将数据填写到接口的请求数据中
  • 函数助手对话框的打开方法:工具——函数助手对话框
    在这里插入图片描述
    在这里插入图片描述
  • 举个例子,将生成随机数的函数,作为参数的值放在body中,就会随机生成value,可以测试随机手机号码等场景
      • 在参数中的使用方式:{"mobile":"${__property(language,,)}}"
函数中的参数信息的引用
  • 函数中传递的参数信息,可以直接从用户定义的变量中引用
  • 例如,在用户定义变量中,设置两个参数信息
  • 然后在函数助手中,使用${变量名}引用,即使生成的时候会报错,但是实际运行的时候是不会报错的
  • Jmeter工具中,变量是不能引用函数的,即${b${__Random(,)}}不会生效
  • 函数中,可以引用函数(即函数中可以调用另外一个函数,或者函数中的某个参数是一个函数)
    在这里插入图片描述
  • 变量中也不能引用变量,这个原因是:变量是内存中某个数据的存放位置,不会进行变量名内的计算,而引用变量或者引用函数,就会发生计算
获得属性和设置属性
  • ${__property(属性名称,,)}:获取Jmeter的属性
  • ${__P(属性名称,)}:获得Jmeter的属性
  • ${__setProperty(属性名称,属性值,)}:设置jmeter中的动态属性
    • 动态属性一旦设置了,只有在Jmeter工具关闭之后,属性才会消失
    • 设置属性和获取属性两个参数结合起来,可以解决jmeter用户参数不能跨线程组的问题
    • 原理:讲用户参数通过设置属性,将其设置为Jmeter的动态属性,存储在内存中, 然后在另外一个线程组中获取属性来使用
    • 跨线程使用用户参数,主要用户接口混合使用的场景
  • Jmeter中,多个线程组之间时并行执行的
    • 因此可能出现首次获取属性值的时候获取不到,因为设置属性值的线程组可能还没有设置上
    • 如果一定要首次获取到属性值,就需要在获取属性值的那个线程组中加一个延迟启动时间,等设置属性值的线程组设置完成之后再去获取
    • 如果设置属性值中的参数来自于用户自定义变量,那么后续获取到的属性值都不会的发生改变;如果来自于用户参数,这个值每次都会发生改变,除非勾选了每次迭代时调用
Beanshell函数——功能能用,性能不能用
  • Beanshell函数和Bealshell元件的区别
    • 功能测试的时候,用Jmeter写脚本可以用Beanshell的元件或者函数
      • 定时器、监听器、前置、后置、断言等都有Beanshell相关的元件
    • 但是性能测试脚本中不要使用任何Beanshell相关的元件或者函数,写脚本的话,有且仅使用jexl3或者groovy函数或者JSR223元件
      • 因为Jmeter会关注脚本本身的性能,但是Beanshell的函数或者元件,其自身的性能不是很优秀
计数器函数
  • ${__counter(,)},只能做简单的累加1的算法,可以传True或者False的参数
    • 如果传参为True,那么多线程中每个线程都有一个计数器,船False,则多线程使用同一个计数器
  • 计数器元件:路径——>添加——>配置元件——>计数器
    • 这个计数器可以灵活设置起始值、最大值、步长值等信息
    • 这个计数器元件,使用的时候是从起始值开始,依次递增步长值,添加到最大值的时候,会再次循环从起始值开始递增
CSV函数
  • ${__CSVRead(,)},用于读取CSV文件的函数
    • 尽可能不要去使用,因为比较鸡肋
  • 如果要使用,请使用CSV数据文件设置(后面有介绍)
加密算法的函数
  • ${__digest(MD5,123456,,,)}:加密算法函数
    • 只能做最简单的加密,点击函数后面的帮助,可在页面上查看支持的加密算法信息
V函数
  • 在进行函数引用的时候,可能需要将多个变量都存放在用户定义的变量或者用户参数中,但是需要在多线程的情况下,在一个接口中调用
  • 因为变量中不能引用函数(如下图),所以需要使用其他方式来进行解决
    在这里插入图片描述
  • 如果要解决这个问题,就需要使用V函数
  • V函数中有两个参数,第一个参数可以是函数,也可以是变量,还可以是元件,例如计数器,设置如下图
    在这里插入图片描述
  • 请求体中的V函数的意思是,a拼接计数1,也就是a_1
  • a_1又是用户定义变量中的变量,那就根据变量的key,获取变量的值进行替换
其他函数
  • ${__Random(0,100,)}:生成1-100之间的随机数
  • ${__dateTimeConvert(,,,)}:时间的格式转换
  • ${__machineIP()}:获取机器的IP
  • ${__machineName()}:获取机器的名称
  • ${__char(1)}:转换字符,将参数中的unicode或10进制的信息转换为字符串
  • ${__groovy(,)}${__jexl3(,)}都可以用运行自己写的代码,代码可以是java、js、grovvy、beanshell语言编写的
  • ${__RandomString(10,stringdict,)}:随机字符串
  • ${__threadNum}:获取线程号,这个函数不需要传参
  • ${__time(yyymmmddd‘,)}:获取当前时间戳,参数是格式化传参
  • ${__split(qbc\,bad,,\,)}:分隔字符串
  • ${__timeShift(,,,,)}:获取时间,可进行时间的加减
  • ${__urldecode()}:进行end解码
  • ${__urlencode()}:进行end编码
扩展函数
  • 别人写的扩展函数包;或者自己二开写的函数,集成到Jmeter中作为扩展函数

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字符串函数详解

一.字母大小写转换函数. 1.1.tolower 结合cppreference.com 有以下结论&#xff1a; 1.头文件为#include <ctype.h> 2.使用规则为 #include <stdio.h> #include <ctype.h> int main() {char ch A;printf("%c\n",tolower(ch));//大写转换为小…

【Rust】快速教程——从hola,mundo到所有权

前言 学习rust的前提如下&#xff1a; &#xff08;1&#xff09;先把Rust环境装好 &#xff08;2&#xff09;把VScode中关于Rust的插件装好 \;\\\;\\\; 目录 前言先写一个程序看看Rust的基础mut可变变量let重定义覆盖变量基本数据类型复合类型&#xff08;&#xff09;和 [ …

前端面试:如何实现并发请求数量控制?

题目&#xff1a;实现一个并发请求函数concurrencyRequest(urls, maxNum) 要求如下&#xff1a; 要求最大并发数 maxNum;每当有一个请求返回&#xff0c;就留下一个空位&#xff0c;可以增加新的请求;所有请求完成后&#xff0c;结果按照 urls 里面的顺序依次打出&#xff1b;…

openGauss学习笔记-127 openGauss 数据库管理-设置账本数据库-修复账本数据库

文章目录 openGauss学习笔记-127 openGauss 数据库管理-设置账本数据库-修复账本数据库127.1 前提条件127.2 背景信息127.3 操作步骤 openGauss学习笔记-127 openGauss 数据库管理-设置账本数据库-修复账本数据库 127.1 前提条件 系统中需要有审计管理员或者具有审计管理员权…

【数据结构】C语言实现队列

目录 前言 1. 队列 1.1 队列的概念 1.2 队列的结构 2. 队列的实现 2.1 队列的定义 2.2 队列的初始化 2.3 入队 2.4 出队 2.5 获取队头元素 2.6 获取队尾元素 2.7 判断空队列 2.8 队列的销毁 3. 队列完整源码 Queue.h Queue.c &#x1f388;个人主页&#xff1a…

电磁场与电磁波part4--时变电磁场

1、采用洛伦兹条件使得矢量位 与标量位 分离在两个独立的方程中&#xff0c;且矢量位 仅与电流密度 有关&#xff0c;而标量位 仅与电荷密度 有关。 2、电磁能量守恒定理&#xff08;坡印廷定理&#xff09; 即减少的电磁能量电磁场所做的功流出的电磁能量 3、设u(r,t)是…

【Flink】核心概念:并行度与算子链

并行度&#xff08;Parallelism&#xff09; 当要处理的数据量非常大时&#xff0c;我们可以把一个算子操作&#xff0c;“复制”多份到多个节点&#xff0c;数据来了之后就可以到其中任意一个执行。这样一来&#xff0c;一个算子任务就被拆分成了多个并行的“子任务”&#x…

340条样本就能让GPT-4崩溃,输出有害内容高达95%?OpenAI的安全防护措施再次失效

仅需340个示例微调GPT-4&#xff0c;即可绕过安全限制&#xff0c;让模型说出“枪支改装方法”、“生化武器制作过程”等有害内容&#xff1f; OpenAI的安全防护措施再次失效&#xff0c;攻击的成功率高达95%&#xff01; 近日&#xff0c;美国顶尖大学UIUC与斯坦福联合对GPT…

Vue面试题

1. 解释单向数据流和双向数据绑定 对于 Vue 来说&#xff0c;组件之间的数据传递具有单向数据流这样的特性称为单向数据流&#xff0c;单向数据流&#xff08;Unidirectional data flow&#xff09;方式使用一个上传数据流和一个下传数据流进行双向数据通信&#xff0c;两个数…

数据分析思维与模型:相关分析法

相关分析法是一种用于研究两个或多个变量之间关系强度和方向的统计方法。这种方法在多个领域&#xff0c;如经济学、心理学、社会科学和自然科学中都有广泛应用。其核心是通过计算相关系数来量化变量之间的相关性。以下是相关分析法的一些基本概念和步骤&#xff1a; 选择变量…

小程序开通电子发票

总目录 文章目录 总目录前言结语 前言 随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了学习机器学习&#xff0c;本文就介绍了机器学习的基础内容。 首先登录商户号&#xff1a;https://pay.weixin.qq.com/index.php/core/home/lo…

基于Python+OpenCV+Tensorflow图像迁移的艺术图片生成系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统![请添加图片描述](https://img-blog.csdnimg.cn/dbda87069fc14c24b71c1eb4224dff05.png)四. 总结 一项目简介 基于PythonOpenCVTensorfl…

【汇编】[bx+idata]的寻址方式、SI和DI寄存器

文章目录 前言一、[bxidata]寻址方式1.1 [bxidata]的含义1.2 示例代码 二、SI和DI寄存器2.1 SI和DI寄存器是什么&#xff1f;2.2 [bxsi]和[bxdi]方式寻址2.3 [bxsiidata]和[bxdiidata] 总结 前言 在汇编语言中&#xff0c;寻址方式是指指令如何定位内存中的数据。BX寄存器与偏…

storage和正则表达式

一、Storage 1.认识Storage WebStorage主要提供了一种机制&#xff0c;可以让浏览器提供一种比cookie更直观的key、value存储方式&#xff1a; localStorage&#xff1a;本地存储&#xff0c;提供的是一种永久性的存储方法&#xff0c;在关闭掉网页重新打开时&#xff0c;存…

c语言-输入输出详解

文章目录 格式化输入输出占位符printfscanf 字符串输入输出puts&#xff08;&#xff09;gets&#xff08;&#xff09; 字符输入输出putchar&#xff08;&#xff09;getchar&#xff08;&#xff09; 区别 格式化输入输出 输入输出的库函数的头文件&#xff1a; #include<…

数据结构 堆

手写堆&#xff0c;而非stl中的堆 如何手写一个堆&#xff1f; //将数组建成堆 <O(n) for (int i n / 2;i;i--) //从n/2开始down down(i); 从n/2元素开始down&#xff0c;最下面一层元素的个数是n/2&#xff0c;其余上面的元素的个数是n/2&#xff0c;从最下面一层到最高层…

【论文复现】QuestEval:《QuestEval: Summarization Asks for Fact-based Evaluation》

以下是复现论文《QuestEval: Summarization Asks for Fact-based Evaluation》&#xff08;NAACL 2021&#xff09;代码https://github.com/ThomasScialom/QuestEval/的流程记录&#xff1a; 在服务器上conda创建虚拟环境questeval&#xff08;python版本于readme保持一致&…

【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…

C++--哈希表--散列--冲突--哈希闭散列模拟实现

文章目录 哈希概念一、哈希表闭散列的模拟实现二、开散列(哈希桶)的模拟实现数据类型定义析构函数插入查找删除 哈希概念 unordered系列的关联式容器之所以效率比较高&#xff0c;是因为其底层使用了哈希结构。 顺序结构以及平衡树中&#xff0c;元素关键码与其存储位置之间没…

C#WPF文本转语音实例

本文介绍C#WPF文本转语音实例 实现方法:使用类库(SpeechSynthesizer )实现的。 一、首先是安装程序包。 二、创建项目 需要添加引用using System.Speech.Synthesis; UI界面 <Windowx:Class="TextToSpeechDemo.MainWindow"xmlns="http://schemas.micr…