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

RocketMQ面试题:进阶部分

🧑 博主简介:CSDN博客专家历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程高并发设计Springboot和微服务,熟悉LinuxESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea

在这里插入图片描述


在这里插入图片描述

RocketMQ面试题:进阶部分

1. 如何保证消息的可用性/可靠性/不丢失呢?

消息可能在哪些阶段丢失呢?可能会在这三个阶段发生丢失:生产阶段、存储阶段、消费阶段。

所以要从这三个阶段考虑:

在这里插入图片描述

1.1 生产

在生产阶段,主要通过请求确认机制,来保证消息的可靠传递

  • 1、同步发送的时候,要注意处理响应结果和异常。如果返回响应 OK,表示消息成功发送到了 Broker,如果响应失败,或者发生其它异常,都应该重试。
  • 2、异步发送的时候,应该在回调方法里检查,如果发送失败或者异常,都应该进行重试。
  • 3、如果发生超时的情况,也可以通过查询日志的 API,来检查是否在 Broker 存储成功。
1.2 存储

存储阶段,可以通过配置可靠性优先的 Broker 参数来避免因为宕机丢消息,简单说就是可靠性优先的场景都应该使用同步。

  • 1、消息只要持久化到 CommitLog(日志文件)中,即使 Broker 宕机,未消费的消息也能重新恢复再消费。
  • 2、Broker 的刷盘机制:同步刷盘和异步刷盘,不管哪种刷盘都可以保证消息一定存储在 pagecache 中(内存中),但是同步刷盘更可靠,它是 Producer 发送消息后等数据持久化到磁盘之后再返回响应给 Producer。

在这里插入图片描述

  • 3、Broker 通过主从模式来保证高可用,Broker 支持 Master 和 Slave 同步复制、Master 和 Slave 异步复制模式,生产者的消息都是发送给 Master,但是消费既可以从 Master 消费,也可以从 Slave 消费。同步复制模式可以保证即使 Master 宕机,消息肯定在 Slave 中有备份,保证了消息不会丢失。
1.3 消费

从 Consumer 角度分析,如何保证消息被成功消费?

  • Consumer 保证消息成功消费的关键在于确认的时机,不要在收到消息后就立即发送消费确认,而是应该在执行完所有消费业务逻辑之后,再发送消费确认。因为消息队列维护了消费的位置,逻辑执行失败了,没有确认,再去队列拉取消息,就还是之前的一条。

2. 如何处理消息重复的问题呢?

RocketMQ 可以保证消息一定投递,且不丢失,但无法保证消息不重复消费。

因此,需要在业务端做好消息的幂等性处理,或者做消息去重。

在这里插入图片描述

幂等性是指一个操作可以执行多次而不会产生副作用,即无论执行多少次,结果都是相同的。可以在业务逻辑中加入检查逻辑,确保同一消息多次消费不会产生副作用。

例如,在支付场景下,消费者消费扣款的消息,对一笔订单执行扣款操作,金额为100元。

如果因网络不稳定等原因导致扣款消息重复投递,消费者重复消费了该扣款消息,但最终的业务结果要保证只扣款一次,金额为100元。如果扣款操作是符合要求的,那么就可以认为整个消费过程实现了消息幂等。

消息去重,是指在消费者消费消息之前,先检查一下是否已经消费过这条消息,如果消费过了,就不再消费。

业务端可以通过一个专门的表来记录已经消费过的消息 ID,每次消费消息之前,先查询一下这个表,如果已经存在,就不再消费。

