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

RabbitMQ(补档)

        RabbitMQ 是一个开源的消息队列软件(有时也被称为消息代理),它实现了高级消息队列协议(AMQP)。它主要用于应用程序之间,或者软件组件之间的消息通信。通过使用 RabbitMQ,可以实现异步的、可靠的、可扩展的消息处理机制,这使得它成为构建分布式系统时的一个理想选择。

RabbitMQ 应用场景:

        解耦服务:在微服务架构或分布式系统中,服务之间可以通过消息队列进行通信,从而实现松散耦合。这样做的好处是,即使某些服务出现故障,也不会影响到整个系统的运行。

        异步处理:对于一些不需要立即响应的操作,可以采用异步的方式进行处理。例如,用户注册成功后发送欢迎邮件,这类操作可以放到消息队列中异步执行,从而提高用户体验和系统的吞吐量。

        负载均衡:通过将任务分发给多个消费者,RabbitMQ 可以帮助实现负载均衡,确保没有单个节点过载。这特别适用于需要处理大量请求的场景,如高并发的Web应用。

        批量处理:对于需要批量处理的任务,可以先将任务存储在 RabbitMQ 中,等到积累了一定数量的任务后再统一处理。这种方法可以减少数据库的访问次数,提升性能。


RabbitMQ组件:

        生产者(Producer):发送消息的应用程序。

        消费者(Consumer):接收消息的应用程序。

        队列(Queue):存储消息的地方,生产者将消息发送到队列中,消费者从队列中读取消息。

        交换机(Exchange):负责接收来自生产者的消息,并根据一定的规则将消息路由到相应的队列中。

        绑定(Binding):定义了交换机和队列之间的关系,即交换机如何将消息分发到具体的队列中。


RabbitMQ的工作流程

1.Producer ⽣产了⼀条消息

2.Producer 连接到RabbitMQBroker, 建⽴⼀个连接(Connection),开启⼀个信道(Channel)

3.Producer 声明⼀个交换机(Exchange), 路由消息

4.Producer 声明⼀个队列(Queue), 存放信息

5.Producer 发送消息⾄RabbitMQ Broker

6.RabbitMQ Broker 接收消息, 并存⼊相应的队列(Queue)中, 如果未找到相应的队列, 则根据⽣产者的配置, 选择丢弃或者退回给⽣产者


RabbitMQ 交换机类型

        RabbitMQ 提供了多种类型的交换机(Exchange),每种类型决定了消息如何从生产者路由到一个或多个队列。以下是 RabbitMQ 中主要的交换机类型:

1. 直连交换机(Direct Exchange)
        功能:直连交换机根据消息携带的路由键(Routing Key)和绑定键(Binding Key)是否完全匹配来决定将消息路由到哪个队列。
        使用场景:当需要基于不同条件将消息分发给不同的消费者时非常有用。例如,日志系统中可以根据严重性级别(如 info、warning、error)将消息路由到不同的目的地。

2. 主题交换机(Topic Exchange)
        功能:主题交换机允许使用通配符进行模式匹配路由键来路由消息。其中 * 匹配一个单词,# 匹配零个或多个单词。
        使用场景:适合于复杂的消息路由逻辑,尤其是当需要灵活地路由消息到多个消费者时。比如,路由所有来自美国或者欧洲的订单信息,可以使用类似 *.us.* 或 *.eu.* 的模式。

3. 扇形交换机(Fanout Exchange)
        功能:扇形交换机忽略路由键,直接将消息广播到所有绑定到该交换机的队列上。
        使用场景:当你想向多个消费者同时发送相同的消息时非常适合。例如,实时更新或广播通知系统。

4. 头信息交换机(Headers Exchange)
        功能:头信息交换机允许你匹配消息头部属性而不是路由键来进行消息路由。它提供了更大的灵活性,因为可以设置复杂的匹配规则,包括AND和OR操作。
        使用场景:适用于需要更复杂过滤条件的消息路由,特别是在需要考虑多于一个参数的情况下。

