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

RocketMQ企业应用篇

在现代企业级应用中,分布式消息队列系统如RocketMQ发挥着至关重要的作用。本文将深入探讨RocketMQ在电商和物联网场景中的应用,结合实际案例和代码示例,展示如何利用RocketMQ解决企业级应用中的关键问题。

一、电商场景应用

1. 秒杀抢购解决方案

1.1 业务挑战

秒杀抢购是电商平台上常见的促销活动,其特点是高并发、短时间内的大量请求。传统的数据库直接写入方式在这种场景下往往会遇到性能瓶颈,导致系统响应缓慢甚至崩溃。

1.2 RocketMQ解决方案

通过引入RocketMQ,可以将用户的秒杀请求异步化处理,从而有效应对高并发挑战。

系统架构概述

  • 前端层:处理用户请求,进行基本的验证和转发。
  • 消息队列层:使用RocketMQ缓存秒杀请求。
  • 业务逻辑层:处理秒杀业务逻辑,更新库存等操作。
  • 数据访问层:与数据库交互,确保数据的一致性和完整性。

关键代码示例

// 生产者:发送秒杀请求消息
public class FlashSaleProducer {public static void main(String[] args) throws Exception {DefaultMQProducer producer = new DefaultMQProducer("FlashSaleGroup");producer.setNamesrvAddr("localhost:9876");producer.start();// 模拟多个用户请求for (int i = 0; i < 1000; i++) {Message msg = new Message("FlashSaleTopic", "FlashSaleTag",("UserId:" + i + ",ProductId:1001").getBytes(RemotingHelper.DEFAULT_CHARSET));SendResult sendResult = producer.send(msg);System.out.println("Send flash sale request result: " + sendResult);}producer.shutdown();}
}// 消费者:处理秒杀请求消息
public class FlashSaleConsumer {public static void main(String[] args) throws Exception {DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("FlashSaleConsumerGroup");consumer.setNamesrvAddr("localhost:9876");consumer.subscribe("FlashSaleTopic", "FlashSaleTag");consumer.registerMessageListener(new MessageListenerConcurrently() {@Overridepublic ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {for (MessageExt msg : msgs) {try {String messageBody = new String(msg.getBody(), RemotingHelper.DEFAULT_CHARSET);System.out.println("Received flash sale request: " + messageBody);// 处理秒杀业务逻辑,例如检查库存、更新订单状态等processFlashSaleRequest(messageBody);} catch (Exception e) {e.printStackTrace();return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}}return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}private void processFlashSaleRequest(String messageBody) {// 实际业务逻辑实现}});consumer.start();}
}
1.3 性能优化与扩展
  • 水平扩展:通过增加RocketMQ Broker节点和消费者实例,实现系统的水平扩展。
  • 消息堆积处理:在高峰期允许一定程度的消息堆积,并在活动结束后进行批量处理。
  • 数据库优化:使用数据库连接池、索引优化等技术提高数据库的写入性能。

2. 订单支付系统设计

2.1 业务挑战

订单支付系统需要处理大量的并发支付请求,同时确保支付过程的安全性和可靠性。此外,还需要与多个外部支付渠道进行集成。

2.2 RocketMQ解决方案

使用RocketMQ可以实现支付请求的异步处理和消息通知,提高系统的响应速度和可靠性。

系统架构概述

  • 支付请求接收层:接收用户的支付请求,并进行初步处理。
  • 消息队列层:使用RocketMQ缓存支付请求,实现异步处理。
  • 支付处理层:与外部支付渠道进行交互,完成支付操作。
  • 通知与回调层:在支付完成后,通过消息队列通知其他系统进行后续处理。

关键代码示例

// 生产者:发送支付请求消息
public class PaymentProducer {public static void main(String[] args) throws Exception {DefaultMQProducer producer = new DefaultMQProducer("PaymentGroup");producer.setNamesrvAddr("localhost:9876");producer.start();// 模拟多个支付请求for (int i = 0; i < 100; i++) {Message msg = new Message("PaymentTopic", "PaymentTag",("OrderId:" + i + ",UserId:101,Amount:100.5").getBytes(RemotingHelper.DEFAULT_CHARSET));SendResult sendResult = producer.send(msg);System.out.println("Send payment request result: " + sendResult);}producer.shutdown();}
}// 消费者:处理支付请求消息
public class PaymentConsumer {public static void main(String[] args) throws Exception {DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("PaymentConsumerGroup");consumer.setNamesrvAddr("localhost:9876");consumer.subscribe("PaymentTopic", "PaymentTag");consumer.registerMessageListener(new MessageListenerConcurrently() {@Overridepublic ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {for (MessageExt msg : msgs) {try {String messageBody = new String(msg.getBody(), RemotingHelper.DEFAULT_CHARSET);System.out.println("Received payment request: " + messageBody);// 处理支付逻辑,例如调用外部支付接口、更新订单状态等processPaymentRequest(messageBody);} catch (Exception e) {e.printStackTrace();return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}}return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}private void processPaymentRequest(String messageBody) {// 实际业务逻辑实现}});consumer.start();}
}

2.3 安全与可靠性保障

  • 消息确认机制:确保支付请求被可靠地处理,避免消息丢失。
  • 事务性支持:使用RocketMQ的事务性消息功能,确保支付过程中的数据一致性。
  • 监控与告警:实时监控支付系统的运行状态,及时发现和处理异常情况。

3. 库存管理与数据同步

3.1 业务挑战

在电商平台上,库存管理是一个复杂的问题。需要实时更新库存数量,同时避免超卖和库存积压。此外,还需要与多个系统进行数据同步,如仓储管理系统、供应商系统等。

3.2 RocketMQ解决方案

通过使用RocketMQ,可以实现库存更新的异步处理和数据同步,提高系统的响应速度和数据一致性。

系统架构概述

  • 库存更新请求接收层:接收库存更新请求,并进行初步处理。
  • 消息队列层:使用RocketMQ缓存库存更新请求,实现异步处理。
  • 库存处理层:更新库存数量,并与相关系统进行数据同步。
  • 数据同步层:将库存更新信息同步到其他系统,如仓储管理系统、供应商系统等。

关键代码示例

// 生产者:发送库存更新消息
public class InventoryProducer {public static void main(String[] args) throws Exception {DefaultMQProducer producer = new DefaultMQProducer("InventoryGroup");producer.setNamesrvAddr("localhost:9876");producer.start();// 模拟多个库存更新请求for (int i = 0; i < 100; i++) {Message msg = new Message("InventoryTopic", "InventoryTag",("ProductId:" + i + ",Quantity:-1").getBytes(RemotingHelper.DEFAULT_CHARSET));SendResult sendResult = producer.send(msg);System.out.println("Send inventory update result: " + sendResult);}producer.shutdown();}
}// 消费者:处理库存更新消息
public class InventoryConsumer {public static void main(String[] args) throws Exception {DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("InventoryConsumerGroup");consumer.setNamesrvAddr("localhost:9876");consumer.subscribe("InventoryTopic", "InventoryTag");consumer.registerMessageListener(new MessageListenerConcurrently() {@Overridepublic ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {for (MessageExt msg : msgs) {try {String messageBody = new String(msg.getBody(), RemotingHelper.DEFAULT_CHARSET);System.out.println("Received inventory update: " + messageBody);// 处理库存更新逻辑,例如更新数据库、与仓储管理系统同步等processInventoryUpdate(messageBody);} catch (Exception e) {e.printStackTrace();return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}}return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}private void processInventoryUpdate(String messageBody) {// 实际业务逻辑实现}});consumer.start();}
}

3.4 数据一致性与可靠性保障

  • 消息幂等性:确保库存更新消息被重复处理时不会导致数据不一致。
  • 数据备份与恢复:定期备份库存数据,以便在系统故障时快速恢复。
  • 监控与审计:实时监控库存系统的运行状态,审计库存更新操作,确保数据安全。

二、物联网场景应用

1. 设备数据采集与处理

1.1 业务挑战

物联网应用中,大量的设备会产生海量的数据。如何高效地采集、传输和处理这些数据是一个关键问题。

1.2 RocketMQ解决方案

使用RocketMQ可以实现设备数据的高效采集和处理,支持高吞吐量的数据传输和存储。

系统架构概述

  • 设备层:物联网设备生成各种类型的数据,如传感器数据、状态信息等。
  • 数据采集层:使用RocketMQ作为消息总线,接收设备发送的数据。
  • 数据处理层:对采集到的数据进行实时处理和分析。
  • 数据存储层:将处理后的数据存储到合适的存储系统中,如关系数据库、时序数据库等。

关键代码示例

// 生产者:发送设备数据消息
public class DeviceDataProducer {public static void main(String[] args) throws Exception {DefaultMQProducer producer = new DefaultMQProducer("DeviceDataGroup");producer.setNamesrvAddr("localhost:9876");producer.start();// 模拟多个设备数据for (int i = 0; i < 1000; i++) {Message msg = new Message("DeviceDataTopic", "DeviceDataTag",("DeviceId:" + i + ",Temperature:25.5,Humidity:60").getBytes(RemotingHelper.DEFAULT_CHARSET));SendResult sendResult = producer.send(msg);System.out.println("Send device data result: " + sendResult);}producer.shutdown();}
}// 消费者:处理设备数据消息
public class DeviceDataConsumer {public static void main(String[] args) throws Exception {DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("DeviceDataConsumerGroup");consumer.setNamesrvAddr("localhost:9876");consumer.subscribe("DeviceDataTopic", "DeviceDataTag");consumer.registerMessageListener(new MessageListenerConcurrently() {@Overridepublic ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {for (MessageExt msg : msgs) {try {String messageBody = new String(msg.getBody(), RemotingHelper.DEFAULT_CHARSET);System.out.println("Received device data: " + messageBody);// 处理设备数据逻辑,例如数据分析、存储等processDeviceData(messageBody);} catch (Exception e) {e.printStackTrace();return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}}return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}private void processDeviceData(String messageBody) {// 实际业务逻辑实现}});consumer.start();}
}

1.3 高效数据处理与扩展

  • 批量处理:对多条设备数据进行批量处理,提高处理效率。
  • 数据过滤与转换:在消费端对数据进行过滤和转换,只处理感兴趣的数据。
  • 分布式处理:使用分布式计算框架如Apache Flink或Spark对大规模数据进行实时处理。

2. 实时监控与告警

2.1 业务挑战

在物联网应用中,实时监控设备状态并及时告警是至关重要的。需要快速响应设备故障、异常数据等情况。

2.2 RocketMQ解决方案

通过使用RocketMQ,可以实现设备状态的实时监控和告警通知,确保系统的可靠性和稳定性。

系统架构概述

  • 设备状态采集层:采集设备的实时状态信息。
  • 消息队列层:使用RocketMQ缓存设备状态消息。
  • 监控与告警处理层:分析设备状态,触发告警通知。
  • 通知推送层:通过邮件、短信等方式将告警信息推送给相关人员。

关键代码示例

// 生产者:发送设备状态消息
public class DeviceStatusProducer {public static void main(String[] args) throws Exception {DefaultMQProducer producer = new DefaultMQProducer("DeviceStatusGroup");producer.setNamesrvAddr("localhost:9876");producer.start();// 模拟多个设备状态for (int i = 0; i < 100; i++) {Message msg = new Message("DeviceStatusTopic", "DeviceStatusTag",("DeviceId:" + i + ",Status:Online,Temperature:30").getBytes(RemotingHelper.DEFAULT_CHARSET));SendResult sendResult = producer.send(msg);System.out.println("Send device status result: " + sendResult);}producer.shutdown();}
}// 消费者:处理设备状态消息
public class DeviceStatusConsumer {public static void main(String[] args) throws Exception {DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("DeviceStatusConsumerGroup");consumer.setNamesrvAddr("localhost:9876");consumer.subscribe("DeviceStatusTopic", "DeviceStatusTag");consumer.registerMessageListener(new MessageListenerConcurrently() {@Overridepublic ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {for (MessageExt msg : msgs) {try {String messageBody = new String(msg.getBody(), RemotingHelper.DEFAULT_CHARSET);System.out.println("Received device status: " + messageBody);// 处理设备状态逻辑,例如监控、告警等processDeviceStatus(messageBody);} catch (Exception e) {e.printStackTrace();return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}}return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}private void processDeviceStatus(String messageBody) {// 实际业务逻辑实现}});consumer.start();}
}

2.4 实时性与可靠性保障

  • 低延迟传输:优化网络配置和消息队列参数,确保设备状态信息的低延迟传输。
  • 高可用性设计:使用多副本存储和冗余机制,确保系统的高可用性。
  • 告警通知的可靠性:使用多种通知方式,并进行告警确认机制,确保告警信息被及时接收和处理。

3. 大数据存储与分析

3.1 业务挑战

物联网应用产生的海量数据需要高效的存储和分析方案。传统的存储和分析工具往往难以应对大规模数据的挑战。

3.2 RocketMQ解决方案

结合RocketMQ和其他大数据技术,可以实现物联网数据的高效存储和深度分析。

系统架构概述

  • 数据采集层:使用RocketMQ采集物联网设备数据。
  • 数据存储层:将数据存储到合适的大数据存储系统,如Hadoop HDFS、Apache Kafka等。
  • 数据分析层:使用数据分析工具如Apache Spark、Flink等进行数据处理和分析。
  • 数据可视化层:通过数据可视化工具展示分析结果,辅助决策。

关键代码示例

// 生产者:发送大数据消息
public class BigDataProducer {public static void main(String[] args) throws Exception {DefaultMQProducer producer = new DefaultMQProducer("BigDataGroup");producer.setNamesrvAddr("localhost:9876");producer.start();// 模拟大量数据for (int i = 0; i < 10000; i++) {Message msg = new Message("BigDataTopic", "BigDataTag",("DataId:" + i + ",Value:" + Math.random()).getBytes(RemotingHelper.DEFAULT_CHARSET));SendResult sendResult = producer.send(msg);if (i % 1000 == 0) {System.out.println("Send big data result: " + sendResult);}}producer.shutdown();}
}// 消费者:处理大数据消息
public class BigDataConsumer {public static void main(String[] args) throws Exception {DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("BigDataConsumerGroup");consumer.setNamesrvAddr("localhost:9876");consumer.subscribe("BigDataTopic", "BigDataTag");consumer.registerMessageListener(new MessageListenerConcurrently() {@Overridepublic ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {for (MessageExt msg : msgs) {try {String messageBody = new String(msg.getBody(), RemotingHelper.DEFAULT_CHARSET);// 处理大数据逻辑,例如存储到HDFS、进行实时分析等processBigData(messageBody);} catch (Exception e) {e.printStackTrace();return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}}return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}private void processBigData(String messageBody) {// 实际业务逻辑实现}});consumer.start();}
}

3.4 高效存储与深度分析

  • 分布式存储:使用分布式文件系统如HDFS存储大规模数据,提高存储容量和性能。
  • 并行计算:使用并行计算框架如Apache Spark对数据进行分布式处理,提高分析效率。
  • 数据挖掘与机器学习:应用数据挖掘和机器学习算法,从海量数据中提取有价值的信息,支持业务决策。

三、总结

通过本文的介绍,我们深入探讨了RocketMQ在电商和物联网场景中的应用。在电商场景中,我们详细介绍了如何利用RocketMQ解决秒杀抢购、订单支付和库存管理等关键问题;在物联网场景中,我们展示了如何使用RocketMQ实现设备数据采集、实时监控和大数据分析等功能。

在实际的企业级应用中,RocketMQ凭借其高性能、高可靠性和高可扩展性,能够有效地应对各种复杂的业务挑战。结合实际的业务需求和系统架构,灵活运用RocketMQ的各项特性,可以构建出高效、稳定的企业级应用系统。

相关文章:

RocketMQ企业应用篇

在现代企业级应用中&#xff0c;分布式消息队列系统如RocketMQ发挥着至关重要的作用。本文将深入探讨RocketMQ在电商和物联网场景中的应用&#xff0c;结合实际案例和代码示例&#xff0c;展示如何利用RocketMQ解决企业级应用中的关键问题。 一、电商场景应用 1. 秒杀抢购解决…...

vue-常用指令 | 常用指令的修饰符

目录 什么是vue指令 v-cloak v-text v-html v-pre v-show /v-if v-else/v-else-if v-on v-bind v-for v-model 常用指令的修饰符 v-model 指令修饰符 事件修饰符 按键修饰符 什么是vue指令 指令就是带有 v- 前缀 的特殊 属性&#xff0c;不同的属性对应不…...

Git提交前时间检查

为了防止在本地看日志的时候&#xff0c;由于本地时间被修改&#xff0c;导致日志的时间存在非正确时间。通过以下脚本在提交前进行时间验证&#xff0c;只有是正确的时间才可以提交。 使用方法如下&#xff1a; 复制如下脚本&#xff0c;命名为 pre-commit &#xff0c;放到 …...

Linux调度器 --- 负载均衡的存在的问题

文章目录 前言一、简介二、Linux 调度器2.1 在单核系统上&#xff0c;CFS 非常简单2.2 在多核系统上&#xff0c;CFS 变得非常复杂2.2.1 负载均衡算法2.2.2 优化措施 三、Linux调度器负载均衡的存在的问题3.1 组负载不均衡问题&#xff08;Group Imbalance Bug&#xff09;3.2 …...

从零开始用AI开发游戏(三)背景故事

《迷域回响》背景故事 第一章&#xff1a;失落的符文纪元 在远古的“艾瑟兰”大陆&#xff0c;掌握空间魔法的「筑界者文明」曾建造了连通万界的回响迷宫——这座迷宫既是试炼场&#xff0c;也是囚笼。文明巅峰时期&#xff0c;筑界者将禁忌知识刻入虚空符文&#xff0c;嵌于…...

IXTUR气控永磁铁:以高精度气控和稳定磁场,为机器人应用提供稳定抓取力

在现代工业生产和物流领域&#xff0c;物料的抓取与搬运是影响生产效率和成本控制的重要环节。传统夹爪在面对不同材质、形状和重量的物体时&#xff0c;常常存在适应性差、抓取不稳定、操作复杂等问题&#xff0c;导致生产流程中频繁出现停机调整&#xff0c;增加了人工干预成…...

硬件驱动——51单片机:寄存器、LED、动态数码管

目录 一、51单片机 1.寄存器 二、LED点灯 1.原理 2.封装函数 3.顺序点灯 4.特定位点灯 三、动态数码管 1.原理 2.封装函数 3.0~9跳变 4.顺序移位0~9跳变 一、51单片机 1.寄存器 51单片机共40个引脚&#xff0c;其中P0,P1,P2,P3是四个有8引脚的寄存器&#xff0…...

2025 香港 Web3 嘉年华:全球 Web3 生态的年度盛会

自 2023 年首届香港 Web3 嘉年华成功举办以来&#xff0c;这一盛会已成为全球 Web3 领域规模最大、影响力最深远的行业活动之一。2025 年 4 月 6 日至 9 日&#xff0c;第三届香港 Web3 嘉年华将在香港盛大举行。本届活动由万向区块链实验室与 HashKey Group 联合主办、W3ME 承…...

【MySQL】多表查询(笛卡尔积现象,联合查询、内连接、左外连接、右外连接、子查询)-通过练习快速掌握法

在DQL的基础查询中&#xff0c;我们已经学过了多表查询的一种&#xff1a;联合查询&#xff08;union&#xff09;。本文我们将系统的讲解多表查询。 笛卡尔积现象 首先&#xff0c;我们想要查询emp表和stu表两个表&#xff0c;按照我们之前的知识栈&#xff0c;我们直接使用…...

Leetcode-132.Palindrome Partitioning II [C++][Java]

目录 一、题目描述 二、解题思路 【C】 【Java】 Leetcode-132.Palindrome Partitioning IIhttps://leetcode.com/problems/palindrome-partitioning-ii/description/132. 分割回文串 II - 力扣&#xff08;LeetCode&#xff09;132. 分割回文串 II - 给你一个字符串 s&…...

在 macOS 上优化 Vim 用于开发

简介 这篇指南将带你通过一系列步骤&#xff0c;如何在 macOS 上优化 Vim&#xff0c;使其具备 代码补全、语法高亮、代码格式化、代码片段管理、目录树等功能。此外&#xff0c;我们还会解决在安装过程中可能遇到的常见错误。 1. 安装必备工具 在开始 Vim 配置之前&#xff…...

SOME/IP-SD -- 协议英文原文讲解8

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 5.1.4.4 S…...

【Agent实战】货物上架位置推荐助手(RAG方式+结构化prompt(CoT)+API工具结合ChatGPT4o能力Agent项目实践)

本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 结论 效果图示 1.prompt 2. API工具封…...

Spring Boot使用线程池创建多线程

在 Spring Boot 2 中&#xff0c;可以使用 Autowired 注入 线程池&#xff08;ThreadPoolTaskExecutor 或 ExecutorService&#xff09;&#xff0c;从而管理线程的创建和执行。以下是使用 Autowired 方式注入线程池的完整示例。 1. 通过 Autowired 注入 ThreadPoolTaskExecuto…...

PyTorch 深度学习实战(11):强化学习与深度 Q 网络(DQN)

在之前的文章中&#xff0c;我们介绍了神经网络、卷积神经网络&#xff08;CNN&#xff09;、循环神经网络&#xff08;RNN&#xff09;、Transformer 等多种深度学习模型&#xff0c;并应用于图像分类、文本分类、时间序列预测等任务。本文将介绍强化学习的基本概念&#xff0…...

在Eclipse 中使用 MyBatis 进行开发,通常需要以下步骤:

在Eclipse 中使用 MyBatis 进行开发&#xff0c;通常需要以下步骤&#xff1a; 1. 创建 Maven 项目 首先&#xff0c;在 Eclipse 中创建一个 Maven 项目。如果你还没有安装 Maven 插件&#xff0c;可以通过 Eclipse Marketplace 安装 Maven 插件。 打开 Eclipse&#xff0c;选…...

Python学习第十九天

Django-分页 后端分页 Django提供了Paginator类来实现后端分页。Paginator类可以将一个查询集&#xff08;QuerySet&#xff09;分成多个页面&#xff0c;每个页面包含指定数量的对象。 from django.shortcuts import render, redirect, get_object_or_404 from .models impo…...

Adobe Premiere Pro2023配置要求

Windows 系统 最低配置 处理器&#xff1a;Intel 第六代或更新版本的 CPU&#xff0c;或 AMD Ryzen™ 1000 系列或更新版本的 CPU&#xff0c;需要支持 Advanced Vector Extensions 2&#xff08;AVX2&#xff09;。操作系统&#xff1a;Windows 10&#xff08;64 位&#xff…...

面试求助:接口测试用例设计主要考虑哪些方面?

一、基础功能验证 1. 正常场景覆盖 关键点&#xff1a;验证接口在合法输入下的正确响应&#xff08;状态码、数据结构、业务逻辑&#xff09;。 案例&#xff1a; json 复制 // 用户登录接口 输入&#xff1a;{"username": "合法用户", "password…...

C语言——变量与常量

C语言中的变量与常量&#xff1a;简洁易懂的指南 在C语言编程中&#xff0c;变量和常量是最基本的概念之一。理解它们的区别和使用方法对于编写高效、可维护的代码至关重要。本文将详细介绍C语言中的变量和常量&#xff0c;并通过图表和代码示例帮助你更好地理解。 目录 什么…...

考研408-数据结构完整代码 线性表的顺序存储结构 - 顺序表

线性表的顺序存储结构 - 顺序表 1. 顺序表的定义 ​ 用一组地址连续的存储单元依次存储线性表的数据元素&#xff0c;从而使逻辑上相邻的两个元素在物理位置上也相邻 2. 顺序表的特点 随机访问&#xff1a; 即通过首地址和元素序号可以在O(1) 时间内找到指定元素&#xff0…...

Windows环境下安装部署dzzoffice+onlyoffice的私有网盘和在线协同系统

安装前需要准备好Docker Desktop环境&#xff0c;可查看我的另一份亲测安装文章 https://blog.csdn.net/qq_43003203/article/details/146283915?spm1001.2014.3001.5501 1、安装配置onlyoffice 1、Docker 拉取onlyoffice容器镜像 管理员身份运行Windows PowerShell&#x…...

解决 Docker 镜像拉取超时问题:配置国内镜像源

在使用 Docker 的过程中&#xff0c;经常会遇到镜像拉取超时的问题&#xff0c;尤其是在国内网络环境下。这不仅会浪费大量的时间&#xff0c;还可能导致一些项目无法顺利进行。今天&#xff0c;我将分享一个简单而有效的解决方法&#xff1a;配置国内镜像源。 环境 操作系统 c…...

如何解决 Three.js 物体渲染的锯齿问题

在 Three.js 中&#xff0c;如果模型看起来不够平滑&#xff0c;或者在旋转视角时出现锯齿&#xff08;aliasing&#xff09;&#xff0c;可以通过以下方法来优化渲染效果。 1. 启用抗锯齿&#xff08;MSAA&#xff09; 默认情况下&#xff0c;Three.js 渲染器不会开启抗锯齿&…...

嵌入式八股,为什么单片机中不使用malloc函数

1. 资源限制 单片机的内存资源通常非常有限&#xff0c;尤其是RAM的大小可能只有几KB到几十KB。在这种情况下&#xff0c;使用 malloc 进行动态内存分配可能会导致内存碎片化&#xff0c;使得程序在运行过程中逐渐耗尽可用内存。 2. 内存碎片问题 malloc 函数在分配和释放内…...

【计量地理学】实验一 地理数据的基本统计分析

阅前提示&#xff1a; 计量地理学实验课的实验报告为当堂提交&#xff0c;相较以往实验报告缺少打磨与整理的时间&#xff0c;因此内容中不可避免出现相关错误&#xff01;&#xff01;&#xff01; 出于个人完美主义的原则本不愿发布&#xff08;其实就是黑历史&#xff09;…...

ChatPromptTemplate的使用

ChatPromptTemplate 是 LangChain 中专门用于管理多角色对话结构的提示词模板工具。它的核心价值在于&#xff0c;开发者可以预先定义不同类型的对话角色消息&#xff08;如系统指令、用户提问、AI历史回复&#xff09;&#xff0c;并通过数据绑定动态生成完整对话上下文。 1.…...

SQL Server查询优化

最常用&#xff0c;最有效的数据库优化方式 查询语句层面 避免全表扫描 使用索引&#xff1a;确保查询条件中的字段有索引。例如&#xff0c;查询语句 SELECT * FROM users WHERE age > 20&#xff0c;若 age 字段有索引&#xff0c;数据库会利用索引快速定位符合条件的记…...

Blender插件NodeWrangler导入贴图报错解决方法

Blender用NodeWrangler插件 CtrlShiftT 导入贴图 直接报错 解决方法: 用CtrlshiftT打开需要导入的材质文件夹时&#xff0c;右边有一个默认勾选的相对路径&#xff0c;取消勾选就可以了。 开启node wrangler插件&#xff0c;然后在导入贴图是取消勾选"相对路径"&am…...

QT中的宏

Q_UNUSED(event); 是 Qt 提供的一个宏&#xff0c;用于标记某个变量或参数在当前作用域中未被使用。它的主要作用是避免编译器发出“未使用变量”的警告。 背景 在 C 中&#xff0c;如果一个函数参数或变量在代码中没有被使用&#xff0c;编译器会发出警告&#xff0c;例如&a…...