zookeeper和dubbo面试题,,Java初级项目案例

这篇具有很好参考价值的文章主要介绍了zookeeper和dubbo面试题,,Java初级项目案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 一致性(Consistency)

一致性(Consistency)是指多副本(Replications)问题中的数据一致性。可以分为强一致性、顺序一致性与弱一致性。

1.1 强一致性(Strict Consistency)

也称为:**原子一致性(Atomic Consistency)**线性一致性(Linearizable Consistency)

强一致性有两个要求:

  • 任何一次读都能读到某个数据的最近一次写的数据。
  • 系统中的所有进程,看到的操作顺序,都和全局时钟下的顺序一致。

简言之,在任意时刻,所有节点中的数据都是一样的。

例如,对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。

1.2 顺序一致性(Sequential Consistency)

the result of any execution is the same as if the operations of all the processors were executed in some sequential order, and the operations of each individual processor appear in this sequence in the order specified by its program. - - Lamport

两个要求:

  • 任何一次读都能读到某个数据的最近一次写的数据。
  • 系统的所有进程的顺序一致,而且是合理的。即不需要和全局时钟下的顺序一致,错的话一起错,对的话一起对。

举个例子:

zookeeper和dubbo面试题,,Java初级项目案例,程序员,java-zookeeper,zookeeper,dubbo

Write(x, 4):写入x=4 
Read(x, 0):读出x=0

1)图a是满足顺序一致性,但是不满足强一致性的。原因在于,从全局时钟的观点来看,P2进程对变量X的读操作在P1进程对变量X的写操作之后,然而读出来的却是旧的数据。但是这个图却是满足顺序一致性的,因为两个进程P1,P2的一致性并没有冲突。从这两个进程的角度来看,顺序应该是这样的:Write(y,2) , Read(x,0) , Write(x,4), Read(y,2),每个进程内部的读写顺序都是合理的,但是这个顺序与全局时钟下看到的顺序并不一样。

2)图b满足强一致性,因为每个读操作都读到了该变量的最新写的结果,同时两个进程看到的操作顺序与全局时钟的顺序一样,都是Write(y,2) ,Write(x,4), Read(x,4) ,  Read(y,2)。

3)图c不满足顺序一致性,当然也就不满足强一致性了。因为从进程P1的角度看,它对变量Y的读操作返回了结果0。那么就是说,P1进程的对变量Y的读操作在P2进程对变量Y的写操作之前,这意味着它认为的顺序是这样的:Write(x,4) , Read(y,0) , Write(y,2), Read(x,0),显然这个顺序又是不能被满足的,因为最后一个对变量x的读操作读出来也是旧的数据。因此这个顺序是有冲突的,不满足顺序一致性。

1.3 弱一致性

数据更新后,如果能容忍后续的访问只能访问到部分或者全部访问不到,则是弱一致性。

最终一致性就属于弱一致性。

最终一致性

不保证在任意时刻任意节点上的同一份数据都是相同的,但是随着时间的迁移,不同节点上的同一份数据总是在向趋同的方向变化。

简单说,就是在一段时间后,节点间的数据会最终达到一致状态。

最终一致性根据更新数据后各进程访问到数据的时间和方式的不同,又可以区分为:

因果一致性(Casual Consistency)。如果进程A通知进程B它已更新了一个数据项,那么进程B的后续访问将返回更新后的值,且一次写入将保证取代前一次写入。与进程A无因果关系的进程C的访问,遵守一般的最终一致性规则。

**“读己之所写(read-your-writes)”一致性。**当进程A自己更新一个数据项之后,它总是访问到更新过的值,绝不会看到旧值。这是因果一致性模型的一个特例。

**会话(Session)一致性。**这是上一个模型的实用版本,它把访问存储系统的进程放到会话的上下文中。只要会话还存在,系统就保证“读己之所写”一致性。如果由于某些失败情形令会话终止,就要建立新的会话,而且系统的保证不会延续到新的会话。

**单调(Monotonic)读一致性。**如果进程已经看到过数据对象的某个值,那么任何后续访问都不会返回在那个值之前的值。

**单调写一致性。**系统保证来自同一个进程的写操作顺序执行。要是系统不能保证这种程度的一致性,就非常难以编程了。


另外一种划分一致性级别的:

一致性是指从系统外部读取系统内部的数据时,在一定约束条件下相同,即数据变动在系统内部各节点应该是同步的。根据一致性的强弱程度不同,可以将一致性级别分为如下几种:

**  ①**强一致性(strong consistency)。任何时刻,任何用户都能读取到最近一次成功更新的数据。

**  ②**单调一致性(monotonic consistency)。任何时刻,任何用户一旦读到某个数据在某次更新后的值,那么就不会再读到比这个值更旧的值。也就是说,获取的数据顺序必是单调递增的。

