面试题1-fail-safe机制与fail-fast 机制

1.定义

         Fail-safe 和 Fail-fast,是多线程并发操作集合时的一种失败处理机制

1.1.Fail-Safe机制

1.1.1.定义

         Fail-Safe 机制的设计目标是在发生故障时,系统仍然能够继续运行,尽量避免导致整个系统崩溃。即使发生错误或异常,系统会进入一种安全的状态,确保功能的部分可用性或避免更严重的后果。

         Fail-safe,表示失败安全,也就是在这种机制下,出现集合元素的修改,不会抛出 ConcurrentModificationException。

         原因是采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有集合内容, 在拷贝的集合上进行遍历。由于迭代时是对原集合的拷贝进行遍历,所以在遍历过程中对原集合所做的修改并不能被迭代器检测到,java定义了一个 CopyOnWriteArrayList,在对这个集合遍历过程中,对集合元素做修改后,不会抛出异常,但同时也不会打印出增加的元素。

         java.util.concurrent 包下的容器都是安全失败的,可以在多线程下并发使用,并发修改。

         常见的使用 fail-safe 方式遍历的容器有 ConcerrentHashMap 和 CopyOnWriteArrayList 等

    private static void failSafe() {

        CopyOnWriteArrayList<Integer> list

            = new CopyOnWriteArrayList<Integer>(new Integer[] {1,2,3,4});

        Iterator<Integer> iterator = list.iterator();

        while(iterator.hasNext()) {

            Integer i = iterator.next();

            System.out.println(i);

            if(i == 3) {

                list.add(108); // fail-salf模式下,这里不会被打印

            }

        }

    }

1.1.2.作用

         容错性强:Fail-Safe 机制会捕获错误并采取补救措施,系统不会立即中止或崩溃。例如,它可能通过回滚、降级、冗余处理等方式维持基本的功能。

         保证安全:它倾向于在发生故障时确保安全性或系统的核心功能。即使某个组件出错,系统会将其隔离或使用默认值来继续运行,而不会产生灾难性的影响。

         延续运行:系统能继续执行,保持尽可能正常的操作,用户可能会感知到降级的服务或性能,但不会完全丧失功能。

1.1.3.典型应用场景

         核电站控制系统:如果某个传感器失效,系统会进入安全模式,防止发生危险。

         飞行控制系统:如果某个子系统出问题,系统会通过冗余设计或故障切换继续飞行。

         数据库事务处理:在分布式系统中,Fail-Safe 机制可能用于保持数据的一致性,即使某些服务不可用,系统仍可以部分运行。

1.1.4.优缺点

         优点:提高系统的可靠性,防止单点故障影响整个系统。

         缺点:可能隐藏潜在的问题,长时间运行会积累更多隐患,影响后续的维护和修复。

1.2.Fail-Fast机制

1.2.1.定义

         Fail-Fast 机制的设计目标是在系统检测到故障时,立即终止运行并报告错误,避免故障传播或进一步引发不可控的后果。系统在发现问题时不做任何掩饰,而是迅速失败,让问题暴露在早期阶段。

         例如,在集合遍历过程中,一旦发现容器中的数据被修改了,会立刻抛出 ConcurrentModificationException 异常,从而导致遍历失败。定义一个 Map 集合,使用 Iterator 迭代器进行数据遍历,在遍历过程中,对集合数据做变更时,就会 发生 fail-fast。

         java.util 包下的集合类都是快速失败机制的, 常见的使用 fail-fast 方式遍历的容器有 HashMap 和 ArrayList 等。

    private void failFast() {

        Map<String, String> names = new HashMap<String, String>();

        names.put("001", "name001");

        names.put("002", "name002");

        names.put("003", "name003");

        names.put("004", "name004");

        names.put("005", "name005");

       

        Iterator<String> iterator = names.keySet().iterator();

        while(iterator.hasNext()) {

            System.out.println(names.get(iterator.next()));

            names.put("006", "name006");

        }

    }

1.2.2.作用

         快速检测错误:Fail-Fast 机制允许系统在检测到不正常情况时立即失败,从而尽早暴露问题。这使得开发人员或运维人员能够迅速发现并修复问题,防止其在系统中蔓延。

         避免错误扩散:Fail-Fast 机制通过立即中止故障进程,防止问题影响其他模块或功能,从而保护系统整体的稳定性。

         提高开发质量:Fail-Fast 的策略常用于开发和测试环境中,以确保系统在最早的阶段检测到潜在的缺陷和问题。