5. 默认交换机
        虽然严格意义上不被视为一种独立类型,但 RabbitMQ 提供了一个默认的无名交换机(也称为“匿名”交换机)。当你在声明队列时没有指定交换机,消息会通过这个默认交换机直接路由到指定名称的队列。这实际上是一个直连交换机,它的特殊之处在于它是隐式的,且每个队列都自动绑定到它,路由键就是队列的名字。


RabbitMQ使用

1.安装RabbitMQ:RabbitMQ: One broker to queue them all | RabbitMQ
1.引入依赖
        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>
2.配置文件(生产者和消费者服务都要配置)
server:port: 9301
spring:application:name: test-servicerabbitmq:host: 127.0.0.1port: 5672username: guestpassword: guest
3.配置交换机以及绑定队列

        在 RabbitMQConfig 中,我们通过 @Bean 方法定义并返回交换机(Exchange)、队列(Queue)以及绑定(Binding)。这些配置会被 Spring 自动注册到 RabbitMQ 中。

  • 交换机名:在配置中定义的交换机名(return new XxxExchange("交换机名"))会被 Spring 注册到 RabbitMQ 中,决定了消息指定发送到配置的哪一个交换机上。
  • 队列名:队列名(如 direct.queue、topic.queue 等)也会被注册到 RabbitMQ 中,在后续消费监听中被用于指定监听的队列。
  • 绑定:通过 BindingBuilder 将队列绑定到交换机,并指定路由键(Routing Key)或匹配规则。

        这些配置的目的是在 RabbitMQ 中创建好交换机和队列,并建立它们之间的关系。

@Configuration
public class RabbitMQConfigure {// Direct Exchange@Beanpublic DirectExchange directExchange() {return new DirectExchange("direct.exchange");}@Beanpublic Queue directQueue() {return new Queue("direct.queue");}@Beanpublic Binding directBinding() {return BindingBuilder.bind(directQueue()).to(directExchange()).with("direct.routingKey");}// Topic Exchange@Beanpublic TopicExchange topicExchange() {return new TopicExchange("topic.exchange");}@Beanpublic Queue topicQueue() {return new Queue("topic.queue");}@Beanpublic Binding topicBinding() {return BindingBuilder.bind(topicQueue()).to(topicExchange()).with("topic.*");}// Fanout Exchange@Beanpublic FanoutExchange fanoutExchange() {return new FanoutExchange("fanout.exchange");}@Beanpublic Queue fanoutQueue1() {return new Queue("fanout.queue1");}@Beanpublic Queue fanoutQueue2() {return new Queue("fanout.queue2");}@Beanpublic Binding fanoutBinding1() {return BindingBuilder.bind(fanoutQueue1()).to(fanoutExchange());}@Beanpublic Binding fanoutBinding2() {return BindingBuilder.bind(fanoutQueue2()).to(fanoutExchange());}// Headers Exchange@Beanpublic HeadersExchange headersExchange() {return new HeadersExchange("headers.exchange");}@Beanpublic Queue headersQueue() {return new Queue("headers.queue");}@Beanpublic Binding headersBinding() {return BindingBuilder.bind(headersQueue()).to(headersExchange()).where("headerKey").matches("headerValue");}
}
4.发送消息

        在发送消息时,我们使用 RabbitTemplate 的 convertAndSend 方法,并通过第一个参数指定交换机的名称。

public void convertAndSend(String exchange, String routingKey, Object object)

  • exchange: 指定消息发送到的交换机名称。
  • routingKey: 指定消息的路由键,用于决定消息如何路由到队列。
  • message: 要发送的消息内容。

        发送消息时,交换机的名称必须与配置中定义的交换机名一致。

        路由键的使用方式取决于交换机的类型(如 Direct、Topic、Fanout 等),FanoutExchange不注重路由键,不用设置。而TopicExchange和DirectExchange的区别在于路由键支持模糊匹配,而DirectExchange是直接指定路由键。

