博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
25K大牛甩出的超详细面试总结,工作感悟
阅读量:1172 次
发布时间:2019-04-18

本文共 1842 字,大约阅读时间需要 6 分钟。

前言

上个月4号通过阿里工作的学长进行内推,7天简历评估,11号接到电话面试,尽管猝不及防回答仓促,但好在前期准备充分,通过。3天后进行现场面试,通知时间为早上10点。当日设了七点闹钟,结果五点五十三分惊醒后再无法入睡,起床,重新翻看之前做的笔记和重点,在lintcode上找了几道可能性较大的题进行练手。10点准时在蚂蚁金服总部开始面试,十点四十七分结束。15号收到通知,现场面通过,16号进行HR面,22号收到Offer。

面试内容如下:

35K成功入职:蚂蚁金服面试Java后端经历!「含面试题+答案」

一、什么是ZooKeeper

ZooKeeper是一个分布式服务协调框架,提供了分布式数据一致性的解决方案,基于ZooKeeper的数据结构,Watcher,选举机制等特点,可以实现数据的发布/订阅,软负载均衡,命名服务,统一配置管理,分布式锁,集群管理等等。

二、为什么使用ZooKeeper

ZooKeeper能保证:

  • 更新请求顺序进行。来自同一个client的更新请求按其发送顺序依次执行
  • 数据更新原子性。一次数据更新要么成功,要么失败
  • 全局唯一数据视图。client无论连接到哪个server,数据视图都是一致的
  • 实时性。在一定时间范围内,client读到的数据是最新的

三、数据结构

ZooKeeper的数据结构和Unix文件系统很类似,总体上可以看做是一棵树,每一个节点称之为一个ZNode,每一个ZNode默认能存储1M的数据。每一个ZNode可通过唯一的路径标识。如下图所示:

创建ZNode时,可以指定以下四种类型,包括:

  • PERSISTENT,持久性ZNode。创建后,即使客户端与服务端断开连接也不会删除,只有客户端主动删除才会消失。
  • PERSISTENT_SEQUENTIAL,持久性顺序编号ZNode。和持久性节点一样不会因为断开连接后而删除,并且ZNode的编号会自动增加。
  • EPHEMERAL,临时性ZNode。客户端与服务端断开连接,该ZNode会被删除。
  • EPEMERAL_SEQUENTIAL,临时性顺序编号ZNode。和临时性节点一样,断开连接会被删除,并且ZNode的编号会自动增加。

四、监听通知机制

Watcher是基于观察者模式实现的一种机制。如果我们需要实现当某个ZNode节点发生变化时收到通知,就可以使用Watcher监听器。

客户端通过设置监视点(watcher)向 ZooKeeper 注册需要接收通知的 znode,在 znode 发生变化时 ZooKeeper 就会向客户端发送消息

这种通知机制是一次性的。一旦watcher被触发,ZooKeeper就会从相应的存储中删除。如果需要不断监听ZNode的变化,可以在收到通知后再设置新的watcher注册到ZooKeeper。

监视点的类型有很多,如监控ZNode数据变化、监控ZNode子节点变化、监控ZNode 创建或删除

五、选举机制

ZooKeeper是一个高可用的应用框架,因为ZooKeeper是支持集群的。ZooKeeper在集群状态下,配置文件是不会指定Master和Slave,而是在ZooKeeper服务器初始化时就在内部进行选举,产生一台做为Leader,多台做为Follower,并且遵守半数可用原则。

由于遵守半数可用原则,所以5台服务器和6台服务器,实际上最大允许宕机数量都是3台,所以为了节约成本,集群的服务器数量一般设置为奇数

如果在运行时,如果长时间无法和Leader保持连接的话,则会再次进行选举,产生新的Leader,以保证服务的可用

六、初の体验

首先在官网下载ZooKeeper,我这里用的是3.3.6版本。

然后解压,复制一下/conf目录下的zoo_sample.cfg文件,重命名为zoo.cfg。

修改zoo.cfg中dataDir的值,并创建对应的目录:

最后到/bin目录下启动,我用的是window系统,所以启动zkServer.cmd,双击即可:

启动成功的话就可以看到这个对话框:

可视化界面的话,我推荐使用ZooInspector,操作比较简便

最后

我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习,

已经将知识体系整理好(源码,笔记,PPT,学习视频)免费领取。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

)]

[外链图片转存中…(img-qPRKjUjd-1619748943551)]

[外链图片转存中…(img-Qo5wcUOo-1619748943552)]

转载地址:http://wgfbu.baihongyu.com/

你可能感兴趣的文章
Struts2的checkbox标签
查看>>
【解决】关于Struts2 Checkbox标签回填的办法
查看>>
struts2 checkboxlist标签的使用
查看>>
忘记过去,把握现在,我能行---------猛蛇战队
查看>>
俺就不說話,找虐,直接上代碼。
查看>>
初来兄弟连所感
查看>>
软件大赛题目----(第十二个)制台窗口中用特殊符号拼出漂亮的表格
查看>>
Oracle学习记录
查看>>
Oracle函数大全
查看>>
复选框取值.html
查看>>
复选框全选、全不选
查看>>
表单验证
查看>>
js超强表单验证
查看>>
<s:if test="canSubscribe == 'Y'">能 </s:if> <s:else>不能 </s:else> 单字符需加.toString()...
查看>>
工作总结(纯html页面写的获取系统时间显示)
查看>>
超级实用且不花哨的JS代码大全
查看>>
图像处理之调整亮度与对比度
查看>>
高仿优酷评论留言板
查看>>
深入理解打包和织网
查看>>
Flex事件机制(二)
查看>>