rabbitmq消息队列提出的问题(个人想法)

目录

  • 1.消息队列顺序
      • 1.交换机的作用
  • 2.消息队列中为什么有消息缓冲区的存在 如果不存在会怎么样
      • 消息缓冲区的存在原因
      • 不存在消息缓冲区的后果
  • 3.那内存与磁盘之间存在缓冲区有什么作用
      • 一、减少磁盘I/O次数
      • 二、提高数据传输效率
      • 三、减少对CPU的占用
      • 四、增强系统稳定性与可靠性
  • 4.rabbitmq中消费者从队列中得到消息 是从队列中拉取消息嘛
      • 拉取模式(Pull)
      • 推送模式(Push)
      • 归纳
      • 注意
  • 5.在rabbitmq中,为什么消费者消费队列中的消息时,在连接的基础上,为什么先连接交换机再连接具体队列拉取消息,而不是直接从队列中拉取消息
      • 1. 交换机(Exchange)的作用
      • 2. 绑定(Binding)的作用
      • 3. 消费者为何先连接交换机再连接队列
      • 归纳
  • 6.什么是 bindings
      • 1. 定义与组成
      • 2. 作用
      • 3. 工作方式
      • 4. 示例
      • 5. 归纳
  • 7.消费者想消费消息,先找到对应交换机,绑定的路由信息获取对应队列的消息
      • 1. **消费者声明交换机(可选)**:
      • 2. **消费者声明队列**:
      • 3. **消费者绑定队列到交换机**:
      • 4. **消费者订阅队列**:
      • 5. **RabbitMQ推送消息给消费者**:
  • 8. 交换机(Exchange)的作用
      • 路由功能:
      • 解耦:
  • 9.死信队列
      • 死信队列的定义
      • 死信队列来源
      • 作用

1.消息队列顺序

1.交换机的作用

是生产者与消费者的中间人,生产者将产生的消息发送给交换机,交换机设置交换机的类型,路由键,决定了消息流向哪些队列的规则。消费者找到交换机,查询到交换机路由键和队列流向,并不需要知道生产者是谁
是的,交换机(Exchange)在消息队列系统中确实扮演着生产者与消费者之间的中间人角色。交换机负责接收生产者发送的消息,并根据路由规则(Routing Key、Binding Key等)将消息路由到相应的队列中。这样,消费者就可以从队列中拉取消息并进行处理。

交换机的主要作用包括:

  1. 消息路由:交换机根据消息的路由键(Routing Key)和绑定键(Binding Key)之间的匹配关系,将消息路由到与之绑定的一个或多个队列中。这种灵活的路由机制使得消息可以根据不同的业务逻辑和规则被分发到不同的队列,从而实现消息的解耦和异步处理。

  2. 消息过滤:通过定义复杂的路由规则和绑定关系,交换机可以实现对消息的过滤和筛选。只有符合特定条件的消息才会被路由到指定的队列中,从而提高了消息处理的效率和准确性。

  3. 负载均衡:当多个消费者同时订阅同一个队列时,交换机可以将消息均匀地分发到这些消费者中,以实现负载均衡。这有助于提高消息处理的吞吐量和系统的稳定性。

  4. 解耦生产者与消费者:交换机作为生产者和消费者之间的中间层,实现了生产者和消费者之间的解耦。生产者只需要将消息发送到交换机,而不需要关心消息最终会被哪些消费者处理。同样,消费者也只需要从交换机绑定的队列中拉取消息,而不需要知道这些消息是由哪些生产者发送的。这种解耦机制使得系统的各个部分可以独立地进行开发和维护,降低了系统的复杂性和耦合度。

因此,交换机在消息队列系统中扮演着至关重要的角色,它不仅是生产者与消费者之间的中间人,还是实现消息路由、过滤、负载均衡和解耦等关键功能的核心组件。

2.消息队列中为什么有消息缓冲区的存在 如果不存在会怎么样

