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

架构思维: 数据一致性的两种场景深度解读

文章目录

  • Pre
  • 案例
  • 数据一致性问题的两种场景
    • 第一种场景:实时数据不一致不要紧,保证数据最终一致性就行
    • 第二种场景:必须保证实时一致性
  • 最终一致性方案
  • 实时一致性方案
    • TCC 模式
    • Seata 中 AT 模式的自动回滚
      • 一阶段
      • 二阶段-回滚
      • 二阶段-提交

在这里插入图片描述


Pre

架构思维:分布式事务一致性_基于 MQ 的可靠消息投递方案

分布式协同 - 分布式事务_TCC解决方案

分布式协同 - 分布式事务_2PC & 3PC解决方案

深入理解分布式技术 - 漫谈分布式事务及解决方案

分布式协同 - 分布式事务一二事儿

分布式 - AT、TCC、SAGA、XA四种分布式事务模型的工作原理和应用场景

深入理解分布式技术 - 分布式事务总结回顾

深入理解分布式技术 - TCC 事务模型及实战


案例

微服务架构, 很多时候我们往往需要跨多个服务去更新多个数据库的数据,类似下图所示的架构。

图1

在这里插入图片描述

如图1 所示,如果业务正常运转,3 个服务的数据应该变为 a2、b2、c2,此时数据才一致。但是如果出现网络抖动、服务超负荷或者数据库超负荷等情况,整个处理链条有可能在步骤二失败,这时数据就会变成 a2、b1、c1,当然也有可能在步骤三失败,最终数据就会变成 a2、b2、c1,这样数据就对不上了,即数据不一致。

此时,我们不得不抽出时间针对数据一致性问题给出一个完美解决方案。


数据一致性问题的两种场景

第一种场景:实时数据不一致不要紧,保证数据最终一致性就行

因为一些服务出现错误,导致图 1 的步骤三失败,此时处理完请求后,数据就变成了 a2、 b2、c1,不过不要紧,我们只需保证最终数据是 a2、b2、 c2 就行。


第二种场景:必须保证实时一致性

如果图 1 中的步骤二和步骤三成功了,数据就会变成 b2、c2,但是如果步骤三失败,那么步骤一和步骤二会立即回滚,保证数据变回 a1、b1。


针对以上两种具体的场景,其具体解决方案是什么呢?

最终一致性方案

对于数据要求最终一致性的场景,实现思路是这样的:

  • 每个步骤完成后,生产一条消息给 MQ,告知下一步处理接下来的数据;

  • 消费者收到这条消息后,将数据处理完成后,与步骤一一样触发下一步;

  • 消费者收到这条消息后,如果数据处理失败,这条消息应该保留,直到消费者下次重试。

在这里插入图片描述

关于上图,详细的实现逻辑如下:

  • 调用端调用 Service A;

  • Service A 将数据库中的 a1 改为 a2;

  • Service A 生成一条步骤 2(姑且命名为 Step2)的消息给到 MQ;

  • Service A 返回成功给调用端;

  • Service B 监听 Step2 的消息,拿到一条消息。

  • Service B 将数据库中的 b1 改为 b2;

  • Service B 生成一条步骤 3(姑且命名为 Step3)的消息给到 MQ;

  • Service B 将 Step2 的消息设置为已消费;

  • Service C 监听 Step3 的消息,拿到一条消息;

  • Service C 将数据库中的 c1 改为 c2;

  • Service C 将 Step3 的消息设置为已消费。

接下来我们考虑下,如果每个步骤失败了该怎么办?

  1. 调用端调用 Service A。

解决方案:如果这步失败,直接返回失败给用户,用户数据不受影响。

  1. Service A 将数据库中的 a1 改为 a2。

解决方案:如果这步失败,利用本地事务数据直接回滚就行,用户数据不受影响。

  1. Service A 生成一条步骤 2(姑且命名为 Step2)的消息给到 MQ。

解决方案:如果这步失败,利用本地事务数据将步骤 2 直接回滚就行,用户数据不受影响。

  1. Service A 返回成功给调用端。

解决方案:如果这步失败,不做处理。

  1. Service B 监听 Step2 的消息,拿到一条消息。

解决方案:如果这步失败,MQ 有对应机制,我们无须担心。

  1. Service B 将数据库中的 b1 改为 b2。

