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

什么是RabbitMQ?

一、引言
RabbitMQ是一个开源的消息代理软件,用于在分布式系统中传递消息。它实现了高级消息队列协议(AMQP),提供了一种可靠的、强大的、灵活的消息传递机制,使得不同应用程序或组件之间可以轻松地进行通信。

二、概念和特性:
1、消息代理:

在RabbitMQ中,消息代理指的就是RabbitMQ服务器,它是一个中间件软件,负责接收、存储和转发消息,充当了消息的中介。RabbitMQ作为消息代理,实现了高级消息队列协议(AMQP),并提供了可靠的、强大的消息传递机制。

具体来说,RabbitMQ消息代理的主要功能包括:

消息传递: RabbitMQ接收来自生产者(消息发送者)的消息,并将其传递给消费者(消息接收者)。

消息存储: RabbitMQ在内部存储消息,以确保消息在发送和接收之间的可靠性。这包括对消息的持久性支持,即使在代理重启后,消息仍然可以被保留。

消息路由: RabbitMQ使用交换机和队列来决定消息的路由方式。交换机负责将消息发送到一个或多个队列,以确保消息能够被正确地传递到目标消费者。

发布/订阅: RabbitMQ支持发布/订阅模型,其中一个生产者可以将消息发布到多个消费者,每个消费者有一个独立的队列。

消息确认: RabbitMQ可以通过确认机制确保消息的可靠传递。生产者可以收到关于消息是否成功发送到代理的确认,消费者可以收到关于消息是否成功被消费的确认。

总的来说,RabbitMQ的消息代理在分布式系统中起到了关键的角色,帮助不同的应用程序或组件进行异步、可靠的通信。

2、队列:
在RabbitMQ中,队列(Queue)是一种存储消息的容器。它是消息代理中的一个关键组件,用于保存通过生产者发送的消息,并在需要时将这些消息传递给消费者。队列是消息在生产者和消费者之间的缓冲区,确保消息的有序传递和可靠性。

以下是队列在RabbitMQ中的关键特性和功能:

消息存储: 队列用于存储消息,这些消息可以来自一个或多个生产者。消息在队列中按照先进先出(FIFO)的顺序排列。

点对点通信: 队列实现了点对点通信模型,其中一个生产者将消息发送到队列,而一个消费者从队列中获取消息。这确保了消息的顺序传递,每条消息只能被一个消费者接收。

消息持久性: 队列可以被声明为持久的,这意味着即使在RabbitMQ代理重启后,队列中的消息仍然会被保留。这对于确保消息不会丢失很重要。

消息路由: 队列可以绑定到交换机(Exchange),通过这种方式,队列可以接收特定类型的消息。交换机负责将消息路由到一个或多个队列。

消费者订阅队列: 消费者通过订阅(或消费)队列中的消息来接收数据。多个消费者可以同时订阅同一个队列,但每条消息只能被一个消费者接收。

自动删除: 队列可以被声明为自动删除的,这意味着当最后一个消费者取消订阅时,队列将被自动删除。

队列在RabbitMQ中的作用是确保生产者和消费者之间的解耦,允许异步通信,并提供了一个缓冲区,以处理不同速度的生产者和消费者。

3、发布/订阅模型:
在RabbitMQ中,发布/订阅(Publish/Subscribe)模型是一种消息传递模式,用于实现一对多的消息广播。这种模型允许一个消息发布者将消息发送到多个订阅者,每个订阅者都可以接收并处理消息。

以下是发布/订阅模型在RabbitMQ中的关键组件和操作:

交换机(Exchange): 交换机是消息发布者和订阅者之间的中介。发布者将消息发布到交换机,而交换机负责将消息路由到一个或多个队列。在发布/订阅模型中,通常使用扇出交换机(Fanout Exchange),它会将消息广播到所有与之绑定的队列。

队列: 每个订阅者都有一个独立的队列,它与交换机绑定。当交换机接收到消息时,它将消息复制并路由到与之绑定的所有队列中,以便多个订阅者都能接收消息。

发布者(Publisher): 发布者是生产者,负责将消息发布到交换机。它不需要知道消息将发送给哪个队列,只需要将消息发送到交换机即可。