消息队列中消息缓冲区的存在是为了解决几个关键的问题,这些问题的解决对于消息队列系统的性能和可靠性至关重要。如果不存在消息缓冲区,将会带来一系列的问题和限制。以下是消息缓冲区存在的主要原因以及不存在缓冲区可能带来的后果:

消息缓冲区的存在原因

  1. 解耦生产者与消费者
    消息队列通过缓冲区将消息的生产者(发送者)和消费者(接收者)解耦。生产者只需将消息发送到队列中,而无需等待消费者处理。消费者可以从队列中按需拉取消息,实现异步处理。

  2. 流量削峰
    在生产者产生消息的速度远大于消费者处理速度的情况下,消息缓冲区可以暂时存储这些消息,起到“削峰填谷”的作用,防止系统因过载而崩溃。

  3. 容错性
    当消费者或服务组件出现故障时,消息可以安全地存储在缓冲区中,等待服务恢复后继续处理,从而增强系统的容错能力。

  4. 提高系统扩展性
    通过增加消息缓冲区的容量和消息队列的数量,可以更容易地扩展系统以处理更多的消息和更高的并发量。

不存在消息缓冲区的后果

  1. 系统耦合度增加
    生产者和消费者之间将直接通信,导致系统结构变得复杂且难以维护。一旦任何一方的处理能力出现问题,都会影响整个系统的稳定性。

  2. 无法应对突发流量
    没有缓冲区,系统在面对突发流量时容易过载,导致消息丢失或处理延迟增加,进而影响用户体验和系统性能。

  3. 容错性降低
    任何组件的故障都可能导致消息丢失或处理中断,因为没有缓冲区来暂存和重新路由消息。

  4. 扩展性受限
    没有缓冲区的系统难以通过简单的增加资源来扩展处理能力,因为所有的处理都依赖于直接的生产者-消费者关系。

  5. 单点故障风险增加
    没有缓冲区的系统更容易受到单点故障的影响,因为所有消息的处理都依赖于一个或少数几个关键组件的可用性。

综上所述,消息队列中的消息缓冲区是确保系统高效、可靠和可扩展运行的关键因素之一。通过提供缓冲和异步处理能力,它帮助解决了许多在生产者-消费者模型中常见的挑战。

3.那内存与磁盘之间存在缓冲区有什么作用

内存与磁盘之间存在缓冲区,这一设计在计算机系统中扮演着至关重要的角色。以下是内存与磁盘之间缓冲区的主要作用,结合相关数字和信息进行清晰归纳:

一、减少磁盘I/O次数

  • 核心作用:缓冲区的主要目的是减少磁盘I/O(输入/输出)次数。磁盘I/O操作是计算机系统中相对较慢的部分,而内存访问速度则快得多。通过在内存中设置缓冲区,可以暂存即将写入磁盘或从磁盘读取的数据,从而减少直接对磁盘的访问次数。
  • 数据交换过程:硬盘读数据的过程是将磁信号转化为电信号后,通过缓冲区一次次地填充与清空,再按照PCI总线等外部总线的周期送出。这种机制显著提高了数据传输的效率。

二、提高数据传输效率

  • 速度差异:内存与磁盘之间的数据传输速度存在显著差异。内存访问速度远快于磁盘访问速度。缓冲区作为两者之间的桥梁,可以暂存数据,减少因速度不匹配而导致的等待时间。
  • 暂存功能:当数据在内存和磁盘之间传输时,缓冲区可以暂存这些数据,使得CPU和磁盘可以并行工作,从而提高整体的数据传输效率。

三、减少对CPU的占用

  • 任务分担:通过缓冲区,一些非关键流程或任务的执行可以被暂缓或减少,从而减轻CPU的负载。CPU可以更加专注于执行其他关键任务,提高系统的整体性能。
  • 优化处理流程:当CPU需要访问磁盘中的数据时,可以先检查缓冲区中是否已有所需数据。如果数据已在缓冲区中,CPU可以直接从缓冲区中读取,而无需等待磁盘I/O操作完成,从而节省时间并减少对CPU的占用。

