Jmeter 基于Docker 实现分布式测试
基于Docker 实现分布式测试
- 制作Jmeter基础镜像
- 制作工作节点镜像
- 启动工作节点
- 启动控制节点
- 遇到的问题
使用Docker 部署Jmeter非常方便,可以省略软件的安装以及配置,比如jdk、jmeter。需要部署多个工作节点可以节省时间。
制作Jmeter基础镜像
- 下载jmeter安装包 https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.6.3.tgz
- 编写 Dockerfile
FROM openjdk:8-jdk-alpine3.9
ARG JMETER_VERSION=5.6.3# 设置工作目录
WORKDIR /opt/jmeter# 复制 Jmeter
COPY apache-jmeter-${JMETER_VERSION}.tgz ./# 安装
RUN tar -xvzf apache-jmeter-$JMETER_VERSION.tgz \&& rm apache-jmeter-$JMETER_VERSION.tgz# 设置环境变量
ENV JMETER_HOME /opt/jmeter/apache-jmeter-$JMETER_VERSION/
ENV PATH="$JMETER_HOME/bin:${PATH}"
- 文件目录关系如下
root@ubuntu:/home/chengdu/jmeter/docker# tree
.
├── apache-jmeter-5.6.3.tgz
├── Dockerfile
└── worker└── Dockerfile.worker
- 执行编译镜像命令
docker build -t jmeter:5.6.3 .
- 查看镜像是否编译成功
root@ubuntu:/home/chengdu/jmeter/docker# docker images|grep jmeter
jmeter 5.6.3 37a73dacbe58 4 hours ago 342MB
jmeter-5.6.3 worker 80ae9383e488 4 hours ago 342MB
制作工作节点镜像
基于第一步的基础镜像制作
FROM jmeter:5.6.3# 默认使用1099端口,可以用参数覆盖
ARG RMI_PORT=1099
ARG LOCAL_PORT=50000ENTRYPOINT $JMETER_HOME/bin/jmeter-server \-Dserver_port=${RMI_PORT} \-Dserver.rmi.localport=${LOCAL_PORT} \-Djava.rmi.server.hostname=${HOST_IP} \-Jserver.rmi.ssl.disable=true
保存为 Dockerfile.worker,运行编译镜像命令
docker build -f Dockerfile.worker -t jmeter-5.6.3:worker .
启动工作节点
启动3个工作节点,注意,HOST_IP 变量可以填写宿主机的IP,确保控制节点的网络能当前的宿主机
docker run -p 1099:1099 -p 50000:50000 -e RMI_PORT=1099 -e LOCAL_PORT=50000 -e HOST_IP=192.168.230.128 -it -d --name jmeter-worker-01 jmeter-5.6.3:workerdocker run -p 1100:1100 -p 50001:50001 -e RMI_PORT=1100 -e LOCAL_PORT=50001 -e HOST_IP=192.168.230.128 -it -d --name jmeter-worker-02 jmeter-5.6.3:workerdocker run -p 1101:1101 -p 50002:50002 -e RMI_PORT=1101 -e LOCAL_PORT=50002 -e HOST_IP=192.168.230.128 -it -d --name jmeter-worker-03 jmeter-5.6.3:worker
查看是容器否启动成功了 docker ps
启动控制节点
- 修该 jmeter.properties 的 remote_hosts 配置
remote_hosts = 192.168.230.128:1099,192.168.230.128:1100,192.168.230.128:1101
- 启动控制节点,windows 直接点击 jmeter.bat,启动成功之后会看到3个配置的节点
- 点击远程启动所有
- 在容器中查看执行日志
docker exec -it 98300e4cdea0 /bin/sh 进入容器shell 终端,可以看到有一个日志文件 jmeter-server.log
root@ubuntu:/home/chengdu/jmeter/docker/worker# docker exec -it 98300e4cdea0 /bin/sh
/opt/jmeter # ls
apache-jmeter-5.6.3 jmeter-server.log
/opt/jmeter # tail -200f jmeter-server.log
tail: invalid number '200f'
/opt/jmeter # tail -200 jmeter-server.log
2024-02-03 08:26:26,214 INFO o.a.j.u.JMeterUtils: Setting Locale to en_EN
2024-02-03 08:26:26,295 INFO o.a.j.JMeter: Loading user properties from: /opt/jmeter/apache-jmeter-5.6.3/bin/user.properties
2024-02-03 08:26:26,296 INFO o.a.j.JMeter: Loading system properties from: /opt/jmeter/apache-jmeter-5.6.3/bin/system.properties
2024-02-03 08:26:26,296 INFO o.a.j.JMeter: Setting System property: server_port=1099
2024-02-03 08:26:26,297 INFO o.a.j.JMeter: Setting System property: server_port=1101
2024-02-03 08:26:26,297 INFO o.a.j.JMeter: Setting System property: server.rmi.localport=50002
2024-02-03 08:26:26,297 INFO o.a.j.JMeter: Setting System property: java.rmi.server.hostname=192.168.230.128
2024-02-03 08:26:26,297 INFO o.a.j.JMeter: Setting JMeter property: server.rmi.ssl.disable=true
2024-02-03 08:26:26,324 INFO o.a.j.JMeter: Copyright (c) 1998-2024 The Apache Software Foundation
2024-02-03 08:26:26,324 INFO o.a.j.JMeter: Version 5.6.3
2024-02-03 08:26:26,324 INFO o.a.j.JMeter: java.version=1.8.0_212
2024-02-03 08:26:26,324 INFO o.a.j.JMeter: java.vm.name=OpenJDK 64-Bit Server VM
2024-02-03 08:26:26,324 INFO o.a.j.JMeter: os.name=Linux
2024-02-03 08:26:26,324 INFO o.a.j.JMeter: os.arch=amd64
2024-02-03 08:26:26,325 INFO o.a.j.JMeter: os.version=5.15.0-71-generic
2024-02-03 08:26:26,325 INFO o.a.j.JMeter: file.encoding=UTF-8
2024-02-03 08:26:26,325 INFO o.a.j.JMeter: java.awt.headless=true
2024-02-03 08:26:26,325 INFO o.a.j.JMeter: Max memory =1073741824
2024-02-03 08:26:26,325 INFO o.a.j.JMeter: Available Processors =2
2024-02-03 08:26:26,342 INFO o.a.j.JMeter: Default Locale=English (EN)
2024-02-03 08:26:26,343 INFO o.a.j.JMeter: JMeter Locale=English (EN)
2024-02-03 08:26:26,343 INFO o.a.j.JMeter: JMeterHome=/opt/jmeter/apache-jmeter-5.6.3
2024-02-03 08:26:26,343 INFO o.a.j.JMeter: user.dir =/opt/jmeter
2024-02-03 08:26:26,343 INFO o.a.j.JMeter: PWD =/opt/jmeter
2024-02-03 08:26:26,344 INFO o.a.j.JMeter: IP: 172.17.0.4 Name: 98300e4cdea0 FullName: 98300e4cdea0
2024-02-03 08:26:26,444 INFO o.a.j.r.RmiUtils: Disabling SSL for RMI as server.rmi.ssl.disable is set to 'true'
2024-02-03 08:26:26,444 INFO o.a.j.r.RmiUtils: Disabling SSL for RMI as server.rmi.ssl.disable is set to 'true'
2024-02-03 08:26:26,579 INFO o.a.j.e.RemoteJMeterEngineImpl: Starting backing engine on 1101
2024-02-03 08:26:26,579 INFO o.a.j.r.RmiUtils: Resolving by name the value of System property 'java.rmi.server.hostname': 192.168.230.128
2024-02-03 08:26:26,580 INFO o.a.j.r.RmiUtils: Local IP address=192.168.230.128
2024-02-03 08:26:26,580 INFO o.a.j.e.RemoteJMeterEngineImpl: IP address is a site-local address; this may cause problems with remote access.Can be overridden by defining the system property 'java.rmi.server.hostname' - see jmeter-server script file
2024-02-03 08:26:26,581 INFO o.a.j.e.RemoteJMeterEngineImpl: Creating RMI registry (server.rmi.create=true)
2024-02-03 08:26:26,581 INFO o.a.j.r.RmiUtils: Disabling SSL for RMI as server.rmi.ssl.disable is set to 'true'
2024-02-03 08:26:26,581 INFO o.a.j.r.RmiUtils: Disabling SSL for RMI as server.rmi.ssl.disable is set to 'true'
2024-02-03 08:26:26,589 INFO o.a.j.e.RemoteJMeterEngineImpl: Bound to RMI registry on port 1101
2024-02-03 08:30:46,724 INFO o.a.j.s.SampleEvent: List of sample_variables: []
2024-02-03 08:30:46,984 INFO o.a.j.s.BatchSampleSender: Using batching for this run. Thresholds: num=100, time=60000
2024-02-03 08:30:46,985 INFO o.a.j.s.DataStrippingSampleSender: Using DataStrippingSampleSender for this run with stripAlsoOnError: true
2024-02-03 08:30:46,986 INFO o.a.j.s.BatchSampleSender: Using batching for this run. Thresholds: num=100, time=60000
2024-02-03 08:30:46,986 INFO o.a.j.s.DataStrippingSampleSender: Using DataStrippingSampleSender for this run with stripAlsoOnError: true
2024-02-03 08:30:47,111 INFO o.a.j.p.h.s.HTTPSamplerBase: Parser for text/html is org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser
2024-02-03 08:30:47,112 INFO o.a.j.p.h.s.HTTPSamplerBase: Parser for application/xhtml+xml is org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser
2024-02-03 08:30:47,112 INFO o.a.j.p.h.s.HTTPSamplerBase: Parser for application/xml is org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser
2024-02-03 08:30:47,115 INFO o.a.j.p.h.s.HTTPSamplerBase: Parser for text/xml is org.apache.jmeter.protocol.http.parser.LagartoBasedHtmlParser
2024-02-03 08:30:47,121 INFO o.a.j.p.h.s.HTTPSamplerBase: Parser for text/vnd.wap.wml is org.apache.jmeter.protocol.http.parser.RegexpHTMLParser
2024-02-03 08:30:47,121 INFO o.a.j.p.h.s.HTTPSamplerBase: Parser for text/css is org.apache.jmeter.protocol.http.parser.CssParser
2024-02-03 08:30:47,214 INFO o.a.j.p.h.c.CookieManager: Settings: Delete null: true Check: true Allow variable: true Save: false Prefix: COOKIE_
2024-02-03 08:30:47,227 INFO o.a.j.s.BatchSampleSender: Using batching for this run. Thresholds: num=100, time=60000
2024-02-03 08:30:47,227 INFO o.a.j.s.DataStrippingSampleSender: Using DataStrippingSampleSender for this run with stripAlsoOnError: true
2024-02-03 08:30:47,310 INFO o.a.j.e.RemoteJMeterEngineImpl: Creating JMeter engine on host 192.168.230.128:1101 base '.'
2024-02-03 08:30:47,310 INFO o.a.j.e.RemoteJMeterEngineImpl: Remote client host: 192.168.230.1
2024-02-03 08:30:47,339 INFO o.a.j.s.FileServer: Default base='/opt/jmeter'
2024-02-03 08:30:47,357 INFO o.a.j.s.FileServer: Set new base='.'
2024-02-03 08:30:47,364 INFO o.a.j.e.StandardJMeterEngine: Applying properties {}
2024-02-03 08:30:47,413 INFO o.a.j.e.RemoteJMeterEngineImpl: Running test
2024-02-03 08:30:47,461 INFO o.a.j.e.StandardJMeterEngine: Running the test!
2024-02-03 08:30:47,462 INFO o.a.j.s.SampleEvent: List of sample_variables: []
2024-02-03 08:30:47,541 INFO o.a.j.e.u.CompoundVariable: Note: Function class names must contain the string: '.functions.'
2024-02-03 08:30:47,541 INFO o.a.j.e.u.CompoundVariable: Note: Function class names must not contain the string: '.gui.'
2024-02-03 08:30:51,297 INFO o.a.j.e.StandardJMeterEngine: Starting ThreadGroup: 1 : 分布式测试
2024-02-03 08:30:51,298 INFO o.a.j.e.StandardJMeterEngine: Starting 10 threads for group 分布式测试.
2024-02-03 08:30:51,298 INFO o.a.j.e.StandardJMeterEngine: Thread will continue on error
2024-02-03 08:30:51,298 INFO o.a.j.t.ThreadGroup: Starting thread group... number=1 threads=10 ramp-up=1 delayedStart=false
2024-02-03 08:30:51,449 INFO o.a.j.t.ThreadGroup: Started thread group number 1
2024-02-03 08:30:51,450 INFO o.a.j.e.StandardJMeterEngine: All thread groups have been started
2024-02-03 08:30:51,516 INFO o.a.j.t.JMeterThread: Thread started: 192.168.230.128:1101-分布式测试 1-1
2024-02-03 08:30:51,592 INFO o.a.j.t.JMeterThread: Thread started: 192.168.230.128:1101-分布式测试 1-2
2024-02-03 08:30:51,681 INFO o.a.j.t.JMeterThread: Thread started: 192.168.230.128:1101-分布式测试 1-3
2024-02-03 08:30:51,761 INFO o.a.j.t.JMeterThread: Thread started: 192.168.230.128:1101-分布式测试 1-4
2024-02-03 08:30:51,853 INFO o.a.j.t.JMeterThread: Thread started: 192.168.230.128:1101-分布式测试 1-5
2024-02-03 08:30:51,857 INFO o.a.j.p.h.s.HTTPHCAbstractImpl: Local host = 98300e4cdea0
2024-02-03 08:30:51,925 INFO o.a.j.t.JMeterThread: Thread started: 192.168.230.128:1101-分布式测试 1-6
2024-02-03 08:30:51,950 INFO o.a.j.p.h.s.HTTPHC4Impl: HTTP request retry count = 0
2024-02-03 08:30:51,972 INFO o.a.j.s.SampleResult: Note: Sample TimeStamps are START times
2024-02-03 08:30:51,972 INFO o.a.j.s.SampleResult: sampleresult.default.encoding is set to UTF-8
2024-02-03 08:30:51,972 INFO o.a.j.s.SampleResult: sampleresult.useNanoTime=true
2024-02-03 08:30:51,974 INFO o.a.j.s.SampleResult: sampleresult.nanoThreadSleep=5000
2024-02-03 08:30:52,023 INFO o.a.j.t.JMeterThread: Thread started: 192.168.230.128:1101-分布式测试 1-7
2024-02-03 08:30:52,122 INFO o.a.j.t.JMeterThread: Thread started: 192.168.230.128:1101-分布式测试 1-8
2024-02-03 08:30:52,192 INFO o.a.j.t.JMeterThread: Thread started: 192.168.230.128:1101-分布式测试 1-9
2024-02-03 08:30:52,297 INFO o.a.j.t.JMeterThread: Thread started: 192.168.230.128:1101-分布式测试 1-10
2024-02-03 08:30:53,189 INFO o.a.j.t.JMeterThread: Thread is done: 192.168.230.128:1101-分布式测试 1-3
2024-02-03 08:30:53,190 INFO o.a.j.t.JMeterThread: Thread finished: 192.168.230.128:1101-分布式测试 1-3
2024-02-03 08:30:53,217 INFO o.a.j.t.JMeterThread: Thread is done: 192.168.230.128:1101-分布式测试 1-10
2024-02-03 08:30:53,217 INFO o.a.j.t.JMeterThread: Thread finished: 192.168.230.128:1101-分布式测试 1-10
2024-02-03 08:30:53,218 INFO o.a.j.t.JMeterThread: Thread is done: 192.168.230.128:1101-分布式测试 1-2
2024-02-03 08:30:53,227 INFO o.a.j.t.JMeterThread: Thread finished: 192.168.230.128:1101-分布式测试 1-2
2024-02-03 08:30:53,243 INFO o.a.j.t.JMeterThread: Thread is done: 192.168.230.128:1101-分布式测试 1-6
2024-02-03 08:30:53,243 INFO o.a.j.t.JMeterThread: Thread finished: 192.168.230.128:1101-分布式测试 1-6
2024-02-03 08:30:53,245 INFO o.a.j.t.JMeterThread: Thread is done: 192.168.230.128:1101-分布式测试 1-1
2024-02-03 08:30:53,246 INFO o.a.j.t.JMeterThread: Thread finished: 192.168.230.128:1101-分布式测试 1-1
2024-02-03 08:30:53,246 INFO o.a.j.t.JMeterThread: Thread is done: 192.168.230.128:1101-分布式测试 1-7
2024-02-03 08:30:53,246 INFO o.a.j.t.JMeterThread: Thread finished: 192.168.230.128:1101-分布式测试 1-7
2024-02-03 08:30:53,250 INFO o.a.j.t.JMeterThread: Thread is done: 192.168.230.128:1101-分布式测试 1-4
2024-02-03 08:30:53,352 INFO o.a.j.t.JMeterThread: Thread finished: 192.168.230.128:1101-分布式测试 1-4
2024-02-03 08:30:53,354 INFO o.a.j.t.JMeterThread: Thread is done: 192.168.230.128:1101-分布式测试 1-5
2024-02-03 08:30:53,354 INFO o.a.j.t.JMeterThread: Thread finished: 192.168.230.128:1101-分布式测试 1-5
2024-02-03 08:30:53,428 INFO o.a.j.t.JMeterThread: Thread is done: 192.168.230.128:1101-分布式测试 1-8
2024-02-03 08:30:53,430 INFO o.a.j.t.JMeterThread: Thread finished: 192.168.230.128:1101-分布式测试 1-8
2024-02-03 08:30:53,469 INFO o.a.j.t.JMeterThread: Thread is done: 192.168.230.128:1101-分布式测试 1-9
2024-02-03 08:30:53,469 INFO o.a.j.t.JMeterThread: Thread finished: 192.168.230.128:1101-分布式测试 1-9
2024-02-03 08:30:53,476 INFO o.a.j.e.StandardJMeterEngine: Notifying test listeners of end of test
2024-02-03 08:30:53,476 INFO o.a.j.s.DataStrippingSampleSender: Test Ended on 192.168.230.128:1101
2024-02-03 08:30:53,477 INFO o.a.j.s.BatchSampleSender: Test Ended on 192.168.230.128:1101
2024-02-03 08:30:53,545 INFO o.a.j.s.DataStrippingSampleSender: Test Ended on 192.168.230.128:1101
2024-02-03 08:30:53,546 INFO o.a.j.s.BatchSampleSender: Test Ended on 192.168.230.128:1101
2024-02-03 08:30:53,567 INFO o.a.j.s.DataStrippingSampleSender: Test Ended on 192.168.230.128:1101
2024-02-03 08:30:53,567 INFO o.a.j.s.BatchSampleSender: Test Ended on 192.168.230.128:1101
2024-02-03 08:30:53,589 INFO o.a.j.e.StandardJMeterEngine: Test has ended on host 192.168.230.128:1101
- 查看运行结果
遇到的问题
- 宿主机和容器网络不通,需要Docker重置网络,步骤
# 停止所有容器
root@ubuntu:/home/chengdu/jmeter/docker/worker# docker stop $(docker ps -aq)
7aa491cf6145
67f090336f59
5c456dd2242a
# 移除网桥
docker network rm bridge
# 重启docker服务,重新生成网桥
sudo service docker restart
相关文章:

