jmeter测试dubbo接口
本文讲解jmeter测试dubbo接口的实现方式,文章以一个dubbo的接口为例子进行讲解,该dubbo接口实现的功能为:
- 一:首先我们看服务端代码
代码架构为:
1:新建一个maven工程,pom文件为:
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">3 <modelVersion>4.0.0</modelVersion>4 5 <groupId>com.ustc.demo</groupId>6 <artifactId>dubbo-provider</artifactId>7 <version>0.0.1-SNAPSHOT</version>8 <packaging>jar</packaging>9
10 <name>dubbo-provider</name>
11 <url>http://maven.apache.org</url>
12
13 <properties>
14 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
15 </properties>
16
17 <dependencies>
18 <dependency>
19 <groupId>junit</groupId>
20 <artifactId>junit</artifactId>
21 <version>3.8.1</version>
22 <scope>test</scope>
23 </dependency>
24 <dependency>
25 <groupId>com.alibaba</groupId>
26 <artifactId>dubbo</artifactId>
27 <version>2.4.9</version>
28 </dependency>
29 <dependency>
30 <groupId>com.github.sgroschupf</groupId>
31 <artifactId>zkclient</artifactId>
32 <version>0.1</version>
33 </dependency>
34 </dependencies>
35 <build>
36 <plugins>
37 <plugin>
38 <artifactId>maven-dependency-plugin</artifactId>
39 <executions>
40 <execution>
41 <id>unpack</id>
42 <phase>package</phase>
43 <goals>
44 <goal>unpack</goal>
45 </goals>
46 <configuration>
47 <artifactItems>
48 <artifactItem>
49 <groupId>com.alibaba</groupId>
50 <artifactId>dubbo</artifactId>
51 <version>${project.parent.version}</version>
52 <outputDirectory>${project.build.directory}/dubbo</outputDirectory>
53 <includes>META-INF/assembly/**</includes>
54 </artifactItem>
55 </artifactItems>
56 </configuration>
57 </execution>
58 </executions>
59 </plugin>
60 <plugin>
61 <artifactId>maven-assembly-plugin</artifactId>
62 <configuration>
63 <descriptor>src/main/assembly/assembly.xml</descriptor>
64 </configuration>
65 <executions>
66 <execution>
67 <id>make-assembly</id>
68 <phase>package</phase>
69 <goals>
70 <goal>single</goal>
71 </goals>
72 </execution>
73 </executions>
74 </plugin>
75 </plugins>
76 </build>
77 </project>
2:在src/main下新建文件夹assembly,然后在assembly文件夹下新建assembly.xml文件
1 <assembly>2 <id>assembly</id>3 <formats>4 <format>tar.gz</format>5 </formats>6 <includeBaseDirectory>true</includeBaseDirectory>7 <fileSets>8 <fileSet>9 <directory>${project.build.directory}/dubbo/META-INF/assembly/bin
10 </directory>
11 <outputDirectory>bin</outputDirectory>
12 <fileMode>0755</fileMode>
13 </fileSet>
14 <fileSet>
15 <directory>src/main/assembly/conf</directory>
16 <outputDirectory>conf</outputDirectory>
17 <fileMode>0644</fileMode>
18 </fileSet>
19 </fileSets>
20 <dependencySets>
21 <dependencySet>
22 <outputDirectory>lib</outputDirectory>
23 </dependencySet>
24 </dependencySets>
25 </assembly>
3:在src/main/assembly文件夹下新建conf文件夹,然后在conf文件夹下新建dubbo.properties文件,此处的zookeeper的地址根据实际进行修改
1 dubbo.container=log4j,spring2 dubbo.application.name=demo-caiya3 dubbo.application.owner=william4 #dubbo.registry.address=multicast://224.5.x.7:12345 dubbo.registry.address=zookeeper://134.xx.xx.xx:21816 #dubbo.registry.address=redis://127.0.0.1:63797 #dubbo.registry.address=dubbo://127.0.0.1:90908 #dubbo.monitor.protocol=registry9 dubbo.protocol.name=dubbo
10 dubbo.protocol.port=20880
11 #dubbo.service.loadbalance=roundrobin
12 #dubbo.log4j.file=logs/dubbo-demo-consumer.log
13 #dubbo.log4j.level=WARN
4:在src/test/resources包路径下,新建dubbo.properties文件,内容和上面的3中dubbo.properties文件内容相同
5:编写provider的接口sayHello,新建DemoService.java类
1 package com.ustc.demo.provider; 2 public interface DemoService { 3 public String sayHello(String name); 4 }
6:编写sayHello接口的实现类,新建DemoServiceImpl.java类
package com.ustc.demo.provider;import java.text.SimpleDateFormat;
import java.util.Date;
public class DemoServiceImpl implements DemoService{public String sayHello(String name) {String time = new SimpleDateFormat("HH:mm:ss").format(new Date()); System.out.println("from consumer:"+name);return "The current time is:"+time;}
7:编写spring的配置文件,在META-INF/spring文件夹下的demo-provider.xml文件
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
3 <bean id="demoService" class="com.ustc.demo.provider.DemoServiceImpl" />
4 <dubbo:service interface="com.ustc.demo.provider.DemoService" ref="demoService"/>
5 </beans>
8:编写main方法,新建DemoServiceMain.java类
1 package com.ustc.demo.provider;
2 public class DemoServiceMain {
3 public static void main(String[] args) {
4 com.alibaba.dubbo.container.Main.main(args);
5 }
6 }
这样服务端的代码就写好了,实现的功能是当消费者来询问当前时间是几点的时候,返回当前时间
- 二:然后我们看消费端代码
1:新建一个maven工程,pom文件为:
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">3 <modelVersion>4.0.0</modelVersion>4 <groupId>com.ustc.demo</groupId>5 <artifactId>consumer</artifactId>6 <version>0.0.1-SNAPSHOT</version>7 <packaging>jar</packaging>8 <name>consumer</name>9 <url>http://maven.apache.org</url>
10 <properties>
11 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
12 </properties>
13 <dependencies>
14 <dependency>
15 <groupId>junit</groupId>
16 <artifactId>junit</artifactId>
17 <version>3.8.1</version>
18 <scope>test</scope>
19 </dependency>
20 <dependency>
21 <groupId>com.alibaba</groupId>
22 <artifactId>dubbo</artifactId>
23 <version>2.4.9</version>
24 </dependency>
25 <dependency>
26 <groupId>com.github.sgroschupf</groupId>
27 <artifactId>zkclient</artifactId>
28 <version>0.1</version>
29 </dependency>
30 </dependencies>
31 <build>
32 <plugins>
33 <plugin>
34 <artifactId>maven-dependency-plugin</artifactId>
35 <executions>
36 <execution>
37 <id>unpack</id>
38 <phase>package</phase>
39 <goals>
40 <goal>unpack</goal>
41 </goals>
42 <configuration>
43 <artifactItems>
44 <artifactItem>
45 <groupId>com.alibaba</groupId>
46 <artifactId>dubbo</artifactId>
47 <version>${project.parent.version}</version>
48 <outputDirectory>${project.build.directory}/dubbo</outputDirectory>
49 <includes>META-INF/assembly/**</includes>
50 </artifactItem>
51 </artifactItems>
52 </configuration>
53 </execution>
54 </executions>
55 </plugin>
56 <plugin>
57 <artifactId>maven-assembly-plugin</artifactId>
58 <configuration>
59 <descriptor>src/main/assembly/assembly.xml</descriptor>
60 </configuration>
61 <executions>
62 <execution>
63 <id>make-assembly</id>
64 <phase>package</phase>
65 <goals>
66 <goal>single</goal>
67 </goals>
68 </execution>
69 </executions>
70 </plugin>
71 </plugins>
72 </build>
73 </project>
2:在src/main下新建文件夹assembly,然后在assembly文件夹下新建assembly.xml文件
1 <assembly>2 <id>assembly</id>3 <formats>4 <format>tar.gz</format>5 </formats>6 <includeBaseDirectory>true</includeBaseDirectory>7 <fileSets>8 <fileSet>9 <directory>${project.build.directory}/dubbo/META-INF/assembly/bin
10 </directory>
11 <outputDirectory>bin</outputDirectory>
12 <fileMode>0755</fileMode>
13 </fileSet>
14 <fileSet>
15 <directory>src/main/assembly/conf</directory>
16 <outputDirectory>conf</outputDirectory>
17 <fileMode>0644</fileMode>
18 </fileSet>
19 </fileSets>
20 <dependencySets>
21 <dependencySet>
22 <outputDirectory>lib</outputDirectory>
23 </dependencySet>
24 </dependencySets>
25 </assembly>
3:在src/main/assembly文件夹下新建conf文件夹,然后在conf文件夹下新建dubbo.properties文件,此处的zookeeper的地址根据实际进行修改
1 dubbo.container=log4j,spring2 dubbo.application.name=demo-consumer3 dubbo.application.owner=4 #dubbo.registry.address=multicast://224.5.6.7:12345 dubbo.registry.address=zookeeper://134.64.xx.xx:21816 #dubbo.registry.address=redis://127.0.0.1:63797 #dubbo.registry.address=dubbo://127.0.0.1:90908 dubbo.monitor.protocol=registry9 dubbo.log4j.file=logs/dubbo-demo-consumer.log
10 dubbo.log4j.level=WARN
4:在src/test/resources包路径下,新建dubbo.properties文件,内容和上面的3中dubbo.properties文件内容相同
5:编写provider的接口sayHello,新建DemoService.java类
1 package com.ustc.demo.provider; 2 3 public interface DemoService { 4 public String sayHello(String name); 5 }
6:编写消费端请求类调用sayHello方法,新建DemoAction.java类
1 package com.ustc.demo.consumer;2 import com.ustc.demo.provider.DemoService;3 public class DemoAction {4 5 private DemoService demoService;6 7 public void setDemoService(DemoService demoService) {8 this.demoService = demoService;9 }
10
11 public void start() throws Exception {
12 for (int i = 0; i < Integer.MAX_VALUE; i ++) {
13 try {
14 String hello = demoService.sayHello("hello,How much is the current time?");
15 System.out.println("from provider:"+hello);
16 } catch (Exception e) {
17 e.printStackTrace();
18 }
19 Thread.sleep(2000);
20 }
21 }
22 }
7:编写spring的配置文件,在META-INF/spring文件夹下的dubbo-demo-action.xml文件
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
3 <bean class="com.ustc.demo.consumer.DemoAction" init-method="start">
4 <property name="demoService" ref="demoService" />
5 </bean>
6 </beans>
8:编写spring的配置文件,在META-INF/spring文件夹下的dubbo-demo-consumer.xml文件
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
4 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
5 <dubbo:reference id="demoService"
6 interface="com.ustc.demo.provider.DemoService" />
7 </beans>
9:编写main方法,新建DemoServiceMain.java类
1 package com.ustc.demo.consumer;
2 public class DemoConsumerMain {
3 public static void main(String[] args) {
4 com.alibaba.dubbo.container.Main.main(args);
5 }
6 }
这样我们就完成了本地消费者代码,在编写符合jmeter格式的代码前,我们首先在本地开发工具中运行看看效果:
启动服务提供方的main方法,然后启动服务消费方的main方法:
服务消费者控制台:
服务提供者控制台:
这样调试发现消费端向服务端发送:How much is the current time?,然后服务端返回当前的时间,该dubbo接口的功能正常实现
- 三:我们现在想对dubbo接口进行性能测试,可以用jmeter模拟服务消费方并发调用服务提供方
因为jmeter支持java请求,故我们可以将服务提供方打包部署到服务器上运行,将服务消费方打成jar包放到jmeter的/lib/ext文件夹中,这样就能实现jmeter模拟消费方去请求服务端,进行性能测试
现在我们来讲解如何将上面的服务消费端的代码编写成可以打包放到jmeter中的jar包代码
只需要对上面的消费者代码进行3处修改即可:
1:pom.xml文件中添加对jmeter的支持,在<dependencies></dependencies>之间添加如下代码
1 <!-- java jmeter依赖jar包 -->2 <dependency>3 <groupId>org.apache.jmeter</groupId>4 <artifactId>ApacheJMeter_core</artifactId>5 <version>3.0</version>6 </dependency>7 <dependency>8 <groupId>org.apache.jmeter</groupId>9 <artifactId>ApacheJMeter_java</artifactId>
10 <version>3.0</version>
11 </dependency>
2:在src/main/resources下新建applicationConsumer.xml文件,zookeeper地址根据需要进行修改
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans.xsd 6 http://code.alibabatech.com/schema/dubbo 7 http://code.alibabatech.com/schema/dubbo/dubbo.xsd 8 "> 9
10 <!-- consumer application name -->
11 <dubbo:application name="consumer-jmeter" />
12 <!-- registry address, used for consumer to discover services -->
13 <dubbo:registry address="zookeeper://134.64.xx.xx:2181" />
14 <!-- which service to consume? -->
15 <dubbo:reference id="demoService" interface="com.ustc.demo.provider.DemoService" />
16 </beans>
3:在com.ustc.demo.consumer包下新建JmeDemoAction.java类
1 package com.ustc.demo.consumer;2 3 import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;4 import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;5 import org.apache.jmeter.samplers.SampleResult;6 import org.springframework.context.support.ClassPathXmlApplicationContext;7 8 import com.ustc.demo.provider.DemoService;9
10 /**
11 * ClassName:JmeDemoAction <br/>
12 * Function: TODO ADD FUNCTION. <br/>
13 * Reason: TODO ADD REASON. <br/>
14 * Date: 2016年12月3日 下午10:12:10 <br/>
15 * @author meiling.yu
16 * @version
17 * @since JDK 1.7
18 * @see
19 */
20 public class JmeDemoAction extends AbstractJavaSamplerClient{
21 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
22 new String[] { "applicationConsumer.xml" });
23
24 public SampleResult runTest(JavaSamplerContext arg0) {
25 SampleResult sr = new SampleResult();
26 try {
27 sr.sampleStart();
28 context.start();
29 DemoService demoService = (DemoService) context.getBean("demoService");
30 String hello = demoService.sayHello("hello,How much is the current time?");
31 sr.setResponseData("from provider:"+hello, null);
32 sr.setDataType(SampleResult.TEXT);
33 sr.setSuccessful(true);
34 sr.sampleEnd();
35 } catch (Exception e) {
36 e.printStackTrace();
37 }
38 return sr;
39 }
40
41 }
这样就完成了jmeter的消费端代码编写
- 四:将消费端和服务端打包maven install,打包完成后可以看到消费端的target下生成了两个文件一个consumer-0.0.1-SNAPSHOT-assembly.tar.gz还有一个consumer-0.0.1-SNAPSHOT.jar
将consumer-0.0.1-SNAPSHOT-assembly.tar.gz中的lib文件夹下所有的jar包拷贝到jmeter的lib目录下,如果有重复的,则不替换用jmeter原生的jar包
将consumer-0.0.1-SNAPSHOT.jar拷贝到jmeter的lib/ext目录下
- 五:部署服务端,然后消费端为:启动jmeter,验证该jar功能是否正常,新建一个java请求
启动服务端:
新建消费端的java请求:
启动消费端,发现响应结果中返回了服务端的响应:
在看服务端的日志:
上图为两个线程测试了一下,发现调用通过成功,响应数据正常返回,故该脚本可以正常使用,至此jmeter测试dubbo接口整个的脚本制作过程就讲完了
至于如何用这个jmx脚本做性能测试,我就不在重复了,参考我的博文-jmeter命令行运行-单节点测试或者分布式测试
最后给出工程源码,也就是上面的例子的源代码jmeter测试dubbo接口:dubbor.rar中包含两个maven工程,dubbo-consumer和dubbo-provider
2023最新Jmeter接口测试从入门到精通(全套项目实战教程)
相关文章:

jmeter测试dubbo接口
本文讲解jmeter测试dubbo接口的实现方式,文章以一个dubbo的接口为例子进行讲解,该dubbo接口实现的功能为: 一:首先我们看服务端代码 代码架构为: 1:新建一个maven工程,pom文件为: 1…...

分类预测 | Matlab实现基于DBN-SVM深度置信网络-支持向量机的数据分类预测
分类预测 | Matlab实现基于DBN-SVM深度置信网络-支持向量机的数据分类预测 目录 分类预测 | Matlab实现基于DBN-SVM深度置信网络-支持向量机的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.利用DBN进行特征提取,将提取后的特征放入SVM进行分类…...

android系统新特性——用户界面以及系统界面改进
用户界面改进 Android用户界面改进最明显的就是MD了。MD是Google于2014年推出的设计语言,它是一套完整的设计系统,包含了动画、样式、布局、组件等一系列与设计有关的元素。通过对这些行为的描述,让开发者设计出更符合目标的软件,…...
电量计驱动代码
外部电量计驱动代码,直接上代码了,懒,不做细节分析。。。。。 /** Fuelgauge battery driver** This package is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License version 2 as* published by the Free Soft…...

如何将音频添加到视频并替换视频中的音轨
随着视频流媒体网站的流行和便携式设备的发展,你可能越来越倾向于自己制作视频并在互联网上分享。有时,你可能还需要编辑视频并为其添加背景音乐,因为音乐总是对视频的感知起着神奇的作用。 那如何给视频添加音频呢?或者如何用新…...

Android 单元测试初体验
Android 单元测试初体验 前言一、单元测试是什么?二、简单使用1.依赖2.单元测试代码简单模版及解释 总结 前言 当初在学校学安卓的时候,老师敢教学进度,翻到单元测试这一章节的时候提了两句,没有把单元测试当重点讲,只…...
HarmonyOS—ArkTS中@Observed和@ObjectLink装饰器的嵌套类对象属性变化【鸿蒙应用开发】
文章目录 ARKTS中@Observed和@ObjectLink装饰器的嵌套类对象属性变化@Observed 类装饰器说明装饰器参数类装饰器的使用@ObjectLink 变量装饰器说明装饰器参数同步类型允许装饰的变量类型被装饰变量的初始值举例装饰器的限制条件观察变化和行为表现观察的变化框架行为使用场景1.…...

设计问卷调查问题的技巧二:确定问题的结构与顺序
上篇文章中,我们了解到设计问卷调查问卷的技巧有保持问题中立、少用开放式问题、保持全名平衡的答案集、谨慎设置单一回答。在这篇文章中,我们将继续深入探讨设计问卷调查问题的剩余5大技巧! Tip5:注意问题的顺序 虽然您可以任意…...

kubernetes使用nfs创建pvc部署mysql stateful的方法
kubernetes创建的pod默认都是无状态的,换句话说删除以后不会保留任何数据。 所以对于mysql这种有状态的应用,必须使用持久化存储作为支撑,才能部署成有状态的stateful. 最简单的方法就是使用nfs作为网络存储,因为nfs存储很容易被…...

JavaScript WebApi(二) 详解
监听事件 介绍 事件监听是一种用于在特定条件下执行代码的编程技术。在Web开发中,事件监听器可以用于捕获和响应用户与页面交互的各种操作,如点击、滚动、输入等。 事件监听的基本原理是,通过在特定元素上注册事件监听器,当事件…...

纯新手发布鸿蒙的第一个java应用
第一个java开发鸿蒙应用 1.下载和安装华为自己的app开发软件DevEco Studio HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 2.打开IDE新建工程(当前用的IDEA 3.1.1 Release) 选择第一个,其他的默认只能用(API9)版本,…...

UI自动化(selenium+python)之元素定位的三种等待方式!
前言 在UI自动化过程中,常遇到元素未找到,代码报错的情况。这种情况下,需要用等待wait。 在selenium中可以用到三种等待方式即sleep,implicitly_wait,WebDriverWait 一、固定等待(sleep) 导入time模块,设定固定的等待时间 缺…...

[C++]指针与结构体
标题 一.指针1.指针的定义和使用2.指针所占的内存空间3.空指针与野指针4.const修饰指针5.指针和数组6.指针和函数 二.结构体1.结构体的定义与使用2.结构体数组3.结构体指针4.结构体的嵌套使用5.结构体做函数参数6.结构体中const使用场景7.案例练习 一.指针 作用: 可以通过指针…...
注解原理是什么 Spring MVC常用的注解有哪些?
文章目录 注解原理是什么Spring MVC常用的注解有哪些? 通过这篇文章来和大家一起认识springMVC常用的注解,那么首先需要来了解注解。 注解原理是什么 注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。…...

【数据结构】树与二叉树(廿五):树搜索指定数据域的结点(算法FindTarget)
文章目录 5.3.1 树的存储结构5. 左儿子右兄弟链接结构 5.3.2 获取结点的算法1. 获取大儿子、大兄弟结点2. 搜索给定结点的父亲3. 搜索指定数据域的结点a. 算法FindTargetb. 算法解析c. 代码实现a. 使用指向指针的指针b. 直接返回找到的节点 4. 代码整合 5.3.1 树的存储结构 5.…...

深度学习图像风格迁移 - opencv python 计算机竞赛
文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习图像风格迁移 - opencv python 该项目较为新颖,适合作为竞赛课题…...
提高SQL语句执行效率的8个方法
提高SQL语句执行效率的8个方法 在日常的数据库操作中,如何提高SQL语句的执行效率是每个程序员都需要关注的问题,SQL语句的执行效率对系统的性能有着重要影响,本文将介绍8种提高SQL语句执行效率的方法。 合理使用索引 索引介绍 索引是数据…...

C语言,通过数组实现循环队列
实现循环队列最难的地方就在于如何判空和判满,只要解决了这两点循环队列的设计就没有问题。接下来我们将会使用数组来实现循环队列。 接下来,为了模拟实现一个容量为4的循环队列,我们创建一个容量为4 1 的数组。 接下来我们将会对这个数组…...

python+pygame+opencv+gpt实现虚拟数字人直播(一)
AI技术突飞猛进,不断的改变着人们的工作和生活。数字人直播作为新兴形式,必将成为未来趋势,具有巨大的、广阔的、惊人的市场前景。它将不断融合创新技术和跨界合作,提供更具个性化和多样化的互动体验,成为未来的一种趋…...

c语言:模拟实现各种字符串函数(2)
strncpy函数: 功能:拷贝指定长度的字符串a到字符串b中 代码模拟实现: //strncpy char* my_strncpy(char* dest, char* str,size_t num) {char* ret dest;assert(dest && str);//断言,如果其中有一个为空指针ÿ…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...