四、增强系统稳定性与可靠性

  • 容错能力:在磁盘或内存出现故障时,缓冲区中的数据可以作为临时备份,防止数据丢失。同时,缓冲区还可以帮助系统在故障恢复后快速恢复数据传输和处理能力。
  • 负载均衡:通过合理设置缓冲区的大小和策略,可以平衡内存与磁盘之间的负载,防止因某一资源过载而导致的系统性能下降或崩溃。

综上所述,内存与磁盘之间存在缓冲区的作用主要体现在减少磁盘I/O次数、提高数据传输效率、减少对CPU的占用以及增强系统稳定性与可靠性等方面。这些作用共同提升了计算机系统的整体性能和用户体验。

4.rabbitmq中消费者从队列中得到消息 是从队列中拉取消息嘛

在RabbitMQ中,消费者从队列中获取消息的方式可以是拉取(Pull)也可以是推送(Push),具体取决于消费者如何配置和与RabbitMQ交互。以下是两种模式的详细解释:

拉取模式(Pull)

  • 工作原理:在拉取模式下,消费者需要主动从RabbitMQ的队列中拉取消息。这通常通过调用RabbitMQ客户端库中的相应方法(如channel.basicGet)来实现。消费者每次调用这个方法时,都可以从队列中拉取一条消息(如果队列中有消息的话)。
  • 特点
    • 灵活性:消费者可以根据自己的需要和控制来决定何时拉取消息,这对于需要精确控制消息处理速度的场景非常有用。
    • 延迟:由于消费者需要主动拉取消息,因此可能会存在网络延迟,这可能会影响到消息的实时性。
    • 单条消息处理:在默认情况下,每次调用拉取方法只能获取一条消息,这有助于控制内存使用和处理能力。

推送模式(Push)

  • 工作原理:在推送模式下,RabbitMQ会主动将队列中的消息推送给消费者。这通常通过消费者订阅队列(如调用channel.basicConsume方法)来实现。一旦消费者订阅了队列,RabbitMQ就会不断地将新到达的消息推送给消费者,直到消费者取消订阅或连接断开。
  • 特点
    • 实时性:由于RabbitMQ会主动推送消息给消费者,因此消费者可以几乎实时地接收到新消息。
    • 缓冲区:消费者需要设置缓冲区来存储从RabbitMQ推送过来的消息,以防止消息丢失或处理不过来。
    • 高吞吐量:推送模式通常比拉取模式具有更高的吞吐量,因为消费者可以持续接收并处理消息,而无需频繁地进行网络请求。

归纳

  • RabbitMQ中的消费者可以从队列中拉取消息,这是通过调用特定的客户端库方法来实现的。
  • 另一种选择是让RabbitMQ主动将消息推送给消费者,这通常通过消费者订阅队列来实现。
  • 拉取模式和推送模式各有优缺点,消费者应根据自己的应用场景和需求来选择合适的模式。

注意

  • 在实际使用中,由于推送模式通常具有更高的实时性和吞吐量,因此它更受青睐。然而,在某些特定场景下(如需要精确控制消息处理速度或资源使用),拉取模式可能更为合适。
  • 无论选择哪种模式,消费者都需要在处理完消息后向RabbitMQ发送确认消息(ACK),以告诉RabbitMQ该消息已被成功处理并从队列中删除。如果消费者没有发送确认消息或连接断开,RabbitMQ可能会将消息重新发送给其他消费者或保留在队列中等待后续处理。

5.在rabbitmq中,为什么消费者消费队列中的消息时,在连接的基础上,为什么先连接交换机再连接具体队列拉取消息,而不是直接从队列中拉取消息

在RabbitMQ中,消费者消费队列中的消息时,并不是直接从队列中拉取消息,而是需要先通过交换机(Exchange)再连接到具体的队列(Queue)来拉取消息。这种设计方式主要基于RabbitMQ的灵活性和解耦特性,以下是详细的原因和解释:

