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

架构设计基础系列:事件溯源模式浅析

图片来源网络,侵权删

1. 引言

1.1 研究背景

  • 传统CRUD模型的局限性:状态覆盖导致审计困难、无法追溯历史。
  • 分布式系统复杂性的提升:微服务架构下数据一致性、回滚与调试的需求激增。
  • 监管合规性要求:金融、医疗等领域对数据不可篡改性的强制需求。

1.2 事件溯源的核心价值

  • 完整历史追溯‌:通过事件流重建任意时间点状态。
  • 业务逻辑显式化‌:事件作为业务意图的直接表达。
  • 解耦与扩展性‌:读写模型分离(CQRS)支持独立优化。

2. 事件溯源的理论基础

2.1 核心概念

  • 事件(Event)‌:不可变的状态变更记录,如 AccountOpenedOrderCancelled
  • 事件存储(Event Store)‌:有序、持久化的事件流数据库。
  • 聚合根(Aggregate Root)‌:一致性边界内的业务实体,负责生成事件。
  • 投影(Projection)‌:从事件流生成实时查询视图。

2.2 事件溯源与CQRS模式

  • 命令与查询职责分离‌:写模型通过事件溯源处理业务逻辑,读模型通过投影提供高性能查询。
  • 最终一致性模型‌:通过异步事件传播实现读写模型同步。

2.3 事件溯源的数学基础

  • 事件流作为状态函数‌:

其中 StSt 表示时间 tt 的状态,eiei 为事件,ff 为状态转换函数。

  • 幂等性与事件顺序‌:事件顺序必须严格保证,幂等性设计可应对重复投递问题。

2.4 事件溯源优点

  • 事件不可变,并且可使用只追加操作进行存储。 用户界面、工作流或启动事件的进程可继续,处理事件的任务可在后台运行。 此外,处理事务期间不存在争用,此过程可极大提高应用程序的性能和可伸缩性,尤其是对于演示级别或用户界面。

  • **事件是描述已发生操作的简单对象以及描述事件代表的操作所需的相关数据。 **事件不会直接更新数据存储。 只会对事件进行记录,以便在合适的时间进行处理。 使用事件可简化实现和管理。

  • 事件通常对域专家而言具有意义,然而对象关系阻抗不匹配却会让复杂数据库表变得难以理解。表是表示系统的当前状态(而不是已发生事件)的人工构造。

  • 事件溯源不需要直接更新数据存储中的对象,因而有助于防止并发更新造成冲突。 但是,域模型必须仍然设计为避免可能导致不一致状态的请求。

  • 事件的只追加存储提供的审核线索可用于监视对数据存储采取的操作。 它可以通过随时重播事件将当前状态重新生成为具体化视图或投影,并且可以帮助测试和调试系统。 此外,使用补偿事件取消更改的要求可以提供反向更改的历史记录。 如果模型存储了当前状态,则此功能不会是这种情况。 事件列表还可用于分析应用程序性能和检测用户行为趋势。 或者,也可用于获取其他有用的业务信息。

  • 事件存储会引发事件,任务会执行操作以响应这些事件。 通过将任务从事件中分离,可提供灵活性和可扩展性。 任务知道事件类型和事件数据,但不知道触发事件的操作。 此外,多个任务可以处理每个事件。 这样可实现与仅侦听事件存储引发的新事件的其他服务和系统的轻松集成。 但是,事件溯源事件的级别通常非常低,可能需要生成特定的集成事件。

通过执行响应事件的数据管理任务和具体化存储事件的视图,事件溯源通常与 CQRS 模式结合。

3. 主流事件溯源框架分析

3.1 框架分类

类别代表框架核心能力
企业级框架Axon Framework完整CQRS支持、分布式事件总线、Saga管理
轻量级库Eventuous (.NET)简化聚合根定义、多存储后端支持
事件流平台Kafka + Kafka Streams高吞吐量事件处理、流式计算集成
云原生服务AWS EventBridge无服务器事件路由、与Lambda/DynamoDB集成

3.2 Axon Framework 深度解析

3.2.1 架构设计

  • 命令模型‌:CommandGateway 处理业务命令,驱动聚合根生成事件。
  • 事件存储‌:支持JDBC、MongoDB、Axon Server(专用存储)。
  • 查询模型‌:QueryGateway 从投影读取数据,支持订阅更新。

