分布式操作系统 - 8.分布式容错管理

news2024/11/16 17:36:29

文章目录

  • 1.容错性概述
    • 1.1 基本概念
    • 1.2 失效(失败)类型
    • 1.3 失效(失败)模型(halting failure)
    • 1.4 基于冗余的失效屏蔽技术
      • (1)冗余类型
      • (2)三模冗余方法(TMR,Triple Modular Redundancy)
  • 2.进程的可靠性
    • 2.1 概念
    • 2.2 组的管理
    • 2.3 复制容错技术
    • 2.4 故障系统的协定问题
      • (1)基本概念
      • (2)三种情况
      • (3)两军问题
      • (3)三个将军
    • 2.5 故障检测
  • 3.客户服务器通信的可靠性
    • 3.1 点对点通信
    • 3.2 RPC失效
      • (1)客户不能定位服务器
      • (2)丢失请求消息
      • (3)服务器崩溃
      • (4)丢失应答消息
      • (5)客户崩溃
  • 4.分组通信的可靠性
    • 3.1 基本可靠多播模式
    • 3.2 可靠多播的可伸缩新
    • 3.3 原子性多播
  • 5.分布式提交
    • 5.1 两阶段提交协议
    • 5.2 三阶段提交协议(不考)
  • 6.恢复处理
    • 6.1 概念
    • 6.2 可恢复的稳定存储器
    • 6.3检查点
    • 6.4 独立检查点
    • 6.5 协作式检查点
    • 6.6 消息日志

1.容错性概述

1.1 基本概念

可依赖系统(Dependable, Trustworthy)

  • 可用性(availability):在定时刻能正确操作的概率,可用性高表示任何给定时刻都能正常运行
  • 可靠性(Reliablity):在给定期间能正确操作的概率,可靠性高的系统可以连续运行很长时间
  • 安全性(Safty) :临时失效不会造成灾难
  • 可维护性(Maintainability):故障系统被恢复的难易程度

失效(fail, failure) 、 失灵 :§ 系统不能兑现它的承诺(提供服务)

差错(error):导致系统失效的系统状态, 例如, 一个图片没能打开

故障(fault):导致差错发生的原因, 例如, 图片服务器挂掉

建立一个可靠系统与故障控制紧密相关

  • 预防(preventing)
  • 去除(removing)
  • **容错(tolerating) **
  • 预告(forecasting)

**容错(fault tolerance) ** :即使发生故障, 系统仍能提供服务

故障类型

  • 短暂型(transient): 出现一次, 再也不出现
  • 间歇型(intermittent): 消失后, 再重复出现
  • 永久型(permanent): 一直存在

1.2 失效(失败)类型

失效类型描述
崩溃性失效服务器停止,但在停止前一直正确工作
遗漏性失效
接收遗漏
发送遗漏
服务器不能响应到来的请求
服务器不能接收到来的消息
服务器不能发送
定时性失效服务器的响应超出规定的时间间隔
响应性失效
值失效
状态变迁失效
服务器的响应不正确
响应的值是错误的
服务器偏离正确的控制流
任意性失效
(拜占庭型故障)
服务器在任意的时刻产生任意的响应

1.3 失效(失败)模型(halting failure)

  • 失败即停 (fail-stop)。 良性、 易检测。
  • 失败缄默(fail-silent)。 不通知失效。
  • 失败安全(fail-safe)。 不产生恶果。

1.4 基于冗余的失效屏蔽技术

(1)冗余类型

信息冗余: 如, 海明码。

时间冗余: 如, 重发, 重做

物理冗余:

  • 软件:如复制进程
  • 硬件: 如复制电路

信息冗余和物理冗余都属于空间冗余

(2)三模冗余方法(TMR,Triple Modular Redundancy)

三路表决器(voter): 三路输入, 一路输出

可屏蔽一路错误(任意性失效)

在这里插入图片描述

2.进程的可靠性

2.1 概念

**进程容错 **

  • 进程组: 具有相同功能的进程集合;组中其他进程可以接管失败进程
  • 组成员籍
    • 加入: 具有成员籍
    • 脱离: 注销成员籍
    • 多成员籍: 同时属于不同的组

**设计问题 **

  • 需要复制的程度
  • 无故障时, 平均情况和最坏情况下的系统性能
  • 有故障时, 平均情况和最坏情况下的系统性能