1. 交换机(Exchange)的作用

  • 路由功能:交换机是RabbitMQ中用于接收生产者发送的消息,并根据路由规则将消息路由到一个或多个队列的关键组件。交换机不存储消息,但它定义了消息流向的规则。
  • 解耦:通过交换机,生产者和消费者之间实现了高度的解耦。生产者只需要将消息发送到交换机,而无需关心消息最终会到达哪个队列;同样,消费者也只需要从特定的队列中拉取消息,而无需知道这些消息来自哪个生产者。

2. 绑定(Binding)的作用

  • 关联交换机和队列:绑定是交换机和队列之间的关联规则,它定义了消息如何从交换机路由到队列。一个绑定通常包含一个路由键(Routing Key),该路由键用于匹配交换机和队列之间的关联规则。
  • 灵活性:通过绑定,RabbitMQ允许生产者使用不同的路由键发送消息,而消费者则可以通过订阅不同的路由键来接收他们感兴趣的消息。这种灵活性使得RabbitMQ能够支持多种消息传递模式,如发布/订阅、路由和主题模式。

3. 消费者为何先连接交换机再连接队列

  • 基于路由规则:消费者需要先连接到交换机,并指定他们感兴趣的路由键(或绑定规则),以便交换机能够将相关的消息路由到他们订阅的队列中。这样,消费者就可以从该队列中拉取并处理这些消息了。
  • 解耦和扩展性:通过交换机和绑定的设计,RabbitMQ能够轻松地支持生产者和消费者的扩展。例如,当需要添加新的消费者时,只需将新的消费者连接到交换机并订阅相应的队列即可,而无需修改生产者的代码或配置。
  • 支持多种消息传递模式:如前所述,RabbitMQ支持多种消息传递模式。这些模式大多依赖于交换机和绑定的设计来实现。因此,消费者需要先连接到交换机才能参与这些消息传递模式。

归纳

在RabbitMQ中,消费者消费队列中的消息时之所以需要先连接交换机再连接具体队列拉取消息,主要是因为交换机提供了灵活的路由功能和解耦特性。通过交换机和绑定的设计,RabbitMQ能够支持多种消息传递模式,并允许生产者和消费者之间实现高度的解耦和扩展性。这种设计方式使得RabbitMQ成为分布式系统中广泛使用的消息传递解决方案之一。

6.什么是 bindings

绑定是交换机和队列之间的桥梁关系。也可以这么理解:队列只对它绑定的交换机的消息感兴趣。绑定用参数:routingKey 来表示也可称该参数为 binding key,创建绑定我们用代码:channel.queueBind(queueName, EXCHANGE_NAME, “routingKey”);绑定之后的意义由其交换类型决定。
在RabbitMQ中,Bindings(绑定)是一个核心概念,它定义了交换机(Exchange)和队列(Queue)之间的关联关系。以下是对Bindings的详细解释,包括其组成、作用及工作方式:

1. 定义与组成

  • 定义:Bindings是RabbitMQ中用于将交换机和队列关联起来的配置。它指定了交换机如何将消息路由到哪些队列中。
  • 组成:Bindings由三个主要要素组成:
    • 交换机名称(Exchange Name):指定了消息将被发送到的交换机的名称。
    • 队列名称(Queue Name):指定了消息将被路由到的队列的名称。
    • 绑定键(Binding Key):一个可选的路由关键字,用于匹配消息的路由键(Routing Key)。当消息的路由键与绑定键匹配时,交换机会将消息发送到与之绑定的队列中。

2. 作用

  • 路由消息:Bindings的主要作用是定义交换机如何将接收到的消息路由到不同的队列中。这通过匹配消息的路由键和绑定键来实现。
  • 解耦:通过Bindings,生产者和消费者之间的耦合度大大降低。生产者只需要将消息发送到交换机,而无需关心消息最终会到达哪个队列;同样,消费者也只需要从特定的队列中拉取消息,而无需知道这些消息来自哪个生产者。
  • 灵活性:Bindings支持多种路由模式,如直接(Direct)、主题(Topic)、扇形(Fanout)等,使得RabbitMQ能够灵活地支持不同的消息传递需求。