**  ③**会话一致性(session consistency)。任何用户在某次会话中,一旦读到某个数据在某次更新后的值,那么在本次会话中就不会再读到比这值更旧的值。会话一致性是在单调一致性的基础上进一步放松约束,只保证单个用户单个会话内的单调性,在不同用户或同一用户不同会话间则没有保障。示例case:php的session概念。

**  ④** 最终一致性(eventual consistency)。用户只能读到某次更新后的值,但系统保证数据将最终达到完全一致的状态,只是所需时间不能保障。
**  ⑤**弱一致性(weak consistency)。用户无法在确定时间内读到最新更新的值。

2. 共识(Consensus)

共识问题中所有的节点要最终达成共识,由于最终目标是所有节点都要达成一致,所以根本不存在一致性强弱之分。

例如,Paxos是共识(Consensus)算法而不是强一致性(Consistency)协议。共识算法没有一致性级别的区分。


3.线性化和可串行化的区别

读写操作的线性化与术语“原子一致性”同义,并且是Gilbert和Lynch 对CAP定理的证明中的 “C”或“一致性” 。我们说线性化是可组合的 (或“本地”),因为如果系统中每个对象的操作是可线性化的,那么系统中的所有操作都是可线性化的。

可串行性是ACID中的传统“I”或隔离。如果用户的事务各自保持应用程序的正确性(ACID中的“C”或一致性),则可序列化执行也保持正确性。因此,可串行化是一种保证数据库正确性的机制。

与线性化不同,可串行化本身不会对事务的排序施加任何实时约束。可序列化也是不可组合的。可串行化并不意味着任何类型的确定性顺序 - 它只需要存在一些等效的串行执行。

这些定义如此混乱的原因之一是线性化来自分布式系统和并发编程社区,可串行化来自数据库社区。如今,几乎每个人都使用分布式系统和数据库,这往往会导致过载的术语(例如,“一致性”,“原子”)。

4、zookeeper的一致性分析-单调一致性

很多文章和博客里提到,zookeeper是一种提供强一致性的服务,在分区容错性和可用性上做了一定折中,这和CAP理论是吻合的。但实际上Zookeeper提供的只是单调一致性。
原因
  1. 假设有2n+1个server,在同步流程中,leader向follower同步数据,当同步完成的follower数量大于 n+1时同步流程结束,系统可接受client的连接请求。如果client连接的并非同步完成的follower,那么得到的并非最新数据,但可以保证单调性,也就是说,可获取的数据顺序是单调递增的。
  2. 假设是follower接收到的写请求,则会转发给leader处理;leader完成两阶段提交的机制。向所有server发起提案,当提案获得超过半数(n+1)的server的ACK后,将对整个集群进行同步,超过半数(n+1)的server同步完成后,该写请求完成。如果client连接的并非同步完成follower,那么得到的并非最新数据,但可以保证单调性,也就是说,可获取的数据顺序是单调递增的。

用分布式系统的CAP原则来分析Zookeeper
(1)C: Zookeeper保证了最终一致性,在十几秒可以Sync到各个节点
(2)A: Zookeeper保证了可用性,数据总是可用的,没有锁.并且有一大半的节点所拥有的数据是最新的,实时的. 如果想保证取得是数据一定是最新的,需要手工调用Sync()
(3)P: 有2点需要分析的

  • 节点多了会导致写数据延时非常大,因为需要多个节点同步.
  • 节点多了Leader选举非常耗时, 就会放大网络的问题. 可以通过引入 observer节点缓解这个问题.

5、 结论

可以的出的结论是Zookeeper的一致性保证的是单调一致性,CAP原则中的C是强一致性。

先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

zookeeper和dubbo面试题,,Java初级项目案例,程序员,java-zookeeper,zookeeper,dubbo

zookeeper和dubbo面试题,,Java初级项目案例,程序员,java-zookeeper,zookeeper,dubbo

zookeeper和dubbo面试题,,Java初级项目案例,程序员,java-zookeeper,zookeeper,dubbo

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以扫码领取!

zookeeper和dubbo面试题,,Java初级项目案例,程序员,java-zookeeper,zookeeper,dubbo

最后

无论是哪家公司,都很重视基础,大厂更加重视技术的深度和广度,面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。

针对以上面试技术点,我在这里也做一些分享,希望能更好的帮助到大家。

zookeeper和dubbo面试题,,Java初级项目案例,程序员,java-zookeeper,zookeeper,dubbo

zookeeper和dubbo面试题,,Java初级项目案例,程序员,java-zookeeper,zookeeper,dubbo

zookeeper和dubbo面试题,,Java初级项目案例,程序员,java-zookeeper,zookeeper,dubbo

些分享,希望能更好的帮助到大家。

[外链图片转存中…(img-wiajQNZQ-1710012303338)]