解决方案:如果这步失败,利用本地事务直接将数据回滚,再利用消息重试的特性重新回到步骤 5 。

  1. Service B 生成一条步骤 3(姑且命名为 Step3)的消息给到 MQ。

解决方案:如果这步失败,MQ 有生产消息失败重试机制。要是出现极端情况,服务器会直接挂掉,因为 Step2 的消息还没消费,MQ 会有重试机制,然后找另一个消费者重新从步骤 5 执行。

  1. Service B 将 Step2 的消息设置为已消费。

解决方案:如果这步失败,MQ 会有重试机制,找另一个消费者重新从步骤 5 执行。

  1. Service C 监听 Step3 的消息,拿到一条消息。

解决方案:如果这步失败,参考步骤 5 的解决方案。

  1. Service C 将数据库中的 c1 改为 c2。

解决方案:如果这步失败,参考步骤 6 的解决方案。

  1. Service C 将 Step3 的消息设置为已消费。

解决方案:如果这步失败,参考步骤 8 的解决方案。

以上就是最终一致性的解决方案.

如果仔细思考了该方案,可能會存在以下 2 点疑问。

  • 因为我们利用了 MQ 的重试机制,就有可能出现步骤 6 跟步骤 10 重复执行的情况,此时该怎么办?比如上面流程中的步骤 8 失败了,需要从步骤 5 重新执行,这时就会出现步骤 6 执行 2 遍的情况。为此,在下游(步骤 6 和 步骤 10)更新数据时,我们需要保证业务代码的幂等性 。

  • 如果每个业务流程都需要这样处理,岂不是需要额外写很多代码?那我们是否可以将类似处理流程的重复代码抽取出来?答案是可以的,这里使用的 MQ 相关逻辑在其他业务流程中也通用,最终就是将这些代码进行了抽取并封装。


实时一致性方案

实时一致性,其实就是我们常说的分布式事务。

MySQL 其实有一个两阶段提交的分布式事务方案(MySQL XA),但是该方案存在严重的性能问题。比如,一个数据库的事务与多个数据库间的 XA 事务性能可能相差 10 倍。另外,在 XA 的事务处理过程中它会长期占用锁资源,所以一开始并不考虑这个方案。

那时,市面上比较流行的方案是使用 TCC 模式,下面我们简单介绍一下。

TCC 模式

在 TCC 模式中,我们会把原来的一个接口分为 Try 接口、Confirm 接口、Cancel 接口。

在这里插入图片描述

  • Try 接口用来检查数据、预留业务资源。

  • Confirm 接口用来确认实际业务操作、更新业务资源。

  • Cancel 接口是指释放 Try 接口中预留的资源。

比如积分兑换折扣券的例子中需要调用账户服务减积分、营销服务加折扣券这两个服务,那么针对账户服务减积分这个接口,我们需要写 3 个方法,如下代码所示:

public boolean prepareMinus(BusinessActionContext businessActionContext, final String accountNo, final double amount) {    //校验账户积分余额//冻结积分金额
}public boolean Confirm(BusinessActionContext businessActionContext) {    //扣除账户积分余额    //释放账户 冻结积分金额
}public boolean Cancel(BusinessActionContext businessActionContext) {    //回滚所有数据变更
}

同样,针对营销服务加折扣券这个接口,我们也需要写3个方法,而后调用的大体步骤如下:

在这里插入图片描述
图 3 中绿色代表成功的调用路径,如果中间出错,就会先调用相关服务的回退方法,再进行手工回退。原本我们只需要在每个服务中写一段业务代码就行,现在需要拆成 3 段来写,而且还涉及以下 5 点注意事项:

  • 我们需要保证每个服务的 Try 方法执行成功后,Confirm 方法在业务逻辑上能够执行成功;

  • 可能会出现 Try 方法执行失败而 Cancel 被触发的情况,此时我们需要保证正确回滚;

  • 可能因为网络拥堵出现 Try 方法的调用被堵塞的情况,此时事务控制器判断 Try 失败并触发了 Cancel 方法,后来 Try 方法的调用请求到了服务这里,此时我们应该拒绝 Try 请求逻辑;

  • 所有的 Try、Confirm、Cancel 都需要确保幂等性;

  • 整个事务期间的数据库数据处于一个临时的状态,其他请求需要访问这些数据时,我们需要考虑如何正确被其他请求使用,而这种使用包括读取和并发的修改。