1.2.3.典型应用场景

         Java 集合框架:如ArrayList中的迭代器就是 Fail-Fast 的。如果在遍历过程中发现集合结构被修改,它会立即抛出ConcurrentModificationException,而不是继续运行可能导致不一致的状态。

         敏捷开发:在持续集成和持续交付的环境中,Fail-Fast 机制用于在代码中发现问题时立即中断构建,防止有缺陷的代码被部署。

         微服务架构:当一个服务依赖的其他服务发生错误时,Fail-Fast 机制可以让服务立即返回错误,而不是等待超时,避免造成更多资源浪费。

1.2.4.优缺点

         优点:加快问题的暴露和反馈,防止问题积累,有助于提高系统的整体质量。

         缺点:可能在系统中引发较多的短暂性失败,尤其是在分布式系统中,网络抖动或短暂的依赖故障也会导致系统快速终止。

2.Fail-Safe和Fail-Fast的对比

         Fail-Safe 机制适用于需要高容错性的系统,目标是在故障情况下仍能保持系统的部分功能运行,保障系统安全性。

         Fail-Fast 机制用于尽早暴露和处理错误,防止问题蔓延,适合对问题快速反馈和修复的场景。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

task【XTuner微调个人小助手认知】

1 微调前置基础 本节主要重点是带领大家实现个人小助手微调&#xff0c;如果想了解微调相关的基本概念&#xff0c;可以访问XTuner微调前置基础。 2 准备工作 环境安装&#xff1a;我们想要用简单易上手的微调工具包 XTuner 来对模型进行微调的话&#xff0c;第一步是安装 XTu…

vmstat命令:系统性能监控

一、命令简介 ​vmstat​ 是一种在类 Unix 系统上常用的性能监控工具&#xff0c;它可以报告虚拟内存统计信息&#xff0c;包括进程、内存、分页、块 IO、陷阱&#xff08;中断&#xff09;和 CPU 活动等。 ‍ 二、命令参数 2.1 命令格式 vmstat [选项] [ 延迟 [次数] ]2…

‌多系统萎缩患者的锻炼秘籍:科学运动,守护健康

亲爱的朋友们&#xff0c;今天我们要聊一个既重要又温馨的话题——多系统萎缩患者的锻炼方法。面对这一挑战&#xff0c;科学而合理的锻炼不仅能帮助患者控制病情&#xff0c;还能提升生活质量。让我们一起走进这份“锻炼秘籍”&#xff0c;为爱加油&#xff0c;为健康护航&…

京东云主机怎么用?使用京东云服务器建网站(图文教程)

京东云主机怎么用&#xff1f;非常简单&#xff0c;本文京东云服务器网jdyfwq.com使用以使用京东云服务器搭建WordPress博客网站为例&#xff0c;来详细说下京东云主机的使用方法。使用京东云服务器快速搭建WordPress网站教程&#xff0c;3分钟基于应用镜像一键搞定&#xff0c…

医院综合服务系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;患者管理&#xff0c;医生管理&#xff0c;就诊信息管理&#xff0c;科室信息管理&#xff0c;挂号信息管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;订单排队&#…

深度学习:词嵌入embedding和Word2Vec

目录 前言 一、词嵌入&#xff08;Embedding&#xff09; 1.传统自然语言处理问题 2.什么是词嵌入 二、Word2vec模型 1.Word2Vec的基本原理 三、CBOW模型训练过程 前言 在机器学习里的自然语言处理&#xff0c;是将语料库中的词语转换成词向量矩阵&#xff0c;再使用朴素…

【车载开发系列】ParaSoft单元测试环境配置(四)

【车载开发系列】ParaSoft单元测试环境配置&#xff08;四&#xff09; 【车载开发系列】ParaSoft单元测试环境配置&#xff08;四&#xff09; 【车载开发系列】ParaSoft单元测试环境配置&#xff08;四&#xff09;一. 如何设置过滤二. 如何设置静态扫描的规则三. 如何设置单…

气膜馆的多元化盈利模式与市场前景—轻空间

随着市场经济的不断繁荣&#xff0c;气膜馆作为一种创新型场馆&#xff0c;凭借其独特的结构设计和灵活的运营模式&#xff0c;逐渐成为创业者关注的焦点。那么&#xff0c;气膜馆如何通过多元化经营实现盈利&#xff1f;本文将为您详细解析气膜馆的经营模式与发展机会。 气膜馆…