2.2 组的管理

平等组:所有成员是等同的

层次组:由协调者和工作者组成

在这里插入图片描述

组成员籍管理

  • 组服务器:集中式管理
  • 多播通信:分布式管理

在这里插入图片描述

故障后,组的退出

  • fail-stop类型:发送Goodbye信息
  • fail-silent类型:需其他人员发现

消息同步:

  • 加入组时:立刻收到改组的所有消息
  • 退出组时:不再收到改组的任何消息

组的重建

  • 当组崩溃后,根据协议重新建立组

2.3 复制容错技术

**复制容错 **

  • 用多个相同的进程, 屏蔽个别故障进程的故障
  • 冗余度: 相同进程的个数

**基于主进程协议(primary-based) **

  • 结构: 层次组结构
  • 协议: primary-backup协议
  • 接管: 主进程崩溃, 后备进程选举新的主进程

**复制写协议(replicated-write) **

  • 结构: 平等组结构
  • 协议: 基于表决数协议

主备份方法

  • 主进程失效,则后备进程接替其任务
  • 接管模型

在这里插入图片描述

**k-容错度: **

  • 在有k个进程发生故障时, 系统仍能正确运行
  • 在复制写协议情况下:
    • Fail-stop型故障: 对k-容错度, 需k+1冗余度
    • 拜占庭型故障: 对k-容错度, 需2k+1冗余度
  • 容错的前提条件:
    • 所有的请求到达所有服务器的顺序应相同 , 要不全收到, 要不全收不到
    • 原子广播问题(atomic broadcast problem)

2.4 故障系统的协定问题

(1)基本概念

**协定(agreemnt) ** :对某些问题的一致意见。 如, 是否提交事务, 负载划分, 同步等

分布式协定算法:在有限的步骤内, 所有非故障进程达成协定

底层系统中可能的情况:

  1. 同步vs异步系统
  2. 限定的或无限定的通信延迟
  3. 有序的或无序的消息递交
  4. 单播(unicast)或多播(multicast)式消息传送

(2)三种情况

可以取得一致的三种情况

  1. 处理机同步方式、 通信延时有限 :处理机可用超时检测机制, 确定其他失败进程
  2. 消息有序, 广播式传输:每个处理机原子式广播一个初始值, 其他处理器按照次序接收, 能够同意谁是第一个发送的
  3. 处理机同步, 消息有序

(3)两军问题

两个将军 A1 和 A2 决定攻打同一个敌人 B ,任一方都没有敌人强大,所以只有共同进攻才有胜算。敌军正好位于两个将军之间,意味着信使可能会被敌军抓住。两军问题指的就是在这样的条件下两个将军如何就是否进攻达成共识。

在这里插入图片描述

对于不可靠通信, 即使进程是可靠的, 也不可能达成协定

拜占庭将军协定问题

  • 假设通信是可靠的, 但进程可能是不可靠的
  • 例: 3个忠诚将军, 1个叛变将军

Lamport递归算法

共4步: (a)对外报告(b)收集向量©报告向量(d)生成结果向量: (1, 2, 未知, 4)

在这里插入图片描述

(3)三个将军

若三个将军中, 有两个忠诚将军, 一个叛变将军, 则不能判断出哪个将军叛变。

在这里插入图片描述

若要有m个进程出错的系统实现协同一致, 最少要有2m+1个正常进程。 进程总数为3m+1。

需超过2/3多数, 才能达成协定

2.5 故障检测

无故障进程应能检测出故障进程

故障进程检测方法(超时机制)

  • 主动式方法, 发送 “Are you alive?”消息;常用方法, ping操作
  • 被动式方法, 等待其他进程发来的消息;每个结点定期广播状态, 状态较旧的有问题

如何区分网络故障和结点故障:请邻居结点帮忙检查

3.客户服务器通信的可靠性

3.1 点对点通信

可靠通信:防止通信失效

遗漏型失效:消息丢失

  • 解决策略: 利用可靠的传输协议, 如TCP协议, 通过消息确认和重新传输来掩盖遗漏性失效。

连接崩溃失效: 连接中断

  • 通常不能屏蔽, 需重建连接
  • 解决策略: 抛出例外, 通知客户进程

3.2 RPC失效

5种失效情况:

在这里插入图片描述

(1)客户不能定位服务器

可能服务器被修改, 客户存根(stub) 与新的服务器存根不匹配

解决策略:

  • 抛出一个异常(exception) , 如JAVA、 C++
  • 使用信号(SIGNOSERVER) , 如C语言, 然后由编写的信号处理程序做相应处理。
  • 没有透明性

(2)丢失请求消息

解决策略:客户发现超时,重发请求

(3)服务器崩溃

崩溃情况

在这里插入图片描述

解决策略:

  • 至少一次语义:不断尝试,将应答传给客户
  • 最多一次语义:立即放弃,并报告失败
  • 听之任之:RPC可能执行任意多次(容易实现)
  • 确切一次语义:(目标)

举例: RPC远程操作为打印文本, 服务器崩溃后恢复, 并向客户通告。

问题: 客户不知其打印请求是否已被执行

服务器端策略

  • 在打印之前向客户发送ACK消息
  • 在打印之后向客户发送ACK消息

客户端策略

  • 总是重发请求: 文本可能被打印两次
  • 绝不重发请求: 可能文本不被打印
  • 收到ACK时重发
  • 没有收到ACK时重发

出现服务器失效时, 客户和服务器的策略组合

  • 服务器事件: M(发送完成消息); P(打印); C(崩溃)

在这里插入图片描述

(4)丢失应答消息

解决策略:定时器、超时检测、重发请求

问题:重复操作

解决策略:

  • 构造幂等性操作(idempotent)
  • 区分原始消息和重发消息:为请求分配顺序号;附加标志位

(5)客户崩溃

孤儿进程问题

解决策略:

  • 根除法:利用日志,撤销孤儿进程
  • 再生法:设置按顺序编号的时期(epoch)。客户重启时,广播新时期开始,撤销旧的孤儿进程
  • 温和再生法:时期广播到达时,尝试定位远程计算的拥有者,撤销无助的孤儿
  • 过期法:设置时间量T。如果超过T,则撤销孤儿进程

4.分组通信的可靠性

假定:进程操作正确,在通信中不加入或退出组

可靠多播:将一个消息递交给每一个当前组员

在这里插入图片描述

不可靠多播:不能保证将一个多播消息递交给所有组员

3.1 基本可靠多播模式

解决策略:

  • 消息传播:记录顺序号
  • 报告反馈:如果丢失,返回负ACK,重新发送

在这里插入图片描述

3.2 可靠多播的可伸缩新

反馈爆炸问题:N → 1

简单解决方案

  • 接收者只返回NACK(否定)消息
  • 发送者保留消息到历史缓冲区

仍然存在问题

  • 历史缓冲区溢出问题
  • NACK反馈爆炸

无层次反馈抑制技术(SRM,可伸缩的可靠多播协议)

  • 不反悔ACK,只返回NACK,向发送者和组内广播式发送
  • 压缩NACK。随机延时后,如果接收到其他的重发请求,就抑制自己的NACK。理想情况下,只有一个重发请求

在这里插入图片描述

层次化反馈控制

  • 一个大组划分成若干个小组,形成一个树
  • 发送者所在的小组为树的根
  • 每个局部协调者转发消息给它的孩子
  • 局部协调者负责请求重发

在这里插入图片描述

3.3 原子性多播

原子性多播问题

  • 消息要么递交给所有组员,要么一个也不递交
  • 对于每个组员,所有消息的递交次序是相同的

用途举例:主动式复制协议

带用通信层的分布式系统结构:能区分消息接收和消息递交

在这里插入图片描述

故障组员处理

  • 出故障后,自动退出组
  • 修复后,重新加入组

组视图G(group view)

  • 在发送一个消息时,属于该组的所有进程的名单

视图变更:

  • 向所有的组员宣布加入或退出该组

虚拟同步(virtually synchronous)的可靠多播

  • 如果发送者在多播时崩溃,消息将递交给其他所有组员,或者被它们丢弃

原理:所有多播在视图变更之间进行

在这里插入图片描述

消息递交次序

  1. 可靠的无序多播:不能保证接收到消息的递交次序是相同的

    在这里插入图片描述

  2. 可靠的FIFO次序多播:从同一发送者接收到的消息的递交次序与发送次序一致

    举例:发送者P1,P4;接收者P2,P3

    在这里插入图片描述

  3. 可靠的因果次序多播:具有因果关系的消息的递交次序与发送次序一致,无论消息是否由同一发送者发送;可使用时间戳向量实现

  4. 全序多播:对于所有组员的消息递交次序,是相同的