@Service
public class MessageSender {@Autowiredprivate RabbitTemplate rabbitTemplate;public void sendDirectMessage(String message) {rabbitTemplate.convertAndSend("direct.exchange", "direct.routingKey", message);}public void sendTopicMessage(String message) {rabbitTemplate.convertAndSend("topic.exchange", "topic.routingKey", message);}public void sendFanoutMessage(String message) {rabbitTemplate.convertAndSend("fanout.exchange", "", message);}public void sendHeadersMessage(String message) {MessageProperties properties = new MessageProperties();properties.setHeader("headerKey", "headerValue");Message msg = new Message(message.getBytes(), properties);rabbitTemplate.convertAndSend("headers.exchange", "", msg);}
}
5.接收消息

        @RabbitListener(queues = "队列名")

        我们使用 @RabbitListener 注解,指定队列名来监听队列收到的消息,而不是交换机,当消息被路由到该队列时,监听方法会自动触发并处理消息。

@Service
public class MessageReceiver {@RabbitListener(queues = "direct.queue")public void receiveDirectMessage(String message) {System.out.println("Received direct message: " + message);}@RabbitListener(queues = "topic.queue")public void receiveTopicMessage(String message) {System.out.println("Received topic message: " + message);}@RabbitListener(queues = "fanout.queue1")public void receiveFanoutMessage1(String message) {System.out.println("Received fanout message 1: " + message);}@RabbitListener(queues = "fanout.queue2")public void receiveFanoutMessage2(String message) {System.out.println("Received fanout message 2: " + message);}@RabbitListener(queues = "headers.queue")public void receiveHeadersMessage(String message) {System.out.println("Received headers message: " + message);}
}

6.使用流程总结

        Config 配置:定义交换机、队列和绑定关系,这些配置会被注册到 RabbitMQ 中。

        发送消息:通过 RabbitTemplate 指定交换机名称和路由键,将消息发送到交换机。

        监听消息:通过 @RabbitListener 监听队列。

相关文章:

RabbitMQ(补档)

RabbitMQ 是一个开源的消息队列软件&#xff08;有时也被称为消息代理&#xff09;&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;。它主要用于应用程序之间&#xff0c;或者软件组件之间的消息通信。通过使用 RabbitMQ&#xff0c;可以实现异步的、可靠的…...

仿“东方甄选”直播商城小程序运营平台

在公域直播流量红利趋于饱和、流量成本大幅攀升的当下&#xff0c;私域直播为企业开辟了新的流量聚集和转化渠道&#xff0c;特别是对于那些希望在私域流量领域取得突破的品牌商家来说&#xff0c;直播场景以其独特的高频互动氛围&#xff0c;相比其他运营方式&#xff0c;展现…...

增量数据同步怎么做

增量数据同步怎么做&#xff1f;比如A系统里有母猪数据&#xff0c;新增了一头母猪&#xff0c;这条母猪数据要低延迟地同步到B系统。而不是A系统全表扫描一遍&#xff0c;然后全部同步到B系统。这种全扫描同步方法延迟非常大&#xff0c;尤其涉及到母猪大数据时&#xff0c;会…...

LeetCode 解题思路 18(Hot 100)

解题思路&#xff1a; 继承 LinkedHashMap&#xff1a; 内置双向链表&#xff0c;自动维护节点的插入顺序和访问顺序。LRU 淘汰逻辑&#xff1a; 覆盖 removeEldestEntry&#xff0c;当元素数量超过 capacity 时&#xff0c;移除最旧条目。removeEldestEntry 方法提供钩子&…...

基于Spring Boot的民宿租赁系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

Go红队开发—web网络编程

文章目录 web网络编程Req快速请求 调试DevModeDebugLogTraceInfo瓶颈分析 控制请求与响应控制请求的字段内容控制调试打印的内容分开dump请求与响应部分请求体设置 作用范围级别设置参数查询URL 路径参数表单请求设置请求头设置 判断响应状态码解析数据SetSuccessResultgjson响…...

ollama不安装到c盘,安装到其他盘