所以 TCC 模式是一个很麻烦的方案,除了每个业务代码的工作量 X3 之外,出错的概率也高,因为我们需要通过相应逻辑保证上面的注意事项都被处理。


后来,刚好看到了一篇介绍 Seata 的文章,了解到 AT 模式也能解决这个问题。

Seata 中 AT 模式的自动回滚

对于使用 Seata 的人来说操作比较简单,只需要在触发整个事务的业务发起方的方法中加入@GlobalTransactional 标注,且使用普通的 @Transactional 包装好分布式事务中相关服务的相关方法即可。

在 Seata 内在机制中,AT 模式的自动回滚往往需要执行以下步骤:

一阶段

  • 解析每个服务方法执行的 SQL,记录 SQL 的类型(Update、Insert 或 Delete),修改表并更新 SQL 条件等信息;

  • 根据前面的条件信息生成查询语句,并记录修改前的数据镜像;

  • 执行业务的 SQL;

  • 记录修改后的数据镜像;

  • 插入回滚日志:把前后镜像数据及业务 SQL 相关的信息组成一条回滚日志记录,插入 UNDO_LOG 表中;

  • 提交前,向 TC 注册分支,并申请相关修改数据行的全局锁 ;

  • 本地事务提交:业务数据的更新与前面步骤生成的 UNDO LOG 一并提交;

  • 将本地事务提交的结果上报给事务控制器。

二阶段-回滚

收到事务控制器的分支回滚请求后,我们会开启一个本地事务,并执行如下操作:

  • 查找相应的 UNDO LOG 记录;

  • 数据校验:拿 UNDO LOG 中的后镜像数据与当前数据进行对比,如果存在不同,说明数据被当前全局事务之外的动作做了修改,此时我们需要根据配置策略进行处理;

  • 根据 UNDO LOG 中的前镜像和业务 SQL 的相关信息生成回滚语句并执行;

  • 提交本地事务,并把本地事务的执行结果(即分支事务回滚的结果)上报事务控制器。

二阶段-提交

  • 收到事务控制器的分支提交请求后,我们会将请求放入一个异步任务队列中,并马上返回提交成功的结果给事务控制器。

  • 异步任务阶段的分支提交请求将异步地、批量地删除相应 UNDO LOG 记录。

以上就是 Seata 的 AT 模式的简单介绍。

在这里插入图片描述

相关文章:

架构思维: 数据一致性的两种场景深度解读

文章目录 Pre案例数据一致性问题的两种场景第一种场景:实时数据不一致不要紧,保证数据最终一致性就行第二种场景:必须保证实时一致性 最终一致性方案实时一致性方案TCC 模式Seata 中 AT 模式的自动回滚一阶段二阶段-回滚二阶段-提交 Pre 架构…...

压测工具开发实战篇(四)——client子窗口功能

