rabbitMq举例
新来个技术总监,把 RabbitMQ 讲的那叫一个透彻,佩服!
生产者
代码举例
public String sendMsg(final String exchangeName,final String routingKey,final String msg) {}
/*** 发送消息* @param exchangeName exchangeName* @param routingKey routingKey* @param msg mq message* @return msgId*/public String sendMsg(final String exchangeName,final String routingKey,final String msg) {final CorrelationData correlationDataInfo = new CorrelationData();final String msgId = String.join(":", "yl:dps", exchangeName, routingKey,String.valueOf(IdUtil.getSnowflake(1, 3).nextId()));correlationDataInfo.setId(msgId);//send over callback lograbbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {if(correlationData!=null) {final String id = correlationData.getId();if (ack) {log.info("消息投递成功,消息Id[{}]【{}】", id, JSON.toJSONString(correlationData));} else {log.error("消息投递失败,消息Id[{}] [{}]", id, cause);}}else {log.error("消息投递失败,correlationData为null!");}});rabbitTemplate.convertAndSend(exchangeName, routingKey, msg, correlationDataInfo);
分析代码
这段代码的功能是向 RabbitMQ 发送消息,并且在发送消息后通过回调函数来确认消息的投递状态。下面是对代码的详细分析:
1. 方法签名
java
public String sendMsg(final String exchangeName, final String routingKey, final String msg)
- 该方法接收三个参数:
exchangeName
:消息发送的交换机名称。routingKey
:消息的路由键,用来确定消息将被路由到哪个队列。msg
:待发送的消息内容。
2. CorrelationData 创建与消息 ID 设置
java
final CorrelationData correlationDataInfo = new CorrelationData(); final String msgId = String.join(":", "yl:dps", exchangeName, routingKey, String.valueOf(IdUtil.getSnowflake(1, 3).nextId())); correlationDataInfo.setId(msgId);
CorrelationData
:RabbitMQ 提供的一个类,用于设置和传递消息的相关信息,主要用来在消息确认回调中标识消息。- 生成
msgId
:msgId
是通过拼接一个前缀"yl:dps"
、交换机名exchangeName
、路由键routingKey
,以及通过IdUtil.getSnowflake(1, 3).nextId()
生成的雪花算法(Snowflake)ID来创建的唯一标识符。这个 ID 用来唯一标识这条消息。 setId(msgId)
:将生成的msgId
设置到correlationDataInfo
对象中。
3. 设置回调函数
java
rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> { if(correlationData != null) { final String id = correlationData.getId(); if (ack) { log.info("消息投递成功,消息Id[{}]【{}】", id, JSON.toJSONString(correlationData)); } else { log.error("消息投递失败,消息Id[{}] [{}]", id, cause); } } else { log.error("消息投递失败,correlationData为null!"); } });
setConfirmCallback
:通过rabbitTemplate.setConfirmCallback()
方法设置消息确认回调函数。在消息发送之后,RabbitMQ 会调用该回调函数来通知消息是否成功投递到交换机。- 参数说明:
correlationData
:携带消息相关信息的对象(这里是correlationDataInfo
),包含了消息的 ID 等。ack
:布尔值,表示消息是否成功投递(true
表示成功,false
表示失败)。cause
:如果ack
为false
,cause
会包含失败的原因。
- 回调内容:
- 如果
correlationData
不为空:- 如果
ack
为true
,则表示消息投递成功,记录日志。 - 如果
ack
为false
,则表示消息投递失败,记录失败日志,并包含失败原因。
- 如果
- 如果
correlationData
为null
,记录错误日志。
- 如果
4. 发送消息
java
rabbitTemplate.convertAndSend(exchangeName, routingKey, msg, correlationDataInfo);
convertAndSend
:该方法用于将消息发送到指定的交换机(exchangeName
)、路由键(routingKey
)和消息内容(msg
)。同时,将correlationDataInfo
(包含msgId
)附带发送,以便在回调中进行确认和记录。rabbitTemplate
是RabbitTemplate
对象,用来发送和接收消息。它是 Spring AMQP 的核心组件,封装了与 RabbitMQ 的交互。
5. 返回消息 ID
return msgId;
- 返回生成的消息 ID。这个 ID 可以在外部被用于追踪消息投递的状态。
总结:
这段代码的主要作用是:
- 生成一个唯一的消息 ID,包含了交换机名、路由键和通过 Snowflake 算法生成的 ID。
- 设置消息确认回调,当消息发送后,RabbitMQ 会通过回调通知消息是否成功投递。
- 调用
rabbitTemplate.convertAndSend()
方法向指定的交换机发送消息,同时附带CorrelationData
(包含消息 ID)。 - 返回生成的消息 ID,以便后续追踪或处理。
关键点:
- 消息确认机制:使用
ConfirmCallback
确保消息是否成功投递,并且通过日志记录投递状态。 - 消息 ID:通过 Snowflake 算法生成一个唯一的消息 ID,可以用于追踪和日志记录。
- 回调机制:确保生产者能在消息投递过程中获得详细的确认信息。
消费者
代码举例
@RabbitHandler@RabbitListener(bindings = @QueueBinding(value = @Queue(value = "${rabbitmq.yl.x.queue}", durable = "true"),exchange = @Exchange(value = "${rabbitmq.yl.x.exchange}"),key = "${rabbitmq.yl.x.routing.key}"))public void stateChange(@Payload String payload, @Headers Map<String, Object> headers, Channel channel) throws IOException {log.info("MQ-收到【x】状态变更消息:{} ", payload);final String objDeliveryTag = String.valueOf(headers.get(AmqpHeaders.DELIVERY_TAG));if (NumberUtil.isNumber(objDeliveryTag)) {final long deliveryTag= Long.parseLong(objDeliveryTag);log.info("MQ-收到【x】MQ消息进行消费【执行ack】[{}]", deliveryTag);channel.basicAck(deliveryTag,true);}if(CharSequenceUtil.isNotBlank(payload)) {}}
在这个 Java 方法 leaseStateChange
中,通常是在使用 Spring AMQP 框架与 RabbitMQ 集成时出现的消费消息的处理方法。下面逐个解析这个方法中的各个部分:
方法签名解析
public void leaseStateChange(@Payload String payload, @Headers Map<String, Object> headers, Channel channel) throws IOException
1. public void leaseStateChange
public
: 表明这个方法是公开的,可以被外部调用。void
: 表明这个方法没有返回值。leaseStateChange
: 这是方法的名称。可以推测这个方法是用来处理与“租赁状态变化”相关的消息的。
2. @Payload String payload
-
@Payload
: 这是 Spring AMQP 框架中的一个注解,用于将消息体的内容绑定到方法参数中。在这个例子中,payload
是一个String
类型的参数,代表从 RabbitMQ 队列中接收到的消息内容。通常,这个消息体是通过 JSON 或其他格式的字符串传递的。-
注解的作用:
@Payload
使得 Spring 能够自动将消息的主体部分注入到方法参数payload
中。比如,如果消息体是一个 JSON 格式的字符串,Spring 会将其直接赋值给payload
参数。 -
示例: 假设接收到的消息体是
"{"state": "active", "leaseId": "12345"}"
,payload
将会是该字符串。
-
3. @Headers Map<String, Object> headers
-
@Headers
: 这是另一个 Spring AMQP 注解,用来将消息的头部信息注入到方法参数中。RabbitMQ 消息不仅有消息体(payload),还可能包含一些头信息(比如消息的发送时间、路由信息等)。-
注解的作用:
@Headers
会将消息头部的内容绑定到headers
参数,这个参数是一个Map<String, Object>
类型,其中键是头部的名称,值是相应的值。头部信息常常用于传递一些附加信息(例如消息的优先级、发送者标识等)。 -
示例: 如果消息头包含如下信息:
{"correlationId": "abc123", "messageType": "leaseUpdate"}
那么
headers
将会是一个Map
,其内容是:{"correlationId": "abc123", "messageType": "leaseUpdate"}
-
4. Channel channel
-
Channel
: 这是 RabbitMQ 的核心概念之一。Channel
代表一个与 RabbitMQ 服务的连接通道,允许你在该通道上进行消息的消费、确认等操作。-
作用: 在 Spring AMQP 中,
Channel
通常用来进行消息的确认(acknowledge)操作,或者处理消息处理失败时的重新排队等任务。你可以使用Channel
来手动确认消息,或者控制消息是否成功消费。 -
示例: 如果在消息处理过程中出现异常,消费者可能需要通过
channel.basicNack()
方法来拒绝该消息并可能重新入队。
-
5. throws IOException
throws IOException
: 表明这个方法可能会抛出IOException
异常。RabbitMQ 的消息操作可能会遇到 I/O 错误,因此需要在方法签名中声明可能抛出此异常。通常,这类异常会发生在与 RabbitMQ 的连接中断、消息传输过程失败时等。
Spring AMQP 消费者代码示例
假设这是一个处理来自某个队列的消息的方法,下面是该方法的使用场景和完整代码示例:
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.listener.MessageListener;
import org.springframework.stereotype.Component;
import com.rabbitmq.client.Channel;import org.springframework.messaging.handler.annotation.Headers;
import org.springframework.messaging.handler.annotation.Payload;import java.io.IOException;
import java.util.Map;@Component
public class LeaseStateChangeListener {// 监听指定队列的消息@RabbitListener(queues = "leaseStateQueue")public void leaseStateChange(@Payload String payload, @Headers Map<String, Object> headers, Channel channel) throws IOException {try {// 处理消息体System.out.println("Received message: " + payload);// 获取消息头部信息String correlationId = (String) headers.get("correlationId");String messageType = (String) headers.get("messageType");System.out.println("CorrelationId: " + correlationId + ", MessageType: " + messageType);// 模拟处理业务逻辑processLeaseStateChange(payload);// 确认消息已成功消费channel.basicAck(headers.hashCode(), false); // 手动确认消息} catch (Exception e) {// 异常处理,拒绝消息并重新入队System.err.println("Error processing message: " + e.getMessage());channel.basicNack(headers.hashCode(), false, true); // 拒绝并重新入队}}private void processLeaseStateChange(String payload) {// 假设这里是处理租赁状态更新的业务逻辑// 比如将消息解析为对象,进行租赁状态更新System.out.println("Processing lease state change for payload: " + payload);}
}
解析
-
@RabbitListener: 注解的作用是声明这个方法是一个 RabbitMQ 消息的消费者,并且该方法监听
leaseStateQueue
队列。当有消息到达这个队列时,这个方法会被调用。 -
消息体 (
payload
): 这个方法会接收到一个消息体,@Payload
注解将该消息的内容(通常是 JSON 格式的字符串)自动绑定到方法参数payload
上。 -
消息头 (
headers
): 使用@Headers
注解将消息的头部信息绑定到headers
参数上,Map<String, Object>
类型。你可以从中获取如correlationId
和messageType
等附加信息。 -
Channel: 这个参数用于消息的确认、拒绝等操作。在成功处理完消息后,调用
channel.basicAck()
来确认消息,表示该消息已经被成功消费。如果处理失败,调用channel.basicNack()
拒绝该消息,并可以选择是否重新入队。
总结
- 该方法是一个 RabbitMQ 消费者,用于从指定的队列中消费消息。
- 通过
@Payload
获取消息体内容,使用@Headers
获取消息头信息。 - 使用
Channel
来确认消息的处理状态。 - 使用
@RabbitListener
注解自动监听队列,并处理消费的消息。
这种方式非常适合处理队列中的业务逻辑,并能够灵活处理消息的确认、拒绝等操作。
消息怎么知道发给哪一个队列
先看队列与交换机怎么绑定的
先创建队列,然后绑定到交换机
RabbitMQ系列-6.如何通过控制台创建交换机、队列、死信队列、延迟队列 - 简书
相关文章:
rabbitMq举例
新来个技术总监,把 RabbitMQ 讲的那叫一个透彻,佩服! 生产者 代码举例 public String sendMsg(final String exchangeName,final String routingKey,final String msg) {} /*** 发送消息* param exchangeName exchangeName* param routin…...
人工智能增强的音频和聊天协作服务
论文标题:AI-enabled Audio and Chat Collaboration Services 中文标题:人工智能增强的音频和聊天协作服务 作者信息: Emil P. Andersen, Norwegian Defence Research Establishment (FFI), Kjeller, NorwayJesper R. Goksr, Sindre E. Ha…...
ctr: content digest XXX not found
1、问题描述 ctr 推送镜像到本地仓库报错 ctr: content digest sha256:b96e30ccb0a1e225493e53d4f81cb2c27183406e5f902ed43c4bf15dc6f21c9c: not found 2、问题原因 本人的平台是M1,正常情况下载镜像会自动按平台寻找版本,但是由于我下载的镜像版本没…...
java内存模型
文章目录 1.java内存模型2.重排序3.内存屏障3.1四类内存屏障指令 4.happens-before4.1 规则5.volatile5.1特性5.2规则5.3 内存语义5.4 内存屏障插入策略 1.java内存模型 java内存模型(JMM)定义了线程和主内存之间的抽象关系:线程之间的共享变…...
Java Object类与Objects类
1. Object 类 (1) Object类是Java中所有类的祖宗类,因此,Java中所有类的对象都可以直接使用Object类中提供的一些方法(public class Object)。 . (2) Object类常见方法 方法说明public String toString()返回对象的字符串形式public boolean eq…...
【目标检查】YOLO系列之:Triton 推理服务器Ultralytics YOLO11
Triton 推理服务器 1、引言2、Triton服务器2.1 什么是Triton Inference Server2.2 将YOLO11 导出为ONNX 格式2.3 设置Triton 模型库2.3.1 创建目录结构2.3.2 将导出的ONNX 模型移至Triton 资源库 2.4 运行Triton 推断服务器2.4.1 使用 Docker 运行Triton Inference Server2.4.2…...
力扣69. x 的平方根
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。 示例 1:…...
关于目标检测YOLO 各版本区别v1-v11/vX/vR
概述 YOLO(You Only Look Once,你只看一次)是一系列开创性的实时目标检测模型,它们彻底改变了计算机视觉领域。由Joseph Redmon开发,后续版本由不同研究人员迭代,YOLO模型以其在图像中检测对象的高速度和准…...
求成绩的平均值,统计低于平均分的人数
【问题描述】编写函数double average(double score[ ], int n,int *m)对存放在实型数组中考试成绩进行求平均分和低于平均分的人数,要求在主函数里面进行班级人数和成绩的输入,调用average函数进行计算成绩平均值和低于平均分的人数后,返回主…...
SGD、BGD、MBGD 之间的区别
文章目录 SGD(Stochastic Gradient Descent,随机梯度下降)BGD(Batch Gradient Descent,批量梯度下降)MBGD(Mini-Batch Gradient Descent,小批量梯度下降) 前置࿱…...
Android -- WebView之loadData加载html字符串显示网页
目录 前言1. loadUrl 加载网页地址2. loadData 加载Html字符来显示网页3. loadDataWithBaseURL4. 总结 前言 最近在给一个老项目做64位so文件的适配,当应用发布到应用市场上后,用户反馈64位手机上的网页加载不出内容,但32位的手机上是正常…...
单片机:实现数码管00盗99显示(附带源码)
单片机实现数码管00到99显示 在嵌入式开发中,数码管是最常用的显示设备之一,特别适合用于显示数字信息。本项目的目标是利用8051单片机控制数码管实现数字显示,从00到99的循环显示。我们将通过按键或定时器来控制数字的增减,并通…...
大厂面试智力题大全(详细解题思路,持续更新)
目录 八个球有一个比较重,问称几次可以把较重的球拎出来,具体称重的方法是怎样的? 64 匹马 8 个赛道,找出前四名,最少赛多少场(腾讯) 一个城市的加油站数量 5L的水桶和3L的水桶怎么量出4L的水 有一堆粗细不均匀的绳子,燃烧完一个绳子需要2小时,如何用这些绳子凑出…...
使用 acme.sh 签发和自动续期 ssl https 证书
acme.sh 是一个热度非常高的签发和自动续期 https 证书的工具,虽然官网上提供了充分的操作说明,但是不够简洁,本文以在 nginx 中签发和配置http 为例,列出必要的几个简单步骤。 安装 因为网络原因,github 大部分人是…...
YOLOv9改进,YOLOv9引入DLKA-Attention可变形大核注意力,WACV2024,二次创新RepNCSPELAN4结构
摘要 作者引入了一种称为可变形大核注意力 (D-LKA Attention) 的新方法来增强医学图像分割。这种方法使用大型卷积内核有效地捕获体积上下文,避免了过多的计算需求。D-LKA Attention 还受益于可变形卷积,以适应不同的数据模式。 理论介绍 大核卷积(Large Kernel Convolu…...
docker安装mysql8
上一篇提到了docker安装mysql5.7和mysql8有所不同,这一篇说一下mysql8的安装 1、宿主机创建映射目录 mkdir -p /data/mysql8/log mkdir -p /data/mysql8/data mkdir -p /data/mysql8/conf这里我放在了/data/mysql8目录下 2、拉取mysql镜像 docker pull mysql:8.…...
【云原生知识】Kubernets实践-前端服务如何访问后端服务
文章目录 概述步骤1:部署后端服务步骤2:配置Nginx步骤3:创建Nginx服务总结 如何确保 Nginx 能持续访问后端服务?相关文献 概述 假设你正在使用Kubernetes作为容器云平台,以下是如何配置Nginx以及相关服务,…...
M3DM的autodl环境构建过程笔记
文章目录 在3D-ADS环境https://blog.csdn.net/tfxzgp/article/details/144259472基础上构建(失败的记录,不用看)更换镜像重来(成功)安装缺少的包修改models.py中的RGB和点云backbone的路径修改main.py路径参数运行 在3D-ADS环境https://blog.…...
jmeter CLI Mode 传参实现动态设置用户数
一.需求 CLI 运行模式下每次运行想要传入不同的用户数,比如寻找瓶颈值的场景,需要运行多次设置不同的用户数。 二.解决思路 查看官方API Apache JMeter - Users Manual: Getting Started api CLI Mode 一节中提到可以使用如下参数做属性的替换&#…...
Mac系统下 jdk和maven 安装教程
一、jdk安装教程 1、先去官网选择对应版本下载 官网网址:Java SE | Oracle Technology Network | Oracle 中国 这里我选择的是jdk8的版本,如果你们想下载更高的版本就选择其他版本,目前大部分公司和教程使用jdk8的版本比较多。 点击macos&a…...
pyfink1.20版本下实现消费kafka中数据并实时计算
1、环境 JDK版本:1.8.0_412python版本:3.10.6apache-flink版本:1.20.0flink版本:1.20kafka版本:kafka_2.12-3.1.1flink-sql-connector-kafka版本:3.3.0-1.202、执行python-flink脚本 从kafka的demo获取消…...
【经验分享】私有云运维的知识点
最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公…...
影像组学+病理组学+深度学习人工智能应用
影像组学 基础学习内容: 特征提取:使用pyradiomics进行形状、纹理、小波变换等特征提取。特征筛选:应用ICC、相关系数、mRMR、Lasso等方法。建模:使用LR、SVM、RF、XGBoost、LightGBM等机器学习算法。模型评估:通过A…...
how to write 述职pptx as a tech manager
As a technical manager, crafting an effective 述职 (performance review) PPT requires you to highlight your leadership, team accomplishments, technical contributions, challenges faced, and future plans. Heres a structured approach to design your PPT: 1. Cov…...
用户发送请求后服务端i/o工作过程
华子目录 服务端i/o介绍磁盘i/o机械磁盘的寻道时间、旋转延迟和数据传输时间常见的机械磁盘平均寻道时间值常见磁盘的平均延迟时间每秒最大IOPS的计算方法 网络i/o网络I/O处理过程磁盘和网络i/o 一次完整的请求在内部的执行过程 服务端i/o介绍 i/o在计算机中指Input/Output&am…...
功能篇:springboot实现防盗链功能
防盗链(Hotlink Protection)是一种防止其他网站直接链接到你网站的资源(如图片、视频等),从而节省带宽和保护内容的有效手段。在Spring Boot应用程序中实现防盗链功能,可以通过多种方式来达成,例…...
MySQL迁移SQLite
将 MySQL 的表结构和数据迁移到 SQLite,可以通过以下步骤实现。这个过程主要包括导出 MySQL 数据库到 SQL 文件,然后将其导入到 SQLite 数据库中。 步骤 1: 导出 MySQL 数据库 首先,需要将 MySQL 数据库导出为一个 SQL 文件。可以使用 mysq…...
嵌入式面试知识点总结 -- 面试篇
1、请你做个简单的自我介绍 把所有工作内容,分类整理出和岗位匹配的能力关键字,然后围绕关键字展开讲。每段经历要用数据来支撑。 例如: 面试官你好,我叫XXX,毕业于XXX,很荣幸参加此次面试。 围绕面试岗位…...
华为OD机试真题---观看文艺汇演问题
华为OD机试中的“观看文艺汇演问题”是一道考察算法与数据结构能力的题目。以下是对该题目的详细解析: 一、题目描述 为了庆祝某个重要节日(如中国共产党成立100周年),某公园将举行多场文艺表演。很多演出都是同时进行的&#x…...
类OCSP靶场-Kioptrix系列-Kioptrix Level 2
一、前情提要 二、实战打靶 1. 信息收集 1.1. 主机发现 1.2. 端口扫描 1.3.目录遍历 2.漏洞发现 2.1. 登录框测试 2.2. 发现命令执行 2.3 构造命令执行利用payload 3.提权 3.1. 搜索提权exp 3.2. 查看exp信息 3.3. Privilege Escalation的exp利用 exp_9542 一、前…...
openlane
openlane数据集,lane3d_1000里训练集157807张图片,测试集39981张图,md太多了...
修改vscode设置的原理
转载请标明出处:小帆的帆的专栏 修改vscode设置 首先需要理解的是,vscode的系统设置和插件设置都是通过settings.json文件管理的。 vscode中有三个Settings,三个Settings分别对应三个settings.json文件 Default Settings:默认…...
解决docker环境下aspose-words转换word成pdf后乱码问题
描述 环境:docker 部署工具:Jenkins 需求:本地上传的word文档需要转换成pdf 问题:转换之后的pdf文档出现小框框(乱码) 转换成PDF的操作 pom: <dependency><groupId>org.apach…...
2024年12月16日Github流行趋势
项目名称:PDFMathTranslate 项目维护者:Byaidu reycn hellofinch Wybxc YadominJinta项目介绍:基于 AI 完整保留排版的 PDF 文档全文双语翻译,支持 Google/DeepL/Ollama/OpenAI 等服务,提供 CLI/GUI/Docker。项目star数…...
ElasticSearch 常见故障解析与修复秘籍
文章目录 一、ElasticSearch启动服务提示无法使用root用户二、ElasticSearch启动提示进程可拥有的虚拟内存少三、ElasticSearch提示用户拥有的可创建文件描述符太少四、ElasticSearch集群yellow状态分析五、ElasticSearch节点磁盘使用率过高,read_only状态问题解决六…...
用 Python Turtle 绘制经典汤姆猫:重温卡通角色的经典魅力
用 Python Turtle 绘制经典汤姆猫:重温卡通角色的经典魅力 🐸 前言 🐸🐞往期绘画>>点击进所有绘画🐞🐋 效果图 🐋🐉 代码 🐉 🐸 前言 🐸 汤…...
数据结构Day4: 链表函数封装 ; 思维导图
目录 作业:实现链表剩下的操作: 任意位置删除 按位置修改 按值查找返回地址 反转 销毁 运行结果 思维导图 作业:实现链表剩下的操作: 1>任意位置删除 2>按位置修改 3>按值查找返回地址 4>反转 5>销毁 任意…...
用 Python Turtle 绘制一只可爱的小狗:用代码捕捉狗狗的萌态
用 Python Turtle 绘制一只可爱的小狗:用代码捕捉狗狗的萌态 🐸 前言 🐸🐞往期绘画>>点击进所有绘画🐞🐋 效果图 🐋🐉 代码 🐉 🐸 前言 🐸 …...
人工智能浪潮来袭:2024年技术革命与产业变革深度解析@附64页PDF文件下载
随着2024年的到来,人工智能(AI)技术正以前所未有的速度、广度和深度改变着我们的生产和生活方式。在这篇深度解析中,我们将带您一探AI技术的最新发展、产业应用的现状以及未来的安全治理趋势。 技术革命:AI技术的新范…...
python 下载 b站视频 和音频
video_bvid: import os import requests import json import re from bs4 import BeautifulSoup import subprocess # from detail_video import video_bvid# video_bvid 是一个从外部得到的单个视频ID video_bvid BV1cx421Q7veclass BilibiliVideoAudio:def __in…...
【蓝桥杯选拔赛真题93】Scratch青蛙过河 第十五届蓝桥杯scratch图形化编程 少儿编程创意编程选拔赛真题解析
目录 Scratch青蛙过河 一、题目要求 编程实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、python资料 Scr…...
flink sink kafka的事务提交现象猜想
现象 查看flink源码时 sink kafka有事务提交机制,查看源码发现是使用两阶段提交策略,而事务提交是checkpoint完成后才执行,那么如果checkpoint设置间隔时间比较长时,事务未提交之前,后端应该消费不到数据,…...
Oracle 临时表空间管理与最佳实践
Oracle 临时表空间管理与最佳实践 内容摘要 本文深入探讨了Oracle数据库中临时表空间的管理和最佳实践。主要内容包括: 临时表空间的概述及其在Oracle 19c多租户架构中的特点临时表空间组的优势及其创建方法非临时表空间组的临时表空间日常维护操作命令临时表空间…...
Java转C之继承和多态
在C/C中,继承和多态是面向对象编程(OOP)的两个重要特性。以下将详细讲解C/C中如何实现继承与多态,同时结合Java的对比,帮助理解两者的异同。 继承的实现 C/C中的继承 继承允许一个类(派生类/子类…...
【密码学】ZUC祖冲之算法
一、ZUC算法简介 ZUC算法(祖冲之算法)是中国自主研发的一种流密码算法,2011年被3GPP批准成为4G国际标准,主要用于无线通信的加密和完整性保护。ZUC算法在逻辑上采用三层结构设计,包括线性反馈移位寄存器(L…...
MacOS系统 快速安装appium 步骤详解
在macOS系统上,你可以通过使用nvm(Node Version Manager)来管理Node.js的版本,并基于nvm安装的Node.js环境来快捷地安装Appium。以下是具体步骤: 一、安装nvm 下载nvm 访问nvm的GitHub仓库(nvm GitHub&…...
SEGGER | 基于STM32F405 + Keil - RTT组件07 - J-Scope数据可视化,RTT方式 + DWT定时器时间戳
导言 在上一章节SEGGER | 基于STM32F405 Keil - RTT组件06 - J-Scope数据可视化,使用RTT方式的第4.3章节提到,如果消息包不包含时间戳的话,那么J-Scope的横坐标的单位时间默认是100us,说白了时间戳是假的。会导致如下问题&#x…...
机器学习支持向量机(SVM)算法
一、引言 在当今数据驱动的时代,机器学习算法在各个领域发挥着至关重要的作用。支持向量机(Support Vector Machine,SVM)作为一种强大的监督学习算法,以其在分类和回归任务中的卓越性能而备受瞩目。SVM 具有良好的泛化…...
浏览器端的 js 包括哪几个部分
一、核心语言部分 1. 变量与数据类型 变量用于存储数据,在 JavaScript 中有多种数据类型,如基本数据类型(字符串、数字、布尔值、undefined、null)和引用数据类型(对象、数组、函数)。 let name "…...
【含开题报告+文档+PPT+源码】基于SpringBoot的开放实验管理平台设计与实现
开题报告 设计开放实验管理平台的目的在于促进科学研究与教学的融合。传统实验室常常局限于特定地点和时间,而开放平台可以为学生、教师和研究人员提供一个便捷的交流与共享环境。通过在线平台,他们可以分享实验资源、交流经验,从而促进科学…...