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

并发设计模式实战系列(9):消息传递(Message Passing)

🌟 大家好,我是摘星! 🌟

今天为大家带来的是并发设计模式实战系列,第九章消息传递(Message Passing),废话不多说直接开始~

目录

一、核心原理深度拆解

1. 消息传递架构

2. 并发控制关键

二、生活化类比:邮局系统

三、Java代码实现(生产级Demo)

1. 完整可运行代码

2. 关键配置说明

四、横向对比表格

1. 并发通信模式对比

2. 消息队列实现对比

五、高级优化技巧

1. 批量消息处理

2. 优先级消息处理

3. 死信队列处理

4. 监控指标

六、分布式消息传递系统设计

1. 跨节点通信架构

2. 关键设计考量

七、消息模式高级变体

1. 发布/订阅模式实现

2. 请求-响应模式实现

八、性能优化深度策略

1. 零拷贝传输优化

2. 批处理与压缩

九、容错与可靠性保障

1. 消息持久化方案

2. 事务消息处理

十、现代消息模式演进

1. 响应式消息流

2. 事件溯源模式

十一、性能监控指标体系

1. 关键监控指标

2. 健康检查实现

十二、典型应用场景案例

1. 电商订单处理系统

2. 物联网数据处理


一、核心原理深度拆解

1. 消息传递架构

┌───────────────┐      ┌───────────────┐      ┌───────────────┐
│   Producer    │───>  │  Message Queue │───>  │   Consumer    │
│ (并发发送消息) │<───  │ (线程安全缓冲)  │<───  │ (并发处理消息)  │
└───────────────┘      └───────────────┘      └───────────────┘
  • 生产者-消费者解耦:通过消息队列实现松耦合
  • 线程安全通信:消息队列作为共享数据的唯一通道
  • 流量控制:队列容量限制防止系统过载

2. 并发控制关键

  • 无共享状态:各线程通过消息通信而非共享内存
  • 异步处理:生产者不等待消费者处理完成
  • 背压机制:队列满时生产者阻塞或采取其他策略

二、生活化类比:邮局系统

系统组件

现实类比

核心行为

Producer

寄信人

写好信投入邮箱

Message Queue

邮局分拣中心

暂存和分类信件

Consumer

邮递员

按区域派送信件

  • 突发流量处理:节假日大量信件 → 邮局暂存 → 邮递员按能力派送
  • 失败处理:无法投递的信件退回或进入死信队列

三、Java代码实现(生产级Demo)

1. 完整可运行代码

import java.util.concurrent.*;
import java.util.function.Consumer;public class MessagePassingSystem<T> {// 消息队列(设置容量防止OOM)private final BlockingQueue<Message<T>> messageQueue;// 消费者线程池private final ExecutorService consumerPool;// 消息封装static class Message<T> {final T content;final Consumer<T> onSuccess;final Consumer<Exception> onError;Message(T content, Consumer<T> onSuccess, Consumer<Exception> onError) {this.content = content;this.onSuccess = onSuccess;this.onError = onError;}}public MessagePassingSystem(int queueSize, int consumerThreads) {this.messageQueue = new LinkedBlockingQueue<>(queueSize);this.consumerPool = Executors.newFixedThreadPool(consumerThreads, r -> {Thread t = new Thread(r);t.setDaemon(true);return t;});// 启动消费者startConsumers();}// 生产者APIpublic void send(T message, Consumer<T> onSuccess, Consumer<Exception> onError) throws InterruptedException {Message<T> msg = new Message<>(message, onSuccess, onError);messageQueue.put(msg); // 阻塞直到队列有空位}// 消费者处理private void startConsumers() {for (int i = 0; i < consumerPool.getCorePoolSize(); i++) {consumerPool.execute(() -> {while (!Thread.currentThread().isInterrupted()) {try {Message<T> message = messageQueue.take();processMessage(message);} catch (InterruptedException e) {Thread.currentThread().interrupt();}}});}}private void processMessage(Message<T> message) {try {// 模拟业务处理System.out.println("处理消息: " + message.content);Thread.sleep(100); // 模拟处理耗时// 处理成功回调if (message.onSuccess != null) {message.onSuccess.accept(message.content);}} catch (Exception e) {// 处理失败回调if (message.onError != null) {message.onError.accept(e);}}}public void shutdown() {consumerPool.shutdown();}public static void main(String[] args) throws Exception {// 创建消息系统:队列容量100,4个消费者线程MessagePassingSystem<String> mps = new MessagePassingSystem<>(100, 4);// 模拟生产者ExecutorService producers = Executors.newFixedThreadPool(8);for (int i = 0; i < 100; i++) {final int msgId = i;producers.execute(() -> {try {mps.send("消息-" + msgId, result -> System.out.println("处理成功: " + result),error -> System.err.println("处理失败: " + msgId + ", " + error));} catch (InterruptedException e) {Thread.currentThread().interrupt();}});}producers.shutdown();producers.awaitTermination(1, TimeUnit.MINUTES);mps.shutdown();}
}