public void processMessage(String messageId, String message) {if (!isMessageProcessed(messageId)) {// 处理消息markMessageAsProcessed(messageId);}
}private boolean isMessageProcessed(String messageId) {// 查询去重表,检查消息ID是否存在
}private void markMessageAsProcessed(String messageId) {// 将消息ID插入去重表
}
2.1 如何保证消息的幂等性?

在这里插入图片描述

首先,消息必须携带业务唯一标识,可以通过雪花算法生成全局唯一 ID。

Message msg = new Message(TOPIC /* Topic */,TAG /* Tag */,("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET) /* Message body */);message.setKey("ORDERID_100"); // 订单编号
SendResult sendResult = producer.send(message);      

其次,在消费者接收到消息后,判断 Redis 中是否存在该业务主键的标志位,若存在标志位,则认为消费成功,否则执行业务逻辑,执行完成后,在缓存中添加标志位。

public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {try {for (MessageExt messageExt : msgs) {String bizKey = messageExt.getKeys(); // 唯一业务主键//1. 判断是否存在标志if(redisTemplate.hasKey(RedisKeyConstants.WAITING_SEND_LOCK + bizKey)) {continue;}//2. 执行业务逻辑//TODO do business//3. 设置标志位redisTemplate.opsForValue().set(RedisKeyConstants.WAITING_SEND_LOCK + bizKey, "1", 72, TimeUnit.HOURS);}return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;} catch (Exception e) {logger.error("consumeMessage error: ", e);return ConsumeConcurrentlyStatus.RECONSUME_LATER;}
}

然后,利用数据库的唯一索引来防止业务的重复插入。

CREATE TABLE `t_order` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`order_id` varchar(64) NOT NULL COMMENT '订单编号',`order_name` varchar(64) NOT NULL COMMENT '订单名称',PRIMARY KEY (`id`),UNIQUE KEY `order_id` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单表';

最后,在数据库表中使用版本号,通过乐观锁机制来保证幂等性。每次更新操作时检查版本号是否一致,只有一致时才执行更新并递增版本号。如果版本号不一致,则说明操作已被执行过,拒绝重复操作。

public void updateRecordWithOptimisticLock(int id, String newValue, int expectedVersion) {int updatedRows = jdbcTemplate.update("UPDATE records SET value = ?, version = version + 1 WHERE id = ? AND version = ?",newValue, id, expectedVersion);if (updatedRows == 0) {throw new OptimisticLockingFailureException("Record has been modified by another transaction");}
}

或者悲观锁机制,通过数据库的锁机制来保证幂等性。

public void updateRecordWithPessimisticLock(int id) {jdbcTemplate.queryForObject("SELECT * FROM records WHERE id = ? FOR UPDATE", id);jdbcTemplate.update("UPDATE records SET value = ? WHERE id = ?", "newValue", id);
}
2.2 雪花算法了解吗?

雪花算法是由 Twitter 开发的一种分布式唯一 ID 生成算法。

在这里插入图片描述

雪花算法以 64 bit 来存储组成 ID 的4 个部分:

  1. 最高位占1 bit,始终为 0,表示正数。
  2. 中位占 41 bit,值为毫秒级时间戳;
  3. 中下位占 10 bit,机器 ID(包括数据中心 ID 和机器 ID),可以支持 1024 个节点。
  4. 末位占 12 bit,值为当前毫秒内生成的不同的自增序列,值的上限为 4096;

目前雪花算法的实现比较多,可以直接使用 Hutool 工具类库中的 IdUtil.getSnowflake() 方法来获取雪花 ID。

long id = IdUtil.getSnowflakeNextId();
  1. Java 面试指南(付费)收录的京东同学 4 云实习面试原题:如何处理消息重复消费的问题?如何保证幂等性?雪花算法了解吗?

3. 怎么处理消息积压?

发生了消息积压,这时候就得想办法赶紧把积压的消息消费完,就得考虑提高消费能力,一般有两种办法:

在这里插入图片描述

  • 消费者扩容:如果当前 Topic 的 Message Queue 的数量大于消费者数量,就可以对消费者进行扩容,增加消费者,来提高消费能力,尽快把积压的消息消费玩。
  • 消息迁移 Queue 扩容:如果当前 Topic 的 Message Queue 的数量小于或者等于消费者数量,这种情况,再扩容消费者就没什么用,就得考虑扩容 Message Queue。可以新建一个临时的 Topic,临时的 Topic 多设置一些 Message Queue,然后先用一些消费者把消费的数据丢到临时的 Topic,因为不用业务处理,只是转发一下消息,还是很快的。接下来用扩容的消费者去消费新的 Topic 里的数据,消费完了之后,恢复原状。

在这里插入图片描述

4. 顺序消息如何实现?

RocketMQ 实现顺序消息的关键在于保证消息生产和消费过程中严格的顺序控制,即确保同一业务的消息按顺序发送到同一个队列中,并由同一个消费者线程按顺序消费。

在这里插入图片描述

4.1 局部顺序消息如何实现?

局部顺序消息保证在某个逻辑分区或业务逻辑下的消息顺序,例如同一个订单或用户的消息按顺序消费,而不同订单或用户之间的顺序不做保证。

在这里插入图片描述

4.2 全局顺序消息如何实现?

全局顺序消息保证消息在整个系统范围内的严格顺序,即消息按照生产的顺序被消费。

可以将所有消息发送到一个单独的队列中,确保所有消息按生产顺序发送和消费。

在这里插入图片描述

5. 如何实现消息过滤?

有两种方案:

  • 一种是在 Broker 端按照 Consumer 的去重逻辑进行过滤,这样做的好处是避免了无用的消息传输到 Consumer 端,缺点是加重了 Broker 的负担,实现起来相对复杂。
  • 另一种是在 Consumer 端过滤,比如按照消息设置的 tag 去重,这样的好处是实现起来简单,缺点是有大量无用的消息到达了 Consumer 端只能丢弃不处理。

一般采用 Cosumer 端过滤,如果希望提高吞吐量,可以采用 Broker 过滤。

对消息的过滤有三种方式:

在这里插入图片描述

  • 根据 Tag 过滤:这是最常见的一种,用起来高效简单
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("CID_EXAMPLE");
consumer.subscribe("TOPIC", "TAGA || TAGB || TAGC");
  • SQL 表达式过滤:SQL 表达式过滤更加灵活
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name_4");
// 只有订阅的消息有这个属性a, a >=0 and a <= 3
consumer.subscribe("TopicTest", MessageSelector.bySql("a between 0 and 3");
consumer.registerMessageListener(new MessageListenerConcurrently() {@Overridepublic ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}
});
consumer.start();
  • Filter Server 方式:最灵活,也是最复杂的一种方式,允许用户自定义函数进行过滤

6. 延时消息了解吗?

电商的订单超时自动取消,就是一个典型的利用延时消息的例子,用户提交了一个订单,就可以发送一个延时消息,1h 后去检查这个订单的状态,如果还是未付款就取消订单释放库存。

RocketMQ 是支持延时消息的,只需要在生产消息的时候设置消息的延时级别:

// 实例化一个生产者来产生延时消息
DefaultMQProducer producer = new DefaultMQProducer("ExampleProducerGroup");
// 启动生产者
producer.start();
int totalMessagesToSend = 100;
for (int i = 0; i < totalMessagesToSend; i++) {Message message = new Message("TestTopic", ("Hello scheduled message " + i).getBytes());// 设置延时等级3,这个消息将在10s之后发送(现在只支持固定的几个时间,详看delayTimeLevel)message.setDelayTimeLevel(3);// 发送消息producer.send(message);
}

但是目前 RocketMQ 支持的延时级别是有限的:

private String messageDelayLevel = "1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h";
6.1 RocketMQ 怎么实现延时消息的?

简单,八个字:临时存储+定时任务

Broker 收到延时消息了,会先发送到主题(SCHEDULE_TOPIC_XXXX)的相应时间段的 Message Queue 中,然后通过一个定时任务轮询这些队列,到期后,把消息投递到目标 Topic 的队列中,然后消费者就可以正常消费这些消息。

在这里插入图片描述

7. 怎么实现分布式消息事务的?半消息?

半消息:是指暂时还不能被 Consumer 消费的消息,Producer 成功发送到 Broker 端的消息,但是此消息被标记为 “暂不可投递” 状态,只有等 Producer 端执行完本地事务后经过二次确认了之后,Consumer 才能消费此条消息。

依赖半消息,可以实现分布式消息事务,其中的关键在于二次确认以及消息回查:

在这里插入图片描述

  • 1、Producer 向 broker 发送半消息
  • 2、Producer 端收到响应,消息发送成功,此时消息是半消息,标记为 “不可投递” 状态,Consumer 消费不了。
  • 3、Producer 端执行本地事务。
  • 4、正常情况本地事务执行完成,Producer 向 Broker 发送 Commit/Rollback,如果是 Commit,Broker 端将半消息标记为正常消息,Consumer 可以消费,如果是 Rollback,Broker 丢弃此消息。
  • 5、异常情况,Broker 端迟迟等不到二次确认。在一定时间后,会查询所有的半消息,然后到 Producer 端查询半消息的执行情况。
  • 6、Producer 端查询本地事务的状态
  • 7、根据事务的状态提交 commit/rollback 到 broker 端。(5,6,7 是消息回查)
  • 8、消费者段消费到消息之后,执行本地事务。

8. 死信队列知道吗?

死信队列用于存储那些无法被正常处理的消息,这些消息被称为死信(Dead Letter)。

在这里插入图片描述

产生死信的原因是,消费者在处理消息时发生异常,且达到了最大重试次数。当消费失败的原因排查并解决后,可以重发这些死信消息,让消费者重新消费;如果暂时无法处理,为避免到期后死信消息被删除,可以先将死信消息导出并进行保存。

9. 如何保证 RocketMQ 的高可用?

NameServer 因为是无状态,且不相互通信的,所以只要集群部署就可以保证高可用。

在这里插入图片描述

RocketMQ 的高可用主要是在体现在 Broker 的读和写的高可用,Broker 的高可用是通过集群主从实现的。

在这里插入图片描述

Broker 可以配置两种角色:Master 和 Slave,Master 角色的 Broker 支持读和写,Slave 角色的 Broker 只支持读,Master 会向 Slave 同步消息。

也就是说 Producer 只能向 Master 角色的 Broker 写入消息,Cosumer 可以从 Master 和 Slave 角色的 Broker 读取消息。

Consumer 的配置文件中,并不需要设置是从 Master 读还是从 Slave 读,当 Master 不可用或者繁忙的时候, Consumer 的读请求会被自动切换到从 Slave。有了自动切换 Consumer 这种机制,当一个 Master 角色的机器出现故障后,Consumer 仍然可以从 Slave 读取消息,不影响 Consumer 读取消息,这就实现了读的高可用。

如何达到发送端写的高可用性呢?在创建 Topic 的时候,把 Topic 的多个 Message Queue 创建在多个 Broker 组上(相同 Broker 名称,不同 brokerId 机器组成 Broker 组),这样当 Broker 组的 Master 不可用后,其他组 Master 仍然可用, Producer 仍然可以发送消息 RocketMQ 目前还不支持把 Slave 自动转成 Master ,如果机器资源不足,需要把 Slave 转成 Master ,则要手动停止 Slave 色的 Broker ,更改配置文件,用新的配置文件启动 Broker。

相关文章:

RocketMQ面试题:进阶部分

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

【k8s系列7-更新中】kubeadm搭建Kubernetes高可用集群-三主两从

主机准备 结合前面的章节,这里需要5台机器,可以先创建一台虚拟机作为基础虚拟机。优先把5台机器的公共部分优先在一台机器上配置好 1、配置好静态IP地址 2、主机名宇IP地址解析 [root@localhost ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost…...

12、高阶组件:魔法增幅器——React 19 HOC模式

一、魔法增幅器的本质 "高阶组件是魔法师用咒语叠加的炼金术&#xff0c;"霍格沃茨魔咒研究院院长凝视着发光的增幅器&#xff0c;"通过函数式能量场的嵌套&#xff0c;让基础组件获得预言家日报式的逻辑继承&#xff01;" ——以神秘事务司的「维度叠加理…...

Linux避免文件误删详解(Linux Avoids File Deletion Errors with Detailed Explanation)

Linux避免文件误删详解 背景 大家都知道&#xff0c;rm指令在Linux中非常牛&#xff0c;rm -rf更是牛中的霸主。什么删系统跑路、删库跑路就是这个指令造成的。可以看出指令虽然牛&#xff0c;但是危险性极高。那么怎么避免某些时候的这种误操作造成的影响呢&#xff0c;阿祥…...

模板方法模式:定义算法骨架的设计模式

模板方法模式&#xff1a;定义算法骨架的设计模式 一、模式核心&#xff1a;模板方法定义算法骨架&#xff0c;具体步骤延迟到子类实现 在软件开发中&#xff0c;经常会遇到这样的情况&#xff1a;某个算法的步骤是固定的&#xff0c;但具体步骤的实现可能因不同情况而有所不…...

QT之Q_PROPERTY介绍以及在QWidget中的用法

目录 一、 Q_PROPERTY介绍 1、 Q_PROPERTY是什么 2、Q_PROPERTY 的语法 3、Q_PROPERTY 的作用 二、在QWidget中的用法 1、示例1&#xff1a;自带属性 2、 示例2&#xff1a;自建属性第一种 3、 示例3&#xff1a;自建属性第二种 4、动态属性 三、注意事项 四、总结 一…...

MySQL 8 自动安装脚本(CentOS-7 系统)

文章目录 一、MySQL 8 自动安装脚本脚本说明&#x1f4cc; 使用脚本前提条件1. 操作系统2. 用户权限3. 网络要求 &#x1f4cc; 脚本的主要功能1. 环境检查2. MySQL 自动安装3. 自动配置 MySQL4. 防火墙配置5. 验证与输出 &#x1f4cc; 适用场景 二、执行sh脚本1. 给予脚本执行…...

软件测试基础知识(2) -- 软件评测师(十三)

3 基于风险的测试 风险是当前未发生而未来有肯会发生并造成一定负面影响的事件。 3.1 基于风险的测试概述 &#xff08;1&#xff09;测试计划内容的核心&#xff1a; 1&#xff09;测什么&#xff1a;从风险出发&#xff0c;需要明确地列举出要测试哪些具体的功能和非功能的质…...

axios 在请求拦截器中设置Content-Type无效问题

Axios 会根据请求数据自动设置 Content-Type&#xff1a; 当请求体为空时&#xff0c;Axios 会移除 Content-Type 头部 当请求体为对象时&#xff0c;默认设置为 application/json 当请求体为 URLSearchParams 时&#xff0c;默认设置为 application/x-www-form-urlencoded …...

MFC案例:使用键盘按键放大、缩小窗口图像的实验

当在对话框窗口居中显示一幅图像时&#xff0c;图像的尺寸可能大于或小于窗口的尺寸&#xff0c;这时我们希望通过使用按键“”进行图像放大显示&#xff0c;使用按键“-”进行缩小显示&#xff08;当然也可以使用其它按键&#xff09;。下面开始使用MFC进行这个实验&#xff0…...

本地(NAS/服务器)与云端(Docker/Kubernetes)部署详解与对比

本地&#xff08;NAS/服务器&#xff09;与云端&#xff08;Docker/Kubernetes&#xff09;部署详解与对比 一、本地部署&#xff08;NAS/服务器&#xff09; 适用场景&#xff1a; 需要完全控制硬件和数据&#xff08;如隐私敏感场景&#xff09;。小规模应用或测试环境。网…...

如何解决极狐GitLab 合并冲突?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 合并冲突 (BASIC ALL) 合并冲突发生在合并请求的两个分支&#xff08;源分支和目标分支&#xff09;对相同代码行进行了不同…...

DeepSeek在物联网设备中的应用:通过轻量化模型实现本地化数据分析

文章目录 一、引言二、DeepSeek轻量化模型的技术原理1. 模型量化2. 模型剪枝3. 动态精度调整 三、本地化数据分析的实现路径1. 硬件环境配置2. 模型加载与推理3. 数据预处理与后处理 四、行业应用案例1. 医疗智能穿戴设备2. 工业设备预测性维护3. 智能家居能耗优化 五、性能优化…...

opencv--图像

像素(像素点) 定义&#xff1a; Pixel 是 Picture Element&#xff08;图像元素&#xff09;的缩写&#xff0c;是数字图像中最小的独立单位。每个像素代表图像中的一个点的颜色和亮度信息。 关键特性&#xff1a; 颜色&#xff1a;通过不同的色彩模型&#xff08;如RGB、CMYK…...

【KWDB 创作者计划】_嵌入式硬件篇---数字电子器件

文章目录 前言一、系列前缀(如 "74" 或 "54")74(商用级)54(工业级)二、逻辑家族(如 "LS"、"HC"、"HCT" 等)TTL(晶体管-晶体管逻辑)家族CMOS(互补金属氧化物半导体)家族BiCMOS(双极 CMOS)家族三、功能编号(如…...

前端加密介绍与实战

前端数据加密 文章目录 前端数据加密前端数据加密介绍为什么需要前端数据加密&#xff1f;前端数据加密的常见方式前端数据加密的实现场景&#xff1a;加密用户密码并发送到后端步骤 1&#xff1a;安装加密库步骤 2&#xff1a;实现加密逻辑步骤 3&#xff1a;后端解密 实战总结…...

DAG(有向无环图)计算模型面试内容整理-拓扑排序(Topological Sort)和节点依赖与并行度

拓扑排序(Topological Sort) 拓扑排序(Topological Sort): 拓扑排序是针对有向无环图(DAG)的一种线性排序方法。这种排序方法的特点是,对于DAG中的每一条有向边 (A → B),在拓扑排序中节点A总是排在节点B之前。...

AI语音助手自定义角色百度大模型 【全新AI开发套件掌上AI+4w字教程+零基础上手】

1、简介 此项目主要使用ESP32-S3实现一个自定义角色的AI语音聊天助手&#xff08;比如医生角色&#xff09;&#xff0c;可以通过该项目熟悉ESP32-S3 arduino的开发&#xff0c;百度语音识别&#xff0c;百度语音合成API调用&#xff0c;百度APPBuilder API的调用实现自定义角…...

【Java面试笔记:基础】13.谈谈接口和抽象类有什么区别?

在 Java 中,接口(Interface) 和 抽象类(Abstract Class) 都是实现多态和代码抽象的机制,但它们在设计目的、语法特性及使用场景上有显著差异。 1. 接口和抽象类的区别 接口(Interface) 定义:接口是对行为的抽象,是抽象方法的集合,用于定义 API 规范。 特点: 不能…...

内存管理(Linux程序设计)

内存管理 目录 内存管理 一.简单的内存分配 代码功能概述 代码流程图 变量声明 动态内存分配 内存分配错误检查 向内存写入字符串 设置退出状态并退出程序 二.请求全部的物理内存 代码功能概述 变量声明 三..可用内存 四.滥用内存 1.代码功能&#xff08;预期 …...

Prompt 结构化提示工程

Prompt 结构化提示工程 目前ai开发工具都大同小异&#xff0c;随着deepseek的流行&#xff0c;ai工具的能力都差不太多&#xff0c;功能基本都覆盖到了。而prompt能力反而是需要更加关注的&#xff08;说白了就是能不能把需求清晰的输出成文档&#xff09;。因此大家可能需要加…...

Postman设置了Cookies但是请求不携带Cookie

1 问题说明 使用Postman工具往往要向本地服务器发送请求携带Cookie便于测试接口&#xff0c;但是在Send下面的Cookies选项中设置域名127.0.0.1&#xff0c;并添加Cookie&#xff0c;发现发送的请求怎么都不会携带Cookie&#xff1a; 通过Fiddler抓包发现并没有Cookie&#xff1…...

微服务Nacos组件的介绍、安装、使用

微服务Nacos组件的介绍、安装、使用 在微服务架构日渐普及的今天&#xff0c;服务注册与配置管理成了系统架构中的关键环节。阿里巴巴开源的 Nacos&#xff08;Naming and Configuration Service&#xff09;正是解决这一问题的利器。本文将为你全面介绍 Nacos 的概念、安装方…...

深度剖析塔能科技精准节能方案:技术创新与实践价值

在能源管理领域不断追求高效与可持续发展的进程中&#xff0c;塔能科技的精准节能方案逐渐成为行业内备受瞩目的焦点。 精准节能&#xff1a;核心技术与实现路径 塔能科技的精准节能理念建立在对能源消耗的精细监测与深度分析基础之上。以其节能管理平台为例&#xff0c;该平台…...

AI PPT创作原理解析:让你的演示文稿更智能

在当今信息爆炸的时代&#xff0c;演示文稿已成为我们工作和学习中不可或缺的一部分。然而&#xff0c;制作一份高质量的PPT往往需要投入大量的时间和精力。随着人工智能技术的迅猛发展&#xff0c;AI PPT创作工具应运而生&#xff0c;极大地简化了PPT的制作过程。本文将深入解…...

ollama本地搭建大模型

dajdaj人工智能&#xff0c;现在流行的大模型有很多&#xff0c;像流行的&#xff1a;gpt-3.5-turbo、通义千问2.5&#xff0c;Llama3&#xff1b; 本地安装大模型有什么好处 大模型都是开源的&#xff0c;安装在自己的电脑上也是免费使用的&#xff1b;可以结合自己的私有文…...

AIGC(生成式AI)试用 31 -- AI做软件程序测试 2

接上文 AIGC&#xff08;生成式AI&#xff09;试用 30 -- AI做软件程序测试 1 整合测试项提问并输出测试用例思考并调整提问方式&#xff0c;为完整的输年程序测试提问准备 - 再次对需求提问 --> 实际是之前的提问记录找不到了&#xff0c;不过有新发现&#xff1b;不妨后…...

【深度学习与大模型基础】第13章-什么是机器学习

1. 什么是机器学习&#xff1f; 想象你在教一个小朋友认猫&#xff1a; 传统编程&#xff1a;你写一本《猫的100条特征手册》&#xff08;比如有胡须、尖耳朵&#xff09;&#xff0c;让计算机对照检查。 机器学习&#xff1a;你直接给计算机看1000张猫和狗的图片&#xff0c…...

大数据利器Kafka

大数据利器Kafka&#xff1a;从入门到实战的全面指南 在大数据的世界里&#xff0c;Kafka就像是一个高效的“数据快递员”&#xff0c;负责在不同的系统之间快速、可靠地传递数据。今天&#xff0c;咱们就一起来深入了解一下这个强大的工具。Kafka是由LinkedIn开发的分布式发布…...

工具指南:免费将 PDF 转换为 Word 的 10 个工具

可移植文档格式或 PDF 是大多数企业使用的流行文件格式&#xff0c;主要用于共享项目材料并确保整个团队协同工作。它还有助于避免处理大量文档和丢失关键数据。使用顶级 PDF 转换器还可以更轻松地高效地进行日常活动。企业可以依靠专业的文档扫描服务对其他格式的文档进行 PDF…...

Elasticsearch复习笔记

文章目录 ES 基础为什么用 Elasticsearch初识和安装概述安装 elasticsearch安装 Kibana 倒排索引正向索引倒排索引正向和倒排 基础概念文档和字段索引和映射MySQL 和 elasticsearch IK 分词器安装 IK 分词器使用 IK 分词器拓展词典 ES 索引库操作Mapping 映射属性ES 索引库的 C…...

STM32 SysTick定时器

一、SysTick系统定时器概述 1.1 什么是SysTick定时器 SysTick&#xff08;System Tick Timer&#xff09;是ARM Cortex-M系列处理器内核集成的24位系统定时器&#xff0c;作为ARM架构的标准外设&#xff0c;它被深度整合在NVIC&#xff08;嵌套向量中断控制器&#xff09;中。…...

Modbus TCP协议介绍、原理解析与应用示例

深入了解Modbus TCP协议&#xff1a;介绍、原理解析与应用示例 在工业自动化领域&#xff0c;设备之间的通信与数据交换至关重要。Modbus协议作为一种经典的通信协议&#xff0c;因其简单、开放和易于实现的特点&#xff0c;被广泛应用于各种工业设备之间的数据传输。而Modbus…...

Elasticsearch 报错 Limit of total fields [1000] has been exceeded

一、错误代码&#xff1a; spring boot 链接es 插入审计日志数据报错&#xff1a; Caused by: org.elasticsearch.ElasticsearchException: Elasticsearch exception [typeillegal_argument_exception, reasonLimit of total fields [1000] has been exceeded while adding ne…...

maven中pom.xml setting.xml关系

1 在Spring Boot项目中&#xff0c;pom.xml和settings.xml文件都可以配置Maven仓库地址&#xff0c;但它们的作用和优先级有所不同。 ● settings.xml&#xff1a; ○ 配置本地仓库&#xff1a;使用 <localRepository> 元素指定本地仓库的路径。 ○ 配…...

PubLayNet:文档布局分析领域的大规模数据集

PubLayNet&#xff1a;文档布局分析领域的大规模数据集 1. 数据集概述 PubLayNet&#xff08;Public Layout Network&#xff09;是由IBM AUR NLP团队开发的大规模文档图像数据集&#xff0c;旨在推动文档理解与布局分析领域的研究。该数据集通过自动标注技术&#xff0c;对科…...

JAVA----方法

好久没发博客了~~~~~重生之我开始补知识 1.What is 方法&#xff08;method&#xff09; 方法是程序中最小的执行单元。 简单来说&#xff0c;就是将一些重复代码打包&#xff0c;要用的时候我们进行调用就好&#xff01; e.g. public static void main&#xff08;String…...

mybatis xml中特殊字符处理

1&#xff0c;CDATA区&#xff1a; 它的全称为character data,以"<![CDATA[ "开始&#xff0c;以" ]]>" 结束&#xff0c;在两者之间嵌入不想被解析程序解析的原始数据&#xff0c;解析器不对CDATA区中的内容进行解析&#xff0c;而是将这些数据原封…...

vue3+dhtmlx 甘特图真是案例

使用vue3 ts dhtmlx 实现项目任务甘特图展示 支持拖拽&#xff0c;选择人员&#xff0c;优先级&#xff0c;开发状态&#xff0c;进度 效果图 完整代码 安装命令&#xff1a;npm i dhtmlx-gantt <template><div style"height: 100%; background-color: white…...

Chrome/Edge浏览器使用多屏完美解决方案,http部署使用https部署的功能

多屏使用场景&#xff1a;例如1屏显示录入操作界面&#xff0c;2屏显示SOP。或者每个屏上显示不同的看板内容等 废话不少说&#xff0c;直接上代码&#xff1a;将下面的代码复制到txt记事本里&#xff0c;保存为html格式即可本地观看效果 <!DOCTYPE html> <html>…...

Linux中进程的属性:状态

一、通用OS进程中的各种状态与相关概念 1.1通用进程中的状态 CPU执行进程代码&#xff0c;不是把进程执行完才开始执行下一个&#xff0c;而是给每个进程预分配一个“时间片”&#xff0c; CPU基于时间片进行轮转调度&#xff08;每个CPU分别进行&#xff09; 其中发涉及到的…...

软件架构师常用的软件工具有哪些

软件架构师的工作离不开多种工具的支撑&#xff0c;主要包括 建模与设计工具、文档与协作平台、代码质量与静态分析工具、性能与监控工具、DevOps 工具链、架构可视化与管理平台 等。其中&#xff0c;建模与设计工具 是架构师最核心的武器&#xff0c;能够帮助其从业务抽象到技…...

rl中,GRPO损失函数详解。

文章目录 **一、GRPO损失函数的设计背景****二、代码逐行解析****三、关键组件详解****1. 对数概率与KL散度计算****2. 优势值与策略梯度****3. 掩码与平均损失****四、训练动态与调参建议**在TRL(Transformer Reinforcement Learning)库中,GRPO(Group Relative Policy Opt…...

奇安信春招面试题

奇安信面试真题&#xff0c;以下是5道具有代表性的经典技术面试题及其解析&#xff0c;覆盖网络安全、渗透测试、安全架构设计等核心领域。 《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.…...

MineWorld,微软研究院开源的实时交互式世界模型

MineWorld是什么 MineWorld是微软研究院开发并开源的一个基于《我的世界》&#xff08;Minecraft&#xff09;的实时互动世界模型。该模型采用了视觉-动作自回归Transformer架构&#xff0c;将游戏场景和玩家动作转化为离散的token ID&#xff0c;并通过下一个token的预测进行…...

Nginx RTMP配置存储位置

window&#xff1a; 支持本地磁盘和远程网络位置 配置文件如下 worker_processes 1;events {worker_connections 1024; }#RTMP服务 rtmp {server { listen 1935; #监听端口chunk_size 4096; #数据传输块大小application my_live { # 创建rtmp应用hlslive on; # 当路径匹…...

JVM理解(通俗易懂)

虽然网上有很多关于JVM的教程,但是都天花乱坠,很多都是一上来就JVM内存模型、JVM双亲委派等等,(可能我比较菜看不懂)。于是我自己决定写一篇能看懂的文章~如果有看不懂我就自己百度,大家有什么疑问也可以评论区交流~ 欢迎指点我的Error~ JVM概念 JVM大家都知道,就Ja…...

python三维矩阵的维度

matrix_3x3x3 np.array([[[ 8.35, 16.72, 17.46],[16.72, 33.49, 34.97],[17.46, 34.97, 36.51]],[[16.72, 33.49, 34.97],[33.49, 67.09, 70.05],[34.97, 70.05, 73.13]],[[17.46, 34.97, 36.51],[34.97, 70.05, 73.13],[36.51, 73.13, 76.35]] ]) 例如这样的三维矩阵&#…...

HarmonyOS 是 Android 套壳嘛?

文章目录 HarmonyOS 是 Android 套壳吗&#xff1f;技术视角的深度解析一、核心结论二、技术对比&#xff1a;从底层到应用层1. 内核与基础架构2. 应用开发与运行机制3. 生态与应用场景 三、常见误解的澄清误解 1&#xff1a;“HarmonyOS 使用 Android 应用&#xff0c;所以是套…...

【Java面试笔记:基础】10.如何保证集合是线程安全的? ConcurrentHashMap如何实现高效地线程安全?

1. 保证集合线程安全的方式 传统同步容器:如 Hashtable 和 Vector,通过在方法上加 synchronized 关键字实现线程安全,但性能较低。同步包装器:通过 Collections.synchronizedMap 等方法将普通集合包装成线程安全的集合,但仍然使用粗粒度的锁,性能不佳。List<String>…...