原子性多播:提供全序递交的虚拟同步可靠多播

虚拟同步的可靠多播的6个版本

多播基本的消息次序全序递交?
可靠多播No
FIFO多播FIFO次序型递交No
因果多播因果-次序型递交No
原子性多播Yes
FIFO原子性多播FIFO-次序型递交Yes
因果原子性多播因果-次序型递交Yes

虚拟同步性的实现:举例:ISIS系统

  • 底层网络:可靠点对点通信,消息排序
  • 稳定消息:G中所有进程都接收到消息m
    1. P4发现P7崩溃,多播视图变更消息(vc)
    2. P6发送所有不稳定消息(没收到所有进程ACK的消息),后续flush(刷新)消息
    3. P6接收到所有返回的flush消息后(证明P6没有待发送消息)确定新的视图 G i + 1 G_{i+1} Gi+1

在这里插入图片描述

5.分布式提交

5.1 两阶段提交协议

协调者的有限状态机

在这里插入图片描述

参与者的有限状态机

在这里插入图片描述

当参与者P处于READY状态,并已与另一参与者Q通信之后,可能采取的动作

进程Q状态进程P动作
COMMIT变迁到COMMIT
ABORT变迁到ABORT
INIT变迁到ABORT
READY与其他参与者联络

5.2 三阶段提交协议(不考)

目的:在协调者失败即停故障的情况下,避免进程阻塞

在这里插入图片描述

协调者(WAIT) : 发现超时,则abort

协调者(PRECOMMIT): 发现超时,继续commit

参与者(INIT): 发现超时,则abort

参与者(READY):

发现超时, 询问其他参与者

  • 如果有COMIT/ABORT,则执行
  • 如果大都为PRECOMMIT,则commit
  • 如果有INIT, 则abort
  • 如果都为READY, 则abort

参与者(PRECOMMIT)并形成多数: 发现超时,继续commit

6.恢复处理

6.1 概念

目的: 使系统从错误状态到正确状态

类型

  • 向后恢复(backward recovery): 使系统返回到上一个正确状态
  • 向前恢复(forward recovery): 使系统前进到一个正确的新状态

检查点技术(checkpoint)

消息日志技术(logging)

  • 基于发送者的写日志
  • 基于接受者的写日志

6.2 可恢复的稳定存储器

稳定存储器状态

a) 稳定存储状态

b) 崩溃状态: 在更新驱动器1后发生

c) 坏点状态: 出现坏扇区

在这里插入图片描述

6.3检查点

分布式快照(snapshot):一致的全局状态

恢复线:最近的分布式快照, 最近的一致性割集

举例

在这里插入图片描述

6.4 独立检查点

独立检查点:每个进程的检查点是相互独立的

问题: 多米诺效应;局部状态没有形成分布式快照, 导致级联回滚(cascaded rollback) 过程

举例: 只有m,m’的接受记录, 没有发送记录

在这里插入图片描述

解决方法

  • 设CPi表示Pi的第m个检查点
  • 设INTi表示CPi和CPi之间的间隔
  • 当Pi在INTi中发送消息x时, 带上(i,m)
  • 当Pj在INTi收到x后, 记录依赖关系 :INTi→ INTj
  • Pj在CPj中加入该依赖关系
  • 当Pi需要回滚到CPi时, 则Pj需要回滚到CPj

6.5 协作式检查点

同步写检查点:所有进程同步地在本地稳存中写检查点, 使保存的状态自动地保持全局一致。

**非阻塞式算法:**分布式快照算法

**两阶段阻塞式算法 **

  • CHECKPOINT_REQUEST:协调者发送命令, 所有进程写局部检查点, 将要发送消息插入队列, 向协调者返回ACK消息。
  • CHECKPOINT_DONE: 当协调者收到所有的ACK后, 发送命令, 所有进程继续