你好,我是安然无虞。 文章目录 树控件添加文件补充学习: 函数定义中循环体里的局部变量补充学习: 动态添加对象属性 刷新文件上下文菜单 (右键菜单)实现右键菜单功能 编辑节点文本 在学习本篇文章之前, 建议先看一下上篇介绍MDI子窗口的文章: 压测工具开发实战篇(三…...

如何开发 HTML 游戏

开发 HTML 游戏适合初学者学习编程和游戏开发的基础知识。HTML 游戏通常结合了 HTML、CSS 和 JavaScript 技术,利用浏览器的渲染能力来实现交互式的游戏体验。 1. 确定游戏类型 在开始开发之前,你需要明确你的游戏类型。例如: 简单游戏&…...

机器学习 从入门到精通 day_01

1. 机器学习介绍与定义 1.1 机器学习定义 机器学习(Machine Learning)本质上就是让计算机自己在数据中学习规律,并根据所得到的规律对未来数据进行预测。 机器学习包括如聚类、分类、决策树、贝叶斯、神经网络、深度学习&#xff08…...

React中的跨组件通信

在React中,跨组件通信有几种常见的方式。每种方式适用于不同的场景,下面是几种常见的跨组件通信方法: 1. 通过父子组件传递 Props 父组件可以通过 props 将数据传递给子组件,子组件只能接收和使用这些数据。 父组件&#xff08…...

Vue项目 bug 解决

Vue2项目部署失败 从gitee 上拉下一个前端项目,然后npm install,报错如下: 解决办法: 从 npm切换到cnpm:npm install -g cnpm执行命令export NODE_OPTIONS--openssl-legacy-provider下载依赖:cnpm instal…...

Python 3.13.2 安装教程(附安装包)轻松开启编程之旅

文章目录 前言软件介绍安装步骤1. 下载安装包2. 运行安装程序3. 选择安装选项4. 等待安装完成5. 验证安装结果 前言 在数字化时代,Python 作为一种简洁、高效且功能强大的编程语言,广泛应用于 Web 开发、数据科学、人工智能等诸多领域。无论是编程新手入…...

Meta 最新发布的 Llama 4:多模态开源大模型全面解析

TL;DR 2025 年 4 月 5 日,Meta AI 正式发布了第四代大型语言模型 Llama 4。引入了 Mixture-of-Experts (MoE,专家混合) 架构,同时原生支持多模态输入,最小的 Llama 4 Scout 模型支持 10m 的长文本输入。 Paper name The Llama 4…...

Web开发:常用 HTML 表单标签介绍

在 Web 开发中&#xff0c;HTML 表单是实现用户交互的关键元素&#xff0c;它为用户提供了输入数据的途径&#xff0c;广泛应用于注册登录、搜索查询、问卷调查等功能场景。本文将详细介绍常用的 HTML 表单标签及其使用方法。 表单容器标签 <form> <form>标签用…...

力扣HOT100之链表:2. 两数相加

这道题就是按照正常的数学思维去做的&#xff0c;设置一个标志位flag用来标记进位的情况&#xff0c;当发生进位时设置为1&#xff0c;否则设置为0&#xff0c;初始时设置为0。我们同时遍历两个链表&#xff0c;将两个节点的值相加&#xff0c;再加上上一位的进位flag&#xff…...

Spring Boot 项目集成 License 授权与续期完整指南

一、背景说明 在 Spring Boot 项目中&#xff0c;通过引入第三方 spring-boot-starter-license 组件&#xff0c;可以快速实现系统权限到期控制、License 证书管理等功能。本文详细介绍如何集成 License 功能&#xff0c;并解决证书安装、权限配置、异常拦截及续期流程等关键问…...

2010年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析

2010年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛&#xff08;China Undergraduate Mathematical Contest in Modeling&#xff09;是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动&#xff0c;目的在于激…...

典型的ETL使用场景与数据集成平台的应用

在当今数字化时代&#xff0c;数据已经成为企业决策和运营的核心资产。为了更好地管理和利用数据&#xff0c;企业需要借助高效的数据处理技术。ETL&#xff08;Extract&#xff0c;Transform&#xff0c;Load&#xff09;作为数据处理的核心技术之一&#xff0c;广泛应用于数据…...

深入解析嵌入式Linux系统架构:从Bootloader到用户空间 - 结合B站视频教学

B站视频链接,请多多关注本人B站&#xff1a; &#x1f4cc; Yocto项目实战教程&#xff1a;第二章 视频讲解 目录 第2章 Linux系统架构 2.1 GNU/Linux2.2 Bootloader2.3 内核空间2.4 用户空间 总结 第2章 Linux系统架构 {#linux系统架构} 嵌入式Linux系统是Linux内核的精简版…...

从Oracle和TiDB的HTAP说起

除了数据库行业其他技术群体很多不知道HTAP的 时至今日还是有很多人迷信Hadoop&#xff0c;觉得大数据就是Hadoop。这是不正确的。也难怪这样&#xff0c;很多人OLTP和OLAP也分不清&#xff0c;何况HTAP。 Oracle是垂直方向实现 TiDB是水平方向实现 我个人认为这是两种流派…...

【Vue-路由案例】面经基础版

目录 <<回到导览1.面经基础版1.1.VueCli建项目1.1.1.VueCli 自定义项目1.1.2.ESlint代码规范 1.2.项目路由1.2.1.一级路由配置1.2.2.二级配置路由1.2.3.设置高亮1.2.4.发生请求、渲染1.2.5.跳转传参、再发请求1.2.6.体验优化1.2.7.keep-alive <<回到导览 1.面经基…...

C#调用C++动态库时出现`System.DllNotFoundException`错误的解决思路

文章目录 1. DLL文件路径问题2. 依赖的运行时库缺失3. 平台不匹配&#xff08;x86/x64&#xff09;4. 导出函数名称不匹配5. DLL文件损坏或权限问题6. 运行时库冲突&#xff08;MT/MD不匹配&#xff09;7. 使用DLLImport时的常见错误总结步骤 在C#中调用C动态库时出现System.Dl…...

数据清洗

map阶段&#xff1a;按行读入内容&#xff0c;对内容进行检查&#xff0c;如果字段的个数少于等于11&#xff0c;就删除这条日志&#xff08;不保留&#xff09;去除日志中字段个数小于等于11的日志内容。 <偏移量&#xff0c;第一行的内容> → <通过刷选之后的第一行…...

ubuntu 20.04 编译和运行A-LOAM

1.搭建文件目录和clone代码 mkdir -p A-LOAM/src cd A-LOAM/src git clone https://github.com/HKUST-Aerial-Robotics/A-LOAM cd .. 2.修改代码文件 2.1 由于PCL版本1.10&#xff0c;将CMakeLists.txt中的C标准改为14&#xff1a; set(CMAKE_CXX_FLAGS "-stdc14"…...

Oracle迁移翻车,数据校验没做好...

作为DBA&#xff0c;你是否经历过这样的噩梦&#xff1f;数据库迁移、主从同步、容灾切换后&#xff0c;数据不一致却迟迟无法定位&#xff0c;只能手动写脚本逐表比对&#xff0c;熬到凌晨还在查差异… Oracle GoldenGate Veridata&#xff08;OGG Veridata&#xff09; 就是…...

小刚说C语言刷题——第17讲 循环之for语句

在生活中&#xff0c;我们经常会碰到重复去做某一件事。例如&#xff0c;一个人绕着操场跑圈&#xff0c;一天24小时往复。这些周而往复的事&#xff0c;我们称为循环。 1.循环的作用 在编程时&#xff0c;我们用循环的目的有两个。一个是减少循环时代码量&#xff0c;一个是通…...

如何使用 Coze 的 HTTP 请求节点实现高效数据交互

如何使用Coze的HTTP请求节点实现高效数据交互 在自动化工作流开发中&#xff0c;与外部服务进行数据交互是核心需求之一。Coze平台的HTTP请求节点提供了强大的解决方案&#xff0c;支持通过HTTP协议实现数据的获取、提交、更新和删除等操作。本文将结合官方文档&#xff0c;详…...

【力扣hot100题】(071)每日温度

经典单调栈问题。 感觉自己对这类问题还是不太熟练&#xff0c;想了很久思路&#xff0c;还想了很久是单调递增栈还是单调递减栈…… 方法是维护一个单调递减栈。先将结果result初始化为0&#xff0c;如果温度一直递减&#xff0c;那么result就不用变化了。 遍历每日温度&am…...

ChatBI的落地挑战——技术先进≠产品可用

近年来&#xff0c;大语言模型&#xff08;LLM&#xff09;的爆发让“对话式BI”&#xff08;ChatBI&#xff09;成为行业热点。然而&#xff0c;许多企业发现&#xff0c;尽管技术Demo令人惊艳&#xff0c;实际落地却困难重重——用户提问率低、回答准确度不稳定、使用场景模糊…...

1.2 测试设计阶段:打造高质量的测试用例

测试设计阶段&#xff1a;打造高质量的测试用例 摘要 本文详细介绍了软件测试流程中的测试设计阶段&#xff0c;包括测试用例设计、测试数据准备、测试环境搭建和测试方案设计等内容。通过本文&#xff0c;读者可以系统性地了解测试设计的方法和技巧&#xff0c;掌握如何高效…...

x64dbg调试python解释器

可以先写个input()这会让dbg中断在ntdll模块中&#xff0c;查看调用堆栈在系统调用结束后的打断点 然后直接断到PyObject_Vectorcall函数...

浙江大学DeepSeek系列专题线上公开课第二季第四期即将上线!端云协同:让AI更懂你的小心思! - 张圣宇 研究员

今晚8点10分左右&#xff0c;端云协同&#xff1a;让AI更懂你的小心思&#xff01;浙大学者张圣宇研究员将揭秘人机交互新玩法。浙江大学DeepSeek系列专题线上公开课第二季第四期即将上线&#xff01; 讲座 主题&#xff1a; 大小模型端云协同赋能人机交互 主讲人&#xff1a…...

【项目管理】第3章 信息系统治理 --知识点整理

相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff5e;-CSDN博客 &#xff08;一&#xff09;知识总览 对应&#xff1a;第1章-第5章 &#xff08;二&#xff09;知识笔记 三、信息系统治理 本文涉及信息系统治理与审计的核心知识。 1&#xff09;…...

算法与数据结构线性表之栈和队列

Hello大家好&#xff01; 很高兴与大家见面&#xff01; 给生活添点快乐&#xff0c;开始今天的编程之路。 我的博客:<但愿. 我的专栏:C语言、题目精讲、算法与数据结构、C 欢迎点赞&#xff0c;关注 一 栈 1概念&#xff1a;栈是⼀种特殊的线性表&#xff0c;其只允许…...

【Introduction to Reinforcement Learning】翻译解读2

2.2 马尔可夫决策过程&#xff08;MDPs&#xff09; 马尔可夫决策过程&#xff08;MDP&#xff09;为顺序决策提供了框架&#xff0c;其中动作不仅影响即时奖励&#xff0c;还会影响未来结果。与多臂老虎机问题不同&#xff0c;MDP中的即时奖励与延迟奖励相平衡。在多臂老虎机…...

2016年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析

2016年-全国大学生数学建模竞赛(CUMCM)试题速浏、分类及浅析 全国大学生数学建模竞赛(China Undergraduate Mathematical Contest in Modeling)是国家教委高教司和中国工业与应用数学学会共同主办的面向全国大学生的群众性科技活动,目的在于激励学生学习数学的积极性,提高学…...

UI测试(2)

1、HTML 是用来描述网页的一种语言。 指的是超文本标记语言 (Hyper Text Markup Language) &#xff0c;HTML 不是一种编程语言&#xff0c;而是一种标记语言 (markup language) 负责定义页面呈现的内容&#xff1a;标签语言&#xff1a;<标签名>标签值<标签名>&am…...

Pr视频剪辑 Premiere Pro 2024 for Mac

Pr视频剪辑 Premiere Pro 2024 for Mac 文章目录 Pr视频剪辑 Premiere Pro 2024 for Mac一、介绍二、效果三、下载 一、介绍 Premiere Pro 2024 for Mac是一款专业的视频编辑软件&#xff0c;广泛应用于电影、电视、广告等领域。它为Mac用户提供了强大的剪辑、调色、音频处理等…...

电源测试系统自动化转型:Chroma 8000 与 NSAT-8000 核心功能对比解析

在全球制造业加速智能化升级的背景下&#xff0c;电源模块测试正从传统手动模式向自动化、智能化深度转型。作为企业降本增效与提升竞争力的关键&#xff0c;如何选择适配的测试系统成为行业焦点。本文聚焦市场主流的 Chroma 8000 与 NSAT-8000 两款系统&#xff0c;从功能设计…...

智能指针和STL库学习思维导图和练习

思维导图&#xff1a; #include <iostream> #include <vector> #include <string> using namespace std;// 用户结构体 struct User {string username;string password; };vector<User> users; // 存储所有注册用户// 使用迭代器查找用户名是否存在 ve…...

【JS】二分查找

题目 步骤 初始化指针&#xff1a;定义 left 和 right 两个指针&#xff0c;分别指向数组的起始位置和末尾位置&#xff0c;确定查找范围。进入循环&#xff1a;只要 left 小于等于 right&#xff0c;就继续执行循环&#xff0c;因为此时查找范围不为空。计算中间索引&#xff…...

Mamba模型

为什么要提出mamba模型&#xff1f; transformer特点&#xff1a;训练快&#xff0c;推理慢&#xff0c;计算成本O&#xff08;n*n&#xff09; Rnn的特点&#xff1a;训练慢&#xff0c;推理快&#xff0c;容易遗忘 其实很容易理解&#xff0c;因为RNN的输入只包含前一个隐…...

人工智能通识速览(Part4. 评估指标)

四、评估指标 1.回归模型 均方误差&#xff08;MSE&#xff09; 优点&#xff1a;数学性质良好&#xff0c;计算简单&#xff0c;对误差的惩罚力度较大&#xff0c;能很好地反映模型预测值与真实值之间的平均差异程度&#xff0c;便于比较不同模型的性能。缺点&#xff1a;由…...

IT运维服务方案

一、服务目标 IT 运维服务致力于构建稳固、高效且智能的信息系统生态&#xff0c;为客户的业务运营筑牢数字化根基。凭借前沿的主动式维护策略&#xff0c;运用大数据分析、智能监控等技术手段&#xff0c;提前洞察系统隐患&#xff0c;在萌芽阶段化解潜在故障。同时&#xff0…...

【简历全景认知2】电子化时代对简历形式的降维打击:从A4纸到ATS的生存游戏

一、当简历遇上数字洪流:传统形式的式微 在1990年代,一份排版精美的纸质简历还能让HR眼前一亮;但今天,超过75%的 Fortune 500 企业使用ATS(Applicant Tracking System)进行初筛,未优化的简历可能在5秒内就会沦为数字废土。这种变迁本质上符合「技术接纳生命周期」理论—…...

LLM面试题七

NLP算法工程师面试题8道|含解析 分类场景下bert和gptprompt的方式哪种会有更好效果&#xff0c;为什么&#xff1f; 在分类场景下&#xff0c;BERT比GPT更适合用于建模&#xff0c;因为BERT的结构中包含了双向的Transformer编码器&#xff0c;而GPT的结构中只包含单向的Transf…...

Semaphore

关于作者&#xff1a; CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP&#xff0c;带领团队单日营收超千万。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、商业化变现、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览…...

视频插帧EMAVFI:extracting motion and appearance via inter-frame attention for video

文章目录 EMAVFI:extracting motion and appearance via inter-frame attention for efficient video frame interpolation1.核心概述2.帧间注意力机制为什么可以表示运动信息3.网络架构4.dataset类5.demo推理和训练代码6.总结 EMAVFI:extracting motion and appearance via in…...

⑨数据中心-M-LAG技术配置

华三数据中心网络是指华三提供的专门设计用于数据中心环境的网络解决方案。这种网络通常具有高性能、可扩展性和可靠性&#xff0c;旨在支持大规模数据中心的需求。华三数据中心网络解决方案通常包括以下特点&#xff1a; 1. 高带宽&#xff1a;支持高密度数据中心环境中大量网…...

永磁同步电机无速度算法--基于HOPLL的滑模观测器

一、原理介绍 传统PLL算法为二阶系统&#xff0c;其实现是基于转速变化变化缓慢的假设&#xff0c;因此在转速频繁出现动态变化时会导致动态性能不佳。为改善系统动态性能&#xff0c;将转速微分量引入PLL中&#xff0c;作为附加状态变量&#xff0c;与电角速度及转速共同构成…...

【Linux网络】网络套接字socket

&#x1f308;个人主页&#xff1a;秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/qinjh_/category_12891150.html 目录 Socket 编程预备 理解源 IP 地址和目的 IP 地址 认识端口号 端口号范围划分…...

ubuntu wifi配置(命令行版本)

1、查询当前设备环境的wifi列表 nmcli dev wifi list2、连接wifi nmcli dev wifi connect "MiFi-SSID" password "Password" #其中MiFi-SSID是wifi的密码&#xff0c;Password是wifi的密码3、查看连接情况 nmcli dev status...

配环境的经验

pip install -e . 该命令用于以“编辑模式”&#xff08;也称为开发模式&#xff09;安装当前目录下的 Python 包&#xff0c;比如包含有 setup.py、setup.cfg 或 pyproject.toml 文件的项目-e 是 --editable 的简写。以编辑模式安装时&#xff0c;pip 会在你的 Python 环境中创…...

STM32cubmax配置STM32407VET6,实现网络通信

文章目录 一、开发准备1、硬件准备2、软件准备 二、STM32CubeMX工程配置步骤1、创建新工程 三、外设配置步骤1&#xff09;调试接口&#xff08;SWD&#xff09;配置2&#xff09;时钟配置3&#xff09;串口&#xff08;USART&#xff09;配置4&#xff09;IO口配置&#xff08…...

LeetCode 热题 100_完全平方数(84_279_中等_C++)(动态规划(完全背包))

LeetCode 热题 100_完全平方数&#xff08;84_279&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;动态规划&#xff08;完全背包&#xff09;&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一…...