3. 工作方式

  • 发布消息:生产者将消息发送到交换机时,会指定一个路由键。交换机根据路由键和Bindings的配置,将消息路由到一个或多个队列中。
  • 消费消息:消费者从队列中拉取消息进行处理。由于Bindings的存在,消费者可以专注于从他们感兴趣的队列中拉取消息,而无需关心这些消息是如何被路由到该队列的。

4. 示例

假设有一个名为my_exchange的交换机和一个名为my_queue的队列,它们之间通过绑定键my_key进行绑定。当生产者发送一个路由键为my_key的消息到my_exchange时,该交换机会根据Bindings的配置,将消息路由到my_queue中。然后,消费者可以从my_queue中拉取并处理该消息。

5. 归纳

Bindings是RabbitMQ中用于将交换机和队列关联起来的配置,它定义了交换机如何将消息路由到不同的队列中。通过Bindings,RabbitMQ实现了生产者和消费者之间的解耦,并支持多种灵活的路由模式。这使得RabbitMQ成为分布式系统中广泛使用的消息传递解决方案之一。

7.消费者想消费消息,先找到对应交换机,绑定的路由信息获取对应队列的消息

您指出的确实是一个重要的步骤,我在之前的解释中可能没有完全清晰地阐述这一流程。在RabbitMQ中,消费者想要消费消息,确实需要先找到对应的交换机,并根据交换机绑定的路由信息(通过绑定键与队列的路由键匹配)来获取对应队列中的消息。

以下是更详细的流程:

1. 消费者声明交换机(可选)

虽然消费者通常不需要创建交换机(这通常由生产者或管理员完成),但它们需要知道目标交换机的名称以及与之关联的绑定信息。在某些情况下,消费者可能会声明一个已存在的交换机来确保其存在,但这并不是必须的,因为交换机和队列的声明是幂等的,即多次声明相同名称的交换机或队列不会有副作用。

2. 消费者声明队列

消费者需要声明一个队列来接收消息。在声明队列时,消费者可以指定队列的名称、是否持久化、是否排他等属性。队列的声明也是幂等的,即如果队列已经存在,则声明操作不会有任何影响。

3. 消费者绑定队列到交换机

这是关键步骤,消费者需要将之前声明的队列绑定到目标交换机上,并指定一个或多个绑定键。绑定键用于匹配消息的路由键,以确定哪些消息应该被路由到该队列中。如果消费者之前没有参与过该交换机和队列的绑定过程,它们现在需要执行这一步骤。然而,在大多数情况下,绑定是由管理员或生产者在系统配置阶段完成的,消费者只需要知道这些绑定已经存在即可。

4. 消费者订阅队列

一旦队列被绑定到交换机上,消费者就可以订阅该队列并开始接收消息了。订阅通常是通过调用RabbitMQ客户端库中的相应方法(如channel.basicConsume)来实现的。消费者需要提供一个回调函数来处理接收到的消息,并在处理完毕后发送确认消息(ACK)给RabbitMQ,以告知消息已被成功处理。

5. RabbitMQ推送消息给消费者

当生产者发送消息到交换机时,RabbitMQ会根据绑定信息将消息路由到相应的队列中。然后,RabbitMQ会主动将队列中的消息推送给已订阅该队列的消费者。消费者可以持续接收并处理消息,直到它们取消订阅或连接断开。

需要注意的是,在实际应用中,消费者通常不需要直接“找到”交换机或绑定信息。这些信息通常在系统配置阶段就已经确定,并存储在RabbitMQ的元数据中。消费者只需要知道它们要订阅的队列名称,并调用相应的客户端库方法来订阅该队列即可。RabbitMQ会自动处理消息的路由和推送过程。

