Rocketmq-5.3.0和对应dashboard的最新版本Docker镜像,本人亲自制作,部署十分方便,奉献给大家

news2024/9/8 23:39:55

一、Rocketmq 最新版本5.3.0,采用docker镜像安装方式

在这里插入图片描述

二、官方rocketmq镜像对内存等参数配置非常不灵活便利

为了快速、灵活部署rocketmq,以及能方便对其内存等参数进行设置,特意制作了关于它的docker镜像。

三、镜像获取

最新rocketmq-5.3.0及其dashboard镜像,已上传阿里云镜像仓库

在这里插入图片描述在这里插入图片描述

采用以下命令可以直接拉取

docker pull registry.cn-hangzhou.aliyuncs.com/sinhy/rocketmq:sinhy-5.3.0
docker pull registry.cn-hangzhou.aliyuncs.com/sinhy/rocketmq-dashboard:sinhy-5.3.0

拉取后,需要将镜像标签重命名一下

docker tag registry.cn-hangzhou.aliyuncs.com/sinhy/rocketmq:sinhy-5.3.0 rocketmq:sinhy-5.3.0
docker tag registry.cn-hangzhou.aliyuncs.com/sinhy/rocketmq-dashboard:sinhy-5.3.0 rocketmq-dashboard:sinhy-5.3.0

四、Rocketmq docker 镜像部署脚本

内存,挂载路径自行根据修改配置,运行起来了,别忘了回来点个赞啊,祝工作开心~

准备工作

  1. JDK需要你自己挂载到一个目录下*(1.8及以上,建议17及以上)*,对应docker里面的jdk目录:
    /data/env/jdk
  2. 两台linux服务器(最低配置4核8g,生产环境建议最低4核16G),设置好内网ip(这里以172.16.10.90和172.16.10.91两台Linux环境做部署介绍),安装好docker等基础环境。

以集群部署【2m-2s-sync】方式介绍

1. namesrv配置

a. namesrv-a.properties (172.16.10.90)
listenPort=9876
b. namesrv-b.properties (172.16.10.91)
listenPort=9876

2. broker配置(a,b-s,b,a-s四个配置文件)

公共配置(为了避免重复,将以下4个broker配置的公共部分提前介绍)

# 是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=false

# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false

# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4

# ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000

# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824

#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=75

#限制消息内容大小,默认为4M 
maxMessageSize=65536

#发送消息线程池数量
sendMessageThreadPoolNums=128

#拉消息线程池数量
pullMessageThreadPoolNums=128

#发送消息是否使用可重入锁
useReentrantLockWhenPutMessage=true

# 清理过期请求时,如果请求线程的创建时间到当前系统时间间隔大于 waitTimeMillsInSendQueue(默认 200ms,可以配置)就会清理这个请求, 然后给 Producer 返回一个系统繁忙的状态码
waitTimeMillsInSendQueue=300
broker-a.properties配置 (172.16.10.90)
# 整个broker集群名称,或者说是RocketMq集群的名称
brokerClusterName=SinhyBrokerCluster

# 指定master-slave集群的名称,一个rocketMq集群可以包含多个master-slave集群
brokerName=broker-a

# 集群中0表示Master,>0表示Slave
brokerId=0

# 删除消息存储过期文件的时间,默认凌晨四点
deleteWhen=04

# 指定未发生更新的消息存储文件的保留时间为默认48消失,过期将被删除
fileReservedTime=48

# broker的角色(主节点)
brokerRole=SYNC_MASTER

# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

# nameServer地址,集群用分号分割
namesrvAddr=172.16.10.90:9876;172.16.10.91:9876

# 指定broker的IP,需要根据每台机器进行修改,官方介绍可为空,系统默认自动识别,但多网卡时IP地址读取可能出错。
brokerIP1=172.16.10.90