ollama 安装包默认安装到c盘&#xff0c;安装程序并没有提供选择文件夹安装功能&#xff0c;本来c盘就快满了&#xff0c;下几个模型c盘都快爆了&#xff0c;如何将ollma安装到其他盘呢&#xff1f; ollama 默认安装位置 C:\Users\Admin\.ollama 是 Ollama 用来放大模型的文件夹…...

【HTML】一、基础标签

文章目录 1、开发环境准备2、html介绍3、html基本骨架4、标签的关系5、常用标签5.1 标题5.2 段落5.3 换行与水平线5.4 文本格式化标签5.5 图像标签5.6 超链接标签5.7 音频标签5.8 视频标签 6、路径7、网页制作 1、开发环境准备 在编辑器中写代码&#xff0c;在浏览器中看效果 …...

NPU、边缘计算与算力都是什么啊?

考虑到灵活性和经济性&#xff0c;公司购置一台边缘计算机&#xff0c;正在尝试将PCGPU的计算机视觉项目转到边缘计算机NPU上。本文简单整理了三个概念&#xff0c;并试图将其做个概要的说明。 一、算力&#xff1a;数字世界的“基础能源” 1.1 算力是什么 **算力&#xff08…...

spring声明式事务原理01-调用第1层@Transactional方法(事务访问入口)

文章目录 【README】【步骤1】UserAppService调用userSupport.saveNewUser()【步骤2】获取到TransactionInterceptor【步骤3】chain不为空&#xff0c;接着执行CglibMethodInvocation#proceed方法【补充】AopContext作用 【步骤4】CglibMethodInvocation#proceed方法【步骤5】调…...

[MoeCTF 2021]babyRCE

打开题目在线环境可以看到&#xff1a; <?php$rce $_GET[rce]; if (isset($rce)) {if (!preg_match("/cat|more|less|head|tac|tail|nl|od|vi|vim|sort|flag| |\;|[0-9]|\*|\|\%|\>|\<|\|\"/i", $rce)) {system($rce);}else {echo "hhhhhhacke…...

【leetcode hot 100 114】二叉树展开为链表

解法一&#xff1a;执行一次先序遍历&#xff0c;把元素放入list中&#xff0c;然后放回root中 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { th…...

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

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

基于Python的selenium入门超详细教程(第1章)--WebDriver API篇

学习路线 自动化测试介绍及学习路线-CSDN博客 ​自动化测试之Web自动化&#xff08;基于pythonselenium&#xff09;-CSDN博客 参照博文&#xff1a;selenium入门超详细教程——网页自动化操作-CSDN博客 目录 前言 一、WebDriver API介绍 1.1 什么是WebDriver? 1.2 工…...

IIC通信协议详解与STM32实战指南

IIC通信协议详解与STM32实战指南 引言 IIC&#xff08;Inter-Integrated Circuit&#xff09;是Philips公司开发的串行通信协议&#xff0c;广泛应用于传感器、EEPROM、RTC等低速外设的连接。本文深入解析IIC协议原理&#xff0c;并提供基于STM32的GPIO模拟实现方案&#xff…...

【算法】数组、链表、栈、队列、树

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 持续更新中...数组、链表点击消除环形链表环形链表 II 栈、队列树 持续更新中… 数组、链表 点击消除 AB5 点击消除 这个题很容…...

vscode 配置golang开发环境

vscode 配置golang开发环境 在go1.20环境中需要指定工具的安装版本 go install golang.org/x/tools/goplsv0.15.3 go install github.com/go-delve/delve/cmd/dlvv1.21.0使用go Install/Update tool安装工具会报错 go版本太低, 而很多时候为了项目稳定或风险太高, 我们不太希…...

uniapp APP使用web-view内嵌 h5 解决打包发版浏览器有缓存需要清除的问题

1.在当前项目根节点下的public目录下的index.html里面写入禁止缓存的 meta <!-- 解决前端发版缓存问题 start --><meta http-equiv"pragma" content"no-cache"><meta http-equiv"cache-control" content"no-cache, no-stor…...

