iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java面试题之分布式的示例分析
  • 879
分享到

Java面试题之分布式的示例分析

2023-06-20 20:06:01 879人浏览 八月长安
摘要

这篇文章主要为大家展示了“Java面试题之分布式的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java面试题之分布式的示例分析”这篇文章吧。面试题1:说说什么分布式事务?解释一下什么是

这篇文章主要为大家展示了“Java面试题分布式的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java面试题之分布式的示例分析”这篇文章吧。

    面试题1:说说什么分布式事务?解释一下什么是CAP?

    现在互联网开发多使用微服务架构,一个简单的操作,在服务端可能就是由多个服务和数据库实例协同完成的。但在一致性要求较高且高QPS的场景下,多个独立操作之间的一致性问题和服务高可用问题就显得格外棘手。

    基于对水平扩容能力和成本考虑,针对除非敏感业务(如支付、转账等)外的大量其他业务,传统的强一致的解决方案逐渐被淘汰。

    其理论依据就是CAP原理。在分布式系统中,同时满足CAP定律中的一致性 Consistency、可用性 Availability和分区容错性 Partition Tolerance三者是不可能的。在绝大多数的场景,为了可用性和分区容错性,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证最终一致性。

    Java面试题之分布式的示例分析

    CAP理解:

    Consistency:一致性就是在客户端任何时候看到各节点的数据都是一致的。

    Availability:可用性就是在任何时刻都可以提供读写。

    Partition Tolerance:分区容错性是在网络故障、某些节点不能通信的时候系统仍能继续工作。

    具体地讲在分布式系统中,在任何数据库设计中,一个WEB应用最多只能同时支持上面的两个属性。显然,任何横向扩展策略都要依赖于数据分区。因此,设计人员必须在一致性与可用性之间做出选择。

    AP(高可用&&分区容错):

    允许至少一个节点更新状态会导致数据不一致,即丧失了C性质(一致性)。会导致全局的数据不一致。

    CP(一致&&分区容错):

    为了保证数据一致性,将分区一侧的节点设置为不可用,那么又丧失了A性质(可用性)。分区同步会导致同步时间无限延长(也就是等数据同步完成之后才能正常访问)

    CA(一致&&高可用):

    两个节点可以互相通信,才能既保证C(一致性)又保证A(可用性),这又会导致丧失P性质(分区容错性)。这样的话就分布式节点受阻,无法部署子节点,放弃了分布式系统的可扩展性。因为分布式系统与单机系统不同,它涉及到多节点间的通讯和交互,节点间的分区故障是必然发生的,所以在分布式系统中分区容错性是必须要考虑的。

    分布式事务服务

    分布式事务服务(Distributed Transaction Service,DTS)是一个分布式事务框架,用来保障在大规模分布式环境下事务的最终一致性。

    CAP理论告诉我们在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的,所以我们只能在一致性和可用性之间进行权衡。

    为了保障系统的可用性,互联网系统大多将强一致性需求转换成最终一致性的需求,并通过系统执行幂等性的保证,保证数据的最终一致性。

    追问1:怎么理解强一致性、弱一致性和最终一致性?

    强一致性:当更新操作完成之后,任何多个后续进程或者线程的访问都会返回最新的更新过的值。这种是对用户最友好的,就是用户上一次写什么,下一次就保证能读到什么。根据 CAP 理论,这种实现需要牺牲可用性。

    弱一致性:系统并不保证后续进程或者线程的访问都会返回最新的更新过的值。系统在数据写入成功之后,不承诺立即可以读到最新写入的值,也不会具体的承诺多久之后可以读到。

    最终一致性:弱一致性的特定形式。系统保证在没有后续更新的前提下,系统最终返回上一次更新操作的值。在没有故障发生的前提下,不一致窗口的时间主要受通信延迟,系统负载和复制副本的个数影响。DNS 是一个典型的最终一致性系统。

      最终一致性是指系统中所有的副本经过一段时间的异步同步之后,最终能够达到一个一致性的状态,也就是说在数据的一致性上存在一个短暂的延迟。

      几乎所有的互联网系统采用的都是终一致性,只有在实在无法使用终一致性,才使用强一致性或事务,比如,对于决定系统运行的敏感数据,需要考虑采用强一致性,对于与钱有关的支付系统或金融系统的数据,需要考虑采用事务。

      也就是说能够使用最终一致性的业务就尽量使用最终一致性,因为强一致性会降低系统的可用性。

    面试题2:了解BASE理论么?

    在分布式系统中,我们往往追求的是可用性,它的重要程序比一致性要高,那么如何实现高可用性呢?前人已经给我们提出来了另外一个理论,就是BASE理论,它是用来对CAP定理进行进一步扩充的。BASE理论指的是:

    • Basically Available(基本可用)

    • Soft state(软状态)

    • Eventually consistent(最终一致性)

    BASE理论是对CAP中的一致性和可用性进行一个权衡的结果,是对互联网大规模分布式系统的实践总结,强调可用性。

    理论的核心思想就是:基本可用(Basically Available)和最终一致性(Eventually consistent)。虽然无法做到强一致,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。

    追问1:基于BASE理论,举几个实际的例子

    我们以12306订票系统为例

    1.流量削峰

      可以在不同的时间,出售不同区域的票,将访问请求错开,削弱请求峰值。比如,在春运期间,深圳出发的火车票在 8 点开售,北京出发的火车票在 9 点开售。

    2.延迟响应

      在春运期间,自己提交的购票请求,往往会在队列中排队等待处理,可能几分钟或十几分钟后,系统才开始处理,然后响应处理结果。

    3.体验降级

      比如用小图片来替代原始图片,通过降低图片的清晰度和 大小,提升系统的处理能力。

    4.过载保护

      比如把接收到的请求放在指定的队列中排队处理,如果请求等 待时间超时了(假设是 100ms),这个时候直接拒绝超时请求;再比如队列满了之后,就 清除队列中一定数量的排队请求,保护系统不过载,实现系统的基本可用。

     面试题3:实现分布式事务一致性(Consistency)的方法有哪些?

    为了解决分布式系统的一致性问题,在长期的探索研究过程中,涌现出了一大批经典的一致性协议和算法,其中最著名的就是二阶段提交协议、三阶段提交协议和Paxos算法。

    追问1:说一下二阶段提交(2PC)的原理吧

    二阶段提交(two-phase commit)增加了事务处理器和事务执行者的角色。由事务处理器来进行整个事务的处理。主要流程如下面的图

    Java面试题之分布式的示例分析

    两阶段提交协议

    prepare(准备阶段)

    当开始事务调用的时候,事务处理器向事务执行者(有可能是数据库本身支持)发出命令,事务执行者进行prepare操作。

    当所有事务执行者都完成了prepare操作,就进行下一步行为。

    如果有一个事务执行者在执行prepare的时候失败了,那么通知事务处理器,事务处理器再通知所有的事务执行者执行回滚操作。

    commit(提交阶段)

    当所有事务执行者都prepare成功以后,事务处理器会再次发送commit请求给事务执行者,所有事务执行者进行commit处理。

    当所有commit处理都成功了,那么事务执行结束。

    如果有一个事务执行者的commit处理不成功,这个时候就要通知事务处理器,事务处理器通知所有的事务执行者执行回滚(abort)操作。

    但是两阶段提交的诟病就是在于性能问题。比如由于执行链比较长,定资源的时间也变长了。所以在高性能的系统中都会避免使用二阶段提交。

    以上是“Java面试题之分布式的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

    --结束END--

    本文标题: Java面试题之分布式的示例分析

    本文链接: https://www.lsjlt.com/news/300014.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Java面试题之分布式的示例分析
      这篇文章主要为大家展示了“Java面试题之分布式的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java面试题之分布式的示例分析”这篇文章吧。面试题1:说说什么分布式事务?解释一下什么是...
      99+
      2023-06-20
    • Java面试题之JVM的示例分析
      这篇文章给大家分享的是有关Java面试题之JVM的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。面试题1:你遇到过哪些OOM情况,什么原因造成的?怎么解决的?该问题主要针对你遇到的实际问题出发,可以根据你...
      99+
      2023-06-20
    • Java面试题之算法的示例分析
      小编给大家分享一下Java面试题之算法的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!面试题1:你说一下常用的排序算法都有哪些?追问1:谈一谈你对快排的理...
      99+
      2023-06-20
    • Java面试题之手撸算法的示例分析
      这篇文章将为大家详细讲解有关Java面试题之手撸算法的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。手撸算法1:查找数组中重复元素和重复元素的个数当听让我写这个算法时,纸笔还没给到我手上,作为一个...
      99+
      2023-06-20
    • JAVA面试题之static关键字的示例分析
      这篇文章给大家分享的是有关JAVA面试题之static关键字的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。问题面试官Q1:请说说static关键字,你在项目中是怎么使用...
      99+
      2024-04-02
    • Java面试题之并发编程的示例分析
      小编给大家分享一下Java面试题之并发编程的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!面试题1:说一下你对ReentrantLock的理解?ReentrantLock是JDK1.5引入的,它拥有与synchro...
      99+
      2023-06-20
    • PHP面试题之选择题的示例分析
      这篇文章主要介绍PHP面试题之选择题的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!                  ...
      99+
      2023-06-14
    • PHP面试题的示例分析
      这篇文章主要介绍了PHP面试题的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一 、PHP基础部分PHP语言的一大优势是跨平台,什么是跨平台?PHP的运行环境最优搭配...
      99+
      2023-06-15
    • java中反射面试题的示例分析
      这篇文章将为大家详细讲解有关java中反射面试题的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入...
      99+
      2023-06-14
    • Java常量池面试题的示例分析
      这篇文章主要介绍Java常量池面试题的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!今天My partner问我一个让他头疼的Java question,求输出结果: public cla...
      99+
      2023-06-17
    • Redis面试题的示例分析
      这篇文章给大家分享的是有关Redis面试题的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。应用场景缓存共享Session消息队列系统分布式锁相关推荐:Redis视频教程单...
      99+
      2024-04-02
    • java二叉树面试题的示例分析
      小编给大家分享一下java二叉树面试题的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!二叉树的深度题目:输入一颗二叉树的根节点,求该树的的深度。输入一颗二...
      99+
      2023-06-20
    • Node.js面试问题的示例分析
      这篇文章主要介绍了Node.js面试问题的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是error-first的回调方式Err...
      99+
      2024-04-02
    • ​golang面试题之内存逃逸的示例分析
      这篇文章将为大家详细讲解有关golang面试题之内存逃逸的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题知道golang的内存逃逸吗?什么情况下会发生内存逃逸?怎么答golang程序变量会携带...
      99+
      2023-06-14
    • 前端面试题之url、href、src的示例分析
      这篇文章主要介绍前端面试题之url、href、src的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、URL的概念统一资源定位符(或称统一资源定位器/定位地址、URL地址等...
      99+
      2024-04-02
    • C#算法面试题的示例分析
      这篇文章主要为大家展示了“C#算法面试题的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C#算法面试题的示例分析”这篇文章吧。C#算法一道面试题:程序设计: 猫大叫一声,所有的老鼠都开始...
      99+
      2023-06-18
    • PHP基础面试题的示例分析
      这篇文章给大家分享的是有关PHP基础面试题的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、什么事面向对象?主要特征是什么? 面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。主...
      99+
      2023-06-15
    • jQuery常见面试题之DOM操作的示例分析
      这篇文章主要为大家展示了“jQuery常见面试题之DOM操作的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“jQuery常见面试题之DOM操作的示例分析...
      99+
      2024-04-02
    • java中分布式面试题有哪些
      这篇文章主要介绍java中分布式面试题有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象;3. 分布性,Java...
      99+
      2023-06-14
    • java分布式面试CAP分别代表含义分析
      目录引言1、面试官,说到CAP定理,那能详细说说CAP分别代表什么吗?2、面试官:听起来很简单,这只是概念,但是具体是什么意思呢?举例深入分析 总结引言 上一节讲面试中被问...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作