# broker对外服务的监听端口
listenPort=10911
broker-b-s.properties配置 (172.16.10.90)
# 整个broker集群名称,或者说是RocketMq集群的名称
brokerClusterName=SinhyBrokerCluster

# 指定master-slave集群的名称,一个rocketMq集群可以包含多个master-slave集群
brokerName=broker-b

# 集群中0表示Master,>0表示Slave
brokerId=1

# 删除消息存储过期文件的时间,默认凌晨四点
deleteWhen=04

# 指定未发生更新的消息存储文件的保留时间为默认48消失,过期将被删除
fileReservedTime=48

# broker的角色(主节点)
brokerRole=SLAVE

# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

# nameServer地址,集群用分号分割
namesrvAddr=172.16.10.90:9876;172.16.10.91:9876

# 指定broker的IP,需要根据每台机器进行修改,官方介绍可为空,系统默认自动识别,但多网卡时IP地址读取可能出错。
brokerIP1=172.16.10.90

# broker对外服务的监听端口
listenPort=10711
broker-b.properties配置 (172.16.10.91)
brokerClusterName=SinhyBrokerCluster

# 指定master-slave集群的名称,一个rocketMq集群可以包含多个master-slave集群
brokerName=broker-b

# 集群中0表示Master,>0表示Slave
brokerId=0

# 删除消息存储过期文件的时间,默认凌晨四点
deleteWhen=04

# 指定未发生更新的消息存储文件的保留时间为默认48消失,过期将被删除
fileReservedTime=48

# broker的角色(主节点)
brokerRole=SYNC_MASTER

# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

# nameServer地址,集群用分号分割
namesrvAddr=172.16.10.90:9876;172.16.10.91:9876

# 指定broker的IP,需要根据每台机器进行修改,官方介绍可为空,系统默认自动识别,但多网卡时IP地址读取可能出错。
brokerIP1=172.16.10.91

# broker对外服务的监听端口
listenPort=10911
broker-a-s.properties配置 (172.16.10.91)
# 整个broker集群名称,或者说是RocketMq集群的名称
brokerClusterName=SinhyBrokerCluster

# 指定master-slave集群的名称,一个rocketMq集群可以包含多个master-slave集群
brokerName=broker-a

# 集群中0表示Master,>0表示Slave
brokerId=1

# 删除消息存储过期文件的时间,默认凌晨四点
deleteWhen=04

# 指定未发生更新的消息存储文件的保留时间为默认48消失,过期将被删除
fileReservedTime=48

# broker的角色(主节点)
brokerRole=SLAVE

# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

# nameServer地址,集群用分号分割
namesrvAddr=172.16.10.90:9876;172.16.10.91:9876

# 指定broker的IP,需要根据每台机器进行修改,官方介绍可为空,系统默认自动识别,但多网卡时IP地址读取可能出错。
brokerIP1=172.16.10.91

# broker对外服务的监听端口
listenPort=10711

3. Docker部署脚本

namesrv-a (172.16.10.90)
# 创建namesrv日志目录
mkdir -p /data/docker-containers/rocketmq/namesrv/logs

# 创建namesrv gc日志目录
mkdir -p /data/docker-containers/rocketmq/namesrv/gclogs

# 创建namesrv数据存储路径
mkdir -p /data/docker-containers/rocketmq/namesrv/store

# 创建namesrv配置目录
mkdir -p /data/docker-containers/rocketmq/namesrv/conf