订阅者(Subscriber): 订阅者是消费者,它创建一个队列并将其绑定到交换机。通过这种方式,订阅者就能够接收到由交换机广播的消息。

下面是发布/订阅模型的基本流程:

发布者将消息发布到交换机。
交换机将消息广播到所有与之绑定的队列。
每个订阅者的队列接收到消息,并进行处理。
这种模型适用于需要将消息同时发送给多个消费者的场景,例如日志处理、事件通知等。每个订阅者都独立地接收消息,互不影响。

4、路由和交换机:
在RabbitMQ中,路由和交换机是两个关键的概念,它们共同协作以确保消息在生产者和消费者之间正确传递。

交换机(Exchange):

交换机是消息的分发中心,负责接收从生产者发送的消息,并将其路由到一个或多个与之绑定的队列。RabbitMQ支持不同类型的交换机,其中最常用的类型之一是扇出交换机(Fanout Exchange),它会将消息广播到与之绑定的所有队列,无视消息的路由键。

路由:

路由是一种将消息从交换机发送到队列的机制。在RabbitMQ中,路由通常是通过交换机的类型和绑定规则来实现的。当生产者发送一条消息时,消息可能携带一个特定的路由键(Routing Key)。交换机根据路由键和绑定规则将消息路由到与之匹配的队列。

交换机和路由的关系:

扇出交换机(Fanout Exchange): 在扇出交换机中,路由键不起作用。交换机将消息广播到所有与之绑定的队列,无论消息携带的路由键是什么。

直连交换机(Direct Exchange): 在直连交换机中,交换机通过路由键将消息路由到与之匹配的队列。只有队列与交换机绑定时使用的路由键完全匹配消息的路由键时,消息才会被发送到该队列。

主题交换机(Topic Exchange): 主题交换机允许使用通配符进行更灵活的路由。队列可以使用通配符形式的路由键与主题交换机绑定,从而实现更复杂的路由逻辑。

总之,交换机定义了消息的传递规则,而路由定义了如何将消息从交换机发送到队列。这两者共同确保消息能够按照预期的方式在RabbitMQ中进行路由和传递。

5、持久性:
在RabbitMQ中,持久性(Durability)通常涉及到队列和消息的两个方面:

队列的持久性: 当声明一个队列时,可以将队列设置为持久的,这样在RabbitMQ代理重新启动时,队列的定义仍然会存在。这样可以确保即使发生故障或者代理重启,相关的队列信息不会丢失。队列的持久性通过设置队列声明时的 durable 参数来实现。

示例(使用 RabbitMQ 的 AMQP 0-9-1 协议的场景下,比如使用 Python 的 pika 库):

channel.queue_declare(queue='my_queue', durable=True)
消息的持久性: 当发布一条消息到队列时,可以将消息设置为持久的,以确保即使 RabbitMQ 代理重启,消息也不会丢失。持久性的消息会被存储在磁盘上而不是内存中。消息的持久性通过设置消息的 delivery_mode 属性为 2 来实现。

示例:

channel.basic_publish(
    exchange='',
    routing_key='my_queue',
    body='Hello, RabbitMQ!',
    properties=pika.BasicProperties(
        delivery_mode=2  # 2 表示消息是持久的
    )
)
通过同时设置队列和消息的持久性,可以确保消息在持久的队列中被存储在磁盘上,从而提高消息的持久性。这对于需要保证消息不丢失的关键应用场景非常重要,例如在金融交易、日志处理等需要可靠消息传递的情况下。

6、灵活的消息模式:
"灵活的消息模式"(Flexible Messaging Patterns)通常指在消息中间件或消息队列系统中支持多种消息传递模式,以适应不同的应用场景和需求。这样的灵活性使得开发者能够根据特定的情境选择最合适的消息模式,以实现异步通信、解耦系统组件、提高可伸缩性等目标。

在RabbitMQ中,有几种常见的消息模式,其中一些包括:

点对点模型(Point-to-Point): 也称为队列模型,其中一个生产者将消息发送到队列,而一个消费者从队列中获取消息。这种模型适用于一对一的通信关系,消息只能被一个消费者接收。