8. 交换机(Exchange)的作用

路由功能:

交换机是RabbitMQ中用于接收生产者发送的消息,并根据路由规则将消息路由到一个或多个队列的关键组件。交换机不存储消息,但它定义了消息流向的规则。

解耦:

通过交换机,生产者和消费者之间实现了高度的解耦。生产者只需要将消息发送到交换机,而无需关心消息最终会到达哪个队列;同样,消费者也只需要从特定的队列中拉取消息,而无需知道这些消息来自哪个生产者。

9.死信队列

死信队列的定义

顾名思义就是无法被消费的消息,一般来说,producer 将消息投递到 broker 或者直接到queue 里了,consumer 从 queue 取出消息进行消费,由于特定的原因导致 queue 中的某些消息无法被消费,这样的消息如果没有后续的处理,就变成了死信,有死信自然就有了死信队列

死信队列来源

消息 TTL 过期
队列达到最大长度(队列满了,无法再添加数据到 mq 中) 消息被拒绝(basic.reject 或 basic.nack)并且 requeue=false.

作用

准确地说,它是消息处理失败时的一种容错和恢复机制,用于捕获那些无法正常处理或无法被消费者成功消费的消息。从而增加了消息处理的可靠性和容错性。通过死信队列,开发者可以更好地控制消息的生命周期,确保重要的消息不会因为处理失败而被永久丢弃。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开发笔记:vue3+ts+vant 卡片数据分页,下拉加载,卡片左滑可删除

