java八股文-消息队列
一、MQ基础篇
1. 什么是消息队列?
消息队列(MQ)是分布式系统中实现异步通信的中间件,解耦生产者和消费者。
2. 使用场景有哪些?
- 异步处理(如注册后发送邮件)
- 系统解耦(不同服务通过MQ通信)
- 流量削峰(应对突发流量)
- 日志收集(如Kafka处理日志流)
3.消息队列的优缺点?
优点:解耦、异步、削峰、扩展性。
缺点:系统复杂度增加、消息一致性问题、运维成本高。
4. Broker、Producer、Consumer、Topic、Partition 分别是什么?
- Broker:消息队列服务器,负责接收、存储和转发消息。
- Producer:消息生产者,负责创建并发送消息到Broker。
- Consumer:消息消费者,从Broker订阅并拉取消息进行处理。
- Topic:消息的逻辑分类单元(类似“频道”),Producer发送到指定Topic,Consumer订阅该Topic。
- Partition:Topic的物理分片,每个Partition独立存储和有序,实现并行处理与扩展。
二、主流MQ对比
1.Kafka vs RocketMQ vs RabbitMQ 区别?
特性 | Kafka | RocketMQ | RabbitMQ |
---|---|---|---|
设计目标 | 高吞吐、日志处理 | 金融级可靠性 | 企业级消息路由 |
吞吐量 | 最高(百万级/秒) | 高(十万级/秒) | 中等(万级/秒) |
消息顺序 | 分区有序 | 全局有序 | 队列有序 |
事务消息 | 不支持 | 支持 | 不支持 |
延迟消息 | 不支持 | 支持 | 插件支持 |
2. 选型总结
- Kafka 适用于高吞吐量、流式数据处理的场景。
- RabbitMQ 适用于任务调度、企业级消息通信和复杂的消息路由。
- RocketMQ 适用于电商、金融等高可用、高吞吐量的分布式系统。
3.Kafka 为什么不适合金融级业务?
1. 消息顺序性与事务一致性
事务一致性:Kafka 本身并不直接支持分布式事务。在金融级业务中,通常需要确保多个消息处理的原子性和一致性(例如支付系统中的事务处理)。虽然 Kafka 支持消息的 "Exactly Once" 语义,但这通常需要额外的设计与配置,且依赖于外部的事务管理机制。
消息顺序性:Kafka 在保证分区内的顺序消费方面表现较好,但如果需要跨多个分区处理消息的顺序性,Kafka 就不具备天然的支持。在一些金融系统中,特别是在需要严格的消息顺序保证的情况下,Kafka 可能无法完全满足需求。
2. 消息丢失与确认机制
消息丢失风险:Kafka 的设计目标是高吞吐量,并通过日志存储来确保消息的持久化。然而,在极端情况下,如果系统出现故障,消息丢失的风险仍然存在。虽然 Kafka 提供了副本机制和持久化保证,但对于金融业务来说,尤其是在涉及资金流转等关键业务时,任何消息丢失都可能带来严重的后果。
确认机制:Kafka 在消费端的确认机制(consumer ack)相对简单,依赖于 offset 管理。如果消费者没有正确地处理消息(如没有及时提交 offset),可能会导致重复消费或丢失消息,这在金融系统中是不可接受的。
3. 强一致性保证
最终一致性:Kafka 的设计更多关注“最终一致性”而非强一致性。虽然 Kafka 可以保证高可用性,但它的设计并不适合要求强一致性的场景,尤其是在金融系统中,往往需要保证多个操作(如转账、支付)在同一时间点的一致性,而 Kafka 的最终一致性模型可能无法满足这类需求。
数据延迟问题:在一些高频交易或实时结算的金融应用中,Kafka 的消息传递和处理延迟可能不符合严格的实时性要求,尤其是在高负载情况下。
4. 复杂的消息路由与支持
路由机制的复杂性:Kafka 的消息发布/订阅模型相对简单,没有像 RabbitMQ 那样复杂的交换机、路由键和队列绑定机制。金融业务中,可能需要更细粒度的消息路由和控制,而 Kafka 在这方面的灵活性不如 RabbitMQ。
5. 缺乏完整的事务性支持
Kafka 本身并不内置对“事务性”的完整支持。在一些金融系统中,可能会有跨多个消息队列或不同业务组件的事务处理需求,确保所有操作要么全成功,要么全失败。虽然 Kafka 最近版本支持了事务性消息,但是它并没有像传统的数据库管理系统那样强大的事务支持,因此在一些严格的金融业务中可能无法完全满足需求。
总结:
Kafka 的高吞吐量和分布式特性使其在大数据流处理和实时日志分析等场景中非常出色,但它在处理金融级业务时可能存在一些问题,特别是与消息的强一致性、事务管理、可靠性和精确的顺序消费等方面的要求不完全匹配。在金融级别的应用中,通常更偏向于使用如 RabbitMQ 或 RocketMQ 这样的系统,它们提供更高的可靠性保证、更灵活的事务支持和更强的消息保障机
4. RocketMQ 的 消息存储结构?(CommitLog+ConsumeQueue)
1. CommitLog
作用:CommitLog 是 RocketMQ 存储所有消息的主要日志文件,类似于 Kafka 的日志存储。所有消息都首先被写入 CommitLog,然后再根据需要将其消费到 ConsumeQueue 和 Index(可选)中。CommitLog 是消息持久化的核心组件,保证了消息的顺序和高吞吐量。
特点:
- 顺序存储:CommitLog 中的消息是按顺序存储的,采用 append-only 的方式。这意味着新消息总是附加到文件的末尾,而不是插入到文件的中间,这样可以最大化磁盘的写入效率。
- 文件分段:CommitLog 文件以固定大小(如 1GB 或 2GB)的日志文件进行切分。当文件达到指定大小时,会创建一个新的文件来存储后续的消息。
- 消息格式:每条消息在 CommitLog 中都有一个固定的格式,包括消息的物理偏移量、消息体、消息属性等。
2. ConsumeQueue
作用:ConsumeQueue 是用于高效消费消息的辅助结构,它将 CommitLog 中的消息按照消费者的消费需求进行组织。ConsumeQueue 是一种索引结构,存储每条消息在 CommitLog 中的位置(即偏移量),并为每个消费者队列提供消息消费的入口。
特点:
- 索引结构:ConsumeQueue 中存储的是 CommitLog 中消息的物理偏移量和消息的相关信息(如消息大小、消息标识等)。消费者可以通过 ConsumeQueue 查找消息的位置,而不需要扫描整个 CommitLog 文件。
- 高效消费:ConsumeQueue 帮助消费者快速定位消息,避免了对 CommitLog 的全局扫描,提高了消费效率。每个 Consumer Group 都有独立的 ConsumeQueue,用于追踪该 Consumer Group 对应的消息消费进度。
- 固定长度:每条消息在 ConsumeQueue 中占用固定的空间(如 20 字节),存储 CommitLog 偏移量和其他元数据。这个结构使得 ConsumeQueue 可以非常快速地处理大量的消息。
三、消息队列设计原理
1. 消息如何存储?(以Kafka为例)
- 消息按Topic分区存储,每个分区是一个有序的日志文件(Segment)。
- 通过顺序写入磁盘 + 零拷贝技术提升性能。
2. 推(Push)模式 vs 拉(Pull)模式?
推模式(如RabbitMQ):服务端主动推消息,实时性高,但可能造成消费者压力。
拉模式(如Kafka):消费者主动拉取,可控性强,但可能有延迟。
四、消息可靠性
1. 如何保证消息不丢失?
- 生产者:开启确认机制(如Kafka的ACK=all,RocketMQ的事务消息)。
- Broker:消息持久化(磁盘存储)+ 多副本同步。
- 消费者:手动提交Offset(避免自动提交导致丢失)。
2. 如何保证消息幂等性?
- 生产者幂等:唯一ID(如RocketMQ的Message ID)。
- 消费者幂等:数据库唯一键、Redis去重、乐观锁。
3. 消息发送失败后的 重试机制 如何设计?
在消息队列系统中,设计一个可靠的消息发送失败后的重试机制是确保消息最终能够被正确消费的关键。对于 RocketMQ 等消息队列系统,重试机制的设计涉及多个层面,包括如何检测消息发送失败、如何管理重试次数、如何防止消息的无限重试以及如何保证消息的幂等性。以下是一个设计消息发送失败后的重试机制的思路:
1. 失败检测机制
- 网络问题:发送消息时,如果由于网络问题、服务不可用等原因导致消息无法被成功发送,首先需要进行重试。
- 消息发送返回的状态码:在发送消息时,如果返回的是发送失败的状态码(例如 RocketMQ 的
SEND_FAILED
状态),需要执行重试操作。- 消息发送超时:如果消息发送过程中发生超时(如超出 Broker 规定的时间范围),也应该视为发送失败,并触发重试。
2. 重试策略
为了避免消息发送失败后无限重试,可以采用以下几种常见的重试策略:
a. 固定间隔重试
在这种策略下,消息发送失败后,系统会按照固定的时间间隔进行重试,直到达到最大重试次数。比如,可以设置每次重试的间隔为 1 秒、5 秒等。
- 优点:实现简单,容易控制重试次数和间隔。
- 缺点:固定间隔可能无法适应某些场景,例如网络拥堵或者服务负载过高时,固定间隔可能无法有效减轻压力。
b. 指数退避重试(Exponential Backoff)
指数退避是常见的重试策略。它在每次失败后会逐渐增加重试的时间间隔。例如,第一次重试等待 1 秒,第二次重试等待 2 秒,第三次重试等待 4 秒,依此类推。
- 优点:通过渐增的时间间隔避免短时间内的过度重试,可以有效减轻系统负担,避免突发流量导致系统崩溃。
- 缺点:需要设置合理的最大等待时间,避免重试等待时间过长。
c. 抖动(Jitter)
在重试过程中加入抖动,防止多个失败的客户端在同一时刻发起重试,造成集中请求。这通常与指数退避结合使用,使得每次重试的间隔随机化。
- 优点:有效避免多客户端重试冲突,减轻负载。
- 缺点:可能稍微增加系统的复杂性。
3. 最大重试次数
为了防止消息进入死循环,应该设置最大重试次数。超过最大重试次数后,消息应当被认为是“不可恢复”的,系统应当采取其他措施,如:
- 死信队列:当消息经过最大重试次数后,可以将其转移到一个死信队列(Dead Letter Queue, DLQ),供人工检查或后续处理。
- 报警机制:当消息达到最大重试次数并进入死信队列时,系统应当触发报警,通知相关人员进行问题排查。
4. 幂等性保障
在重试过程中,确保消息的幂等性非常重要。如果消息已经处理过,但由于网络故障等原因导致消息发送失败并被重试,重试时会导致重复消费。因此,在设计时要确保消息处理的幂等性。
- 幂等操作:在消费端设计幂等操作,确保多次消费相同消息不会产生不同的结果。
- 去重机制:可以在消息中加入唯一标识(如消息 ID、事务 ID 等),并在消费端维护去重记录,确保重复消息不会被再次消费。
5. 延迟队列机制
除了直接进行重试外,延迟队列也可以作为一种有效的补充机制。
- 失败的消息可以被放入一个延迟队列中,经过一定的时间后再进行重新尝试。这种方法能够有效避免大量并发重试。
- 通过设置延迟时间,可以让重试的消息“错开”其他消息的重试时机,从而避免集中重试的压力。
6. 多重备份机制
如果使用的是分布式消息队列(如 RocketMQ),可以采用消息备份机制。在某个 Broker 宕机或消息发送失败时,系统可以将消息备份到其他节点进行重新发送,从而增加消息的可靠性。
7. 全局重试管理
对于大规模分布式系统,通常会有一个全局的重试管理系统来控制所有消息的重试策略。这个系统会监控所有发送失败的消息,自动进行调度和重试,防止消息处理时出现瓶颈。
8. 日志与监控
- 日志记录:每次消息发送失败、重试成功或者失败,系统都应该记录相关日志。通过日志,开发人员可以了解消息重试的情况,并进一步调优系统。
- 监控与告警:系统需要对重试情况进行监控,设定阈值,当重试次数过多时触发报警,便于及时响应。
9. RocketMQ 中的重试机制
RocketMQ 本身也提供了一些内建的重试机制:
- Producer 端的重试:在消息发送失败时,Producer 会根据配置的重试次数进行重试。可通过
retryTimesWhenSendFailed
配置来设置最大重试次数。- Consumer 端的重试:如果消费失败,RocketMQ 会将消息放回到消息队列,直到消息成功消费或者达到最大重试次数。
总结
设计一个消息发送失败后的重试机制时,关键是要确保以下几点:
- 避免无限重试:通过最大重试次数或死信队列来避免。
- 幂等性保障:保证即使消息被多次发送,系统的状态也不会受到不良影响。
- 优化重试策略:采用指数退避、抖动等策略来减少系统的压力。
- 监控与报警:对失败重试进行实时监控,及时处理异常情况。
4. 消费者宕机时,如何保证消息不丢失?(手动ACK+消费状态持久化)
- 确保消息在队列中持久化,直到被消费者成功消费。
- 使用重试机制、延迟队列和死信队列处理消费者宕机后的消息恢复。
- 设计幂等性消费逻辑,避免重复消费导致的问题。
- 通过消费者的高可用性和偏移量机制,确保消费者能够从断点恢复消费。
五、消息顺序性
1. 如何保证消息顺序消费?
- 全局有序:单分区/队列(牺牲并发)。
- 分区有序:同一业务Key哈希到同一分区(如订单ID),消费者单线程处理该分区。
六、消息积压 & 延迟
1. 消息积压如何处理?
- 临时扩容:增加消费者实例或分区数。
- 异步处理:降级非核心业务,批量消费。
- 修复消费者:排查消费端性能问题。
2. 如何实现延迟消息?
- RabbitMQ:通过死信队列(DLX)+ TTL实现。
- RocketMQ:内置延迟级别(18种预设时间)。
- Kafka:需自行实现时间轮或外部存储。
七、高可用 & 高性能
1. Kafka的高可用设计?
- 分区副本机制:每个分区有多个副本,Leader负责读写,Follower同步数据。
- ISR机制:仅同步副本(In-Sync Replicas)参与选举,保障一致性。
2. 如何提升MQ性能?
- 批量发送/压缩:减少网络IO。
- 异步刷盘:Broker异步持久化消息。
- 分片存储:水平扩展Topic分区数。
八、高频场景题
1.如何设计一个消息队列?
- 核心组件:Producer、Broker(存储+路由)、Consumer。
- 关键问题:网络协议、存储设计、高可用、消息可靠性。
2. MQ如何实现分布式事务?
- 本地消息表:业务DB记录消息状态,定时任务补偿。
- RocketMQ事务消息:两阶段提交(Half消息 + 回调检查)。
3. 订单超时未支付如何用延迟消息实现?
3.1. 设计需求分析
- 场景:用户在一定时间内未完成支付,系统需要自动关闭订单。
- 延迟时间:订单创建时设置一个超时时间(如 30 分钟),当超过该时间后,系统自动处理未支付的订单。
- 处理操作:超时未支付的订单会被标记为“已超时”或直接关闭。
3.2. 延迟消息的基本原理
延迟消息是指将消息发送到消息队列后,系统会延迟一段时间才消费该消息。通常可以通过两种方式实现:
- 定时消息:通过消息队列的延迟机制(如 Kafka、RocketMQ、RabbitMQ 等支持的定时消息功能)。
- 延迟队列:通过将消息存放到一个专门的延迟队列中,等待指定的时间后再进行消费。
3.3. 使用延迟消息实现订单超时未支付
3.3.1: 定义延迟消息内容
每个订单都会发送一条延迟消息,这条消息包含:
- 订单 ID:标识该订单。
- 订单超时时间:订单创建时间 + 超时时长(例如 30 分钟后)。
- 处理逻辑:如果超时未支付,进行相关处理(如关闭订单)。
3.3.2: 发送延迟消息
通过消息队列发送一条延迟消息,设置消息的延迟时间为订单超时的时长。
RocketMQ: RocketMQ 支持消息延迟,消息生产者可以通过设置
delayTimeLevel
来实现延迟。例如,设置消息延迟 30 分钟:
Message msg = new Message("OrderTopic", "order_timeout_tag", "orderID", orderMessage.getBytes()); msg.setDelayTimeLevel(3); // 3代表30分钟后发送 producer.send(msg);
3.3.3: 消费延迟消息
消费者在延迟时间到达后,会消费这条消息。消费时需要检查该订单是否已经支付。
- 如果订单支付成功,则消息被忽略,不做任何处理。
- 如果订单仍未支付,则执行超时处理逻辑,例如关闭订单、发送通知等。
3.3.4: 超时处理
在消费延迟消息时,如果订单没有支付,系统可以执行以下操作:
- 关闭订单:标记订单为超时关闭。
- 发送提醒:提醒用户支付失败或订单已经超时。
- 退回库存:如果订单超时,可能需要将商品库存恢复。
public void handleOrderTimeout(String orderId) { Order order = orderService.getOrder(orderId); if (order != null && !order.isPaid()) { orderService.closeOrder(orderId); // 关闭订单 inventoryService.restoreInventory(orderId); // 恢复库存 notificationService.sendTimeoutNotification(orderId); // 发送通知 } }
3.4. 示例流程图
- 用户下单,系统创建订单并记录创建时间。
- 系统向消息队列发送一条延迟消息,设置延迟时间为订单的超时时长(例如 30 分钟)。
- 延迟时间到达时,消息队列将消息交给消费者。
- 消费者检查订单是否已支付:
- 如果已支付,消息被丢弃,不做处理。
- 如果未支付,执行超时处理(关闭订单、恢复库存等)。
相关文章:
java八股文-消息队列
一、MQ基础篇 1. 什么是消息队列? 消息队列(MQ)是分布式系统中实现异步通信的中间件,解耦生产者和消费者。 2. 使用场景有哪些? 异步处理(如注册后发送邮件)系统解耦(不同服务通过…...
[晕事]今天做了件晕事65,gcc,cmake, pragam
文章目录 晕事cmake,unity,对gcc pragma指令有没有影响pragma指令的影响pragma指令的使用规范使用注意事项:晕事 最近在某些不能有优化的函数前加了指令 #pragma GCC optimize ("O0")我记得是这个指令只影响当前编译单元。 但是被人找上来了, 因为这个文件所牵…...
SAP-ABAP:使用ST05(SQL Trace)追踪结构字段来源的步骤
ST05 是 SAP 提供的 SQL 跟踪工具,可以记录程序运行期间所有数据库操作(如 SELECT、UPDATE、INSERT)。通过分析跟踪结果,可以精准定位程序中结构字段对应的数据库表。 步骤1:激活ST05跟踪 事务码 ST05 → 点击 Activa…...
STM32--SPI通信讲解
前言 嘿,小伙伴们!今天咱们来聊聊STM32的SPI通信。SPI(Serial Peripheral Interface)是一种超常用的串行通信协议,特别适合微控制器和各种外设(比如传感器、存储器、显示屏)之间的通信。如果你…...
cpu、mem监控
deepseek 1、安装依赖2、psutil库3、streamlit库4、实战4.1 单机CPU和内存使用率监控4.2 多机CPU和内存使用率监控 1、安装依赖 /usr/bin/python3 -m pip install psutil streamlit2、psutil库 psutil是一个跨平台的Python库,用于获取系统使用情况的信息…...
工程实践中常见的几种设计模式解析及 C++ 实现
工程实践中常见的几种设计模式解析及 C 实现 在软件工程中,设计模式是一种通用的解决方案,用于解决常见问题和优化代码结构。它们通过提供一种规范化的编程思想,帮助开发者写出更高效、可维护和可扩展的代码。本文将介绍几种在工程实践中常见…...
ollama在linux上进行部署——离线安装说明
1. 官网下载ollama压缩包 https://ollama.com/download/ollama-linux-amd64.tgz sudo tar -C /usr -xzf ollama-linux-amd64.tgz #解压安装 2. 添加systemctl服务启动文件 添加服务文件:/etc/systemd/system/ollama.service [Unit] DescriptionOllama …...
(一)趣学设计模式 之 单例模式!
目录 一、啥是单例模式?二、为什么要用单例模式?三、单例模式怎么实现?1. 饿汉式:先下手为强! 😈2. 懒汉式:用的时候再创建! 😴3. 枚举:最简单最安全的单例&a…...
基于无人机遥感的烟株提取和计数研究
一.研究的背景、目的和意义 1.研究背景及意义 烟草作为我国重要的经济作物之一,其种植面积和产量的准确统计对于烟草产业的发展和管理至关重要。传统的人工烟株计数方法存在效率低、误差大、难以覆盖大面积烟田等问题,已无法满足现代烟草种植管理的需求…...
在windows下安装windows+Ubuntu16.04双系统(上)
这篇文章的内容主要来源于这篇文章,给文章很详细的介绍了如何从windows下安装windowsubuntu16.04双系统。我刚开始装双系统都是参照这个方法,该作者前后更新了两个版本,在这里对其稍微进行整理一下。 一、准备:(这里推…...
TensorFlow 是一个由 Google 开发的开源机器学习库
TensorFlow 是一个由 Google 开发的开源机器学习库,被广泛应用于深度学习和人工智能领域。它的基本概念包括以下几点: 张量(Tensors):在 TensorFlow 中,数据的基本单位是张量,它类似于多维数组或…...
C++ day4 练习
一、练习1 找到第一天mystring练习,实现以下功能: mystring str "hello"; mystring ptr "world"; str str ptr; str ptr; str[0] H; 【代码】: #include <iostream> #include <cstring> #include &l…...
利用机器学习实现实时交易欺诈检测
以下是一个基于Python的银行反欺诈AI应用示例代码,演示如何利用机器学习实现实时交易欺诈检测。该示例使用LightGBM算法训练模型,并通过Flask框架构建实时检测API: python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preproc…...
基于Hadoop的汽车大数据分析系统设计与实现【爬虫、数据预处理、MapReduce、echarts、Flask】
文章目录 有需要本项目的代码或文档以及全部资源,或者部署调试可以私信博主 项目介绍爬虫数据概览HIve表设计Cars Database Tables 1. cars_data2. annual_sales_volume3. brand_sales_volume4. city_sales_volume5. sales_volume_by_year_and_brand6. sales_distri…...
安宝特科技 | Vuzix Z100智能眼镜+AugmentOS:重新定义AI可穿戴设备的未来——从操作系统到硬件生态,如何掀起无感智能革命?
一、AugmentOS:AI可穿戴的“操作系统革命” 2025年2月3日,Vuzix与AI人机交互团队Mentra联合推出的AugmentOS,被业内视为智能眼镜领域的“iOS时刻”。这款全球首个专为智能眼镜设计的通用操作系统,通过三大突破重新定义了AI可穿戴…...
蓝桥杯之日期题
文章目录 1.蓝桥杯必备知识点2. 题型13.需求2 1.蓝桥杯必备知识点 蓝桥杯是一个面向全国高校计算机相关专业学生的学科竞赛,涵盖多个赛道,常见的有软件类(如 C/C 程序设计、Java 软件开发、Python 程序设计)和电子类(…...
sklearn中的决策树-分类树:实例-分类树在合成数据集上的表现
分类树实例:分类树在合成数据集上的表现 代码分解 在不同结构的据集上测试一下决策树的效果(二分型,月亮形,环形) 导入 import numpy as np from matplotlib import pyplot as plt from matplotlib.colors import Li…...
es-head(es库-谷歌浏览器插件)
1.下载es-head插件压缩包,并解压缩 2.谷歌浏览器添加插件 3.使用...
AI客服-接入deepseek大模型到微信(本地部署deepseek集成微信自动收发消息)
1.本地部署 1.1 ollama Ollama软件通过其高度优化的推理引擎和先进的内存管理机制,显著提升了大型语言模型在本地设备上的运行效率。其核心采用了量化技术(Quantization)以降低模型的计算复杂度和存储需求,同时结合张量并行计算&…...
kotlin 知识点 七 泛型的高级特性
对泛型进行实化 泛型实化这个功能对于绝大多数Java 程序员来讲是非常陌生的,因为Java 中完全没有这个概 念。而如果我们想要深刻地理解泛型实化,就要先解释一下Java 的泛型擦除机制才行。 在JDK 1.5之前,Java 是没有泛型功能的,…...
正则表达式–断言
原文地址:正则表达式–断言 – 无敌牛 欢迎参观我的个人博客:正则表达式特殊字符 – 无敌牛 断言assertions 1、(?...):正向预查(positive lookahead),表示某个字符串后面应该跟着什么。但这个字符串本身…...
OceanBase数据库实战:Windows Docker部署与DBeaver无缝对接
一、前言 OceanBase 是一款高性能、高可扩展的分布式数据库,适用于大规模数据处理和企业级应用。 随着大数据和云计算的普及,OceanBase 在企业数字化转型中扮演着重要角色。学习 OceanBase 可以帮助开发者掌握先进的分布式数据库技术,提升数…...
C++:开胃菜练习项目---定长内存池的实现以及测试
项目介绍 简介 作为学习tcmalloc高并发内存池项目前的一个铺垫。 作为程序员(C/C)我们知道申请内存使用的是malloc,malloc其实就是一个通用的大众货,什么场景下都可以用,但是什么场景下都可以用就意味着什么场景下都不会有很高的性能…...
【LLM】本地部署LLM大语言模型+可视化交互聊天,附常见本地部署硬件要求(以Ollama+OpenWebUI部署DeepSeekR1为例)
【LLM】本地部署LLM大语言模型可视化交互聊天,附常见本地部署硬件要求(以OllamaOpenWebUI部署DeepSeekR1为例) 文章目录 1、本地部署LLM(以Ollama为例)2、本地LLM交互界面(以OpenWebUI为例)3、本…...
JVM相关面试题
1. 类加载与双亲委派机制 聊一下你对类加载器的理解。 类加载器是JVM用来加载类文件到内存的组件。它负责将字节码文件解析为java.lang.Class实例,并存储到运行时数据区的方法区中。类加载器分为Bootstrap ClassLoader、Extension ClassLoader和Application ClassLo…...
WordPress Course Booking System SQL注入漏洞复现 (CVE-2025-22785)(附脚本)
免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x0…...
二:前端发送POST请求,后端获取数据
接着一:可以通过端口访问公网IP之后 二需要实现:点击飞书多维表格中的按钮,向服务器发送HTTP请求,并执行脚本程序 向服务器发送HTTP请求: 发送请求需要明确一下几个点 请求方法: 由于是向服务器端发送值…...
Go语言中的信号量:原理与实践指南
Go语言中的信号量:原理与实践指南 引言 在并发编程中,控制对共享资源的访问是一个经典问题。Go语言提供了丰富的并发原语(如sync.Mutex),但当我们需要灵活限制并发数量时,信号量(Semaphore&am…...
cpp中的继承
一、继承概念 在cpp中,封装、继承、多态是面向对象的三大特性。这里的继承就是允许已经存在的类(也就是基类)的基础上创建新类(派生类或者子类),从而实现代码的复用。 如上图所示,Person是基类&…...
3DGS(三维高斯散射)与SLAM技术结合的应用
3DGS(三维高斯散射)与SLAM(即时定位与地图构建)技术的结合,为动态环境感知、高效场景建模与实时渲染提供了新的可能性。以下从技术融合原理、应用场景、优势挑战及典型案例展开分析: 一、核心融合原理 1. …...
DeepSeek赋能大模型内容安全,网易易盾AIGC内容风控解决方案三大升级
在近两年由AI引发的生产力革命的背后,一场关乎数字世界秩序的攻防战正在上演:AI生成的深度伪造视频导致企业品牌声誉损失日均超千万,批量生成的侵权内容使版权纠纷量与日俱增,黑灰产利用AI技术持续发起欺诈攻击。 与此同时&#…...
mybatis 细节(${ ..}和#{..},resultType 和 resultMap的区别,别名的使用,Mapper 代理模式)
${..}和#{..} 占位符 #{..} #{}实现的是向prepareStatement中的预处理语句中设置参数值,sql语句中#{}表示一个占位符即?。 <!-- 根据id查询用户信息 --> <select id"findUserById" parameterType"int" resultType"user"&g…...
电子科技大学考研复习经验分享
电子科技大学考研复习经验分享 本人情况:本科就读于电科软院,24年2月开始了解考研,24年3月开始数学,9月决定考本院(开始全天候图书馆学习)并开始专业课学习,11月底开始政治学习,最后…...
【python】提取word\pdf格式内容到txt文件
一、使用pdfminer提取 import os import re from pdfminer.high_level import extract_text import docx2txt import jiebadef read_pdf(file_path):"""读取 PDF 文件内容:param file_path: PDF 文件路径:return: 文件内容文本"""try:text ext…...
Selenium 与 Coze 集成
涵盖两者的基本概念、集成步骤、代码示例以及相关注意事项。 基本概念 Selenium:是一个用于自动化浏览器操作的工具集,支持多种浏览器(如 Chrome、Firefox 等),能够模拟用户在浏览器中的各种操作,如点击、输入文本、选择下拉框等,常用于 Web 应用的自动化测试。Coze:它…...
SQL注入(order by,limit),seacms的报错注入以及系统库的绕过
1:如果information_schema被过滤了,该怎么绕过 1.1:介绍一下information_schema这个库 information_schema 是一个非常重要的系统数据库,它在SQL标准中定义,并且被许多关系型数据库管理系统(RDBMS&#x…...
数据保护API(DPAPI)深度剖析与安全实践
Windows DPAPI 安全机制解析 在当今数据泄露与网络攻击日益频繁的背景下,Windows 提供的 DPAPI(Data Protection API)成为开发者保护本地敏感数据的重要工具。本文将从 双层密钥体系、加密流程、跨上下文加密、已知攻击向量与防御措施、企业…...
Sqlserver安全篇之_隐藏实例功能和禁用SQL Server Browser服务
总结: 1、隐藏实例功能和禁用SQL Server Browser服务的功能一样,对应非默认实例(且这个默认实例是1433端口)的情况下,都是需要在连接字符串中提供端口号才能连接到实例 2、隐藏实例功能后,就算开启了SQL Server Browser服务&#…...
muduo网络库2
Muduo网络库:底层实质上为Linux的epoll pthread线程池,且依赖boost库。 muduo的网络设计核心为一个线程一个事件循环,有一个main Reactor负载accept连接,然后把连接分发到某个sub Reactor(采用轮询的方式来选择sub Reactor)&…...
【ISP】畸变校正 LDC
ISP(Image Signal Processor,图像信号处理器)中的 LDC(Lens Distortion Correction,镜头畸变校正)是一种用于校正镜头畸变的图像处理技术。镜头畸变是由于镜头的光学特性导致的图像失真现象,主要…...
deepseek 学习资料整理
deepseek 学习资料整理 deepseek_清华大学指导手册_pdf_1-5 无套路,无需关注,无需登录,无需app,直接下载: 下载地址 文件列表: 001_清华大学_DeepSeek从入门到精通.pdf 002_清华大学_DeepSeek如何赋能职…...
【deepseek】本地部署+webui访问
背景 最近deepseek很火,但是官网的老是被限流使用,还有就是自己也想着玩一玩,于是准备在自己电脑跑一个 直接附上结果地址mydeepseek 准备工作 windows和linux都可 我这里选择linux,ubuntu系统 安装ollama 看下图࿰…...
LeetCodeHot100_0x02
LeetCodeHot100_0x02 11. 滑动窗口最大值(不熟) 求解思路: 暴力法的时间复杂度是O(NK),在K常数较大时复杂度就高了。所以我们要想办法将K优化掉,即本题的难点在于如何在O(1)的时间复杂度求出当前窗口中的最大值。这个…...
STM32MP157A-FSMP1A单片机移植Linux系统SPI总线驱动
SPI总线驱动整体上与I2C总线驱动类型,差别主要在设备树和数据传输上,由于SPI是由4根线实现主从机的通信,在设备树上配置时需要对SPI进行设置。 原理图可知,数码管使用的SPI4对应了单片机上的PE11-->SPI4-NSS,PE12-->SPI4-S…...
H7 based Phalanx G1 ETH Data Switch Hub UART Interface 介绍
外接接口配置 H7 based Phalanx G1 ETH Data Switch hub UART interface 1.对外接接口进行详细介绍 以下是针对 H7 based Phalanx G1 设备的外接接口配置的详细解析,重点说明其 ETH Data Switch Hub 和 UART Interface 的技术特性与应用场景: 一、核…...
Vue04
自定义指令 directives是Vue的一个配置项 这里写自定义指令 自定义指令被调用的时机 指令与元素成功绑定时 指令所在的模板被重新解析时 函数式 <span v-big"n"></span> directives:{ big(element,binding){ element.innerText bingin…...
OpenCV(9):视频处理
1 介绍 视频是由一系列连续的图像帧组成的,每一帧都是一幅静态图像。视频处理的核心就是对这些图像帧进行处理。常见的视频处理任务包括视频读取、视频播放、视频保存、视频帧处理等。 视频分析: 通过视频处理技术,可以分析视频中的运动、目标、事件等。…...
短剧源码部署搭建小程序搭建IAA+IAP混合解锁模式
在当今数字化内容消费迅速增长的时代,短剧作为一种新兴的内容形式,凭借其短小精悍、节奏紧凑的特点,迅速吸引了大量用户。作为一名软件体验测试人员,我有幸体验了一款集创新与实用为一体的短剧小程序。这款小程序不仅在前端用户体…...
基于 CFD 预测的机器学习第 2 部分:在 Benchmark 应用程序上使用 Stochos 预测流场
了解机器学习和 Stochos 如何彻底改变制造业的 CFD 预测。 挑战 预测复杂流体动力学场景中的流场一直是工程师和科学家面临的重大挑战。传统的计算流体动力学 (CFD) 方法需要大量的计算资源和时间,因此难以处理实时预测和大规模模拟。 此外…...
NLP的预处理数据
处理文本数据的主要工具是Tokenizer。Tokenizer根据一组规则将文本拆分为tokens。然后将这些tokens转换为数字,然后转换为张量,成为模型的输入。模型所需的任何附加输入都由Tokenizer添加。 如果您计划使用预训练模型,重要的是使用与之关联的…...