当前位置: 首页 > news >正文

RocketMQ深度百科全书式解析

一、核心架构与设计哲学

1. 设计目标

  • 海量消息堆积​:单机支持百万级消息堆积,适合大数据场景(如日志采集)。
  • 严格顺序性​:通过队列分区(Queue)和消费锁机制保证局部顺序。
  • 事务一致性​:独创的 ​​“半消息 + 事务状态回查”​​ 机制,解决分布式事务难题。

2. 模块协作原理

  • Producer​ → ​Broker​:
    消息发送时,Producer 根据 ​MessageQueueSelector​ 选择队列(默认轮询,可自定义哈希规则)。
  • Broker​ → ​Consumer​:
    Consumer 使用 ​Pull API​ 主动拉取消息,Broker 支持 ​长轮询机制​(挂起请求直到有新消息)。
  • NameServer 动态发现​:
    Broker 每 ​30秒​ 向所有 NameServer 注册心跳,客户端每 ​30秒​ 拉取最新路由表。

二、存储引擎底层揭秘

1. CommitLog 的极致优化

  • 顺序写盘​:所有消息按到达顺序追加写入,磁盘吞吐达 ​600MB/s+​​(对比随机写<2MB/s)。
  • 内存映射加速​:使用 ​MappedByteBuffer​ 将文件映射到内存,减少内核态拷贝。
  • 文件切割策略​:
    单个 CommitLog 文件默认 ​1GB,写满后新建文件,文件名用 ​起始偏移量​ 命名(如 00000000000000000000)。

2. ConsumeQueue 索引构建

  • 异步构建线程​:ReputMessageService 实时解析 CommitLog,生成 ConsumeQueue 条目。
  • 索引结构​:
    每个条目 ​20字节​(8B偏移量 + 4B消息大小 + 8B Tag Hash),单个文件保存 ​600万条​ 索引。
  • 快速定位算法​:
    根据消费位点(offset)计算文件位置:(offset % totalSize) * 20

3. 高性能背后黑科技

  • PageCache 妙用​:利用操作系统缓存,消息写入先到 PageCache,异步刷盘。
  • 零拷贝技术​:Consumer 拉取消息时,通过 FileChannel.transferTo() 直接发送网卡,避免内存拷贝。

三、高级特性源码级剖析

1. 事务消息全流程

// Producer 发送半消息
TransactionSendResult result = producer.sendMessageInTransaction(msg, null);// Broker 处理半消息(关键代码)
if (msgType == MessageType.Trans_Msg_Half) {// 存入半消息 Topic(RMQ_SYS_TRANS_Half_TOPIC)putHalfMessage(queue);
}// 事务状态回查(Broker 定时任务)
TransactionalMessageCheckService.check();

2. 顺序消息并发锁

  • 队列锁机制​:
    Consumer 在消费时对队列加锁(lockMappedFile),确保同一队列同一时刻仅一个线程消费。
  • 重试策略​:
    消费失败时,消息重试需保证回滚到原队列(sendMessageBack 指定原队列ID)。

3. 延迟消息时间轮算法

  • 时间轮结构​:
    预设18个延迟级别(1s~2h),对应 SCHEDULE_TOPIC_XXXX 的不同队列。
  • 定时扫描线程​:
    ScheduleMessageService 每秒扫描时间轮,将到期消息投递到目标 Topic。

四、集群与高可用实战手册

1. 部署拓扑方案

  • 多 Master 多 Slave(异步复制)​​:
    • 适用场景:高吞吐,允许秒级数据丢失(如日志采集)。
    • 配置示例:
      brokerRole=ASYNC_MASTER  
      flushDiskType=ASYNC_FLUSH  
  • 多 Master 多 Slave(同步双写)​​:
    • 适用场景:金融交易,零数据丢失。
    • 配置示例:
      brokerRole=SYNC_MASTER  
      flushDiskType=SYNC_FLUSH  

2. 跨机房容灾方案

  • 异步复制跨机房​:
    Master 部署在机房A,Slave 部署在机房B,通过专线异步复制。
  • 双主双写架构​:
    两地各部署 Master,通过 ​Sharding​ 将消息路由到不同机房(需应用层双写)。