Jmeter 基于Docker 实现分布式测试
基于Docker 实现分布式测试 制作Jmeter基础镜像制作工作节点镜像启动工作节点启动控制节点遇到的问题 使用Docker 部署Jmeter非常方便,可以省略软件的安装以及配置,比如jdk、jmeter。需要部署多个工作节点可以节省时间。 制作Jmeter基础镜像 下载jmeter…...

Vite与Webpack打包内存溢出问题优雅处理方式
Vite与Webpack打包内存溢出问题处理 文章目录 Vite与Webpack打包内存溢出问题处理1. Vite1. 打包错误提示2. 命令行方式解决3. 配置环境变量方式解决1. 设置变量2. 配置系统的环境变量 2. Webpack1. 打包错误提示2. 命令行方式解决3. 配置环境变量方式解决1. 设置变量2. 配置系…...
sqlalchemy——@listens_for
问:sqlalchemy如何实现:表中指定数据更新时,其time字段自动更新?答:使用listens_for 装饰器来注册事件监听器,确保在项目数据更新时触发相应的处理逻辑。 示例代码如下: # coding: utf-8 impo…...

MySQL进阶之锁(全局锁以及备份报错解决)
锁 全局锁 全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语 句,已经更新操作的事务提交语句都将被阻塞。 其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定ÿ…...
C#实现windows系统重启、关机
1、C#实现windows系统重启、关机 实现原理,使用系统shutdown命令执行: 强制关机: shutdown -s -f -t 0 强制重启: shutdown -r -f -t 0 2、关于shutdown命令详解: C#实现控制Windows系统关机、重启和注销的方法&…...
JS中Set和Map用法详解
目录 1、Set 1.基本用法 2.Set 实例的属性和方法 3.遍历操作 2、Map 1、Set 1.基本用法 ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。 Set本身是一个构造函数,用来生成 Set 数据结构。 const s …...