# 创建namesrv容器
# WARNING: Published ports are discarded when using host network mode
# 提示解释:docker启动时指定--network=host或-net=host,如果还指定了-p或-P,那这个时候就会有此警告,并且通过-p或-P设置的参数将不会起到任何作用,端口号会以主机端口号为主,重复时则递增。
docker run -d \
  --restart=always \
  --privileged=true \
  -p 9876:9876 \
  --volume /data/docker-containers/rocketmq/namesrv/logs:/root/logs \
  --volume /data/docker-containers/rocketmq/namesrv/gclogs:/data/rocketmq/gclogs \
  --volume /data/docker-containers/rocketmq/namesrv/store:/root/store \
  --volume /data/docker-containers/rocketmq/namesrv/conf/2m-2s-sync:/data/rocketmq/conf/2m-2s-sync \
  --volume /data/env/jdk:/data/env/jdk \
  --name namesrv-a \
  --network host \
  -e xss="512k" \
  -e xms="512m" \
  -e xmx="1024m" \
  -e maxDirectMemorySize="512m" \
  -e metaspaceSize="64m" \
  -e maxMetaspaceSize="256m" \
  -e JAVA_OPT_EXT="--add-exports java.base/jdk.internal.ref=ALL-UNNAMED --add-exports java.base/sun.nio.ch=ALL-UNNAMED --add-exports java.base/sun.security.ssl=ALL-UNNAMED" \
  rocketmq:sinhy-5.3.0 \
  nohup bash ./bin/namesrv-start.sh -c /data/rocketmq/conf/2m-2s-sync/namesrv-a.properties
namesrv-b (172.16.10.91)
# 创建namesrv日志目录
mkdir -p /data/docker-containers/rocketmq/namesrv/logs

# 创建namesrv gc日志目录
mkdir -p /data/docker-containers/rocketmq/namesrv/gclogs

# 创建namesrv数据存储路径
mkdir -p /data/docker-containers/rocketmq/namesrv/store

# 创建namesrv配置目录
mkdir -p /data/docker-containers/rocketmq/namesrv/conf
docker run -d \
  --restart=always \
  --privileged=true \
  -p 9876:9876 \
  --volume /data/docker-containers/rocketmq/namesrv/logs:/root/logs \
  --volume /data/docker-containers/rocketmq/namesrv/gclogs:/data/rocketmq/gclogs \
  --volume /data/docker-containers/rocketmq/namesrv/store:/root/store \
  --volume /data/docker-containers/rocketmq/namesrv/conf/2m-2s-sync:/data/rocketmq/conf/2m-2s-sync \
  --volume /data/env/jdk:/data/env/jdk \
  --name namesrv-b \
  --network host \
  -e xss="512k" \
  -e xms="512m" \
  -e xmx="1024m" \
  -e maxDirectMemorySize="512m" \
  -e metaspaceSize="64m" \
  -e maxMetaspaceSize="256m" \
  -e JAVA_OPT_EXT="--add-exports java.base/jdk.internal.ref=ALL-UNNAMED --add-exports java.base/sun.nio.ch=ALL-UNNAMED --add-exports java.base/sun.security.ssl=ALL-UNNAMED" \
  rocketmq:sinhy-5.3.0 \
  nohup bash ./bin/namesrv-start.sh -c /data/rocketmq/conf/2m-2s-sync/namesrv-b.properties
broker-a (172.16.10.90)
# 创建broker日志目录
mkdir -p /data/docker-containers/rocketmq/broker/a/logs

# 创建namesrv gc日志目录
mkdir -p /data/docker-containers/rocketmq/broker/a/gclogs

# 创建broker数据存储路径
mkdir -p /data/docker-containers/rocketmq/broker/a/store

# 创建broker各节点的配置文件路径
mkdir -p /data/docker-containers/rocketmq/broker/a/conf