2. 关键配置说明

// 队列选择策略
BlockingQueue<Message<T>> queue = new LinkedBlockingQueue<>(100); // 有界队列
// 或
BlockingQueue<Message<T>> queue = new ArrayBlockingQueue<>(100); // 固定大小// 消费者线程池配置
ExecutorService consumerPool = new ThreadPoolExecutor(4, // 核心线程数8, // 最大线程数60, TimeUnit.SECONDS,new SynchronousQueue<>(), // 直接传递new ThreadPoolExecutor.CallerRunsPolicy() // 饱和策略
);

四、横向对比表格

1. 并发通信模式对比

模式

数据共享方式

线程安全保证

适用场景

共享内存

直接内存访问

需显式同步

高性能计算

消息传递

通过消息队列

队列内部保证

分布式/并发系统

Actor模型

通过消息邮箱

每个Actor单线程

高并发系统

数据流

通过流管道

管道内部保证

流处理系统

2. 消息队列实现对比

实现方式

特点

适用场景

BlockingQueue

JVM内内存队列

单机多线程通信

Kafka/RabbitMQ

分布式持久化队列

分布式系统

Disruptor

高性能无锁队列

低延迟高吞吐系统

ZeroMQ

网络消息库

跨进程通信

五、高级优化技巧

1. 批量消息处理

// 批量消费消息提升吞吐量
List<Message<T>> batch = new ArrayList<>(100);
messageQueue.drainTo(batch, 100); // 批量取出
if (!batch.isEmpty()) {consumerPool.execute(() -> processBatch(batch));
}

2. 优先级消息处理

// 使用优先级队列
BlockingQueue<Message<T>> queue = new PriorityBlockingQueue<>(100, (m1, m2) -> m1.priority - m2.priority
);

3. 死信队列处理

