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

Java详解RabbitMQ工作模式之发布订阅模式

目录

    • 一、发布订阅模式简介
    • 二、发布订阅模式的工作原理
      • 2.1 核心组件
      • 2.2 工作流程
    • 三、代码示例
      • 3.1 生产者代码
      • 3.2 消费者代码
    • 四、实际应用场景
    • 五、注意事项
    • 六、总结

在分布式系统中,消息队列作为异步通信的桥梁,扮演着至关重要的角色。而 RabbitMQ,凭借其出色的性能、丰富的功能和简洁易用的特性,成为了众多开发者的心头好。在 RabbitMQ 的众多工作模式中,发布订阅模式(Publish/Subscribe)是极具代表性和实用价值的一种。本文将深入剖析 RabbitMQ 的发布订阅模式,通过具体的代码示例,带你领略其背后的奥秘。

一、发布订阅模式简介

在发布订阅模式中,消息的发送者(Publisher)将消息发送到一个交换器(Exchange),交换器根据其类型和绑定规则将消息路由到一个或多个队列(Queue),最终由订阅者(Subscriber)从队列中获取消息并进行处理。这种模式允许多个消费者订阅同一个消息源,从而实现消息的广播式分发。

二、发布订阅模式的工作原理

2.1 核心组件

在发布订阅模式中,有以下几个核心组件:

  • Exchange(交换器) :交换器是消息的中转站,它接收生产者发送的消息,并根据绑定规则将消息分发到一个或多个队列中。RabbitMQ 提供了多种类型的交换器,如直连交换器(Direct Exchange)、扇形交换器(Fanout Exchange)和主题交换器(Topic Exchange)。在发布订阅模式中,通常使用扇形交换器,因为它可以将消息广播到所有绑定的队列,实现消息的多对多分发。
  • Queue(队列) :队列是消息的存储实体,用于暂存消息,直到被消费者取出并处理。在发布订阅模式中,多个队列可以绑定到同一个交换器,从而实现消息的广播和分发。
  • Binding(绑定) :绑定是交换器和队列之间的连接点,用于定义交换器将消息分发到哪些队列。在发布订阅模式中,队列需要通过绑定与交换器关联起来,以便接收消息。
  • Consumer(消费者) :消费者是从队列中获取消息并进行处理的应用程序。在发布订阅模式中,多个消费者可以订阅同一个队列,实现消息的负载均衡和并行处理。

2.2 工作流程

  1. 生产者发送消息 :生产者创建一个消息,并将其发送到指定的交换器。消息中通常包含一些元数据,如消息的优先级、过期时间等,以及消息的主体内容。
  2. 交换器分发消息 :交换器接收到消息后,根据其类型和绑定规则,将消息路由到一个或多个队列。在发布订阅模式中,扇形交换器会将消息广播到所有绑定的队列,实现消息的多对多分发。
  3. 消费者接收消息 :队列中的消息按照先进先出(FIFO)的顺序等待消费者处理。消费者通过订阅队列,从队列中取出消息并进行处理。在发布订阅模式中,多个消费者可以订阅同一个队列,从而实现消息的并行处理和负载均衡。

三、代码示例

3.1 生产者代码

以下是一个简单的 RabbitMQ 生产者代码示例,展示了如何在发布订阅模式下发送消息:

import com.rabbitmq.client.*;import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;public class Producer {private static final String EXCHANGE_NAME = "logs";public static void main(String[] args) throws IOException, TimeoutException {// 创建连接工厂ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");// 建立连接try (Connection connection = factory.newConnection();Channel channel = connection.createChannel()) {// 声明一个扇形交换器channel.exchangeDeclare(EXCHANGE_NAME, "fanout");String message = "Hello, RabbitMQ!";// 发送消息到交换器channel.basicPublish(EXCHANGE_NAME, "", null, message.getBytes(StandardCharsets.UTF_8));System.out.println("Sent: " + message);}}
}

3.2 消费者代码

以下是对应的 RabbitMQ 消费者代码示例,展示了如何在发布订阅模式下接收消息:

import com.rabbitmq.client.*;import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;public class Consumer {private static final String EXCHANGE_NAME = "logs";public static void main(String[] args) throws IOException, TimeoutException {// 创建连接工厂ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");// 建立连接Connection connection = factory.newConnection();Channel channel = connection.createChannel();// 声明一个扇形交换器channel.exchangeDeclare(EXCHANGE_NAME, "fanout");// 声明一个临时队列String queueName = channel.queueDeclare().getQueue();// 将队列绑定到交换器channel.queueBind(queueName, EXCHANGE_NAME, "");System.out.println("Waiting for messages...");DeliverCallback deliverCallback = (consumerTag, delivery) -> {String message = new String(delivery.getBody(), StandardCharsets.UTF_8);System.out.println("Received: " + message);};// 消费消息channel.basicConsume(queueName, true, deliverCallback, consumerTag -> {});}
}

四、实际应用场景

发布订阅模式在实际开发中有着广泛的应用场景,例如:

  • 日志收集 :多个服务可以将日志消息发送到同一个交换器,日志收集服务从交换器中获取日志消息并进行处理,实现日志的集中管理和分析。
  • 事件驱动架构 :在事件驱动的系统中,事件发布者将事件消息发送到交换器,事件处理者从交换器中获取事件消息并进行处理,实现系统的解耦和异步交互。
  • 消息分发 :将消息广播到多个消费者,实现消息的多对多分发,例如在多用户实时聊天场景中,将消息分发给所有在线用户。

五、注意事项

  1. 交换器类型选择 :在发布订阅模式中,通常使用扇形交换器来实现消息的广播分发。根据实际需求,也可以选择其他类型的交换器,如主题交换器,以实现更灵活的消息路由规则。
  2. 队列的持久化和排他性 :根据业务需求,可以设置队列的持久化属性(durable)和排他性属性(exclusive)。持久化队列在服务器重启后仍然存在,而排他性队列只能被一个连接使用。
  3. 消息确认机制 :消费者在处理消息后可以发送确认消息(basicAckbasicNack),以告知 RabbitMQ 消息已被成功处理。如果消费者在处理消息过程中发生故障,RabbitMQ 可以重新分发消息,确保消息不会丢失。
  4. 负载均衡和并行处理 :通过增加消费者数量,可以实现消息的并行处理,提高系统的吞吐量和性能。RabbitMQ 会根据消费者的负载情况,自动将消息分发给不同的消费者,实现负载均衡。

六、总结

RabbitMQ 的发布订阅模式是一种高效、灵活的消息分发机制,允许多个生产者和消费者进行异步通信。通过本文的介绍和代码示例,相信你已经对发布订阅模式有了更深入的理解。在实际项目中,合理运用发布订阅模式,可以实现系统的解耦、异步交互和消息分发,提升系统的性能和可扩展性。希望本文能够帮助你在分布式系统开发中更好地利用 RabbitMQ 的强大功能。

相关文章:

Java详解RabbitMQ工作模式之发布订阅模式

目录 一、发布订阅模式简介二、发布订阅模式的工作原理2.1 核心组件2.2 工作流程 三、代码示例3.1 生产者代码3.2 消费者代码 四、实际应用场景五、注意事项六、总结 在分布式系统中,消息队列作为异步通信的桥梁,扮演着至关重要的角色。而 RabbitMQ&…...

UR5e机器人Matlab仿真

在 MATLAB 中使用 UR5e 机器人模型进行仿真和控制,通常需要结合机器人系统工具箱(Robotics System Toolbox) UR5e loadrobot("universalUR5e","DataFormat","column"); UR5e.Gravity [0 0 -9.81]; % 保存机器…...

[ctfshow web入门] web75

信息收集 scandir被禁用了 解题 cforeach(new DirectoryIterator("glob:///*") as $a){echo($a->__toString(). ); } ob_flush();cif ( $a opendir("glob:///*") ) {while ( ($file readdir($a)) ! false ) {echo $file."<br>";}c…...

论文中表格跨页该怎么整(如何给跨页表格添加标题和表头)

标题&#xff1a;光标移动到第一行表格&#xff0c;然后快捷键;ctrl shirft enter&#xff0c;就会发现第二页多了一行&#xff0c;再把标题复制张贴过来即可 表头&#xff1a; 光标移动到第一行表格&#xff0c;鼠标右键 选择插入 再选择在上方插入行&#xff0c;然后手动添加…...

day26 Python 自定义函数

目录 一、函数的基本定义 示例 1&#xff1a;不带参数的函数 示例 2&#xff1a;查看文档字符串 二、带参数的函数 示例 3&#xff1a;带一个参数的函数 示例 4&#xff1a;带多个参数的函数 三、带返回值的函数 示例 5&#xff1a;计算两个数的和并返回结果 示例 6&am…...

洛谷P4907题解

题目传送门 题意&#xff1a; 扑克牌的部分牌被移除&#xff0c;需从剩牌中选 4 个区间&#xff0c;每个区间的牌都是同一花色且点数连续。如果不可选&#xff0c;输出最少需添加几张牌才能满足要求。 思路&#xff1a; 暴力和剪枝。 暴力&#xff1a;按照题意模拟&#xff…...

【MyBatis插件】PageHelper 分页

前言 在开发 Web 应用时&#xff0c;我们经常需要处理海量数据的展示问题。例如&#xff0c;在一个电商平台上&#xff0c;商品列表可能有成千上万条数据。如果我们一次性将所有数据返回给前端&#xff0c;不仅会导致页面加载缓慢&#xff0c;还会对数据库造成巨大压力。为了解…...

AI数字人融合VR全景:从技术突破到可信场景落地

摘要 本文深度解析AI数字人与VR全景技术融合的技术架构&#xff0c;结合故宫博物院、西门子、强生等真实行业案例&#xff0c;揭示技术落地的关键路径与量化价值。通过具体技术参数、实施细节及权威机构数据&#xff0c;构建可信的技术应用图景&#xff0c;为开发者提供可复用…...

机器学习——朴素贝叶斯练习题

一、 使用鸢尾花数据训练多项式朴素贝叶斯模型&#xff0c;并评估模型 代码展示&#xff1a; from sklearn.datasets import load_iris from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split from sklearn.naive_bayes impor…...

【爬虫】DrissionPage-3

安装&#xff1a;4.1最新版本 pip install drissionpage --upgrade 官方文档&#xff1a;&#x1f6f0;️ 连接浏览器 | DrissionPage官网 1 Chromium对象 Chromium对象用于连接和管理浏览器。标签页的开关和获取、整体运行参数配置、浏览器信息获取等都由它进行。 1.1 默认…...

网络爬虫学习之httpx的使用

开篇 本文整理自《Python3 网络爬虫实战》&#xff0c;主要是httpx的使用。 笔记整理 使用urllib库requests库的使用&#xff0c;已经可以爬取绝大多数网站的数据&#xff0c;但对于某些网站依然无能为力。 这是因为这些网站强制使用HTTP/2.0协议访问&#xff0c;这时urllib和r…...

TASK02【Datawhale 组队学习】使用 LLM API 开发应用

文章目录 system prompt 和 user prompt高效prompt&#xff1a;用清晰、详尽的语言表达 Prompt原则一&#xff1a;清晰&#xff0c;具体的指令分隔符寻求结构化的输出要求模型检查是否满足条件提供少量示例 "Few-shot" prompting 原则二&#xff0c;给模型时间去思考…...

黑马k8s(七)

1.Pod介绍 查看版本&#xff1a; 查看类型,这里加s跟不加s没啥区别&#xff0c;可加可不加 2.Pod基本配置 3.镜像拉去策略 本地没有这个镜像&#xff0c;策略是Never&#xff0c;启动失败 查看拉去策略&#xff1a; 更改拉去策略&#xff1a; 4.启动命令 运行的是nginx、busv…...

【FMC216】基于 VITA57.1 的 2 路 TLK2711 发送、2 路 TLK2711 接收 FMC 子卡模块

产品概述 FMC216 是一款基于 VITA57.1 标准规范的 2 路 TLK2711 接收、2 路 TLK2711 发送 FMC 子卡模块。该板卡支持 2 路 TLK2711 数据的收发&#xff0c;支持线速率 1.6Gbps&#xff0c;经过 TLK2711 高速串行收发器&#xff0c;可以将 1.6Gbps 的高速串行数据解串为 16 位并…...

如何在Edge浏览器里-安装梦精灵AI提示词管理工具

方案一&#xff08;应用中心安装-推荐&#xff09;&#xff1a; 梦精灵 跨平台AI提示词管理工具 - Microsoft Edge AddonsMake Microsoft Edge your own with extensions that help you personalize the browser and be more productive.https://microsoftedge.microsoft.com…...

Ubuntu shell指定conda的python环境启动脚本

Ubuntu shell指定conda的python环境启动脚本。 通过指令&#xff0c;获取目前系统的conda虚拟python环境 conda info -e 如下图所示&#xff0c;为我自己电脑的python环境 # conda environments: # base * /home/ubuntu/miniconda3 kitti …...

深入理解无监督学习与K-means聚类算法:原理与实践

一、无监督学习概述 无监督学习(Unsupervised Learning)是机器学习的重要分支之一&#xff0c;与有监督学习不同&#xff0c;它不需要预先标记的训练数据。在无监督学习中&#xff0c;计算机仅根据样本的特征或样本间的相关性&#xff0c;从数据中自动发现隐藏的模式或结构。 …...

单片机-STM32部分:16、Git工具使用

Docshttps://x509p6c8to.feishu.cn/wiki/Pftrw3Z6niRlewkurnyctyw1nQx 使用Git管理本地仓库的好处是&#xff0c;可以知道自己每次修改了哪些内容&#xff0c;随时进行版本切换。 待完善。...

扬州卓韵酒店用品:优质洗浴用品,提升酒店满意度与品牌形象

在酒店提供的服务里&#xff0c;沐浴用品占据了非常重要的地位&#xff0c;其质量与种类直接关系到客人洗澡时的感受。好的沐浴用品能让客人洗澡时感到舒心和快乐&#xff0c;反之&#xff0c;质量不好的用品可能会影响客人整个住宿期间的愉悦心情。挑选恰当的洗浴用品不仅能够…...

Coze 实战教程 | 10 分钟打造你的AI 助手

> 文章中的 xxx 自行替换&#xff0c;文章被屏蔽了。 &#x1f4f1; 想让你的xxx具备 AI 对话能力&#xff1f;本篇将手把手教你&#xff0c;如何用 Coze 平台快速构建一个能与用户自然交流、自动回复提问的 xxx助手&#xff0c;零代码、超高效&#xff01; &#x1f4cc;…...

使用 frp 实现内网穿透:从基础到进阶

在日常开发中&#xff0c;我们经常会遇到需要将本地服务暴露给外部用户的情况&#xff0c;比如测试同学需要临时测试一个本地开发的 Web 服务&#xff0c;或者希望在出差时远程访问家里的 NAS。这些需求的核心问题都是如何实现内网穿透。 一、为什么选择 frp&#xff1f; 经过…...

redis中key的过期和淘汰

一、过期&#xff08;redis主动删除&#xff09; 设置了ttl过期时间的key&#xff0c;在ttl时间到的时候redis会删除过期的key。但是redis是惰性过期。惰性过期&#xff1a;redis并不会立即删除过期的key&#xff0c;而是会在获取key的时候判断key是否过期&#xff0c;如果发现…...

鸿蒙OSUniApp制作多选框与单选框组件#三方框架 #Uniapp

使用UniApp制作多选框与单选框组件 前言 在移动端应用开发中&#xff0c;表单元素是用户交互的重要组成部分。尤其是多选框&#xff08;Checkbox&#xff09;和单选框&#xff08;Radio&#xff09;&#xff0c;它们几乎存在于每一个需要用户做出选择的场景中。虽然UniApp提供…...

和为target问题汇总

文章目录 习题题型1377.组合总和 IV 题型2494.目标和 和为target的问题&#xff0c;可以有很多种问题的形式的考察&#xff0c;当然&#xff0c;及时的总结与回顾有利于我们熟练掌握这些知识&#xff01; 题型1 爬楼梯问题&#xff0c;是对于转移步伐有规定&#xff0c;在不同…...

Ubuntu使用Docker搭建SonarQube企业版(含破解方法)

目录 Ubuntu使用Docker搭建SonarQube企业版&#xff08;含破解方法&#xff09;SonarQube介绍安装Docker安装PostgreSQL容器Docker安装SonarQube容器SonarQube汉化插件安装 破解生成license配置agent 使用 Ubuntu使用Docker搭建SonarQube企业版&#xff08;含破解方法&#xff…...

牛客网 NC22167: 多组数据a+b

牛客网 NC22167: 多组数据ab 题目分析 这道题目来自牛客网&#xff08;题号&#xff1a;NC22167&#xff09;&#xff0c;要求我们计算两个整数a和b的和。乍看简单&#xff0c;但有以下特殊点需要注意&#xff1a; 输入包含多组测试数据每组输入两个整数当两个整数都为0时表示…...

EdgeShard:通过协作边缘计算实现高效的 LLM 推理

(2024-05-23) EdgeShard: Efficient LLM Inference via Collaborative Edge Computing (EdgeShard:通过协作边缘计算实现高效的 LLM 推理) 作者: Mingjin Zhang; Jiannong Cao; Xiaoming Shen; Zeyang Cui;期刊: (发表日期: 2024-05-23)期刊分区:本地链接: Zhang 等 - 2024 …...

π0: A Vision-Language-Action Flow Model for General Robot Control

TL;DR 2024 年 Physical Intelligence 发布的 VLA 模型 π0&#xff0c;基于 transformer 流匹配&#xff08;flow matching&#xff09;架构&#xff0c;当前开源领域最强的 VLA 模型之一。 Paper name π0: A Vision-Language-Action Flow Model for General Robot Contr…...

RabbitMQ高级篇-MQ的可靠性

目录 MQ的可靠性 1.如何设置数据持久化 1.1.交换机持久化 1.2.队列持久化 1.3.消息持久化 2.消息持久化 队列持久化&#xff1a; 消息持久化&#xff1a; 3.非消息持久化 非持久化队列&#xff1a; 非持久化消息&#xff1a; 4.消息的存储机制 4.1持久化消息&…...

4、前后端联调文生文、文生图事件

4、前后端联调文生文、文生图事件 原文地址 1、底部【发送按钮】事件触发调用后端AI程序逻辑 <!-- 前端模板如下: --> <!DOCTYPE html> <html><head><meta charset"utf-8"><title>小薛博客LLM大模型实战</title><me…...

深度学习中的提示词优化:梯度下降全解析

深度学习中的提示词优化:梯度下降全解析 在您的代码中,提示词的更新方向是通过梯度下降算法确定的,这是深度学习中最基本的优化方法。 一、梯度下降与更新方向 1. 核心公式 对于可训练参数 θ \theta θ(这里是提示词嵌入向量),梯度下降的更新公式为:...

Midjourney 最佳创作思路与实战技巧深度解析【附提示词与学习资料包下载】

引言 在人工智能图像生成领域&#xff0c;Midjourney 凭借其强大的艺术表现力和灵活的创作模式&#xff0c;已成为设计师、艺术家和创意工作者的核心工具。作为 CSDN 博主 “小正太浩二”&#xff0c;我将结合多年实战经验&#xff0c;系统分享 Midjourney 的创作方法论&#x…...

【数字图像处理】半开卷复习提纲

1&#xff1a;要求 2张A4纸以内&#xff0c;正反面均可写 &#xff08;不过博主由于墨水浸到背面了&#xff0c;采用了把2张单面通过双面胶粘起来的方法&#xff0c;结果考前半个小时都在用这个难用的双面胶。。。&#xff09; 2&#xff1a;提纲内容 3&#xff1a;提示 考的…...

交通运输与能源融合发展——光储充在交通上的应用完整解决方案

在全球积极应对气候变化、推动可持续发展的大背景下&#xff0c;交通运输与能源领域的融合发展成为关键趋势。近日&#xff0c;交通运输部等十部门联合发布的《关于推动交通运输与能源融合发展的指导意见》&#xff0c;为这两个重要行业的协同前行指明了清晰的方向&#xff0c;…...

API 接口开放平台 Crabc 3.2 发布

2025 年 5 月 15 日&#xff0c;API 接口开放平台 Crabc 3.2 发布。 Crabc 是一款 API 接口开发平台、企业级接口管理和 SQL2API 平台。它支持动态数据源、动态 SQL 和标签&#xff0c;能接入多种 SQL 或 NoSQL 数据源&#xff0c;包括 MySQL、Oracle、达梦、TiDB、Hive、ES 和…...

基于智能推荐的就业平台的设计与实现(招聘系统)(SpringBoot Thymeleaf)+文档

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...

【web应用】配置Java JDK与maven3的环境变量

文章目录 一、控制面板 - 系统 - 高级系统设置-环境变量二、用户变量和系统变量的配置方法一样&#xff1a;三、查看是否配置成功 maven有两种安装方式&#xff1a; 1、IDEA捆绑安装&#xff0c;一般是maven3【这里配置的环境变量是捆绑安装这种方式】 2、手动下载安装插件 一、…...

编程日志5.7

二叉树的功能代码 #include<iostream> using namespace std; //二叉树结点定义 template<typename T> struct TreeNode { T val;//定义了一个类型为T的成员变量val,用于存储树节点的值 TreeNode* left;//定义了一个指向TreeNode类型的指针成员变量left,…...

室内定位:热门研究方向与未解难题深度解析

I. 引言:对普适性室内定位的持续探索 A. 室内定位在现代应用中的重要性 室内定位系统(IPS)正迅速成为众多应用领域的基石技术,其重要性源于现代社会人们约70%至90%的时间在室内度过的事实 1。这些应用横跨多个行业,包括应急响应 1、智能建筑与智慧城市 6、医疗健康(如病…...

图片通过滑块小图切换大图放大镜效果显示

图片通过滑块小图切换大图放大镜效果显示 实现目标&#xff1a; 显示一组图片列表&#xff0c;鼠标进入小图记录当下小图下标&#xff0c;通过小图下标在数组中对应图片显示到大图位置&#xff1b; 鼠标进入大图位置时&#xff0c;带动滑块移动&#xff0c;并将放大两倍的大图…...

[250515] 腾讯推出 AI 编程助手 CodeBuddy,对标 Cursor

目录 腾讯推出 AI 编程助手 CodeBuddy 腾讯推出 AI 编程助手 CodeBuddy 腾讯发布 CodeBuddy&#xff0c;一款 AI 编程助手&#xff0c;旨在提升开发者效率。 主要亮点&#xff1a; CodeBuddy&#xff1a; 全新英文品牌&#xff0c;面向全球开发者。Craft 模式&#xff1a; A…...

OpenCV光流估计:原理、实现与应用

一、什么是光流&#xff1f; 光流(Optical Flow)是计算机视觉中描述图像序列中像素运动模式的重要概念。它表示图像中物体在连续帧之间的表观运动&#xff0c;是由物体或相机的运动引起的。 光流的基本假设 亮度恒常性&#xff1a;同一物体点在连续帧中的亮度保持不变时间持…...

使用 QGIS 插件 OpenTopography DEM Downloader 下载高程数据(申请key教程)

使用 QGIS 插件 OpenTopography DEM Downloader 下载高程数据 目录 使用 QGIS 插件 OpenTopography DEM Downloader 下载高程数据&#x1f4cc; 简介&#x1f6e0; 插件安装方法&#x1f30d; 下载 DEM 数据步骤&#x1f511; 注册 OpenTopography 账号&#xff08;如使用 Cope…...

PHP基础知识

【学习资料】 视频&#xff1a; https://www.bilibili.com/video/BV1Xh411S7G1?spm_id_from333.788.videopod.episodes&vd_sourcebe26b82da70367069ab00d6db4f4ffc0 文档&#xff1a;https://www.runoob.com/php/php-tutorial.html 目录 1&#xff0c;PHP是什么2&#xff…...

Kotlin 和 Java 混合开发时需要注意哪些问题

1 空安全&#xff08;Null Safety&#xff09; Kotlin 有严格的空安全机制&#xff08;如非空类型的 String 和可空类型 String?&#xff09;&#xff0c;但是 Java 没有&#xff1a; Kotlin 代码调用 Java 代码&#xff1a;Java 中的所有引用类型默认都是可空的&#xff0c…...

乘法口诀练习神器

请你利用python语言开发一个“乘法口诀练习神器”&#xff0c;主要辅助小学生练习乘法口诀&#xff0c;主要功能如下&#xff1a; 1. 能够随机循环出10道题&#xff0c;可以是乘法或者是除法。如果是乘法&#xff0c;确保两个因数都是1-9之间的整数&#xff1b;如果是除法&…...

How to configure Linux mint desktop

Backgrounds apt install mint-backgrounds-*Theme...

【golang】DNS 资源记录(RR)接口

Go 中 miekg/dns 包对 DNS 资源记录&#xff08;RR&#xff09;接口 的定义&#xff1a; type RR interface {Header() *RR_HeaderString() stringcopy() RRlen(off int, compression map[string]struct{}) intpack(...)unpack(...)parse(...)isDuplicate(r2 RR) bool }这个接…...

Vue中的自定义指令适用于哪些场景

自定义指令在 Vue 中非常灵活且功能强大&#xff0c;它们可以在多种场景中使用&#xff0c;以实现特定的 DOM 操作或行为 自定义样式和类 自定义指令可以用来动态地添加或修改元素的样式和类。这在需要根据数据动态调整样式时非常有用。 <div id"app"><d…...

边缘计算平台

本文来源 &#xff1a; 腾讯元宝 边缘计算平台是一种在靠近数据源头的网络边缘侧部署的分布式计算架构&#xff0c;通过融合网络、计算、存储和应用核心能力&#xff0c;就近提供实时、低延迟的智能服务。以下是其核心要点&#xff1a; ​​1. 定义与特点​​ ​​定义​​&a…...