3. 扩容与缩容操作

  • 扩容 Broker​:
    1. 新机器部署 Broker,启动时指定相同 brokerClusterName
    2. 通过 mqadmin updateTopic 将新 Broker 加入 Topic 队列。
  • 缩容 Broker​:
    1. 停止待下线 Broker。
    2. 执行 mqadmin wipeWritePerm 禁止新消息写入。
    3. 等待消息消费完成后下线。

五、性能调优黄金法则

1. 生产者调优

  • 批量发送​:
    List<Message> messages = new ArrayList<>(1000);
    // 填充消息...
    SendResult result = producer.send(messages);  
  • 压缩算法​:
    启用 LZ4 或 ZSTD 压缩(compressMsgBodyOverHowmuch=4096)。

2. 消费者调优

  • 并发消费​:
    consumer.setConsumeThreadMin(20);  
    consumer.setConsumeThreadMax(64);  
  • 批量拉取​:
    consumer.setPullBatchSize(32); // 每次拉32条  

3. Broker 参数精调

  • 内存分配​:
    # 堆内存(建议4G以上)  
    JAVA_OPT="-Xms4g -Xmx4g -Xmn2g"  
    # 直接内存(映射文件用)  
    maxDirectMemorySize=2g  
  • 网络线程池​:
    # 发送消息线程数  
    sendMessageThreadPoolNums=24  
    # 拉取消息线程数  
    pullMessageThreadPoolNums=24  

六、监控与运维实战