[外链图片转存中…(img-5mfTUp8v-1710012303338)]

[外链图片转存中…(img-CYktlPLw-1710012303339)]

需要更多Java资料的小伙伴可以帮忙点赞+关注,点击传送门,即可免费领取!文章来源地址https://www.toymoban.com/news/detail-840614.html

到了这里,关于zookeeper和dubbo面试题,,Java初级项目案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java程序员面试专栏 数据结构】四 高频面试算法题:哈希表

    一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,一个O(1)查找的利器哈希表,所以放到一篇Blog中集中练习 题目 解题思路 时间 空间 两数之和 辅助哈希 使用map存储出现过的值,key为值大小,v

    2024年02月22日
    浏览(41)
  • 【Java程序员面试专栏 分布式中间件】Redis 核心面试指引

    关于Redis部分的核心知识进行一网打尽,包括Redis的基本概念,基本架构,工作流程,存储机制等,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 明确redis的特性、应用场景和数据结构 Redis是一个 开源的、内存中的数据结构存储系统

    2024年02月20日
    浏览(34)
  • 日记本-课后程序(JAVA基础案例教程-黑马程序员编著-第七章-课后作业)

    【实验7-3】  日记本 【任务介绍】   1. 任务描述 编写一个日记本功能的程序,使用字节流经日记的具体信息记录在本地的txt文件中。当用户输入日记的特定内容后,会将输入的内容保存至本地的txt文件中。需要输入的内容包括“姓名”,“天气”、“标题”、“内容”的数

    2024年02月05日
    浏览(32)
  • 学生管理系统-课后程序(JAVA基础案例教程-黑马程序员编著-第六章-课后作业)

    【案例6-2】 学生管理系统 【案例介绍】 1.任务描述 在一所学校中,对学生人员流动的管理是很麻烦的,本案例要求编写一个学生管理系统,实现对学生信息的添加、删除、修改和查询功能。每个功能的具体要求如下: 系统的首页:用于显示系统所有的操作,并根据用户在控

    2024年02月03日
    浏览(40)
  • dubbo+zookeeper面试题,MySQL的 初步认识 - 细节狂魔,值得一读

    CPU CPU 又称 中央处理器,计算机最核心的组件! 是计算机的大脑。 是目前人类科学技术的巅峰!能CPU的技术含量相提并论的,只有氢弹。 存储器 CPU 是用来运算数据,但是计算机除了运算,还能存储数据。 存储数据 就是借助 存储器这样的设备。 而存储器又分两个大类:

    2024年04月10日
    浏览(25)
  • 【Java程序员面试专栏 专业技能篇】MySQL核心面试指引(三):性能优化策略

    关于MySQL部分的核心知识进行一网打尽,包括三部分: 基础知识考察、核心机制策略、性能优化策略 ,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第三部分:性能优化策略,子节点表示追问或同级提问 分布式数据库的处

    2024年01月25日
    浏览(32)
  • 【Java程序员面试专栏 专业技能篇】MySQL核心面试指引(二):核心机制策略

    关于MySQL部分的核心知识进行一网打尽,包括三部分: 基础知识考察、核心机制策略、性能优化策略 ,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第二部分:核心机制策略,子节点表示追问或同级提问 关于MySQL的几种日

    2024年01月22日
    浏览(28)
  • 模拟QQ登录-课后程序(JAVA基础案例教程-黑马程序员编著-第十一章-课后作业)

    【案例11-3】 模拟QQ登录 【案例介绍】 1. 案例描述 QQ是现实生活中常用的聊天工具,QQ登录界面看似小巧、简单,但其中涉及的内容却很多,对于初学者练习Java Swing工具的使用非常合适。本案例要求使用所学的Java Swing知识,模拟实现一个QQ登录界面。 2. 运行结果   运行结果

    2024年02月08日
    浏览(80)
  • 打印不同的图形-课后程序(JAVA基础案例教程-黑马程序员编著-第四章-课后作业)

    【案例4-1】打印不同的图形 记得 关注,收藏,评论哦,作者将持续更新。。。。 【案例介绍】 案例描述 本案例要求编写一个程序,可以根据用户要求在控制台打印出不同的图形。例如,用户自定义半径的圆形和用户自定义边长的正方形。 运行结果   【案例分析】 ( 1 )

    2024年02月01日
    浏览(46)
  • 简易计算器-课后程序(JAVA基础案例教程-黑马程序员编著-第十一章-课后作业)

    【案例11-2】 简易计算器 【案例介绍】 1. 案例描述 本案例要求利用Java Swing 图形组件开发一个可以进行简单的四则运算的图形化计算器。 2. 运行结果 运行结果   【案例分析】 要制作一个计算器,首先要知道它由哪些部分组成,如下图所示: 一个简单的图形化界面计算器,

    2024年02月03日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包