# 创建broker-a节点容器
docker run -d\
  --restart=always \
  --privileged=true \
  -p 10911:10911 \
  --volume /data/docker-containers/rocketmq/broker/a/logs:/root/logs \
  --volume /data/docker-containers/rocketmq/broker/a/gclogs:/data/rocketmq/gclogs \
  --volume /data/docker-containers/rocketmq/broker/a/store:/root/store \
  --volume /data/docker-containers/rocketmq/broker/conf/2m-2s-sync:/data/rocketmq/conf/2m-2s-sync \
  --volume /data/env/jdk:/data/env/jdk \
  --name broker-a-10911 \
  --network host \
  -e xss="512k" \
  -e xms="512m" \
  -e xmx="2048m" \
  -e maxDirectMemorySize="1024m" \
  -e metaspaceSize="64m" \
  -e maxMetaspaceSize="256m" \
  -e JAVA_OPT_EXT="-XX:+IgnoreUnrecognizedVMOptions --add-exports java.base/jdk.internal.ref=ALL-UNNAMED --add-exports java.base/sun.nio.ch=ALL-UNNAMED --add-exports java.base/sun.security.ssl=ALL-UNNAMED" \
  rocketmq:sinhy-5.3.0 \
  nohup bash ./bin/broker-start.sh -c /data/rocketmq/conf/2m-2s-sync/broker-a.properties
broker-b-s (172.16.10.90)
# 创建broker日志目录
mkdir -p /data/docker-containers/rocketmq/broker/b-s/logs

# 创建namesrv gc日志目录
mkdir -p /data/docker-containers/rocketmq/broker/b-s/gclogs

# 创建broker数据存储路径
mkdir -p /data/docker-containers/rocketmq/broker/b-s/store

# 创建broker各节点的配置文件路径
mkdir -p /data/docker-containers/rocketmq/broker/conf

# 创建broker-a节点容器(一定要用bash执行sh脚本,否则遇到[[]]这种命令无法执行)
docker run -d\
  --restart=always \
  --privileged=true \
  -p 10711:10711 \
  --volume /data/docker-containers/rocketmq/broker/b-s/logs:/root/logs \
  --volume /data/docker-containers/rocketmq/broker/b-s/gclogs:/data/rocketmq/gclogs \
  --volume /data/docker-containers/rocketmq/broker/b-s/store:/root/store \
  --volume /data/docker-containers/rocketmq/broker/conf/2m-2s-sync:/data/rocketmq/conf/2m-2s-sync \
  --volume /data/env/jdk:/data/env/jdk \
  --name broker-b-s-10711 \
  --network host \
  -e xss="512k" \
  -e xms="512m" \
  -e xmx="2048m" \
  -e maxDirectMemorySize="1024m" \
  -e metaspaceSize="64m" \
  -e maxMetaspaceSize="256m" \
  -e JAVA_OPT_EXT="-XX:+IgnoreUnrecognizedVMOptions --add-exports java.base/jdk.internal.ref=ALL-UNNAMED --add-exports java.base/sun.nio.ch=ALL-UNNAMED --add-exports java.base/sun.security.ssl=ALL-UNNAMED" \
  rocketmq:sinhy-5.3.0 \
  nohup bash ./bin/broker-start.sh -c /data/rocketmq/conf/2m-2s-sync/broker-b-s.properties
broker-b (172.16.10.91)
# 创建broker日志目录
mkdir -p /data/docker-containers/rocketmq/broker/b/logs

# 创建namesrv gc日志目录
mkdir -p /data/docker-containers/rocketmq/broker/b/gclogs

# 创建broker数据存储路径
mkdir -p /data/docker-containers/rocketmq/broker/b/store

# 创建broker各节点的配置文件路径
mkdir -p /data/docker-containers/rocketmq/broker/conf

# 创建broker-a节点容器
docker run -d\
  --restart=always \
  --privileged=true \
  -p 10911:10911 \
  --volume /data/docker-containers/rocketmq/broker/b/logs:/root/logs \
  --volume /data/docker-containers/rocketmq/broker/b/gclogs:/data/rocketmq/gclogs \
  --volume /data/docker-containers/rocketmq/broker/b/store:/root/store \
  --volume /data/docker-containers/rocketmq/broker/conf/2m-2s-sync:/data/rocketmq/conf/2m-2s-sync \
  --volume /data/env/jdk:/data/env/jdk \
  --name broker-b-10911 \
  --network host \
  -e xss="512k" \
  -e xms="512m" \
  -e xmx="2048m" \
  -e maxDirectMemorySize="1024m" \
  -e metaspaceSize="64m" \
  -e maxMetaspaceSize="256m" \
  -e JAVA_OPT_EXT="-XX:+IgnoreUnrecognizedVMOptions --add-exports java.base/jdk.internal.ref=ALL-UNNAMED --add-exports java.base/sun.nio.ch=ALL-UNNAMED --add-exports java.base/sun.security.ssl=ALL-UNNAMED" \
  rocketmq:sinhy-5.3.0 \
  nohup bash ./bin/broker-start.sh -c /data/rocketmq/conf/2m-2s-sync/broker-b.properties