使用nginx对视频、音频、图片等静态资源网址,加token签权
目前很多静态资源,都可以无权限验证,进行访问或转发,对有价值的资源进行签权,限制转发无法在代码中实现拦截,我们可以使用nginx对视频、音频、图片等静态资源网址,加token签权 如: http://192…...

[每周一更]-(第86期):NLP-实战操作-文本分类
NLP文本分类的应用场景 医疗领域 - 病历自动摘要: 应用: 利用NLP技术从医疗文档中自动生成病历摘要,以帮助医生更快速地了解患者的状况。 法律领域 - 法律文件分类: 应用: 使用文本分类技术自动分类法律文件…...

【Springcloud篇】学习笔记五(十章):Gateway网关
第十章_Gateway新一代网关 1.Gateway简介 1.1官网 上一代zuul 1.X:https://github.com/Netflix/zuul/wiki 当前gateway:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/ 1.2是什么 SpringCloud …...

Linux开发工具
前言:哈喽小伙伴们,经过前边的学习我们已经掌握了Linux的基本指令和权限,相信大家学完这些之后都会对Linux有一个更加深入的认识,但是Linux的学习可以说是从现在才刚刚开始。 这篇文章,我们将讲解若干个Linux的开发工…...

C++ 动态规划 线性DP 最长共同子序列
给定两个长度分别为 N 和 M 的字符串 A 和 B ,求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。 输入格式 第一行包含两个整数 N 和 M 。 第二行包含一个长度为 N 的字符串,表示字符串 A 。 第三行包含一个长度为 M 的字符串,表…...