发布/订阅模型(Publish/Subscribe): 通过使用交换机和多个队列,一个生产者可以将消息广播给多个消费者。每个消费者有一个独立的队列,可以独立地接收消息,实现了一对多的通信关系。

主题模型(Topic): 类似于发布/订阅模型,但引入了通配符的概念,允许消费者通过通配符匹配特定类型的消息。这使得可以更灵活地过滤和选择感兴趣的消息。

请求/响应模型(Request/Reply): 通过引入一个中间人(通常是一个处理请求的队列),请求者发送请求消息到中间人队列,而处理请求的服务则接收请求消息并将响应消息发送回一个响应队列。请求者从响应队列中获取响应消息。

工作队列模型(Work Queues): 多个消费者共享一个队列,生产者发送消息到队列,而多个消费者并行地处理消息。这提高了系统的处理能力,适用于负载均衡的场景。

通过结合使用这些模式,开发者可以设计出适应各种应用场景和系统架构的消息通信方式。这种灵活性是消息队列系统在构建分布式系统、微服务架构和异步通信方面非常有价值的一部分。

7、可扩展性:
可扩展性是指系统能够有效地适应变化和增长,以保持性能、吞吐量和处理能力。在消息队列系统中,可扩展性是一个重要的特性,因为系统的负载可能随着时间的推移或特定事件的发生而发生变化。可扩展性使得系统能够轻松地扩展到处理更多的消息和更高的负载,而不影响整体性能。

在 RabbitMQ 中,实现可扩展性的一些关键点包括:

集群化: RabbitMQ 支持集群化,可以通过在多个节点上运行多个 RabbitMQ 实例来实现高可用性和负载均衡。集群中的节点之间可以相互通信和协作,从而提高系统的可扩展性。

水平扩展: RabbitMQ允许通过在系统中添加更多的节点来水平扩展,从而增加整体的处理能力。水平扩展通常涉及到在不同的物理或虚拟机器上运行额外的 RabbitMQ 实例。

队列和消费者的动态调整: RabbitMQ允许动态地添加或移除队列,以及增加或减少消费者的数量。这使得系统能够根据负载情况进行动态调整,以满足不同需求。

资源优化: RabbitMQ 具有优化资源利用的能力,例如通过合理配置消息的预取计数(prefetch count)来平衡生产者和消费者之间的负载。

负载均衡: RabbitMQ 可以通过合理配置交换机和队列以及选择合适的路由策略,实现负载在多个节点之间的均衡。

监控和管理: 使用 RabbitMQ 的管理插件或监控工具,可以对系统的状态、性能指标等进行监控和管理,从而更好地了解系统运行情况,及时发现和处理潜在的瓶颈或问题。

这些特性使得 RabbitMQ 在构建大规模、高性能、可靠的分布式系统时具备了较强的可扩展性。

相关文章:

什么是RabbitMQ?

一、引言 RabbitMQ是一个开源的消息代理软件,用于在分布式系统中传递消息。它实现了高级消息队列协议(AMQP),提供了一种可靠的、强大的、灵活的消息传递机制,使得不同应用程序或组件之间可以轻松地进行通信。 二、概念…...

JWT登录验证前后端设计与实现笔记

设计内容 前端 配置全局前置路由守卫axios拦截器登录页面和主页 后端 JWT的封装登录接口中间件放行mysql数据库的连接 详细设计 路由设计 配置全局前置守卫,如果访问的是登录页面则放行,不是则进入判断是否有token,没有则拦截回到登录…...

自定义类型详解 ----结构体,位段,枚举,联合

目录 结构体 1.不完全声明 2.结构体的自引用 3.定义与初始化 4.结构体内存对齐与结构体类型的大小 结构体嵌套问题 位段 1.什么是位段? 2.位段的内存分配 枚举 1.枚举类型的定义 2.枚举的优点 联合(共同体) 1.联合体类型的声明以…...

VueCLI核心知识综合案例TodoList

目录 1 拿到一个功能模块首先需要拆分组件: 2 使用组件实现静态页面的效果 3 分析数据保存在哪个组件 4 实现添加数据 5 实现复选框勾选 6 实现数据的删除 7 实现底部组件中数据的统计 8 实现勾选全部的小复选框来实现大复选框的勾选 9 实现勾选大复选框来…...