// 失败消息转入死信队列
private final BlockingQueue<Message<T>> deadLetterQueue = new LinkedBlockingQueue<>();private void processMessage(Message<T> message) {try {// ...正常处理} catch (Exception e) {deadLetterQueue.put(message); // 转入死信队列}
}

4. 监控指标

// 监控队列积压
int backlog = messageQueue.size();// 监控处理延迟
long enqueueTime = System.currentTimeMillis();
// 在消息处理时记录延迟
long latency = System.currentTimeMillis() - message.enqueueTime;

六、分布式消息传递系统设计

1. 跨节点通信架构

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│  Node 1     │───>│  Message    │───>│  Node 2     │
│ (Producer)  │<───│  Broker     │<───│ (Consumer)  │
└─────────────┘    └─────────────┘    └─────────────┘
  • 消息代理中间件:Kafka/RabbitMQ/RocketMQ
  • 序列化协议:Protobuf/Avro/JSON
  • 网络传输:TCP长连接/HTTP2/gRPC

2. 关键设计考量

// 分布式消息发送示例(伪代码)
public class DistributedSender {private final MessageQueueClient client;public void send(String topic, byte[] payload) {// 消息属性设置Message msg = new Message(topic, payload,System.currentTimeMillis(),DeliveryGuarantee.AT_LEAST_ONCE);// 异步发送+回调client.sendAsync(msg, new Callback() {@Overridepublic void onComplete(Result result) {if(!result.isSuccess()) {// 重试或记录死信retryOrDeadLetter(msg);}}});}
}

七、消息模式高级变体

1. 发布/订阅模式实现

// 基于Topic的消息路由
public class PubSubSystem {private final Map<String, List<Consumer>> topicSubscribers = new ConcurrentHashMap<>();public void subscribe(String topic, Consumer consumer) {topicSubscribers.computeIfAbsent(topic, k -> new CopyOnWriteArrayList<>()).add(consumer);}public void publish(String topic, Message message) {List<Consumer> consumers = topicSubscribers.get(topic);if(consumers != null) {consumers.forEach(c -> c.accept(message));}}
}

2. 请求-响应模式实现

// 带关联ID的请求响应处理
public class RequestReplySystem {private final BlockingQueue<Request> requestQueue = new LinkedBlockingQueue<>();private final ConcurrentMap<String, CompletableFuture<Response>> pendingRequests = new ConcurrentHashMap<>();// 请求方public CompletableFuture<Response> request(Request req) {CompletableFuture<Response> future = new CompletableFuture<>();pendingRequests.put(req.getCorrelationId(), future);requestQueue.offer(req);return future;}// 响应处理线程private void processResponse(Response resp) {CompletableFuture<Response> future = pendingRequests.remove(resp.getCorrelationId());if(future != null) {future.complete(resp);}}
}

八、性能优化深度策略

1. 零拷贝传输优化

// 使用ByteBuffer减少内存拷贝
public class ZeroCopyMessage {private final ByteBuffer payload;public void send(SocketChannel channel) throws IOException {while(payload.hasRemaining()) {channel.write(payload);}}
}

2. 批处理与压缩

// 消息批量压缩处理
public class BatchCompressor {public byte[] compressBatch(List<Message> messages) {try(ByteArrayOutputStream baos = new ByteArrayOutputStream();GZIPOutputStream gzip = new GZIPOutputStream(baos)) {for(Message msg : messages) {gzip.write(msg.serialize());}gzip.finish();return baos.toByteArray();}}
}

九、容错与可靠性保障

1. 消息持久化方案

// 基于WAL的持久化存储
public class MessageJournal {private final RandomAccessFile journalFile;private final AtomicLong writeOffset = new AtomicLong(0);public void append(Message msg) throws IOException {byte[] data = msg.serialize();synchronized(journalFile) {journalFile.seek(writeOffset.get());journalFile.writeInt(data.length);journalFile.write(data);journalFile.getFD().sync();writeOffset.addAndGet(4 + data.length);}}
}

2. 事务消息处理

// 两阶段提交实现
public class TransactionalProcessor {public void processWithTransaction(Message msg) {try {// 阶段1:预备boolean prepared = prepareResources(msg);// 阶段2:提交/回滚if(prepared) {commitTransaction(msg);sendAck(msg.getId());} else {rollbackTransaction(msg);sendNack(msg.getId());}} catch(Exception e) {// 补偿处理compensateTransaction(msg);}}
}

十、现代消息模式演进

1. 响应式消息流

// 基于Reactive Streams的实现
public class ReactiveMessageSystem {private final Flux<Message> messageStream;public ReactiveMessageSystem(MessageSource source) {this.messageStream = Flux.fromIterable(source).publishOn(Schedulers.parallel()).filter(msg -> isValid(msg)).map(this::transform);}public void subscribe(Consumer<Message> subscriber) {messageStream.subscribe(subscriber);}
}

2. 事件溯源模式

// 基于事件日志的状态重建
public class EventSourcedRepository {private final EventStore eventStore;public Entity get(String id) {List<Event> events = eventStore.getEvents(id);return recreateEntity(events);}private Entity recreateEntity(List<Event> events) {Entity entity = new Entity();events.forEach(e -> entity.apply(e));return entity;}
}

十一、性能监控指标体系

1. 关键监控指标

指标类别

具体指标

采集方式

吞吐量

消息发送/消费速率(msg/s)

计数器+时间窗口

延迟

端到端处理延迟(ms)

时间戳差值统计

可靠性

消息投递成功率(%)

成功/失败计数器

资源使用

内存/CPU/网络占用

系统监控接口

2. 健康检查实现

public class HealthChecker {private final MessageQueue queue;private final ThreadPoolExecutor executor;public HealthCheckResult check() {return new HealthCheckResult(queue.size() < queue.capacity() * 0.9,executor.getActiveCount() < executor.getMaximumPoolSize(),System.currentTimeMillis() - lastMessageTime < 5000);}
}

十二、典型应用场景案例

1. 电商订单处理系统

┌─────────────┐    ┌─────────────┐    ┌─────────────┐
│ 订单创建服务 │───>│ 订单消息队列 │───>│ 订单处理服务 │
└─────────────┘    └─────────────┘    └─────────────┘↓┌─────────────┐│ 支付服务     │└─────────────┘

2. 物联网数据处理

// 设备消息处理流水线
public class IoTMessagePipeline {public void buildPipeline() {// 1. 设备原始数据接收MessageSource source = new MqttSource();// 2. 构建处理流水线Pipeline pipeline = new PipelineBuilder().addStage(new DataValidation()).addStage(new DataNormalization()).addStage(new AnomalyDetection()).addStage(new StorageWriter()).build();// 3. 启动处理source.subscribe(pipeline::process);}
}

相关文章:

并发设计模式实战系列(9):消息传递(Message Passing)

&#x1f31f; 大家好&#xff0c;我是摘星&#xff01; &#x1f31f; 今天为大家带来的是并发设计模式实战系列&#xff0c;第九章消息传递&#xff08;Message Passing&#xff09;&#xff0c;废话不多说直接开始~ 目录 一、核心原理深度拆解 1. 消息传递架构 2. 并发…...

【MCP Node.js SDK 全栈进阶指南】高级篇(3):MCP 安全体系建设

背景 随着MCP协议在企业和个人应用中的广泛采用,安全性已成为MCP系统设计和开发中不可忽视的核心要素。一个健壮的MCP安全体系不仅能保护敏感数据和用户隐私,还能确保AI模型与外部工具交互的可靠性和完整性。本文将深入探讨MCP TypeScript-SDK的安全体系建设,帮助开发者构建…...

C++智能指针

智能指针是C中用于自动管理动态分配内存的类模板&#xff0c;它们通过在适当的时机自动释放内存来帮助防止内存泄漏。C11引入了以下几种主要的智能指针&#xff1a; 1. std::unique_ptr 独占所有权的智能指针&#xff0c;同一时间只能有一个unique_ptr指向特定对象。 #inclu…...

基于STM32、HAL库的ATECC608B安全验证及加密芯片驱动程序设计

一、简介: ATECC608B是Microchip公司生产的一款安全加密芯片,提供以下主要特性: 基于硬件的高安全性加密算法 ECC P-256加密引擎 SHA-256哈希算法 AES-128加密 真随机数生成器(TRNG) 16KB安全存储空间 IC接口(最高1MHz) 低功耗设计,适合物联网应用 二、硬件接口: ATECC60…...

【安全扫描器原理】ICMP扫描

【安全扫描器原理】ICMP扫描 1.ICMP协议概述2.ping命令3.tracert命令4.ICMP通信实例5.ICMP协议内容6.ICMP扫描的安全性7.ICMP扫描器的原理及优化策略1.ICMP协议概述 ICMP是TCP/IP协议族中的一个重要协议,主要用于在IP主机之间、主机和路由器之间传递控制消息,这些控制消息包…...

前端 AI 开发实战:基于自定义工具类的大语言模型与语音识别调用指南

在人工智能技术快速发展的今天&#xff0c;将大语言模型&#xff08;LLM&#xff09;和语音识别&#xff08;ASR&#xff09;功能集成到前端应用中&#xff0c;已经成为提升用户体验、打造智能化应用的重要手段。本文将结合一段实际的 AI 工具类代码&#xff0c;详细讲解如何在…...

组件轮播与样式结构重用实验

任务一&#xff1a;使用“Swiper 轮播组件”对自行选择的图片和文本素材分别进行轮播&#xff0c;且调整对应的“loop”、“autoPlay”“interval”、“vertical”属性&#xff0c;实现不同的轮播效果&#xff0c;使用Swiper 样式自定义&#xff0c;修改默认小圆点和被选中小圆…...

(计数)洛谷 P8386 PA2021 Od deski do deski/P10375 AHOI2024 计数 题解

题意 给定 n n n&#xff0c; m m m&#xff0c;求满足以下限制的长度为 n n n 的序列数目&#xff1a; 每个元素在 [ 1 , m ] [1,m] [1,m] 之间&#xff1b;一次操作定义为删除一个长度至少为 2 2 2 且区间两端相等的区间&#xff0c;该序列需要在若干次操作内被删空。 …...

基于C++数据结构双向循环链表实现的贪吃蛇

大二上数据结构I-课程设计 1.设计思路 建模&#xff1a;程序界面是一个二维平面图蛇&#xff1a;蛇的身体可以看作是链表的节点&#xff0c;当蛇吃到食物时&#xff0c;就增加一节链表节点食物&#xff1a;相应地在边界内随机生成蛇的移动&#xff1a;取得上下左右键的ASCII码…...

H3C ER3208G3路由实现内网机器通过公网固定IP访问内网服务器

内网机器可以通过内网访问服务器&#xff1b;公网机器可以通过公网固定IP访问服务器&#xff1b;但内网机器无法通过公网固定IP访问内网服务器&#xff1b;想实现内网机器通过公网固定IP访问内网服务器 WEB登录管理后台&#xff0c;网络设置->NAT配置&#xff0c;选“高级配…...

Vue3+Three JS高德地图自定义经纬度实现围栏

Vue3实现代码 index.html需要引入three.js <script src"https://cdn.jsdelivr.net/npm/three0.142/build/three.js"></script> 围栏组件 <template><div id"mapContainer" ref"mapContainer"></div> </templ…...

远程访问你的家庭NAS服务器:OpenMediaVault内网穿透配置教程

文章目录 前言1. OMV安装Cpolar工具2. 配置OMV远程访问地址3. 远程访问OMV管理界面4. 固定远程访问地址 前言 在这个数据爆炸的时代&#xff0c;无论是管理家人的照片和视频&#xff0c;还是企业老板处理财务报表和技术文档&#xff0c;高效的数据管理和便捷的文件共享已经变得…...

4.2.3 MYSQL事务原理分析

文章目录 4.2.3 MYSQL事务原理分析1. 事务1. 前提&#xff1a;并发连接访问2. 事务定义3. 事务语句&#xff1a;4. acid特性5. undolog-回滚日志6. redolog-重做日志 2. 隔离级别1. 四种隔离级别2. 并发问题解释3. 隔离级别设置 3. MVCC(Multiversion Concurrency Control&…...

极狐GitLab 如何使用文件导出迁移项目和群组?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 用文件导出迁移项目和群组 (FREE ALL) 推荐使用 直接传输 迁移群组和项目。然而&#xff0c;在某些情况下&#xff0c;您可能…...

Linux/AndroidOS中进程间的通信线程间的同步 - 管道和FIFO

前言 管道是 UNIX 系统上最古老的 IPC 方法&#xff0c;它在 20 世纪 70 年代早期 UNIX 的第三个版本上就出现了。管道为一个常见需求提供了一个优雅的解决方案&#xff1a;给定两个运行不同程序的进程&#xff0c;在 shell 中如何让一个进程的输出作为另一个进程的输入呢&…...

第十六届蓝桥杯 2025 C/C++组 破解信息

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 思路详解&#xff1a; 代码&#xff1a; 代码详解&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; P12344 [蓝桥杯 2025 省 B/Python B 第二场] 破解信息…...

[FPGA Video IP] VDMA

Xilinx AXI Video Direct Memory Access IP (PG020) 详细介绍 概述 Xilinx AXI Video Direct Memory Access (AXI VDMA) LogiCORE™ IP 核&#xff08;PG020&#xff09;是一个软核 IP&#xff0c;专为视频应用设计&#xff0c;提供在内存与 AXI4-Stream 视频外设之间的高带宽…...

Ubuntu如何查看硬盘的使用情况,以及挂载情况。

在Ubuntu中查看硬盘使用情况及挂载情况&#xff0c;可通过以下命令实现&#xff1a; 一、查看硬盘使用情况 df -h 显示所有挂载文件系统的磁盘空间使用情况&#xff08;含总容量、已用空间、可用空间等&#xff09;&#xff0c;输出结果以易读格式&#xff08;如GB、MB&#x…...

第十六届蓝桥杯 2025 C/C++组 脉冲强度之和

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 思路详解&#xff1a; 代码&#xff1a; 代码详解&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; P12338 [蓝桥杯 2025 省 B/Python B 第二场] 脉冲强度…...

23种设计模式-行为型模式之中介者模式(Java版本)

Java 中介者模式&#xff08;Mediator Pattern&#xff09;详解 &#x1f9e0; 什么是中介者模式&#xff1f; 中介者模式是一种行为型设计模式&#xff0c;它通过定义一个中介者对象来封装一组对象之间的交互。中介者使得各个对象不需要显式地知道彼此之间的关系&#xff0c…...

集群与存储-lvs-nat实验

一、实验目的 1、熟练掌握ipvsadm 指令的使用 2、理解lvs 负载均衡的原理 3. 熟练掌握lvs-netnfs的配置 二、实验内容 1.拓扑图 2.实验步骤 #在节点服务器中添加网卡&#xff0c;选择仅主机模式 #查看网卡 #启用网卡 nmcli device up ens224 ip a #修改虚拟地址的网关 #…...

Android——Serializable和Parcelable

在Android中传递对象的方式 在 Android 开发中&#xff0c;Parcelable 和 Serializable 是两种用于对象序列化的接口 Serializable public class Student implements Serializable {public int id;public String name;public int age;public Student(int id, String name, i…...

python:sklearn 决策树(Decision Tree)

5. 决策树&#xff08;Decision Tree&#xff09; - 第5章 算法思想&#xff1a;基于信息增益&#xff08;ID3&#xff09;或基尼不纯度&#xff08;CART&#xff09;递归划分特征。 编写 test_dtree_1.py 如下 # -*- coding: utf-8 -*- """ 5. 决策树&…...

0-1背包难题哪家强:回溯法 VS 动态规划 VS 贪心算法

回溯法、动态规划和贪心算法是三种常见的算法设计思想&#xff0c;他们都可以用来解决0-1背包问题&#xff0c;但它们在解决问题的思路、适用条件和效率上存在显著差异。以下从多个维度进行对比分析&#xff1a; 相关系列文章链接: 《贪心算法 vs 动态规划&#xff1a;“急性子…...

JavaSE第12篇:接口interface

一、使用步骤 1.引入库 代码如下&#xff08;示例&#xff09;&#xff1a; import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import warnings warnings.filterwarnings(ignore) import ssl ssl._create_default_https_con…...

一文掌握 npm 基础与常用指令

初学前端&#xff1f;npm 常用指令不熟&#xff1f;想了解 pnpm、yarn、cnpm 有什么不同&#xff1f; 这篇文章将带你从入门到精通&#xff0c;全面掌握 npm 的使用方法&#xff0c;以及选择适合自己项目的包管理工具&#xff01; 文章目录 一、什么是 npm&#xff1f;二、npm …...

OpenObserve API Usage Guide for Log Management

OpenObserve API Usage Guide for Audit Log Management 1. 概述 1.1 目标 本文档旨在详细介绍 OpenObserve 的 API 使用方法&#xff0c;帮助用户通过 API 实现日志管理功能&#xff0c;包括日志摄入、查询、模糊匹配&#xff08;类似 SQL 的 LIKE&#xff09;、stream 管理…...

机器学习实操 第一部分 机器学习基础 第5章 支持向量机(SVM)

机器学习实操 第一部分 机器学习基础 第5章 支持向量机&#xff08;SVM&#xff09; 内容概要 第5章深入介绍了支持向量机&#xff08;SVM&#xff09;&#xff0c;这是一种功能强大且应用广泛的机器学习模型。SVM适用于线性或非线性分类、回归以及 novelty detection。本章详…...

CSRF(cross-site request forgery)跨域请求访问

CSRF 当我们在成功登录一个网站后&#xff0c;会将后端返回的cookie数据进行存放&#xff0c;每一次访问该域名都会将cookie存放在请求头&#xff0c;也就相当于用户登录凭证&#xff0c; 但这种同域自动携带cookie存在一种问题 那就是当恶意网站也进去请求时&#xff0c;同样…...

Kafka的Rebalance机制可能引发什么问题?如何优化?怎么减少不必要的Rebalance

Rebalance机制的核心目的是确保每个消费者都能处理适当数量的分区&#xff0c;以实现负载均衡和高可用性。 一般是消费者组发生变化的时候&#xff0c;比如订阅主题&#xff0c;消费者数量等等发生变化&#xff0c;可能会导致rebalance&#xff0c;rebalance会导致消费者组短时…...

【和春笋一起学C++】函数——C++的编程模块

目录 1. 原型句法 2. 函数分类 3. 函数参数之按值传递 4. 数组作为函数参数 在C中&#xff0c;要使用函数&#xff0c;必须要有这三个方面&#xff1a; 函数原型&#xff0c;函数原型描述了函数到编译器的接口&#xff0c;函数原型一般放在include文件中。函数原型告诉编译…...

Java高频面试之并发编程-11

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天又来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;父子线程如何共享数据&#xff1f; 在Java中&#xff0c;父子线程共享数据可以通过以下几种方式实现&#xff0c;具体…...

LangChain入门(四) 部署应用程序

1、使用LangServe部署应用程序 安装langserve pip install langserve[all] 代码示例 from fastapi import FastAPI from langchain.chat_models import init_chat_model from langchain_core.messages import SystemMessage, HumanMessage from langchain_core.output_parser…...

精益数据分析(31/126):电商关键指标深度解析与实战策略

精益数据分析&#xff08;31/126&#xff09;&#xff1a;电商关键指标深度解析与实战策略 在创业和数据分析的探索之路上&#xff0c;每一次深入学习都像是解锁了新的技能&#xff0c;让我们离成功更近一步。今天&#xff0c;我依旧带着和大家共同进步的想法&#xff0c;深入…...

【MongoDB篇】MongoDB的集合操作!

目录 引言第一节&#xff1a;集合的“诞生”——自动出现还是手动打造&#xff1f;&#x1f914;第二节&#xff1a;集合的“查阅”——看看这个数据库里有哪些柜子&#xff1f;&#x1f4c2;&#x1f440;第三节&#xff1a;集合的“重命名”——给文件柜换个名字&#xff01;…...

antd中的表格穿梭框(Transfer)如何使用

穿梭框是什么?怎么使用? 需求如下: 有一组端口需要分配给具体接口 功能要求: 1. 需要展示当前端口名称及其所属的接口 2. 需支持搜索功能可对端口名或接口名进行筛选便于分配 3. 分配端口时,需检测当前接口内的端口是否满足此接口最低要求 4. 提供Select下拉框,可供查…...

联邦学习与安全多方计算的结合是隐私保护机器学习领域

联邦学习(Federated Learning, FL)与安全多方计算(Secure Multi-Party Computation, MPC)的结合是隐私保护机器学习领域的前沿方向,其框架设计需兼顾计算效率、安全性和可扩展性。以下是结合两者的框架设计与实现流程的详细解析: 一、框架设计核心目标 隐私保护:确保多…...

mongoose的介绍,连接数据库

Mongoose 是一个基于 Node.js 的 MongoDB ODM&#xff08;Object Data Modeling&#xff09;库&#xff0c;用于在 MongoDB 和 Node.js 应用之间提供结构化的模型层&#xff0c;帮助你更优雅、安全地操作数据库。 &#x1f9fe; 一、Mongoose 简介 &#x1f4e6; 功能&#xff…...

Pytest中的fixture装饰器详解

pytest是Python生态中最流行的自动化测试框架&#xff0c;它通过简洁的语法、强大的功能(如fixture、参数化、插件扩展等)和丰富的插件生态&#xff0c;帮助开发者高效完成单元测试、集成测试和端到端测试。fixture是pytest框架中最核心、最强大的功能之一&#xff0c;它提供了…...

Linux系统配置JDK

目录 一、xftp传输JDK包 1、新建xftp会话并连接到我们的服务器 2、上传jdk包 二、配置环境变量 为了方便javaweb项目的建立&#xff0c;我们需要在搭建好的linux环境下配置安装JDK环境 一、xftp传输JDK包 因为jdk包文件比较大了&#xff0c;这时候不能使用简单的linux上传…...

通义千问最新一代大语言模型Qwen3发布了

通义千问Qwen3全面解析&#xff1a;最强开源大模型Ollama本地运行实战 &#x1f525; 最新重大好消息&#xff01; 经过漫长的等待&#xff0c;今天凌晨阿里云正式发布了Qwen3大语言模型&#xff01;本次更新带来了0.6b 1.7b 4b 8b 14b 30b 32b 235b超大参数模型&#xff0c;更…...

想做博闻强记的自己

2025年4月29日&#xff0c;13~25℃&#xff0c;还好 待办&#xff1a; 冶金《物理》期末测试 阅卷&#xff08;冶金《物理》期末测试试卷&#xff09; 重修《物理》《物理2》电子材料归档 规则变更&#xff0c;《高等数学2》期末试卷推倒重来 遇见&#xff1a;直播画面。 感受…...

爱普生SG2520HHN晶振数据中心服务器的理想解决方案

在当今数字化时代&#xff0c;数据中心作为海量数据存储、处理与传输的核心枢纽&#xff0c;其服务器的高效稳定运行至关重要。服务器作为其核心设备&#xff0c;对时钟信号的精度和稳定性提出了严苛要求——微小的时序误差可能导致数据传输失败或系统宕机。爱普生 SG2520HHN 差…...

【Prometheus-MySQL Exporter安装配置指南,开机自启】

目录 1. 创建 MySQL 监控用户2. 配置 MySQL 认证文件3. 安装 mysqld_exporter4. 配置 Systemd 服务5. 启动并验证服务6. 修改Prometheus配置常见错误排查错误现象排查步骤 6. 验证监控数据关键注意事项 1. 创建 MySQL 监控用户 mysql -uroot -p123456 # 登录MySQL-- 1. 创建监…...

Linux 服务管理两种方式service和systemctl

Linux 服务管理两种方式service和systemctl 确定当前系统使用的哪种命令用来启动服务 SysV init 或者 systemd 使用下面的命令&#xff1a; ps -p 1例如&#xff0c;输出&#xff1a; PID TTY TIME CMD1 ? 00:00:02 systemdSysV init service命令用于对系统…...

P1494 [国家集训队] 小 Z 的袜子 Solution

Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1​,a2​,⋯,an​)&#xff0c;有 q q q 次查询&#xff0c;每次查询给定 ( l , r ) (l,r) (l,r). 你需要求出 2 ∑ i ≤ i < j ≤ r [ a i a j ] ( r − l ) ( r − l 1 ) \dfrac{2\sum…...

(开源)视频画面增强模型:Ev-DeblurVSR (可以解决视频画面不清晰的问题)

在计算机视觉领域&#xff0c;模糊视频超分辨率&#xff08;BVSR&#xff09;是一个复杂且具有挑战性的任务&#xff0c;目标是从低分辨率&#xff08;LR&#xff09;和模糊的输入生成高分辨率&#xff08;HR&#xff09;视频。传统方法常常因缺乏足够运动信息和高频细节而表现…...

探索豆包WEB/PC超能创意1.0:创意新利器的全面解析

在当今数字化创意蓬勃发展的时代&#xff0c;新工具不断涌现&#xff0c;为创作者们带来了更多的可能性。豆包WEB/PC超能创意1.0便是其中一款备受瞩目的产品&#xff0c;它的出现为创意工作者和爱好者们打开了一扇充满无限可能的大门。 一、体验信息&#xff1a;探索创意新领域…...

五、UI自动化测试05--PyTest框架

目录 一、PyTest 框架2. 特点2. 安装步骤3. 基本使⽤3.1 测试函数形式3.2 执⾏⽅式3.3 测试类形式3.4 执⾏⽅式3.5 另⼀种执⾏⽅式: 主函数执⾏3.6 特殊⽅法: 函数级别3.7 特殊⽅法: 类级别3.8 特殊⽅法: 函数级别和类级别同时使⽤ 4. pytest 配置⽂件4.1 选项字段获取4.2 编写…...

51LA使用方法与悟空统计,网站数据分析的双重选择

在网站运营与数据分析领域&#xff0c;51LA作为国内较早的流量统计工具&#xff0c;曾为许多用户提供基础的访问数据监测服务。然而&#xff0c;随着技术的发展和用户需求的升级&#xff0c;越来越多的企业开始寻求功能更全面、体验更优的统计工具。小编今天将给大家介绍一款更…...