**改进算法 – 增量快照算法 **

  • 最近发送进程:进程P在上一个检查点向其发送过请求的进程。
  • 协调者恢复依赖进程: 在上一个检查点, 直接或间接收到协调者消息的进程。因此, 由最近发送进程的闭包集组成。
  • 协调者只向其最近发送进程多播命令。
  • 当进程P收到写检查点请求时, 仅向P的最近发送进程, 转发该请求。 每个进程仅转发该请求一次。
  • 当所有进程被确认后, 协调者发送第二个多播命令,开始实际写检查点

6.6 消息日志

基本思想

  • 减少检查点的个数
  • 如果消息的传送可以重放(replay), 则可取得全局一致性状态, 而不必从稳存恢复。

分段确定性模型(piecewise deterministic model), 假定

  • 每个进程在一序列的间隔中执行, 有先后次序, 是确定性的。 每个间隔是可重放的。
  • 每个间隔以一个非确定性事件开始, 以下一个非确定形式件发生而结束。
  • 如果记录所有非确定性事件, 则全部执行可重放。

孤儿进程:在进程P崩溃后, 仍然存活的进程。 但在P恢复后,其状态与P不一致

举例:

  • 进程Q崩溃, 消息m2没有写日志
  • Q恢复后, m2,m3消息没有重放, 导致R为孤儿进程

在这里插入图片描述

**消息 **

  • 消息头: 发送者、 接受者、 顺序号、 递交号
  • 稳定消息: 已记入稳存, 不会丢失

**DEP(m): 依赖于m的接受 **

  • 依赖于消息m递交的进程集合。
  • 与m有因果关系的进程集合

**COPY(m): 能发m的进程 **

  • 拥有m的副本, 但未将m写入稳存的进程集合.

孤儿进程

  • Q存在于DEP(m), 而COPY(m)中的所有进程崩溃

**避免孤儿进程 **

  • 如果 Q ∈ D E P ( m ) Q \in DEP(m) QDEP(m), 则保证$Q\in COPY(m) $

**悲观型(pessimistic logging)日志协议 **

  • 保证每个不稳定的消息m最多提交到一个进程
  • 不可能出现孤儿进程

**乐观型(optimistic logging)日志协议 **

  • 在崩溃后处理, 将DEP(m)中的孤儿进程都回滚到不再属于DEP(m)的状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/83157.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java计算机毕业设计ssm影院售票系统6fg71(附源码、数据库)