3.2.2 核心组件

  • 聚合根生命周期管理‌:通过@Aggregate注解定义,自动处理事件重放。
  • Saga事务协调‌:长流程事务通过@Saga实现最终一致性。
  • 事件回放与快照‌:定期生成快照(Snapshot)优化长事件流重建效率。

3.2.3 代码示例

// 定义聚合根
@Aggregate
public class BankAccountAggregate {@AggregateIdentifierprivate String accountId;private BigDecimal balance;@CommandHandlerpublic BankAccountAggregate(OpenAccountCommand cmd) {apply(new AccountOpenedEvent(cmd.getAccountId(), cmd.getOwner()));}@EventSourcingHandlerpublic void on(AccountOpenedEvent event) {this.accountId = event.getAccountId();this.balance = BigDecimal.ZERO;}// 处理存款命令@CommandHandlerpublic void handle(DepositCommand cmd) {apply(new DepositCompletedEvent(accountId, cmd.getAmount()));}
}

3.3 EventStoreDB 的存储引擎优化

  • 追加写优化‌:基于日志结构合并树(LSM-Tree)实现高吞吐量写入。
  • 内置订阅机制‌:支持持久化订阅(Persistent Subscription)与流分区(Stream Partitioning)。
  • 多语言支持‌:通过gRPC/HTTP API提供跨平台兼容性。

3.4 云原生框架对比

框架事件存储适用场景局限性
Axon Server专用存储企业级微服务运维复杂度高
Kafka分布式日志高吞吐量事件流需额外实现聚合根逻辑
AWS EventBridge无服务器事件总线快速构建Serverless应用功能扩展性受限

4. 实际案例研究

4.1 案例一:银行账户管理系统

4.1.1 需求分析

  • 合规性要求:所有资金变动记录必须可审计。
  • 高并发挑战:支持每秒万级交易处理。

4.1.2 技术选型

  • 框架‌:Axon Framework + Axon Server
  • 存储‌:EventStoreDB + PostgreSQL(读模型)
  • 消息总线‌:RabbitMQ

4.1.3 事件流设计

1. AccountOpenedEvent
2. DepositCompletedEvent
3. TransferOutEvent
4. TransferInEvent
5. InterestCalculatedEvent

4.1.4 性能优化

  • 快照机制‌:每1000个事件生成一次快照,减少聚合根重建时间。
  • 分片策略‌:按账户ID哈希分片事件存储,提升并发处理能力。

4.2 案例二:电商订单系统

4.2.1 业务场景

  • 订单状态追踪:从创建、支付到物流的全流程事件记录。
  • 实时库存管理:通过事件流触发库存扣减与回滚。

4.2.2 技术实现

  • 框架‌:.NET + Eventuous
  • 存储‌:MongoDB(事件存储) + Elasticsearch(读模型)
  • 投影逻辑‌:
public class OrderProjection : IEventHandler<OrderCreatedEvent> {public async Task Handle(OrderCreatedEvent @event) {await _readModel.UpdateAsync(@event.OrderId, model => {model.Status = "Created";model.Items = @event.Items;});}
}

5. 技术挑战与解决方案

5.1 事件版本迁移

  • 问题‌:业务变更导致事件结构不兼容。
  • 解决方案‌:
    • 向上兼容‌:新增字段而非修改旧字段。
    • 版本转换中间件‌:在读取时动态转换旧事件版本。

5.2 长事件流性能瓶颈

  • 问题‌:重放数万事件导致响应延迟。
  • 解决方案‌:
    • 定期快照‌:存储聚合根的中间状态。
    • 增量投影‌:仅处理新增事件而非全量重放。

5.3 分布式事务一致性

  • 问题‌:跨服务事件处理的最终一致性。
  • 解决方案‌:
    • Saga模式‌:通过补偿事件实现回滚。
    • 事件幂等性‌:唯一ID去重或版本号校验。

‌**6. **事件溯源使用场景