【测试】接口测试与接口自动化

壹、接口测试基础 一、接口测试概念 I、基础概念 是测试系统组件间接口的一种测试。 主要用于检测外部系统与系统间、内部子系统间的交互点&#xff1b;测试重点检查数据的交换、传递和控制管理过程&#xff0c;以及系统间的相互逻辑依赖关系。 内部接口调用相当于函数调用&am…

Spring Boot与iTextPdf:高效生成PDF文件预览

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 在现代应用程序开发中&#xff0c;生成PDF文件是一个常见的需求。PDF文件因其跨平台性和易读性&#xff0c;被广泛应用于文档交换、报告生成和打印预览等场景。Spring Boot作为一个用于简化Spring应用开发的框…

毕设 大数据抖音短视频数据分析与可视化(源码)

文章目录 0 前言1 课题背景2 数据清洗3 数据可视化地区-用户观看时间分界线每周观看观看路径发布地点视频时长整体点赞、完播 4 进阶分析相关性分析留存率 5 深度分析客户价值判断 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕…

基于51单片机的多路电压测量proteus仿真

地址&#xff1a;https://pan.baidu.com/s/1cpgtfl571DcKfjhKvcKqSA 提取码&#xff1a;1234 仿真图&#xff1a; 芯片/模块的特点&#xff1a; AT89C52/AT89C51简介&#xff1a; AT89C52/AT89C51是一款经典的8位单片机&#xff0c;是意法半导体&#xff08;STMicroelectron…

三种环境下,没有公网ip的虚拟机访问公网的方法

1. windows真机vmware虚拟机 2. 云平台&#xff0c;虚拟机A&#xff08;有公网ip&#xff0c;有内网ip&#xff09;虚拟机B&#xff08;只有内网ip&#xff09; 3. linux真机kvm虚拟机 ------------------------------------------------------------------------------ 第…

基于 springboot vue中学生日常行为评分管理系统设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php python(flask Django) 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找…

Spring源码学习:SpringMVC(4)DispatcherServlet请求入口分析

目录 前言HttpServlet &FrameworkServletHttpServlet #serviceFrameworkServlet#processRequest DispatcherServlet#doServicedoDispatchcheckMultipartgetHandlerAbstractHandlerMapping#getHandlerRequestMappingInfoHandlerMapping#getHandlerInternalAbstractHandlerMe…

Dit架构 diffusion范式分类+应用

1.ping 网址 2.ssh nscc/l20 3.crtl,打开vscode的setting 4.win 10修改ssh配置文件及其密钥权限为600 - 晴云孤魂 - 博客园 整体来看&#xff1a; 使用transformer作为其主干网络&#xff0c;代替了原先的UNet 在latent space进行训练&#xff0c;通过transformer处理潜…

Spring MVC__@RequestMapping注解、获取请求参数、域对象共享数据、视图、Restful

目录 一、RequestMapping注解1、RequestMapping注解的功能2、RequestMapping注解的位置3、RequestMapping注解的value属性4、RequestMapping注解的method属性5、RequestMapping注解的params属性&#xff08;了解&#xff09;6、RequestMapping注解的headers属性&#xff08;了解…

动手学大模型应用开发之大模型简介

动手学大模型应用开发之大模型简介 主要学习目标什么是大语言模型大模型的能力和特点涌现能力作为基座模型支持多元应用的能力支持对话作为统一入口的能力大模型特点 常见大模型ChatGpt通义千问 LangChainLangChain的核心模块 总结相关学习链接 主要学习目标 学习如何进行大模…

【实战】Nginx+Lua脚本+Redis 实现自动封禁访问频率过高IP

大家好&#xff0c;我是冰河~~ 自己搭建的网站刚上线&#xff0c;短信接口就被一直攻击&#xff0c;并且攻击者不停变换IP&#xff0c;导致阿里云短信平台上的短信被恶意刷取了几千条&#xff0c;加上最近工作比较忙&#xff0c;就直接在OpenResty上对短信接口做了一些限制&am…

GeoCue与Xer Technologies合作推动无人机测绘技术革新

GeoCue与Xer Technologies合作推动无人机测绘技术革新 近期,LiDAR测绘硬件和软件开发商GeoCue与瑞士长航时混合动力无人机制造商Xer Technologies AG携手合作,成功将GeoCue的TrueView 720 LiDAR和图像传感器集成至Xer X8无人机平台。这一里程碑式的合作不仅标志着无人机测绘技…