broker-a-s (172.16.10.91)
# 创建broker日志目录
mkdir -p /data/docker-containers/rocketmq/broker/a-s/logs

# 创建namesrv gc日志目录
mkdir -p /data/docker-containers/rocketmq/broker/a-s/gclogs

# 创建broker数据存储路径
mkdir -p /data/docker-containers/rocketmq/broker/a-s/store

# 创建broker各节点的配置文件路径
mkdir -p /data/docker-containers/rocketmq/broker/conf

# 创建broker-a节点容器
docker run -d\
  --restart=always \
  --privileged=true \
  -p 10711:10711 \
  --volume /data/docker-containers/rocketmq/broker/a-s/logs:/root/logs \
  --volume /data/docker-containers/rocketmq/broker/a-s/gclogs:/data/rocketmq/gclogs \
  --volume /data/docker-containers/rocketmq/broker/a-s/store:/root/store \
  --volume /data/docker-containers/rocketmq/broker/conf/2m-2s-sync:/data/rocketmq/conf/2m-2s-sync \
  --volume /data/env/jdk:/data/env/jdk \
  --name broker-a-s-10711 \
  --network host \
  -e xss="512k" \
  -e xms="512m" \
  -e xmx="2048m" \
  -e maxDirectMemorySize="1024m" \
  -e metaspaceSize="64m" \
  -e maxMetaspaceSize="256m" \
  -e JAVA_OPT_EXT="-XX:+IgnoreUnrecognizedVMOptions --add-exports java.base/jdk.internal.ref=ALL-UNNAMED --add-exports java.base/sun.nio.ch=ALL-UNNAMED --add-exports java.base/sun.security.ssl=ALL-UNNAMED" \
  rocketmq:sinhy-5.3.0 \
  nohup bash ./bin/broker-start.sh -c /data/rocketmq/conf/2m-2s-sync/broker-a-s.properties

最后是简单的rocketmq-dashboard的docker镜像部署

# 创建dashboard日志目录
mkdir -p /data/docker-containers/rocketmq/dashboard/logs

# 创建dashboard gc日志目录
mkdir -p /data/docker-containers/rocketmq/dashboard/gclogs

# 创建dashboard 临时数据存储路径
mkdir -p /data/docker-containers/rocketmq/dashboard/tmp

# 创建broker-a节点容器
docker run -d\
  --restart=always \
  --privileged=true \
  -p 19876:19876 \
  --volume /data/docker-containers/rocketmq/dashboard/logs:/root/logs \
  --volume /data/docker-containers/rocketmq/dashboard/gclogs:/data/rocketmq-dashboard-application/gclogs \
  --volume /data/docker-containers/rocketmq/dashboard/tmp:/tmp \
  --volume /data/env/jdk:/data/env/jdk \
  --name rocketmq-dashboard-5.3.0 \
  --network host \
  -e xss="512k" \
  -e xms="128m" \
  -e xmx="512m" \
  -e maxDirectMemorySize="128m" \
  -e metaspaceSize="64m" \
  -e maxMetaspaceSize="256m" \
  -e JAVA_OPT_EXT="" \
  -e SERVER_PORT=19876 \
  -e NAMESRV_ADDR="172.16.10.90:9876,172.16.10.91:9876" \
  rocketmq-dashboard:sinhy-5.3.0