请在以下方案中使用此模式:

  • 要捕获数据中的意图、用途或原因。 例如,可将对客户实体的更改捕获为一系列特定事件类型,例如_已搬家_、帐户已关闭_或_已身故
  • 尽量减少或完全避免出现数据更新冲突。
  • 需要记录发生的事件,并重播事件以还原系统状态、回滚更改或保留历史记录和审核日志。 例如,任务涉及多个步骤时,可能需要执行操作来恢复更新,并重播某些步骤使数据重返一致的状态。
  • 使用事件时。 这是应用程序操作的自然功能,且几乎不需要其他开发或实现工作。
  • 需要将输入或更新数据的过程从应用这些操作所需的任务中分离。 此更改可能是为了提高 UI 的性能,或者是为了将事件分发给其他在事件发生时采取操作的侦听器。 例如,可以将工资管理系统与开支报销网站集成。 由事件存储引发的用于响应网站中数据更新的事件可同时供该网站和工资管理系统使用。
  • 希望随要求更改而灵活更改具体化模型和实体数据的格式,或需要调整读取模型或公开数据的视图(与 CQRS 结合使用时)。
  • 与 CQRS 结合使用且更新读取模型时最终一致性可接受或事件流中的解冻实体和数据的性能影响可接受。

此模式在以下情况中可能不起作用:

  • **小型域或简单域、几乎或完全没有业务逻辑的**系统或者自然地适用于传统 CRUD 数据管理机制的非域系统。
  • 要求一致性和数据视图实时更新的系统。
  • 不需要审核线索、历史记录以及回滚和重播操作功能的系统。
  • 基础数据更新冲突发生率低的系统。 例如,主要是添加数据而不是更新数据的系统。

7. 结论

事件溯源框架通过将业务逻辑显式化为事件流,为构建高可靠、可审计的分布式系统提供了全新范式。主流框架如Axon、EventStoreDB和Kafka在不同场景下展现出独特优势,但需权衡性能、复杂性与扩展性。未来,随着云原生技术与AI的融合,事件溯源将在实时分析、自动化决策等领域发挥更大价值。


参考文献

  1. https://learn.microsoft.com/zh-cn/azure/architecture/patterns/event-sourcing
  2. https://codeopinion.com/greg-young-answers-your-event-sourcing-questions/

相关文章:

架构设计基础系列:事件溯源模式浅析

图片来源网络&#xff0c;侵权删 ‌1. 引言‌ ‌1.1 研究背景‌ 传统CRUD模型的局限性&#xff1a;状态覆盖导致审计困难、无法追溯历史。分布式系统复杂性的提升&#xff1a;微服务架构下数据一致性、回滚与调试的需求激增。监管合规性要求&#xff1a;金融、医疗等领域对数…...

虚拟试衣间-云尚衣橱小程序-衣橱管理实现