1. 监控指标大盘

  • 核心指标​:
    • 写入/消费 TPS
    • 消息堆积量(consumerOffset.json
    • CommitLog 磁盘使用率
  • 工具集成​:
    • Prometheus + Grafana​:使用 RocketMQ Exporter 采集数据。
    • RocketMQ Dashboard​:官方控制台,实时查看 Topic/Group 状态。

2. 日志分析技巧

  • 关键日志文件​:
    • ~/logs/rocketmqlogs/rocketmq_client.log:客户端异常。
    • ~/logs/rocketmqlogs/store.log:存储层错误。
  • 日志关键字​:
    • [REJECTREQUEST]:系统过载,触发流控。
    • [CLIENT_NOT_EXIST]:消费组未注册。

3. 故障应急工具箱

  • 重置消费位点​:
    mqadmin resetOffsetByTime -n localhost:9876 -g MyGroup -t MyTopic -s now  
  • 强制删除 Topic​:
    mqadmin deleteTopic -n localhost:9876 -c DefaultCluster -t MyTopic  

七、真实场景案例库

1. 电商订单超时关单

  • 需求​:30分钟未支付订单自动关闭。
  • 实现​:
    1. 订单创建时发送 ​延迟消息​(Level=14对应30分钟)。
    2. 消费者收到消息后检查订单状态,执行关单逻辑。

2. 广告点击实时统计

  • 需求​:实时统计每秒广告点击量,应对流量高峰。
  • 实现​:
    1. 前端埋点发送点击消息到 RocketMQ。
    2. Flink 消费消息,实时聚合写入 Redis。

3. 分布式事务:跨系统积分抵扣

  • 需求​:支付成功后,扣减用户积分(积分系统独立)。
  • 实现​:
    1. 支付系统发送 ​事务消息​(半消息)。
    2. 执行本地事务(更新支付状态),提交消息。
    3. 积分系统消费消息,执行积分扣减。

八、RocketMQ 5.0 新特性全览

1. 轻量级 Pop 消费模式

  • 特点​:无状态消费,Broker 管理消费进度。
  • 代码示例​:
    SimpleConsumer consumer = new SimpleConsumer(...);  
    List<MessageExt> messages = consumer.receive(1000, 30);  

2. 消息轨迹 2.0

  • 增强功能​:
    • 全链路追踪(生产者IP → Broker存储时间 → 消费者IP)。
    • 集成 OpenTelemetry,支持 Jaeger/SkyWalking。

3. 多语言生态扩展

  • 支持语言​:Java、C++、Go、Python、Rust。
  • Go 客户端示例​:
    producer, _ := rocketmq.NewProducer(...)  
    err := producer.SendSync(context.Background(), message)  

九、避坑指南(血泪教训)​

1. 队列数不足导致消费堆积

  • 现象​:Topic 队列数=4,Consumer 实例=20 → 16个 Consumer 闲置。
  • 解决​:队列数 >= Consumer 实例数(建议队列数=Consumer实例数*2)。

2. 重复消费陷阱

  • 根因​:消费成功但 offset 提交失败(如Consumer宕机)。
  • 预防​:消费逻辑 ​幂等设计​(如数据库唯一键)。

3. 磁盘满导致 Broker 挂死

  • 预防​:监控磁盘水位,设置 diskMaxUsedSpaceRatio=85
  • 应急​:临时清理过期 CommitLog(rm -rf ~/store/commitlog/00000000000000000000)。

十、终极总结
RocketMQ 是一个 ​​“全场景消息中枢”​,既能扛住每秒百万级消息洪峰(如双11订单),又能苛的事务一致性需求(如金融转账)。掌握其核心原理(存储引擎、事务机制)和调优技巧(批量发送、队列规划),足以应对 90% 的分布式系统挑战。记住,消息队列不是银弹,​合理设计生产消费模型,才是稳定性的终极保障! 🚀

相关文章:

RocketMQ深度百科全书式解析

​一、核心架构与设计哲学​ ​1. 设计目标​ ​海量消息堆积​&#xff1a;单机支持百万级消息堆积&#xff0c;适合大数据场景&#xff08;如日志采集&#xff09;。​严格顺序性​&#xff1a;通过队列分区&#xff08;Queue&#xff09;和消费锁机制保证局部顺序。​事务…...

A2A与MCP Server:AI智能体协作与工具交互的核心协议对比

A2A与MCP Server&#xff1a;AI智能体协作与工具交互的核心协议对比 摘要 在AI智能体技术爆发式增长的今天&#xff0c;谷歌的A2A协议与Anthropic的MCP协议正在重塑AI系统架构。本文通过协议栈分层模型、企业级架构设计案例及开发者实践指南三大维度&#xff0c;揭示二者在AI生…...

如何将网页保存为pdf

要将网页保存为PDF&#xff0c;可以按照以下几种方法操作&#xff1a; 1. 使用浏览器的打印功能 大多数现代浏览器&#xff08;如Chrome、Firefox、Edge等&#xff09;都支持将网页保存为PDF文件。步骤如下&#xff1a; 在 Google Chrome 中&#xff1a; 打开你想保存为PDF…...

位运算与实战场景分析-Java代码版

一、为什么每个程序员都要掌握位运算&#xff1f; 在电商秒杀系统中&#xff0c;位运算可以快速判断库存状态&#xff1b;在权限管理系统里&#xff0c;位运算能用极小的空间存储复杂权限配置&#xff1b;在算法竞赛中&#xff0c;位运算更是高频出现的性能优化利器。这项看似…...

【“星睿O6”AI PC开发套件评测】+ Debian 系统安装及 sysbench 跑分对比

很荣幸这次可以得到机会评测 “星睿O6”AI PC开发套件。第一篇文章&#xff0c;我将分为两个部分&#xff1a; 官方 Debian 系统安装到 NVMEsysbench 跑分以及对比 RK3568 和 I712700KF 正文开始之前&#xff0c;忍不住还是想放几张开箱照片&#xff0c;板子实在是太精致了。…...

java——继承

继承是面向对象的三大特征之一&#xff0c;可以使得子类具有父类的属性和方法&#xff0c;还可以在子类中重新定义&#xff0c;追加属性和方法。继承是指在原有类的基础上&#xff0c;进行功能扩展&#xff0c;创建新的类型。 概念与作用 代码复用&#xff1a;继承能够避免重…...

STM32嵌入式开发从入门到实战:全面指南与项目实践

STM32嵌入式开发从入门到实战&#xff1a;全面指南与项目实践 一、STM32开发基础概述 1&#xff0e;STM32微控制器核心特性 STM32微控制器基于ARM Cortex - M内核&#xff0c;具备显著的架构优势。其32位处理能力&#xff0c;能够高效处理复杂的计算任务&#xff0c;相较于传…...

企业数据孤岛如何破

企业数据孤岛如何破 背景信息传统方式Flink CDC如何用技术之力 背景信息 在数字化转型的浪潮中&#xff0c;企业数据的价值正从“事后分析”向“实时驱动”快速迁移。企业需要快速、高效地将分散在不同系统中的数据整合起来&#xff0c;以支持实时分析和业务决策。诚然&#x…...

源码编译安装Nginx

源码编译安装Nginx 源码编译安装Nginx创建nginx服务用户安装编译环境依赖包下载Nginx源码构建编译选项,创建makefile文件编译安装nginx为Nginx创建服务单元设置Nginx开机自启服务 yum安装Nginxyum安装openresty 源码编译安装Nginx 如果需要最新版本及定制化模块可以通过源码安…...

查看容器内的eth0网卡对应宿主机上的哪块网卡

查看容器内的eth0网卡对应宿主机上的哪块网卡 问题描述解决办法1. 进入容器,查看网卡的iflink(接口链路索引)值方法1:方法2: 2. 从宿主机过滤查询到的iflink(接口链路索引)值3. 确定veth接口连接的网桥方法2: brctl查看连接到网桥的接口--推荐 4. 查看网桥连接的物理网卡 问题描…...

虚拟偶像“C位出道”:数字浪潮下的崛起与财富密码(3/10)

摘要&#xff1a;虚拟偶像作为数字时代的新宠&#xff0c;凭借数字技术与文化创意的深度融合&#xff0c;在全球范围内迅速崛起。从早期的简单2D形象到如今高度逼真、智能交互的3D虚拟偶像&#xff0c;其发展得益于计算机图形学、动作捕捉、AI等技术的进步。虚拟偶像不仅在娱乐…...

swift菜鸟教程13(函数)

一个朴实无华的目录 今日学习内容&#xff1a;1.Swift 函数1.1函数定义&#xff1a;使用关键字 func。1.2函数参数&#xff1a;以逗号分隔。1.3不带参数函数1.4元组作为函数返回值1.5没有返回值函数1.6函数参数名称1.6.1局部参数名1.6.2外部参数名 1.7可变参数1.8常量&#xff…...

MacOS红队常用攻击命令

MacOS红队常用攻击命令 1.自动化武器2.系统信息3.服务 & 内核信息4.快捷命令5.网络相关6.brew相关 / 软件包相关7.高权限命令8.创建一个管理员权限的后门用户 1.自动化武器 1、linPEAS LinPEAS 是一个脚本&#xff0c;用于在 Linux/Unix/MacOS 主机上搜索提权路径 2、me…...

无人机的振动与噪声控制技术!

一、振动控制技术要点 1. 振动源分析 气动振动&#xff1a;旋翼桨叶涡脱落&#xff08;如叶尖涡干涉&#xff09;、动态失速&#xff08;Dynamic Stall&#xff09;引发的周期性气动激振力&#xff08;频率与转速相关&#xff09;。 机械振动&#xff1a;电机偏心、传动轴不…...

如何使用 Spring Boot 实现分页和排序?

全文目录&#xff1a; 开篇语1. 创建 Spring Boot 项目2. 配置数据库连接3. 创建实体类4. 创建 Repository 接口5. 创建分页和排序服务6. 创建控制器7. 测试分页和排序请求示例&#xff1a;返回结果&#xff1a; 8. 总结 文末 开篇语 哈喽&#xff0c;各位小伙伴们&#xff0c;…...

浅谈编译型语言的运用

如大家所熟悉的&#xff0c;程序在执行之前需要一个专门的编译过程&#xff0c;把程序编译成机器语言的文件&#xff0c;运行时不需要重新翻译&#xff0c;直接使用编译的结果就行了&#xff0c;程序执行效率高&#xff0c;依赖编译器&#xff0c;如 C/C、Golang 等&#xff0c…...

知识了解02——了解pnpm+vite+turbo+monorepo的完整构建步骤(react子项目)

&#xff08;1&#xff09;初始化monorepo 1)创建项目目录并进入当前目录 2)初始化 pnpm 工作区&#xff0c;生成一个package.json文件 3)在项目根目录下创建 pnpm-workspace.yaml 文件&#xff0c;并定义工作区目录 &#xff08;2&#xff09;安装 Turborepo 1&#xff09;安…...

MySQL 半同步复制,给数据找靠谱 “分身”

目录 一背景 二、MySQL 复制基础概念 为何需要 MySQL 复制 传统异步复制 半同步复制的诞生 三、MySQL 半同步复制原理详解 主要组件及作用 工作流程 半同步复制流程图 四、MySQL 半同步复制配置与代码示例 环境准备 主服务器配置 从服务器配置 示例说明 五、MyS…...

uniapp离线打包提示未添加videoplayer模块

uniapp中使用到video标签&#xff0c;但是离线打包放到安卓工程中&#xff0c;运行到真机中时提示如下&#xff1a; 解决方案&#xff1a; 1、把media-release.aar、weex_videoplayer-release.aar放到工程的libs目录下; 文档&#xff1a;https://nativesupport.dcloud.net.cn/…...

机器人零位标定修正流程介绍

如果想看运动学标定可以看看 机器人运动学参数标定, 一次性把运动学参数和零位标定等一起标定求解. 1. 零位标定 零位标定是机器人运动学标定中的一个重要步骤&#xff0c;其目的是校正机器人关节的初始位置误差。以下是需要进行零位标定的主要原因&#xff1a; 制造误差 在机…...

应用层通信报文设计

/* --------------------------------------------------------------- | 魔数 2byte | 协议版本号 1byte | 序列化算法 1byte | 报文类型 1byte | --------------------------------------------------------------- | 状态 1byte | 保留字段 4byte | 数据长…...

一周学会Pandas2 Python数据处理与分析-Pandas2读取Excel

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Excel格式文件是办公使用和处理最多的文件格式之一&#xff0c;相比CSV文件&#xff0c;Excel是有样式的。Pandas2提…...

技术分享|iTOP-RK3588开发板Ubuntu20系统旋转屏幕方案

iTOP-3588开发板采用瑞芯微RK3588处理器&#xff0c;是全新一代AloT高端应用芯片&#xff0c;采用8nmLP制程&#xff0c;搭载八核64位CPU&#xff0c;四核Cortex-A76和四核Cortex-A55架构&#xff0c;主频高达2.4GHz。是一款可用于互联网设备和其它数字多媒体的高性能产品。 在…...

ubuntu 20.04 安装源码编译 ros humble过程

公司要兼容ros1还需要ros2 这个时候不得不使用ubuntu20.04 安装 humble 但实际上在20.04上安装humble是需要在源码编译的。 根据这个帖子 https://blog.csdn.net/m0_62353836/article/details/129730981 重写一份,以应对无法下载的问题 系统配置 #检查是否为UTF-8编码,是则跳…...

Ubuntu18.04.06安装window虚拟机,安装VirtualBox

VirtualBox官网没有支持Ubuntu18的版本&#xff0c;最低是ubuntu20; 但是现在用的系统是UBuntu18.04.06&#xff0c;又不能升级&#xff0c;查阅了很多办法&#xff0c;最终终于安装VirtualBox可用版本; 1&#xff0c;在Ubuntu18自带的软件应用市场&#xff0c;搜VirtualBox;…...

Matlab 四分之一车体被动悬架、pid、模糊控制和模糊pid控制

1、内容简介 Matlab 198-四分之一车体被动悬架、pid、模糊控制和模糊pid控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...

Linux-----驱动

一、内核驱动与启动流程 1. Linux内核驱动 Nor Flash: 可线性访问&#xff0c;有专门的数据及地址总线&#xff08;与内存访问方式相同&#xff09;。 Nand Flash: 不可线性访问&#xff0c;访问需要控制逻辑&#xff08;软件&#xff09;。 2. Linux启动流程 ARM架构: IRAM…...

用HTML和CSS绘制佩奇:我不是佩奇

在这篇博客中&#xff0c;我将解析一个完全使用HTML和CSS绘制的佩奇(Pig)形象。这个项目展示了CSS的强大能力&#xff0c;仅用样式就能创造出复杂的图形&#xff0c;而不需要任何图片或JavaScript。 项目概述 这个名为"我不是佩奇"的项目是一个纯CSS绘制的卡通猪形象…...

Qwen2.5-7B-Instruct FastApi 部署调用教程

1 环境准备 基础环境最低要求说明&#xff1a; 环境名称版本信息1Ubuntu22.04.4 LTSCudaV12.1.105Python3.12.4NVIDIA CorporationRTX 3090 首先 pip 换源加速下载并安装依赖包 # 升级pip python -m pip install --upgrade pip # 更换 pypi 源加速库的安装 pip config set g…...

潇洒浪: Dify 上传自定义文件去除内容校验 File validation failed for file: re.json

Dify上传文件 添加其他文件类型如 my.myselfsuffix 上传成功 执行报错 File validation failed for file: re.json 解决办法 Notepad 搜索dify源码 注释掉&#xff0c;重启容器 或者直接在容器中修改重启...

【力扣hot100题】(088)最长有效括号

这题目真是越做越难了。 但其实只是思路很难想到&#xff0c;一旦会了方法就很好做。 但问题就在方法太难想了…… 思路还是只要遍历一遍数组&#xff0c;维护动态规划数组记录截止至目前位置选取该元素的情况下有效括号的最大值。 光是知道这个还不够&#xff0c;看了答案…...

XML、JSON 和 Protocol Buffers (protobuf) 对比

目录 1. XML (eXtensible Markup Language) 1&#xff09;xml的特点&#xff1a; 2&#xff09;xml的适用场景&#xff1a; 2. JSON (JavaScript Object Notation) 1&#xff09;JSOM的特点&#xff1a; 2&#xff09;JSON的适用场景&#xff1a; 3. Protocol Buffers (…...

C++ 入门四:类与对象 —— 面向对象编程的核心基石

一、类的定义 1. 类的基本形式 class 类名 { public: // 公有成员&#xff08;类内外均可访问&#xff09;数据类型 数据成员; // 公有数据成员数据类型 成员函数(参数列表); // 公有成员函数声明 protected: // 保护成员&#xff08;类内和派生类可访问&…...

DeepSeek:穿透行业知识壁垒的搜索引擎攻防战

DeepSeek&#xff1a;穿透行业知识壁垒的搜索引擎攻防战 文 / 产业智能观察组&#xff08;人机协同创作&#xff09; 一、搜索引擎的"认知折叠"危机 2024年Q1数据显示&#xff0c;百度搜索结果前10页中&#xff0c;61.7%的内容存在"伪专业化"现象——看似…...

SQL 查询中涉及的表及其作用说明

SQL 查询中涉及的表及其作用说明&#xff1a; 涉及的数据库表 表名别名/用途关联关系dbo.s_orderSO&#xff08;主表&#xff09;存储订单主信息&#xff08;订单号、日期、客户等&#xff09;dbo.s_orderdetailSoD&#xff08;订单明细&#xff09;通过 billid SO.billid 关…...

数组 array

1、数组定义 是一种用于存储多个相同类型数据的存储模型。 2、数组格式 &#xff08;1&#xff09;数据类型[ ] 变量名&#xff08;比较常见这种格式&#xff09; 例如&#xff1a; int [ ] arr0&#xff0c;定义了一个int类型的数组&#xff0c;数组名是arr0&#xff1b; &am…...

Git 查看提交历史

Git作为最流行的版本控制工具&#xff0c;其提交历史管理是开发者日常工作的核心部分。无论是回溯代码变更、定位问题根源&#xff0c;还是进行版本回退&#xff0c;掌握Git提交历史的操作技巧都至关重要。本文将全面解析Git提交历史相关命令&#xff0c;助你成为版本管理高手&…...

电脑提示“找不到mfc140u.dll“的完整解决方案:从原因分析到彻底修复

当你启动某个软件或游戏时&#xff0c;突然遭遇"无法启动程序&#xff0c;因为计算机中丢失mfc140u.dll"的错误提示&#xff0c;这确实令人沮丧。mfc140u.dll是Microsoft Foundation Classes&#xff08;MFC&#xff09;库的重要组成部分&#xff0c;属于Visual C Re…...

windows安卓子系统wsa隐藏应用列表的安装激活使用

Windows 11 安卓子系统应用部署全攻略 windows安卓子系统wsa隐藏应用列表的安装激活使用|过检测核心前端 在 Windows 11 系统中&#xff0c;安卓子系统为用户带来了在电脑上运行安卓应用的便利。经过一系列的操作&#xff0c;我们已经完成了 Windows 11 安卓子系统的底层和前端…...

深入探索 PyTorch:回归与分类模型的全方位解析

深入探索 PyTorch&#xff1a;回归与分类模型的全方位解析 在当今数据驱动的时代&#xff0c;机器学习与深度学习技术正广泛应用于各个领域&#xff0c;助力我们从海量数据中挖掘有价值的信息。而 PyTorch 作为一款备受青睐的深度学习框架&#xff0c;为开发者们提供了简洁且高…...

案例分析:东华新径,拉动式生产的智造之路

目录 文章目录 目录南京东华智能转向系统有限公司是一家什么公司&#xff1f;背景知识&#xff1a;新能源汽车生产制造流程简介东华遇见了什么问题&#xff1f;东华希望如何解决&#xff1f;解决思路&#xff1a;从 “推动式生产” 到 “拉动式生产”&#xff0c;从 “冗余式思…...

【android bluetooth 框架分析 01】【关键线程 5】【bt_main_thread介绍】

1. 概述 system/stack/btu/btu_task.cc bt_main_thread 是 Android Bluetooth 协议栈中的核心线程&#xff0c;负责处理蓝牙协议栈中的大部分关键任务和事件。它相当于蓝牙协议栈的"大脑"&#xff0c;协调各种蓝牙功能的运行。 2. 重要性 bt_main_thread 的重要性…...

城市应急安防系统EasyCVR视频融合平台:如何实现多源视频资源高效汇聚与应急指挥协同

一、方案背景 1&#xff09;项目背景 在当今数字化时代&#xff0c;随着信息技术的飞速发展&#xff0c;视频监控和应急指挥系统在公共安全、城市应急等领域的重要性日益凸显。尤其是在关键场所&#xff0c;高效的视频资源整合与传输能力对于应对突发公共事件、实现快速精准的…...

自动化测试常用函数

自动化测试常用函数 前言1. 元素的定位1.1 cssSelector1.2 xpath1.2.1 获取 HTML 页面所有的节点1.2.2 获取 HTML 页面指定的节点1.2.3 获取一个节点中的直接子节点1.2.4 获取一个节点的父节点1.2.5 实现节点属性的匹配1.2.6 使用指定索引的方式获取对应的节点内容 2. 操作测试…...

OpengGL教程(七)---摄像机

本章参考官方教程&#xff1a;摄像机 本系列历史文 OpengGL教程(一)—OpenGL环境的配置(GLFW3,GLAD) OpengGL教程(二)—渲染一个简单的窗体 OpengGL教程(三)—使用VAO和VBO方式绘制三角形 OpengGL教程(四)—使用EBO方式绘制矩形 OpengGL教程(五)—纹理的应用 OpengGL教程(六)—…...

springboot禁用静态资源

使用 application.properties 在 application.properties 中添加如下配置&#xff1a; spring.web.resources.add-mappingsfalse使用 application.yml 在 application.yml 中添加如下配置&#xff1a; spring:web:resources:add-mappings: false配置解释 spring.web.resou…...

猫咪如厕检测与分类识别系统系列【二】多图上传及猫咪分类特征提取更新

前情提要 家里养了三只猫咪&#xff0c;其中一只布偶猫经常出入厕所。但因为平时忙于学业&#xff0c;没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关&#xff0c;频繁如厕可能是泌尿问题&#xff0c;停留过久也可能是便秘或不适。为了更科学地了解牠的…...

‌ViewModel和AndroidViewModel的主要区别

‌ViewModel和AndroidViewModel的主要区别在于它们的继承关系、构造函数以及使用场景。‌ ‌继承关系与构造函数‌&#xff1a; ‌ViewModel‌&#xff1a;ViewModel是一个抽象类&#xff0c;位于androidx.lifecycle包中。它是所有ViewModel类的基类&#xff0c;构造函数较为…...

myeclise导入项目并运行

1、把项目复制到myeclise工作目录 2、导入项目&#xff1a;将项目导入到myeclise工作目录 3、配置jre 4、把项目放到tomcat 5、运行项目 配置数据库后运行...

XSS 防御转义规则笔记

一、转义规则概述 核心目标&#xff1a;防止用户输入被浏览器解析为可执行代码&#xff0c;确保输入始终被视为数据而非代码。 关键策略&#xff1a;根据数据嵌入的上下文环境&#xff08;HTML、JavaScript、CSS 等&#xff09;&#xff0c;对特殊字符进行转义或编码。 二、不…...