机器学习与深度学习中模型训练时常用的四种正则化技术L1,L2,L21,ElasticNet

L1正则化和L2正则化是机器学习中常用的两种正则化方法&#xff0c;用于防止模型过拟合。它们的区别主要体现在数学形式、作用机制和应用效果上。以下是详细对比&#xff1a; 1. 数学定义 L1正则化&#xff08;也叫Lasso正则化&#xff09;&#xff1a; 在损失函数中加入权重参…...

LLM自动化评测

使用的数据集&#xff1a;ceval-exam import requests from datasets import load_dataset, concatenate_datasets import re from tqdm import tqdm import re, time, tiktoken, ollama from ollama import ChatResponse from ollama import Optionsdef llm(model, query, te…...

Android 英文文章选词

点击文章中的一个单词&#xff0c;获取它。 通过点击的坐标y来获取行数&#xff0c;通过x坐标获取字符偏移量&#xff0c;向前遍历匹配&#xff0c;向后遍历匹配&#xff0c;匹配不成功则跳出循环。截取开始位置和最后位置的字符串。 主要代码 public String getSelectText…...

56.HarmonyOS NEXT 登录模块开发教程(十):总结与展望

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT 登录模块开发教程&#xff08;十&#xff09;&#xff1a;总结与展望 文章目录 HarmonyOS NEXT 登录模块开发教程&#xff08;十&a…...

【Go每日一练】猜数字游戏

&#x1f47b;创作者&#xff1a;丶重明 &#x1f47b;创作时间&#xff1a;2025年3月16日 &#x1f47b;擅长领域&#xff1a;运维 目录 1.&#x1f636;‍&#x1f32b;️题目&#xff1a;猜数字游戏2.&#x1f636;‍&#x1f32b;️代码开发3.&#x1f636;‍&#x1f32b;…...

论文分享:PL-ALF框架实现无人机低纹理环境自主飞行

在室内仓库、地下隧道等低纹理复杂场景中&#xff0c;无人机依赖视觉传感器进行自主飞行时&#xff0c;往往会遇到定位精度低、路径规划不稳定等难题。针对这一问题&#xff0c;重庆邮电大学计算机学院雷大江教授团队在IEEE Trans期刊上提出了一种新型自主飞行框架&#xff1a;…...

element-plus中Autocomplete自动补全输入框组件的使用

目录 1.基本使用 ①从官网复制如下代码 ②查看运行效果 ③代码解读 2.调用后端接口&#xff0c;动态获取建议数据 结语 1.基本使用 ①从官网复制如下代码 <template> <div><!-- 自动补全输入框 --><el-autocompletev-model"state":fetc…...

【医学影像 AI】大型语言模型生成 ROP 患者信息材料的能力

【医学影像 AI】大型语言模型生成 ROP 患者信息材料的能力 0. 论文简介0.1 基本信息0.2 摘要 1. 引言2. 材料与方法2.1 大语言模型的使用2.2 可读性标准2.3 统计分析 3. 结果3.1 Bezirci-Yılmaz可读性评分3.2 Ateşman可读性评分3.3 全面性评分3.4 准确性评分 4. 讨论4.1 可读…...

(性能测试)性能测试工具 2.jmeter的环境搭建 3jmeter元件和4使用实例 5jmeter元件和参数化

目录 性能测试工具 性能测试工具 jemeter环境搭建 jmeter的常用目录介绍 jmeter修改语言和主题--jmeter界面的汉化 jmeter元件 jmeter元件和组件的介绍 jmeter的作用域原则 jmeter的执行顺序 案例&#xff1a;执行顺序 jmeter使用案例 jmeter线程组的介绍 jmeter…...

Matlab 四分之一车体车辆半主动悬架鲁棒控制

1、内容简介 略 Matlab 173-四分之一车体车辆半主动悬架鲁棒控制 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...

Kafka可视化工具KafkaTool工具的使用