效果: 实现 使用vantui组件 van-swipe-cell van-card (商品卡片) 核心代码 const currentPage ref(1) const pageSize ref(4) const totalSize ref(10) const loading ref(false) const finished ref(false) const refreshing ref(…

Java 微信小程序自建平台开发票保存到微信卡包

Java 微信小程序自建平台开发票保存到微信卡包 1 获取Access token2 获取自身的开票平台识别码3 设置商户联系方式4 获取授权页ticket5 获取授权页链接6 小程序打开授权页7 收取授权完成事件推送8 创建发票卡券模板9 上传PDF10 将电子发票卡券插入用户卡包 1 获取Access token …

shopify后台设置为中文

shopify官网:https://link.juejin.cn/?targethttps%3A%2F%2Fshopify.dev%2F 1、点击右上角头像 2、选择个人资料 3、找到Language设置 开发者 1、创建开发商店 2、 3、点击左侧导航在线商店,点击右上角查看你的商店。在线商店链接为https://[商店名…

RK3568驱动指南|第十五篇 I2C-第181章使用GPIO模拟I2C驱动

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

阿里云再次突发故障,高可用形同虚设?

作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复, 安装迁移,性能优化、故障…

轻松拯救手机数据,数据恢复软件推荐这8款!

在现代生活中,手机已成为我们不可或缺的工具,承载着大量重要的个人和工作数据。然而,意外删除、系统崩溃、设备损坏等情况可能导致数据丢失,给我们带来极大的困扰。幸运的是,随着科技的发展,各种手机数据恢…

文生图功能介绍

Stable Diffusion WebUI(SD WebUI)及文生图功能介绍 一、引言 随着人工智能技术的飞速发展,AI绘画作为一种新兴的艺术形式,逐渐走入人们的视野。Stable Diffusion WebUI(简称SD WebUI)作为AI绘画领域的重…

[附源码]最新springboot线上电商|前后端分离|界面简洁

一. 前言 今天小编给大家带来了一款可学习,可商用的,线上电商的网站源码,支持二开,无加密。代码的后端是SpringBoot技术栈(非jsp),前端是Angular。如果您需要定制需求请找小编。 文章第六小节…

英灵神殿mac能玩吗 英灵神殿对电脑配置要求《英灵神殿》新手攻略查询 PD虚拟机能玩英灵神殿吗

近年来,随着《英灵神殿》(Valheim)游戏的火热,越来越多的玩家被其独特的北欧神话题材和丰富的生存挑战所吸引。然而,对于Mac用户来说,如何在Mac平台上运行这款游戏可能是一个问题。此外,作为一名…

编译原理3-自底向上的语法分析

自底向上分析 ,就是自左至右扫描输入串,自底向上进 行分析;通过反复查找当前句型的 句柄, 并使 用产生式规则 将找到的句柄归约为相应的非终结符 。逐步进行“ 归约 ”,直到至文法的开始符号; 对于规范推导…

【unity实战】在Unity中使用有限状态机制作一个敌人AI

最终效果 文章目录 最终效果前言有限状态机的主要作用和意义素材下载逻辑图敌人动画配置优雅的代码文件目录状态机代码定义敌人不同状态切换创建敌人效果更多的敌人参考源码完结 前言 有限状态机以前的我嗤之以鼻,现在的我逐帧分析。其实之前我就了解过有限状态机&…

day03-主页模块-修改密码

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.获取用户资料在Vuex中共享登录成功跳转到主页之后,可以获取用户资料,获取的资料在Vuex中共享,这样用户就可以很方便的获取该信…

Leetcode刷题笔记 | 二叉树基本性质 | 一天的题量 | 5道题目 | 深度优先搜索 | 广度优先搜索 | 递归 | 遍历

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 📌本期毛毛张分享的是LeetCode关于二叉树🌲的性质的一些基础题,做这些题目的本质还是遍历二叉树🏃‍➡️的过程&#…

计算机组成原理 | 储存子系统(1)概述

三级储存体系 物理与虚拟存储器 (抽象逻辑模型) 存储器类型 存储器的速度指标

中国民间网络外交组织(CCND)

中国民间网络外交组织Chinese Civil Network Diplomacy简称(CCDN) 是由中国网民建立起来的一个网络外交组织,深度贯彻党的主张和网民意志的统一,为保护中国中华优秀传统文化,民族自信,国家安全,民族利益,社…

昇思MindSpore学习笔记2-04 LLM原理和实践--文本解码原理--以MindNLP为例

摘要: 介绍了昇思MindSpore AI框架采用贪心搜索、集束搜索计算高概率词生成文本的方法、步骤,并为解决重复等问题所作的多种尝试。 这一节完全看不懂,猜测是如何用一定范围的词造句。 一、概念 自回归语言模型 文本序列概率分布 分解为每…

76. UE5 RPG 实现场景阻挡剔除功能

在俯视角游戏中,我们总会碰到一个问题就是,建筑会遮挡住角色的问题。遇到这种问题有多种解决方案,厂商经常使用的一种方案是,如果角色被遮挡,则使用一种纯色或者增加一些菲涅尔的效果来实现 这种效果我之前在unity内实…

SpringBoot 项目整合 MyBatis 框架,附带测试示例

文章目录 一、创建 SpringBoot 项目二、添加 MyBatis 依赖三、项目结构和数据库表结构四、项目代码1、application.yml2、TestController3、TbUser4、TbUserMapper5、TestServiceImpl6、TestService7、TestApplication8、TbUserMapper.xml9、MyBatisTest 五、浏览器测试结果六、…

一文了解什么是车载Tbox

目录 前言一、Tbox是什么呢?二、Tbox架构三、App——TSP——Tbox交互时序图四、汽车混合网关拓扑结构示例五、Tbox功能 前言 强烈建议提前阅读一下这篇文章:车机Tbox介绍 一、Tbox是什么呢? Tbox是汽车上的一个盒子,指的是Telematics BOX&#xff0c…

Michael.W基于Foundry精读Openzeppelin第61期——ERC1967Upgrade.sol

Michael.W基于Foundry精读Openzeppelin第61期——ERC1967Upgrade.sol 0. 版本0.1 ERC1967Upgrade.sol 1. 目标合约2. 代码精读2.1 _getImplementation() internal && _upgradeTo(address newImplementation) internal2.2 _upgradeToAndCall(address newImplementation,…