五、启动成功界面

在这里插入图片描述在这里插入图片描述在这里插入图片描述

六、总结

好了,以上就是关于rocketmq最新版本5.3.0的docker镜像安装部署介绍(基于【2m-2s-sync】集群模式),喜欢的朋友,记得点赞,收藏,关注我,后期会有更多经典docker镜像介绍!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用二进制来理解数据和二进制的计算

1 使用二进制来理解数据 和人类的思维习惯不同的是,计算机将把所有的东西数字化之后才会进行处理。那么计算机能理解的数字是什么样的呢?其实,在计算机内部,不管是什么信息都使用二进制来保存和处理的。 计算机为什么要用二进制…

芋道微服务全栈开发日记(商品sku数据归类为规格属性)

商品的每一条规格和属性在数据库里都是单一的一条数据,从数据库里查出来后,该怎么归类为对应的规格和属性值?如下图: 在商城模块,商品的单规格、多规格、单属性、多属性功能可以说是非常完整,如下图&#x…

搭建规范化的vue2项目

项目包含的库 Vue2VuexRouterEslintPrettier 环境 vue:2.6.14 eslint:7.32.0 prettier:2.4.1 eslint-plugin-prettier:4.0.0 eslint-plugin-vue:8.0.3 vue/cli:5.0.8 步骤 全局安装cli工具 npm in…

Vue3----扩展 element Plug card

扩展 element Plug card 增加全屏&#xff0c;折叠操作项 核心代码 <template><div class"cc-card-component"><el-card v-if"state.isShow" :class"state.class" :bodyStyle"bodyStyle" :shadow"props.shadow…

ic进阶|性能篇02:一文带你了解一种特殊的并行技术-展开!

本期文章让我们聊聊一种数字ic设计技术——展开&#xff0c;展开用于产生一个一次迭代就相当于原有结构的多次迭代的新电路结构。其相当于之前聊过的折叠技术的反向操作&#xff0c;折叠使用一个功能单元通过多次迭代来完成原有电路结构一次迭代的操作&#xff0c;相对于通过时…

访问控制列表(ACL)