Kafka Tool工具 介绍 使用Kafka的小伙伴&#xff0c;有没有为无法直观地查看 Kafka 的 Topic 里的内容而发过愁呢&#xff1f;下面推荐给大家一款带有可视化页面的Kafka工具&#xff1a;Kafka Tool &#xff08;目前最新版本是 3.0.2&#xff09; 注意&#xff1a;以前叫Kafk…...

【Unity】在项目中使用VisualScripting

1. 在packagemanager添加插件 2. 在设置中进行初始化。 Edit > Project Settings > Visual Scripting Initialize Visual Scripting You must select Initialize Visual Scripting the first time you use Visual Scripting in a project. Initialize Visual Scripting …...

【Maven教程与实战案例】

文章目录 前言一、Maven是什么&#xff1f;二、Maven的安装与配置1. 安装前置条件2. 下载与配置 Maven3. 验证安装 三、Maven的核心概念1. POM.xml 文件2. 构建生命周期与插件机制 四、实战项目示例1. 项目目录结构2. 编写代码App.javaAppTest.java 3. 构建项目4. 运行项目 前言…...

Flask中使用with语句手动加载应用上下文

在 Flask 中&#xff0c;with app.app_context(): 手动加载应用上下文&#xff0c;使代码块可以访问 Flask 全局对象&#xff08;如 current_app、g&#xff09;&#xff0c;即使代码不在请求中运行。 1. 为什么需要手动加载应用上下文&#xff1f; 在 Flask 中&#xff0c;某…...

ROS实践(五)机器人自动导航(robot_navigation)