衣橱管理实现 目标 (Goal): 用户 (User): 能通过 UniApp 小程序上传衣服图片。 后端 (Backend): 接收图片,存到云存储,并将图片信息(URL、用户ID等)存入数据库。 用户 (User): 能在小程序里看到自己上传的所有衣服图片列表。 技术栈细化 (Refined Tech Stack for this Pha…...

蓝桥杯省模赛 台阶方案

问题描述 小蓝要上一个楼梯&#xff0c;楼梯共有 n 级台阶&#xff08;即小蓝总共要走 n 级&#xff09;。小蓝每一步可以走 a 级、b 级或 c 级台阶。 请问小蓝总共有多少种方案能正好走到楼梯顶端&#xff1f; 输入格式 输入的第一行包含一个整数 n 。 第二行包含三个整数…...

Socket编程UDP

Socket编程UDP 1、V1版本——EchoServer2、网络命令2.1、ping2.2、netstat2.3、pidof 3、验证UDP——Windows作为client访问Linux4、V2版本——DictServer5、V3版本——简单聊天室 1、V1版本——EchoServer 首先给出EchoServer目录结构&#xff1a;服务器的类我们实现在UdpServ…...

无人机机体结构设计要点与难点!

一、无人机机体结构设计要点 1. 类型与应用场景匹配 固定翼无人机&#xff1a;需优化机翼升阻比&#xff0c;采用流线型机身降低气动阻力&#xff08;如大展弦比机翼设计&#xff09;。 多旋翼无人机&#xff1a;注重轻量化框架和对称布局&#xff08;如四轴/六轴碳纤维机…...

音视频(一)ZLMediaKit搭建部署

前言 一个基于C11的高性能运营级流媒体服务框架 全协议支持H264/H265/AAC/G711/OPUS/MP3&#xff0c;部分支持VP8/VP9/AV1/JPEG/MP3/H266/ADPCM/SVAC/G722/G723/G729 1&#xff1a;环境 ubuntu22.* ZLMediaKit downlaod:https://github.com/ZLMediaKit/ZLMediaKit or https://g…...

实战 | 餐厅点餐小程序技术解析:SpringBoot + UniApp 高效开发指南

&#x1f5a5;️ 一、系统架构概览 1.1 技术选型 为了确保开发效率和系统稳定性&#xff0c;我们采用以下技术栈&#xff1a; 模块技术选型后台服务SpringBoot MyBatis-Plus MySQL用户端&#xff08;点餐小程序&#xff09;UniApp&#xff08;Vue 语法&#xff09;师傅端&…...

合并相同 patient_id 的 JSON 数据为数组

问题 select patient_id,concat({"itemText":",item_text,","itemValue":",item_value,"}) from hs_patient_groups where active 1;eef41128c47c401abb7f8885a5f9fbdf {"itemText":"旧","itemValue"…...

AI安全:构建负责任且可靠的系统

AI已成为日常生活中无处不在的助力&#xff0c;随着AI系统能力和普及性的扩展&#xff0c;安全因素变得愈发重要。从基础模型构建者到采用AI解决方案的企业&#xff0c;整个AI生命周期中的所有相关方都必须共同承担责任。 为什么AI安全至关重要&#xff1f; 对于企业而言&…...

STM32单片机入门学习——第8节: [3-4] 按键控制LED光敏传感器控制蜂鸣器

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.02 STM32开发板学习——第8节: [3-4] 按键控制LED&光敏传感器控制蜂鸣器 前言开…...

Linux驱动入门——设备树详解

文章目录 一、设备树的引入与作用二、设备树的语法1. Devicetree格式1.1 DTS文件的格式1.2 node的格式1.3 properties的格式 2. dts文件包含dtsi文件3. 常用的属性3.1 #address-cells、#size-cells3.2 compatible3.3 model3.4 status3.5 reg 4. 常用的节点(node)4.1 根节点4.2 …...

Scala集合

Scala集合分为序列Seq、集Set、映射Map&#xff0c;都扩展自Iterable特质&#xff0c;且有可变和不可变版本。不可变集合操作后会返回新对象&#xff0c;可变集合则直接修改原对象。比如数组&#xff0c;不可变数组定义后大小不可变&#xff0c;修改会生成新数组&#xff1b;可…...

阿里云AI Studio 2.0:拖拽搭建企业级智能客服系统

一、平台能力全景 1.1 核心功能矩阵 模块子功能技术指标对话设计可视化流程编排支持50节点类型NLP引擎意图识别准确率行业TOP3&#xff08;92.6%&#xff09;知识管理多源数据接入15格式支持渠道对接全渠道覆盖8大平台SDK 1.2 企业级特性 关键优势&#xff1a; 日均对话承…...

java虚拟机---JVM

JVM JVM&#xff0c;也就是 Java 虚拟机&#xff0c;它最主要的作用就是对编译后的 Java 字节码文件逐行解释&#xff0c;翻译成机器码指令&#xff0c;并交给对应的操作系统去执行。 JVM 的其他特性有&#xff1a; JVM 可以自动管理内存&#xff0c;通过垃圾回收器回收不再…...

您的LarkXR专属顾问上线了!平行云官网新增 AI 小助手,手册同步升级!

遇到LarkXR技术问题&#xff1f;还在手动翻文档&#xff1f; Paraverse平行云官网双升级——AI小助手实时答疑 用户手册智能检索&#xff01; 助您快速定位解决方案&#xff0c;效率全面提升&#xff01; < 01 > AI 小助手—— 您的 LarkXR 智能顾问 欢迎我们的新成员…...

推导Bias² + Variance + σ²_ε

问题的背景 我们有一个真实函数 f ( x ) f(x) f(x) 和基于训练数据 D D D 训练得到的模型 f ^ ( x ; D ) \hat{f}(x;D) f^​(x;D)。对于任意输入 x x x&#xff1a; y y y 是真实的观测值&#xff0c;定义为 y f ( x ) ϵ y f(x) \epsilon yf(x)ϵ&#xff0c;其中 …...

javaSE知识梳理(一)

一.面向对象编程 1.面向对象的基本元素&#xff1a;类(class)和对象 ①类的声明 语法格式&#xff1a; [修饰符] class 类名{属性声明;方法声明; } ②对象的创建(new) 语法格式&#xff1a; //方式1&#xff1a;给创建有名对象 类名 对象名 new 类名();//方式2&#xff1…...

k8s statefulset pod重启顺序

在 Kubernetes 中&#xff0c;StatefulSet 的 Pod 重启顺序由以下规则和机制决定&#xff1a; 1. StatefulSet 的核心设计原则 StatefulSet 旨在管理有状态应用&#xff0c;其核心特性包括&#xff1a; 稳定的唯一标识&#xff1a;Pod 名称格式为 <statefulset-name>-&…...

记录学习的第十九天

现在这篇是记录一下4.1的学习。今天还没开始。 这篇是关于简单的动态规划的题目&#xff0c;思路比较清晰类似。 在这里先说一下有关动态规划的四个步骤&#xff1a; 1.确定子问题 2.确定dp数组的递推关系(dp数组也叫子问题数组) 3.确定求解的计算顺序 4.空间优化(初学者可…...

【实用技巧】电脑重装后的Office下载和设置

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言下载设置总结互动致谢参考目录导航 前言 在数字化办公时代&#xff0c;Windows和…...

模拟集成电路设计与仿真 : Mismatch

前情提要 此為作者針對 mismatch ,進行資料統整,以便日後查詢原理 1. Mismatch (失配) random offset 靜態消除 : trimming動態消除 : auto zero ,choppingCMRRlinearity 理想差動對只有奇次諧波,沒有偶次諧波,但 mismatch 會引入殘存的偶次諧波PSRR2. Input Offset Volt…...

深度学习查漏补缺:4.数据分布的度量

一、数据分布差异的度量 1.KL散度&#xff08;Kullback-Leibler Divergence&#xff09; 什么是KL散度&#xff1f; KL散度是一种用来衡量两个概率分布之间差异的工具。你可以把它想象成一个“距离测量器”&#xff0c;但它不是传统意义上的距离&#xff08;比如两点之…...

银河麒麟V10 aarch64架构安装mysql教程

国产操作系统 ky10.aarch64 因为是arm架构&#xff0c;故选择mysql8&#xff0c;推荐安装8.0.28版本 尝试8.0.30和8.0.41版本均未成功&#xff0c;原因不明☹️ 1. 准备工作 ⏬ 下载地址&#xff1a;https://downloads.mysql.com/archives/community/ 2. 清理历史环境 不用管…...

【NLP 52、多模态相关知识】

生活应该是美好而温柔的&#xff0c;你也是 —— 25.4.1 一、模态 modalities 常见&#xff1a; 文本、图像、音频、视频、表格数据等 罕见&#xff1a; 3D模型、图数据、气味、神经信号等 二、多模态 1、Input and output are of different modalities (eg&#xff1a; tex…...

[NCTF2019]Fake XML cookbook [XXE注入]

题目源代码 function doLogin(){var username $("#username").val();var password $("#password").val();if(username "" || password ""){alert("Please enter the username and password!");return;}var data "…...

I²C总线高级特性与故障处理分析

IC总线高级特性与故障处理深度分析 目录 1. IC基础回顾 1.1 IC通信基本原理1.2 IC总线时序与协议1.3 寻址方式与读写操作 2. IC高级特性 2.1 多主机模式2.2 时钟同步与伸展2.3 高速模式与Fast-mode Plus2.4 10位寻址扩展 3. IC总线故障与锁死 3.1 断电锁死原理3.2 总线挂起与…...

【力扣hot100题】(039)二叉树的直径

这题在简单题中有点难度&#xff0c;主要是不要把边数和深度搞混&#xff08;我就这样&#xff09;。 我想了很久&#xff0c;发现如果当前节点没有右节点&#xff0c;就将它的右长度设为0&#xff0c;左节点同理&#xff0c;并且在递归是不会加一&#xff0c;而是将加一的操作…...

L2-001 紧急救援

注意题目没有说边的数量&#xff0c;实际最多有5e5条边&#xff0c;开小了第四个样例会错&#xff01;&#xff01;&#xff01; - 思路: Dijkstra 求最短路并且维护路径条数和最大人数。 #include<bits/stdc.h> using namespace std;typedef pair<int, int> pii…...

分组背包问题

与01背包的区别是&#xff0c;多了一个限制条件&#xff0c;将物品打包&#xff0c;每组物品只能用一个 #include <iostream> #include <algorithm>using namespace std;const int N 110;int v[N][N], w[N][N], s[N]; int f[N]; int n, m;int main() {cin >>…...

【工业场景】用YOLOv12实现饮料类别识别

饮料类别识别任务的意义在于帮助人们更快速地识别和区分不同类型的饮料&#xff0c;从而提高消费者的购物体验和满意度。对于商家而言&#xff0c;饮料类别识别可以帮助他们更好地管理库存、优化货架布局和预测销售趋势&#xff0c;从而提高运营效率和利润。此外&#xff0c;饮…...

宽带空时波束形成算法原理及MATLAB仿真

宽带阵列信号处理 空时波束形成、空时波束形成方向图 卫星导航空时抗干扰算法 MATLAB仿真 文章目录 前言一、空时波束形成结构二、空时波束形成方向图三、MATLAB仿真四、MATLAB源代码总结 前言 \;\;\;\;\; 空时波束形成&#xff08;Space-Time Beamforming&#xff09;是一种结…...

406. 根据身高重建队列

链接 406. 根据身高重建队列 - 力扣&#xff08;LeetCode&#xff09; 题目 思路 可能的一个思路是先对高的人进行处理&#xff0c;这样后面插入矮的人时不会影响高的人的位置。比如&#xff0c;如果先处理高个子&#xff0c;那么当插入一个矮个子的时候&#xff0c;前面的高…...

机器学习:人工智能的核心驱动力

近年来&#xff0c;机器学习&#xff08;Machine Learning&#xff0c;简称ML&#xff09;已成为人工智能&#xff08;AI&#xff09;领域的核心驱动力。它不仅广泛应用于图像识别、自然语言处理、医疗诊断等领域&#xff0c;还推动了自动驾驶、智能推荐系统等前沿技术的发展。…...

机器视觉中的传统视觉与深度视觉

工业视觉是现代制造业中一个非常重要的应用领域&#xff0c;广泛用于产品质量检测&#xff0c;尤其是在生产线上。几乎所有的工业产品在流入市场之前&#xff0c;都要经历严格的缺陷检测环节&#xff0c;以确保它们符合质量标准。而在这一过程中&#xff0c;工业视觉检测系统发…...

机器学习开发全流程详解:从数据到部署的完整指南

机器学习项目的成功不仅依赖算法选择&#xff0c;更在于系统化的开发流程。本文详细拆解各阶段的核心任务、工具及注意事项&#xff0c;并通过表格总结帮助开发者快速掌握关键要点。 1. 数据获取与准备 数据是机器学习的基础&#xff0c;需确保数据的质量与代表性。 关键任务…...

春晚魔术[蓝桥]

这里 考虑到N很大则快速幂无法处理&#xff0c;因为它并没有被取模 欧拉定理&#xff1a; 当是质数时 是质数 两边同时取mod&#xff0c; // // Created by yumo_ // #include<bits/stdc.h>using namespace std; #define scin std::cin #define scout std::cout using …...

CF580B Kefa and Company(滑动窗口)

题目描述 Sergei B., the young coach of Pokemons, has found the big house which consists of n flats ordered in a row from left to right. It is possible to enter each flat from the street. It is possible to go out from each flat. Also, each flat is connecte…...

多模态RAG实践:如何高效对齐不同模态的Embedding空间?

目录 多模态RAG实践&#xff1a;如何高效对齐不同模态的Embedding空间&#xff1f; 一、为什么需要对齐Embedding空间&#xff1f; 二、常见的对齐方法与关键技术点 &#xff08;一&#xff09;对比学习&#xff08;Contrastive Learning&#xff09; &#xff08;二&#…...

linux 时钟

chronyc sourcestats 查看所有的源以及那个比较稳定 chronyc tracking 查看当前使用的是那个 ntpstat synchronised to NTP server (119.28.183.184) at stratum 3 time correct to within 57 ms polling server every 1024 s chronyc tracking | grep "Reference ID&quo…...

【leetcode100】每日温度

1、题目描述 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 示例 1: 输…...

华为交换综合实验——VRRP、MSTP、Eth-trunk、NAT、DHCP等技术应用

一、实验拓扑 二、实验需求 1,内网Ip地址使用172.16.0.0/16分配 2,sw1和SW2之间互为备份 3, VRRP/STP/VLAN/Eth-trunk均使用 4,所有Pc均通过DHCP获取IP地址 5,ISP只能配置IP地址 6,所有电脑可以正常访问IsP路由器环回 三、需求分析 1、设备连接需求 二层交换机&#xff08;LS…...

边缘检测技术现状初探2:多尺度与形态学方法

一、多尺度边缘检测方法 多尺度边缘检测通过在不同分辨率/平滑度下分析图像&#xff0c;实现&#xff1a; 粗尺度&#xff08;大σ值&#xff09;&#xff1a;抑制噪声&#xff0c;提取主体轮廓细尺度&#xff08;小σ值&#xff09;&#xff1a;保留细节&#xff0c;检测微观…...

【JavaScript】十四、轮播图

文章目录 实现一个轮播图&#xff0c;功能点包括&#xff1a; 自动播放鼠标经过暂时播放鼠标离开继续播放点击切换按钮手动切换 div盒子嵌套先写出静态HTML&#xff0c;再使用JS来修改样式和数据&#xff0c;渲染页面&#xff1a; <!DOCTYPE html> <html lang"…...

19信号和槽_信号和槽的基本概念

①Linux 信号 Signal 是系统内部的通知机制. 是进程间通信的方式 &#xff08;给进程发信号kill命令&#xff0c;像情景内存泄漏&#xff0c;管道一端关闭另一端还是读&#xff0c;会给进程发信号&#xff09; ②信号三要素 信号源: 谁发的信号 信号的类型: 哪种类别的信号 信…...

云端革命:数字文明的重构与新生

引言&#xff1a;算力大爆炸时代 2023年&#xff0c;当ChatGPT在全球掀起AI狂潮时&#xff0c;很少有人意识到&#xff0c;支撑这场智能革命的正是背后庞大的云计算基础设施。每天&#xff0c;全球云计算平台处理的数据量超过500EB&#xff0c;相当于5亿部高清电影&#xff1b…...

论文阅读笔记:Denoising Diffusion Implicit Models (4)

0、快速访问 论文阅读笔记&#xff1a;Denoising Diffusion Implicit Models &#xff08;1&#xff09; 论文阅读笔记&#xff1a;Denoising Diffusion Implicit Models &#xff08;2&#xff09; 论文阅读笔记&#xff1a;Denoising Diffusion Implicit Models &#xff08…...

红帽Linux怎么重置密码

完整流程 ●重启操作系统&#xff0c;进入启动界面 ●然后按进入选择项界面 ●找到linux单词开头的那一行&#xff0c;然后移动到该行末尾&#xff08;方向键移动或者使用键盘上的end&#xff09;&#xff0c;在末尾加入rd.break ●按ctrl x进入rd.break模式 ●在该模式下依次…...

关于存储的笔记

存储简介 名称适用场景常见运用网络环境备注块存储高性能、低延迟数据库局域网专业文件存储数据共享共享文件夹、非结构化数据局域网通用对象存储大数据、云存储网盘、网络媒体公网&#xff08;断点续传、去重&#xff09;海量 存储协议 名称协议块存储FC-SAN或IP-SAN承载的…...

java根据集合中对象的属性值大小生成排名

1&#xff1a;根据对象属性降序排列 public static <T extends Comparable<? super T>> LinkedHashMap<T, Integer> calculateRanking(List<ProductPerformanceInfoVO> dataList, Function<ProductPerformanceInfoVO, T> keyExtractor) {Linked…...

蓝桥杯嵌入式16届—— LED模块

使用主板 是STMG431RBT6 STMG431RBT6资源 资源配置表 跳线说明表 引脚状况 PC8~PC15分别对应着LD1~LD8 SN74HC573ADWR 是一种锁存器 当 LE&#xff08;锁存使能&#xff09;为高电平&#xff0c;输出 Q 实时跟随输入 D 的变化。​当 LE 为低电平&#xff0c;输出锁定为最后…...