文章目录 ACL原理与基本配置ACL分类ACL组成ACL规则的匹配与应用 ACL原理与基本配置 ACL(Access Control List&#xff0c;访问控制列表) 读取二层、三层、四层报文信息根据预先定义好的规则对报文进行过滤和分类实现网络访问控制、防止网络攻击和提高网络带宽利用率等目的提高…

USB3.0的等长要求到底是多少?

USB2.0与USB3.0接口的PCB布局布线要求PCB资源PCB联盟网 - Powered by Discuz! (pcbbar.com) 90欧姆阻抗&#xff0c;走差分线&#xff1a; 重点来了&#xff1a;

cf场+线性dp

Problem - B - Codeforces 思路&#xff1a; 这其实是一道数学题&#xff08;最开始一直在枚举&#xff0c;服啦&#xff09; 我们的目的是求最大利润 当a>b是时直接令k0,利润n*a即可 当a<b时存在两种情况&#xff1a; 1.b-a>n即所有b-i1的情况都>a&#xff0…

【数据结构】哈希表二叉搜索树详解

&#x1f48e; 欢迎大家互三&#xff1a;2的n次方_ &#x1f48e;所属专栏&#xff1a;数据结构与算法学习 &#x1f341;1. 二叉搜索树 二叉搜索树也称为二叉查找树或二叉排序树&#xff0c;是一种特殊的二叉树结构&#xff0c;它的特点是&#xff1a; 1. 若左树不为空&am…

SCI算法!发文首选!参数优化下的BiLSTM-KAN模型回归预测,Python代码

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类算法的家人&#xff0c;可关注我的VX公众号&#xff1a;python算法小当家&#xff0c;不定期会有很多免费代码分享~ KAN是2024年最新的算法&#xff0c;是近期非常热门的一…

leetcode112. 路径总和 leetcode113. 路径总和II,图文并茂,教你完全弄懂DFS,附详细代码

leetcode112. 路径总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 …

实验2-3-8 计算火车运行时间

//实验2-3-8 计算火车运行时间 /* 输入格式&#xff1a;输入在一行中给出2个4位正整数&#xff0c;其间以空格分隔&#xff0c;分别表示火车的出发时间和到达时间。 每个时间的格式为2位小时数&#xff08;00-23&#xff09;和2位分钟数&#xff08;00-59&#xff09;&#xff…

从0到1,AI我来了- (4)AI图片识别的理论知识-II

上篇文章&#xff0c;我们理解了我们程序的神经网络设计&#xff0c;这篇我们继续&#xff0c;把训练迭代过程分析一下&#xff0c;完成这两篇文章&#xff0c;下面问题&#xff0c;应该能回答了。 一张图片&#xff0c;如何被计算机读懂&#xff1f;pytorch 封装的网络&#…

C语言实现K均值聚类

K均值聚类(K_means)基础理论 K_means聚类是一种简单且广泛使用的聚类算法&#xff0c;它旨在将数据集中的样本划分为k个不同的聚类&#xff0c;其中k是事先指定的聚类数量&#xff0c;该算法的核心思想是迭代地优化聚类中心&#xff0c;以最小化每个样本与其所属聚类中心之间的…

数据仓库中的DIM层-定义、设计与最佳实践

在当今数据驱动的商业环境中,构建高效的数据仓库架构至关重要。本文将深入探讨数据仓库中的维度层(DIM层),帮助您了解其定义、重要性以及设计最佳实践。 目录 什么是DIM层?DIM层的重要性DIM层设计最佳实践1. 选择适当的粒度2. 实施慢速变化维度(SCD)3. 使用代理键4. 规范化v…

x264编解码库 -介绍和使用示例

目录 1&#xff1a;X264简单介绍 1.1&#xff1a;编译x264 1.2&#xff1a;x264简单介绍 1.3&#xff1a;x264的优势 1.4&#xff1a;x264与FFmpeg的关系 1.5&#xff1a;x264 编解码原理 1.6 进一步学习资源 2&#xff1a;demo效果 3&#xff1a;完整代码 4&#xff1a;附件…

Vite + Vue3 + TS项目配置前置路由守卫

在现代前端开发中&#xff0c;使用 Vue 3 和 TypeScript 的组合是一种流行且高效的开发方式。Vite 是一个极速的构建工具&#xff0c;可以显著提升开发体验。本文博主将指导你如何在 Vite Vue 3 TypeScript 项目中配置前置路由守卫&#xff08;Navigation Guards&#xff09;…

学习日记:数组

1. 概念 一组相同类型的数据的集合&#xff0c;也是一种数据类型。 2. 一维数组 2.1 语法 类型说明符 数组名 [常量表达式] &#xff08;1&#xff09; &#xff08;2&#xff09; &#xff08;3&#xff09; &#xff08;1&#xff09;类型说明符&#x…

Leetcode - 周赛407

目录 一&#xff0c;3226. 使两个整数相等的位更改次数 二&#xff0c;3227. 字符串元音游戏 三&#xff0c;3228. 将 1 移动到末尾的最大操作次数 四&#xff0c;3229. 使数组等于目标数组所需的最少操作次数 一&#xff0c;3226. 使两个整数相等的位更改次数 本题可以暴力…

刷题了:144.二叉树的前序遍历心|145.二叉树的后序遍历心|94.二叉树的中序遍历己

递归遍历 文章讲解:https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%80%92%E5%BD%92%E9%81%8D%E5%8E%86.html#%E6%80%9D%E8%B7%AF 视频讲解:https://www.bilibili.com/video/BV1Wh411S7xt/?spm_id_from333.788&vd_sourcee70917aa6392827d1ccc8d85e1…