关于cuda路径问题

问题:Could not load dynamic library ‘libcudart.so.11.0’ 原因:调用系统环境下的cuda但系统环境没有装cuda 解决: 1.在系统环境装cuda,但如果每权限就不好操作; 2.用虚拟环境装好的cuda路径丢给环境变量 暂时性&am…...

六、Spring/Spring Boot整合ActiveMQ

Spring/Spring Boot整合ActiveMQ 一、Spring整合ActiveMQ1.pom.xml2.Queue - 队列2.1 applicationContext.xml2.2 生产者2.3 消费者 3.Topic - 主题3.1 applicationContext.xml3.2 生产者3.3 消费者 4.消费者 - 监听器4.1 编写监听器类4.2 配置监听器4.3 生产者消费者一体 二、…...

树莓派4B(Raspberry Pi 4B)使用docker搭建springBoot/springCloud服务

树莓派4B(Raspberry Pi 4B)使用docker搭建springBoot/springCloud服务 前提:本文基于Ubuntu,Java8,SpringBoot 2.6.13讲解 准备工作 准备SpringBoot/SpringCloud项目jar包 用 maven 打包springBoot/springCloud项目&…...

数据库设计、JDBC、数据库连接池

数据库设计 数据库设计概念 数据库设计就是根据业务 系统的具体需求,结合我们所选用的DBMS,为这个业务系统构造出最优的数据存储模型。建立数据库中的表结构以及表与表之间的关联关系的过程。有哪些表?表里有哪些字段?表和表之间有什么关系? 数据库设计的步骤…...

SpringBoot实现OneDrive文件上传

SpringBoot实现OneDrive文件上传 源码 OneDriveUpload: SpringBoot实现OneDrive文件上传 获取accessToken步骤 参考文档:针对 OneDrive API 的 Microsoft 帐户授权 - OneDrive dev center | Microsoft Learn 1.访问Azure创建应用Microsoft Azure,使…...

C++初阶:容器适配器介绍、stack和queue常用接口详解及模拟实现

介绍完了list类的相关内容后:C初阶:适合新手的手撕list(模拟实现list) 接下来进入新的篇章,stack和queue的介绍以及模拟: 文章目录 1.stack的初步介绍2.stack的使用3.queue的初步介绍4.queue的使用5.容器适…...

GRUB and the Boot Process on UEFI-based x86 Systems

background info : BIOS and UEFI-CSDN博客 The UEFI-based platform reads the partition table on the system storage and mounts the EFI System Partition (ESP), a VFAT partition labeled with a particular globally unique identifier (GUID). The ESP contains EFI a…...

2.C语言——输入输出