目录 一、知识点 1. 定位 2. 路径规划 (1)全局路径规划 (2)局部路径规划 3. 避障 二、常用工具和传感器 三、相关功能包 1. move_base(决策规划) 2. amcl(定位) 3. costmap_2d(代价地图) 4. global_planner(全局规划器) 5. local_planner(局部规划器…...

【数学建模】层次分析法(AHP)详解及其应用

层次分析法(AHP)详解及其应用 引言 在现实生活和工作中&#xff0c;我们经常面临复杂的决策问题&#xff0c;这些问题通常涉及多个评价准则&#xff0c;且各准则之间可能存在相互影响。如何在这些复杂因素中做出合理的决策&#xff1f;层次分析法(Analytic Hierarchy Process…...

【大模型】Transformer、GPT1、GPT2、GPT3、BERT 的论文解析

前言 在自然语言处理&#xff08;NLP&#xff09;和深度学习的快速发展中&#xff0c;Transformer模型和 GPT系列模型扮演了至关重要的角色。本篇博客旨在对这些开创性的论文进行介绍&#xff0c;涵盖它们的提出时间、网络结构等关键信息&#xff0c;能够快速的理解这些模型的设…...

Android 手机启动过程

梳理 为了梳理思路&#xff0c;笔者画了一幅关于 Android 手机启动的过程图片内容纯属个人见解&#xff0c;如有错误&#xff0c;欢迎各位指正...

【redis】hash基本命令和内部编码

文章目录 表示形式命令HSET 和 HGET HEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSETNXHINCRBYHINCRBYFLOAT命令小结内部编码 表示形式 Redis 自身已经是键值对结构了 Redis 自身的键值对就是通过哈希的方式来组织的 把 key 这一层组织完成之后&#xff0c;到了 value 这一层&…...

统计数字字符个数(信息学奥赛一本通-1129)

【题目描述】 输入一行字符&#xff0c;统计出其中数字字符的个数。 【输入】 一行字符串&#xff0c;总长度不超过255。 【输出】 输出为1行&#xff0c;输出字符串里面数字字符的个数。 【输入样例】 Peking University is set up at 1898. 【输出样例】 4 【输出样例】 #in…...

基于javaweb的SSM+Maven网上选课管理系统设计与实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

算法及数据结构系列 - BFS算法

文章目录 框架思路经典题型111. 二叉树的最小深度752. 打开转盘锁 框架思路 BFS 的核心思想应该不难理解的&#xff0c;就是把一些问题抽象成图&#xff0c;从一个点开始&#xff0c;向四周开始扩散。一般来说&#xff0c;我们写 BFS 算法都是用队列这种数据结构&#xff0c;每…...

深入剖析 MetaSpace OOM 问题:根因分析与高效解决策略

目录 一、MetaSpace 区 OOM&#xff1a;概述 &#xff08;一&#xff09; MetaSpace的变革与挑战 &#xff08;二&#xff09;MetaSpace OOM的影响 &#xff08;三&#xff09; 为什么要关注MetaSpace OOM 二、MetaSpace 区 OOM的根本原因 &#xff08;一&#xff09;Met…...

java自带日志系统介绍(JUL)以及和Log4j 2、Logback、SLF4J不同日志工具的对比

Java 日志系统是开发中用于记录应用程序运行时信息的重要工具。以下是 Java 日志系统的核心组件及其使用场景、配置参数的详细介绍&#xff0c;以及不同日志系统的对比分析。 Java 日志系统核心组件 1. 日志记录器&#xff08;Logger&#xff09; 作用&#xff1a;负责生成日…...

Kubernetes 中metrics-server的采集周期,采集链路是什么样的?

0. 运维干货分享 软考高级系统架构设计师备考学习资料软考高级网络规划设计师备考学习资料Kubernetes CKA认证学习资料分享信息安全管理体系&#xff08;ISMS&#xff09;制度模板分享免费文档翻译工具(支持word、pdf、ppt、excel)PuTTY中文版安装包MobaXterm中文版安装包ping…...

一分钟了解深度学习

一分钟了解深度学习 A Minute to Know About Deep Learning By JacksonML 1. 什么是深度学习&#xff1f; 深度学习(Deep Learning) 是机器学习的一个子集&#xff0c;都属于人工智能的范畴&#xff1b;它使用多层神经网络&#xff08;称为深度神经网络&#xff09;来模拟人…...

Git LFS (Large File Storage) 简介

目录 Git LFS (Large File Storage) 简介 1. 什么是 Git LFS&#xff1f; 2. 为什么需要 Git LFS&#xff1f; 3. Git LFS 的工作原理 4. 如何使用 Git LFS&#xff1f; 4.1 安装 Git LFS 4.2 配置 Git LFS 5. Git LFS 的优缺点 优点 缺点 6. 适用场景 7. 结论 1. …...

前端权限系统

前端权限系统是为了确保用户只能访问他们有权限查看的资源而设计的。在现代前端开发中&#xff0c;权限控制不仅仅是简单的显示或隐藏元素&#xff0c;还涉及到对路由、组件、数据和操作权限的细致控制。下面是前端权限系统的常见设计方案和实现步骤。 前端权限系统的组成部分 …...

【蓝桥杯速成】| 4.递归

递归 题目一&#xff1a;最大公约数 问题描述 1979. 找出数组的最大公约数 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums &#xff0c;返回数组中最大数和最小数的 最大公约数 。 两个数的 最大公约数 是能够被两个数整除的最大正整数。 解题步骤 需要…...

QEMU源码全解析 —— 块设备虚拟化(4)

接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(3) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 类模板是创建类的模式_创建类是的模版-CSDN博客<...

92.HarmonyOS NEXT开发学习路径与最佳实践总结:构建高质量应用

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; HarmonyOS NEXT开发学习路径与最佳实践总结&#xff1a;构建高质量应用 文章目录 HarmonyOS NEXT开发学习路径与最佳实践总结&#xff1a;构建高质…...

【004】deepseek本地化部署后,python的调用方式_#py

python调用本地deepseek 1 本地化部署deepseek2 python调用方式 1 本地化部署deepseek 已经有很多大佬们说了不少部署本地化部署deepseek的工作了&#xff0c;我就不过多重复了。 先安装Ollama软件&#xff0c;再通过Ollama获取deepseek的模型文件&#xff0c;大家根据电脑的配…...