【备战蓝桥杯】——循环结构终篇
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-yl4Tqejg4LkjZLAM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…...
为什么说Python语法简单?
Python被广泛认为是一种语法简单、易学易用的编程语言,这种观点有几个关键的原因: 1、清晰简洁的语法结构: Python采用了清晰而简洁的语法结构,使得代码易于阅读和理解。Python的语法设计强调代码的可读性,采用了清晰…...

【HarmonyOS应用开发】ArkUI 开发框架-进阶篇-管理组件状态(九)
管理组件状态 一、概述 在应用中,界面通常都是动态的。下图所示,在子目标列表中,当用户点击目标一,目标一会呈现展开状态,再次点击目标一,目标一呈现收起状态。界面会根据不同的状态展示不一样的效果。 Ar…...

EF Core入门例子(以SqLite为数据库)
测试环境: visual studio 2017 .net core 2.1 具体步骤如下: 1 新增名称为EFCoreDemo的.net core控制台程序,版本选择.net core 2.1,项目不能放到带中文的目录下,不然到后面执行Add-Migration命令时会报如下的错误…...
centos7 安装nginx
在 CentOS 7 上安装 Nginx,你可以选择从官方仓库(EPEL)安装,或者手动编译安装。以下是通过 EPEL 安装 Nginx 的步骤: 方法一:通过 EPEL 仓库安装 添加 EPEL 仓库: sudo yum install epel-relea…...

【Linux Day14 UDP网络通讯】
UDP网络通讯 UDP报文结构: 16位源端口:用于记录发送端的端口号(占用两个字节)16位目的端口:用于记录接收端的端口号(占用两个字节)16位UDP长度:确定UDP报文总长度,&…...

指针的深入了解6
1.回调函数 回调函数就是一个通过函数指针调用的函数。 如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数 时,被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用࿰…...
PHP之PDO_MYSQL扩展安装步骤
1,如果有php源码包可以不用下载,在 源码包下的 ext/ 下面可以找到 cd php-8.1.9/ext/pdo_mysql 2,如果存在,直接安装 /usr/local/php-8.1.9/bin/phpize ./configure --with-php-config/usr/local/php-8.1.9/bin/php-config make &&a…...

【pytorch】nn.linear 中为什么是y=xA^T+b
我记得读教材的时候是yWxb, 左乘矩阵W,这样才能表示线性变化。 但是pytorch中的nn.linear中,计算方式是yxA^Tb,其中A是权重矩阵。 为什么右乘也能表示线性变化操作呢?因为pytorch中,照顾到输入是多个样本一起算的&…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...