java计算机毕业设计ssm影院售票系统6fg71(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。…

国外Essay写作实用型技巧怎么学习?

在国外大学的学习期间,想必留学生对Essay是非常熟悉的,因为这是我们无法逃避的作业类型之一。当然,印象最深刻的还是大家刚开始写作Essay的时候,那时候真的是苦不堪言。下面就给大家分享一些Essay写作的实用型技巧,希望…

技术分享 | 无root权限也能高效搭建ClickHouse集群?

本文来自于擎创资深数据库工程师------禹鼎侯 写在前面: 本次技术分享主要介绍ClickHouse集群的tgz方式无root部署的实现思路,以及使用ckman如何快速地不用root权限搭建clickhouse集群。文章较长,干货很多,建议先收藏点赞以防丢失…

wireshark提取RTSP over TCP中的视频流

wireshark提取RTSP over TCP中的视频流 文章目录wireshark提取RTSP over TCP中的视频流1 背景2 提取前准备3 H264提取步骤4 后记1 背景 前面文章中介绍了rtp中提取H264或者H265视频的方式,其适用于基于RTP over UDP的方式,因为UDP方式,视频流…

ip 地址分类说明

1,IP地址简介 前面我们已经了解了TCP/IP协议的网络层的相关协议,并且已经在OSI参考模型中了解到每一个协议栈的网络层都有网络层地址,TCP/IP协议也不例外。本节重点介绍TCP/IP协议栈的网络层地址------IP地址。IP地址是进行复杂的子网规划的基础。 我们前…

ubuntu 18.04 crontab 设置自动开关机

Ubuntu 使用 Cron 实现计划任务 - 知乎 1、切换root su root 2、安装并启动 cron apt install cron 若已经安装,输入以下命令判断 cron 服务是否启动:pgrep cron。如果有 pid (一串数字)输出则说明 cron 服务已经启动&#xf…

pcl协方差计算精度

最近在计算法线的时候发现法线的结果偏差很大,经过分析得到在计算点云协方差矩阵时,选择不同的方法会导致不同的结果。下面是测试过程: 1、测试点云 点云是中间一点的邻域点,是从上往下看,法线的方向近似为&#xff0…

操作股票下单接口的执行流程代码分享

股票下单接口也相当于是程序化交易,可以根据用户的意愿,定制的交易计划去执行,还可以在一定程度上战胜人性的弱点,下面来看看操作股票下单接口的执行流程代码分享: // 委托下单 // category: 0>买入, 1>卖出,…

DataWhale - OpenCV教程01

MetaData: Author:Link: https://vxr.xet.tech/s/49dV3oPublisher:Date: 2022-12-12 - 16:28 笔记记录的时间 ✅ 2022-12-12 Tag: 软件技能 计算机视觉的发展历史: 1982年马尔的书《视觉》,将视觉的任务分为两类:重建和识别。2012年&#…

十年老码农现身说法:凛冬将至,为什么我不劝退互联网

大家好,我是xxx 这两天在B站刷到好多吐槽秋招拿不到offer的视频,其中有几个看得我又好笑又同情。 有一个老哥说自己19年硕士毕业的时候想要进华为但差了临门一脚没能拿到offer,非常遗憾,最后觉得一定是自己不够强所以没能如愿。…

如何运行Scala Object

一 、问题描述 执行一个Scala Obejct 程序,Java 沿袭过来的当然直接用main,Scala 官方还提供了另外的一种方法 定义的object extend App trait在object中定义好main() 二、Scala CookBook 这是一段对《 Scala Cookbook》的摘抄,6.4 如何运…

人工智能时代,Python还不快学起来吗

“是时候学点Python了”。作为一名不怎么安分的程序员,你或许觉得,产生这样的想法并不奇怪,但学习Python却是出于自己对工作现状以及如何应对未来挑战所作出的思考。读过我以前博客的朋友,可能都知道,我推崇软件领域中…

Android开发黑白灰模式和夜间模式设置

接口数据来源鸿洋大神“玩安卓”网站:https://wanandroid.com/ 黑白灰正常模式和黑白灰夜间模式截图 夜间模式与正常模式截图 黑白灰与原色模式设置 /*** 设置灰白色*/protected void setGrayScreen() {Paint paint new Paint();ColorMatrix cm new ColorMatrix(…

八十七氟癸基笼状聚倍半硅氧烷poss

八十七氟癸基笼状聚倍半硅氧烷poss 八十七氟癸基笼状聚倍半硅氧烷是一种含氟有机、无机杂化的笼状聚倍半硅氧烷,可用于可用于热塑性塑料体系改性,降低其表面能。也可用于自修复超疏水材料。 应用领域 1、塑料改性,降低表面张力 2、自修复…

【温故而知新】分布式系统(二)

分布式系统的 CAP 理论 时间:2022年12月12日 作者:小蒋聊技术 【温故而知新】分布式系统(二)分布式系统的 CAP 理论_小蒋聊技术_免费在线阅读收听下载 - 喜马拉雅手机版欢迎收听小蒋聊技术的其他类最新章节声音“【温故而知新】分…

漏洞深度分析|Thinkphp 多语言 RCE

项目介绍 ThinkPHP 是一个快速、简单的面向对象的轻量级 PHP 开发框架,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。 根据目前FOFA系统最新数据(一年内数据)&#xf…

基于昇思MindSpore,实现使用胶囊网络的图像描述生成算法

项目链接 https://github.com/Liu-Yuanqiu/acn_mindspore 项目描述 图像描述生成算法 人类可以轻易的使用语言来描述所看到的场景,但是计算机却很难做到,图像描述生成任务的目的就是教会计算机如何描述所看到的内容,其中涉及到了对视觉信…

JavaOOP面试题(108道)

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:Java面试题…

mybatis以及mybatisplus批量插入问题

1. 思路分析: 批量插入是我们日常开放经常会使用到的场景,一般情况下我们也会有两种方案进行实施,如下所示。 方案一 就是用 for 循环循环插入: 优点:JDBC 中的 PreparedStatement 有预编译功能,预编译之…

vue3较vue不同的地方

自定义指令的区别: vue2的写法: Vue.directive(scroll, {}) //scroll是指令名称 vue3的写法: 定义全局的:在main.js文件中定义: createApp(App).directive("hello",{}).use(store).use(router).mount(#…