1.字符输入输出函数 1.输入:getchar() 字面意思,接收单个字符,使用方法 char a; a getchar();实际上效果等同于char a; scanf("%c",&a);2.输出:putchar() 2.格式化输入输出函数 1.输入:scanf() 格式: scanf(“格式控制…...

MySQL篇之SQL优化

一、表的设计优化 表的设计优化(参考阿里开发手册《嵩山版》): 1. 比如设置合适的数值(tinyint int bigint),要根据实际情况选择。 2. 比如设置合适的字符串类型(char和varchar&#xff09…...

QGis —— 1、Windows10下载安装QGis及插件

QGis官网 QGIS(自由开源的地理信息系统)是一个专业的GIS应用程序,它建立在免费和开源软件(FOSS)之上,并为此而自豪。QGIS 是一个方便使用的开源地理信息系统 (GIS),根据 GNU 通用公共许可授权。…...

【打工日常】使用docker部署Dashdot工具箱

一、Dashdot介绍 dashdot是一个简洁清晰的服务器数据仪表板,基于React实现 ,主要是显示操作系统、进程、存储、内存、网络这五个的数据。 二、本次实践介绍 1. 本次实践简介 本次实践部署环境为个人测试环境 2. 本地环境规划 本次实践环境规划&#xf…...

使用client-only 解决组件不兼容SSR问题

目录 前言 一、解决方案 1.基于Nuxt 框架的SSR应用 2.基于vue2框架的应用 3.基于vue3框架的应用 二、总结 往期回顾 前言 最近在我的单页面SSR应用上开发JSON编辑器功能,在引入组件后直接客户端跳转OK,但是在直接加载服务端渲染的时候一直报这…...

基于Java SSM框架实现网上报名系统项目【项目源码+论文说明】

基于java的SSM框架实现网上报名系统演示 摘要 随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的网上报名系统,会使网上报名系统工作系统化、规范化,也会提高网…...

7.1 Qt 中输入行与按钮

目录 前言: 技能: 内容: 参考: 前言: line edit 与pushbotton的一点联动 当输入行有内容时,按钮才能使用,并能读出输入行的内容 技能: pushButton->setEnabled(false) 按钮不…...

云计算基础-网络虚拟化

虚拟交换机 什么是虚拟交换机 虚拟交换机是一种运行在虚拟化环境中的网络设备,其运行在宿主机的内存中,通过软件方式在宿主机内部实现了部分物理交换机的功能,如 VLAN 划分、流量控制、QoS 支持和安全功能等网络管理特性 虚拟交换机在云平…...

166基于matlab的通过峭度指标与互相关系数筛选IMF进行SVD分解去噪

基于matlab的通过峭度指标与互相关系数筛选IMF进行SVD分解去噪,分辨虚假imf,提取最大峭度imf图。输出去噪前后时域及其包络谱结果。程序已调通,可直接运行。 166 matlab SVD去噪 IMF筛选 包络谱 (xiaohongshu.com)...

第六十三天 服务攻防-框架安全CVE复现DjangoFlaskNode.JSJQuery

第六十三天 服务攻防-框架安全&CVE复现&Django&Flask&Node.JS&JQuery 知识点: 中间件及框架列表: IIS,Apache,Nginx,Tomcat,Docker,K8s,Weblogic.JBoos,WebSphere, Jenkins,GlassFish,Jetty,Jira,Struts2,Laravel,Solr,Shiro,Thin…...

最大子序和+旅行问题——单调队列

一、最大子序和 输入一个长度为 n 的整数序列,从中找出一段长度不超过 m 的连续子序列,使得子序列中所有数的和最大。 注意: 子序列的长度至少是 1。 输入 第一行输入两个整数 n,m (1 ≤ n,m ≤ 300000)。 第二行输入 n 个数,代…...

Unity设备分级策略

Unity设备分级策略 前言 之前自己做的设备分级策略,在此做一个简单的记录和思路分享。希望能给大家带来帮助。 分级策略 根据拟定的评分标准,预生成部分已知机型的分级信息,且保存在包内;如果设备没有被评级过,则优…...

自己在开发AI应用的过程总结的 Prompt - 持续更新

自己在开发AI应用的过程总结的 Prompt - 持续更新 0. 引言1. 让模型以"中文"进行回复2. 控制模型仅输出"hi"3. 让模型"提供简单、清晰而具体的回答"4. 让模型"在最后说谢谢" 0. 引言 我想,我们多半有着相似的经历&#xf…...

STM32——OLED菜单

文章目录 一.补充二. 二级菜单代码 简介:首先在我的51 I2C里面有OLED详细讲解,本期代码从51OLED基础上移植过来的,可以先看完那篇文章,在看这个,然后按键我是用的定时器扫描不会堵塞程序,可以翻开我的文章有单独的定时…...

Open CASCADE学习|布尔运算后消除内部拓扑

在CAD建模中,布尔运算是一种逻辑运算方法,通过这种方法,可以创建、修改或组合几何对象。布尔运算主要包括并集(UNION)、交集(INTERSECT)和差集(SUBTRACT)三种运算。 并集…...

【数据仓库】主题域和数据域

数据域与主题域区别 https://www.cnblogs.com/datadance/p/16898254.html 数据域是自下而上,以业务数据视角来划分数据,一般进行完业务系统数据调研之后就可以进行数据域的划分。针对公共明细层(DWD)进行主题划分。主题域则自上而…...

C#,二分法(Bisection Method)求解方程的算法与源代码

1 二分法 二分法是一种分治算法&#xff0c;是一种数学思维。 对于区间[a&#xff0c;b]上连续不断且f&#xff08;a&#xff09;f&#xff08;b&#xff09;<0的函数yf&#xff08;x&#xff09;&#xff0c;通过不断地把函数f&#xff08;x&#xff09;的零点所在的区间…...

Portainer安装/快速上手

前置&#xff1a; 管理docker容器的工具 Portainer: Container Management Software for Kubernetes and Docker https://docs.portainer.io/v/ce-2.9/start/install/server/docker/linux 官网安装教程 Install Portainer CE with Docker on Linux - Portainer Documentat…...

恢复被.target勒索病毒加密的数据文件:拒绝向.target勒索病毒支付赎金

引言&#xff1a; 在当今数字时代&#xff0c;勒索病毒已成为网络安全领域的一大威胁&#xff0c;而.target勒索病毒是其中引起广泛关注的一种变种。本文将深入探讨.target勒索病毒的特点以及被其加密的数据文件恢复方法。数据的重要性不容小觑&#xff0c;您可添加我们的技术…...

【Linux网络编程六】服务器守护进程化Daemon

【Linux网络编程六】服务器守护进程化Daemon 一.背景知识&#xff1a;前台与后台二.相关操作三.Linux的进程间关系四.自成会话五.守护进程四步骤六.服务器守护进程化 一.背景知识&#xff1a;前台与后台 核心知识就是一个用户在启动Linux时&#xff0c;都会给一个session会话&a…...

MySQL之json数据操作

1 MySQL之JSON数据 总所周知&#xff0c;mysql5.7以上提供了一种新的字段格式json&#xff0c;大概是mysql想把非关系型和关系型数据库一口通吃&#xff0c;所以推出了这种非常好用的格式&#xff0c;这样&#xff0c;我们的很多基于mongoDB的业务都可以用mysql去实现了。当然…...

【大厂AI课学习笔记】【2.1 人工智能项目开发规划与目标】(5)数据管理

今天学习了数据管理&#xff0c;以及数据管理和数据治理的区别和联系。 数据管理&#xff1a;利用计算机硬件和软件技术对数据进行有效的收集、存储、处理和应用的过程其目的在于充分有效地发挥数据的作用。 实现数据有效管理的关键是数据组织。 数据管理和数据治理的区别&am…...

Linux满载CPU和运行内存的方法

查询CPU详细信息命令如下&#xff1a; 查看物理CPU型号&#xff1a; cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo…...

每日五道java面试题之java基础篇(九)

目录&#xff1a; 第一题 你们项⽬如何排查JVM问题第二题 ⼀个对象从加载到JVM&#xff0c;再到被GC清除&#xff0c;都经历了什么过程&#xff1f;第三题 怎么确定⼀个对象到底是不是垃圾&#xff1f;第四题 JVM有哪些垃圾回收算法&#xff1f;第五题 什么是STW&#xff1f; 第…...

spring @Transactional注解参数详解

事物注解方式: Transactional 当标于类前时, 标示类中所有方法都进行事物处理 , 例子: 1 Transactional public class TestServiceBean implements TestService {}当类中某些方法不需要事物时: Transactional public class TestServiceBean implements TestService {private…...

D - 串结构练习——字符串连接

串结构练习——字符串连接 Description 给定两个字符串string1和string2&#xff0c;将字符串string2连接在string1的后面&#xff0c;并将连接后的字符串输出。 连接后字符串长度不超过110。 Input 输入包含多组数据&#xff0c;每组测试数据包含两行&#xff0c;第一行代表s…...

什么样的服务器是高性能服务器?

首先&#xff0c;高性能服务器应具备高处理能力。随着业务的不断扩展和数据量的爆炸性增长&#xff0c;高性能服务器需要具备强大的计算能力&#xff0c;能够快速处理各种复杂的业务和数据。这要求高性能服务器采用先进的处理器技术&#xff0c;如多核处理器、GPU加速等&#x…...

数学建模【线性规划】

一、线性规划简介 线性规划通俗讲就是“有限的资源中获取最大的收益”&#xff08;优化类问题&#xff09;。而且所有的变量关系式都是线性的&#xff0c;不存在x、指数函数、对数函数、反比例函数、三角函数等。此模型要优化的就是在一组线性约束条件下&#xff0c;求线性目标…...

ChatGPT的大致原理

国外有个博主写了一篇博文&#xff0c;名字叫TChatGPT: Explained to KidsQ」&#xff0c; 直译过来就是&#xff0c;给小孩子解释什么是ChatGPT。 因为现实是很多的小孩子已经可以用父母的手机版ChatGPT玩了 &#xff0c;ChatGPT几乎可以算得上无所不知&#xff0c;起码给小孩…...

蓝桥杯备赛_python_BFS搜索算法_刷题学习笔记

1 bfs广度优先搜索 1.1 是什么 1.2怎么实现 2案例学习 2.1.走迷宫 2.2.P1443 马的遍历 2.3. 九宫重排&#xff08;看答案学的&#xff0c;实在写不来&#xff09; 2.4.青蛙跳杯子&#xff08;学完九宫重排再做bingo&#xff09; 2.5. 长草 3.总结 1 bfs广度优先搜索 【P…...

轮播图的五种写法(原生、vue2、vue3、react类组件,react函数组件)

轮播图效果是一种在网页或应用程序中展示多张图片或内容的方式,通常以水平或垂直的方式循环播放。本文使用原生、vue2、vue3、react类组件,react函数组件五种写法实现了简单的轮播图效果,需要更多轮播效果需要再增加样式或者动画。 淡入淡出效果:每张图片渐渐淡入显示,然后…...

【MySQL】高度为2和3时B+树能够存储的记录数量的计算过程

文章目录 题目答案高度为2时的B树高度为3时的B树总结 GPT4 对话过程 题目 InnoDB主键索引的Btree在高度分别为 2 和 3 时&#xff0c;可以存储多少条记录&#xff1f; 答案 高度为2时的B树 计算过程&#xff1a; 使用公式 ( n 8 ( n 1 ) 6 16 1024 ) (n \times 8 …...

软件著作书 60页代码轻松搞定!(附exe和代码)

最近做了一个软件&#xff0c;准备去申请软件著作书&#xff0c;看着那60页的文档&#xff0c;确实难搞&#xff0c;不过幸好会用一点点python&#xff0c;就自己用python写了一个读取所有文件代码的程序&#xff0c;使用起来也很简单&#xff0c;过来分享一下 链接&#xff1…...

阿里文档类图像的智能识别,文档分类自定义分类器

阿里云文档类图像智能识别服务为用户提供了强大的文档处理能力&#xff0c;可以将文档图像中的文本内容、表格数据和结构化信息自动识别并提取出来。而自定义分类器则允许用户根据自己的需求&#xff0c;训练出更适合自己场景的文档分类模型。本文将详细介绍阿里云文档类图像智…...

256.【华为OD机试真题】会议室占用时间(区间合并算法-JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目二.解题思路三.题解代码Python题解代码JAVA题解…...

人工智能学习与实训笔记(三):神经网络之目标检测问题

人工智能专栏文章汇总&#xff1a;人工智能学习专栏文章汇总-CSDN博客 目录 三、目标检测问题 3.1 目标检测基础概念 3.1.1 边界框&#xff08;bounding box&#xff09; 3.1.2 锚框&#xff08;Anchor box&#xff09; 3.1.3 交并比 3.2 单阶段目标检测模型YOLOv3 3.2…...

SSM框架,Spring-ioc的学习(下)

拓展&#xff1a;在xml文件中读取外部配置文件 例&#xff1a;若要导入外部配置文件jdbc.properties <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"<http://www.springframework.org/schema/beans>"xmlns:xsi"&l…...

【AIGC】Stable Diffusion的模型微调

为什么要做模型微调 模型微调可以在现有模型的基础上&#xff0c;让AI懂得如何更精确生成/生成特定的风格、概念、角色、姿势、对象。Stable Diffusion 模型的微调方法通常依赖于您要微调的具体任务和数据。 下面是一个通用的微调过程的概述&#xff1a; 准备数据集&#xf…...

VNCTF 2024 Web方向 WP

Checkin 题目描述&#xff1a;Welcome to VNCTF 2024~ long time no see. 开题&#xff0c;是前端小游戏 源码里面发现一个16进制编码字符串 解码后是flag CutePath 题目描述&#xff1a;源自一次现实渗透 开题 当前页面没啥好看的&#xff0c;先爆破密码登录试试。爆破无果…...