面试官:Zookeeper是什么,它有什么特性与使用场景?

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

哈喽大家好我是小奇一位不靠谱的程序员
小奇打算以轻松幽默的对话方式来分享一些技术如果你觉得通过小奇的文章学到了东西那就给小奇一个赞吧
文章持续更新可以微信搜索【小奇JAVA面试】第一时间阅读回复【资料】更有我为大家准备的福利哟

文章目录

一、前言

作为一名Java程序员Zookeeper底层的一些原理是我们不必学会就可以搬砖工作的一种技能点但是小奇为什么还要讲一下呢难道就是为了浪费大家1分钟的宝贵时间一个人1分钟50万人就是1年5000万人就是100年赚了小奇以一己之力成功搞挂一个人血赚。

当然不是并且小奇的文章也没有那么多人看最多也就浪费个吧。

学习Zookeeper底层原理是因为面试官要问啊所以我们就要学什么不实用的你不学那邻居小奇可要使劲学啦到时候面试官只要小奇不要你。

在这里插入图片描述

至于你问为什么面试官要问Zookeeper底层原理呢这个。。。我把这次机会留给你下次你面试的时候面试官问“讲一下Zookeeper底层原理”。你“面试官你好请问为什么你要问Zookeeper底层原理呢你给我台电脑我五分钟给你搭建好图书管理系统他不香吗咱们键盘上见真章”。这时面试官就会告诉你答案你就可以把答案打在评论区让小奇以及众多小伙伴一起知道一下到底为什么要问

在这里插入图片描述

二、面试

在一个晴朗的周日我来到了一个陌生的园区别问为什么是周日问就是997不过为了填饱肚子的打工人只能明知山有虎、偏向虎山行坐在陌生的会议室等待HR小姐姐去叫面试官此时我的心情和各位小伙伴一样五味杂陈担心面试官问的会不会很难问到我的知识盲区我该怎么办一会自我介绍的时候要不要吹一下我和小奇的关系

一位英俊潇洒眼神犀利的面试官走了进来看到他那犀利、仿佛能看穿一切的眼神 我在想要不然一会就不要20k了要8k得了这个面试官一看就不好糊弄啊但是我想起来我来之前刚看了小奇的趣学编程系列我已经完全学会了小奇的精髓我顿时就来了底气决定一会要30k不给就学小奇赖着不走哈哈

面试官小奇是吧带简历了吗

我没带现在彩印两块一张我简历五张每次面试都要花费十块我朋友说了还没工作就先让你掏钱的工作不要去。

面试官。。。那你靠什么来征服我让我录用你

我气质

请添加图片描述

此时面试官并没有叫保安而是从门后拿出了恭候我多时的棍子我瞬间怂了

在这里插入图片描述

我只好从我的双肩包中拿出了我上午从其他公司面试官手中要回的简历上午的情形是这样的。

上午的面试官今天的面试就到这吧回去等通知吧

我面试官你好如果贵公司不打算录取我的话能不能把我的纸质简历还给我我下午还有一家面试。

上午的面试官我说你的简历怎么皱皱巴巴原来你一直在循环利用啊这个症状出现多久了

半拉月了。。。

当我把皱皱巴巴的简历交给面试官后这场面试才得以继续进行。。。

三、Zookeeper是什么

面试官我看你简历上写的精通Zookeeper哼面试官轻蔑的一笑

我本来不想写精通的但是同行们抬爱非逼着写但是也无可厚非虽说没有到达炉火纯青但是也差不多登峰造极了吧。

面试官呵呵、那你先说一说Zookeeper是什么吧

我ZooKeeper是一个分布式的开放源码的分布式应用程序协调服务主要为了解决分布式架构下数据一致性问题典型的应用场景有分布式配置中心、分布式注册中心、分布式锁、分布式队列、集群选举、分布式屏障、发布/订阅等场景。

面试官嗯Zookeeper是怎样的一个数据结构呢

我Zookeeper是一个类似于文件系统的数据结构最外层我们可以想象成一个大的文件夹里面都是一些小的文件夹。

四、Zookeeper有哪些数据结构

面试官嗯Zookeeper有几种常用的数据格式呢

我Zookeeper中每一个子目录项都是一个znode目录节点这些目录节点和我们普通的目录一样可以新建、删除、修改我们常用的主要有四种类型的znode。
1、持久化目录节点
客户端与zookeeper断开连接后该节点依旧存在只要不手动删除该节点他将永远存在。
2、持久化顺序编号目录节点
客户端与zookeeper断开连接后该节点依旧存在只是zookeeper给该节点名称进行顺序编号。
3、临时目录节点
客户端与zookeeper断开连接后该节点被删除。
4、临时顺序编号目录节点
客户端与zookeeper断开连接后该节点被删除只是zookeeper给该节点名称进行顺序编号。

五、Zookeeper有哪些核心功能

面试官嗯Zookeeper有哪些核心的功能呢

我zookeeper有监听通知机制如果对某个节点进行监听当这个节点被删除或者被修改时监听方会感知到修改消息。

面试官嗯既然zookeeper有监听机制那么可以监听到几种类型的变化呢

我可以监听到七种类型变化
1、None连接建立事件
2、NodeCreated节点创建
3、NodeDeleted节点删除
4、NodeDataChanged节点数据变化
5、NodeChildrenChanged子节点列表变化
6、DataWatchRemoved节点监听被移除
7、ChildWatchRemoved子节点监听被移除

面试官我们在开发中使用Synchronized就可以保证线程安全了为什么还需要使用zookeeper来实现分布式锁呢

我如果我们是单机情况下也就是只有一个进程的情况下使用Synchronized是可以保证线程安全的。但是分布式情况下是多个不同的进程而不是一个进程里面不同的线程所以Synchronized是无法保证多个进程安全的。

面试官zookeeper节点有哪些重要信息呢怎么进行查看

我zookeeper节点可以通过stat命令来查看主要信息其中信息有
1、cZxid创建znode的事务idZxid的值。
2、mZxid最后修改znode的事务id。
3、pZxid最后添加或删除子节点的事务id子节点列表发生变化才会发生改变。
4、ctimeznode创建时间。
5、mtimeznode最近修改时间。
6、dataVersionznode的当前数据版本。
7、cversionznode的子节点结果集版本一个节点的子节点增加、删除都会影响这个版本。
8、aclVersion表示对此znode的acl版本。
9、ephemeralOwnerznode是临时znode时表示znode所有者的sessionid如果znode不是临时节点则该字段设置为零。
10、dataLengthznode数据字段的长度。

在这里插入图片描述

面试官zookeeper创建节点和监听节点有哪些命令


1、创建持久节点create /节点名称
2、创建持久顺序节点create -s /节点名称
3、创建临时节点create -e /节点名称
4、创建临时顺序节点create -e -s /节点名称
5、监听节点get -w /节点名称

六、Zookeeper有哪些权限控制

面试官zookeeper有哪些权限控制呢

我应该是按照大小个吧谁个高谁说了算。

在这里插入图片描述

面试官你特么找打是吧数据那特么有大小个。。。

在这里插入图片描述

我zookeeper有ACL( Access Control List )权限控制可以控制节点的读写操作保证数据的安全性不然的话谁都可以创建和删除节点那不就乱了套了。

面试官ACL权限设置有几部分组成呢

我有三部分组成分别是权限模式、授权对象、权限信息

面试官能具体说一说这三部分都代表什么吗

权限模式 就是zookeeper服务器进行权限验证的方式比如手机解锁是用指纹还是用密码呢如果用密码知道密码的都可以解锁你的手机如果用指纹只有你自己的手指头可以解锁。所以权限模式大体分为两种类型

1、范围验证 范围就是zookeeper可以针对一个ip或者一段ip地址授予权限相当于指纹解锁我给我一个手指头或者所有的脚指头都授予权限。
2、口令验证 可以理解为用户名密码的方式这种就相当于密码解锁了知道了用户名密码后所有的人都相当于授予了权限。

授权对象 授权对象就是把权限授予给谁如果是范围验证方式那么授权对象就是ip地址如果是口令验证授权对象就是用户名。

授权信息 授权信息就是指我们具体的权力是什么比如我们解锁手机后可以打游戏还是可以听歌还是可以用手机砸核桃呢。

在这里插入图片描述

zookeeper中定义好的权限有5种
1、数据节点c:create创建权限授予权限的对象可以在数据节点下创建子节点。
2、数据节点w:wirte更新权限授予权限的对象可以更新该数据节点。
3、数据节点r:read读取权限授予权限的对象可以读取该节点的内容以及子节点的列表信息。
4、数据节点d:delete删除权限授予权限的对象可以删除该数据节点的子节点。
5、数据节点a:admin管理者权限授予权限的对象可以对该数据节点体进行ACL权限设置。

面试官我们怎么查看和设置某个节点的ACL权限信息呢

我可以通过getAcl来获取某个节点的权限信息通过setAcl来设置某个节点的权限信息。

七、Zookeeper数据持久化

面试官zookeeper的数据是存储在内存中的吗怎么进行持久化操作呢

我zookeeper和redis很像数据都是在内存中的持久化也是两种方式一种是记录事务日志一种是快照方式。

记录事务日志磁盘会进行IO操作事务日志的不断增多会触发磁盘为文件开辟新的磁盘块所以为了提升磁盘的效率可以在创建文件的时候就向操作系统申请一块大一点的磁盘块通过参数zookeeper.preAllocSize配置。

事务日志的存放地址通过zoo.cfg配置文件中的dataDir来指定。

在这里插入图片描述

面试官小伙子真厉害啊我这边没有什么要问的了你还有什么问题要问面试官两眼放光

我额。。。面试官这个我的纸质简历可以给我吗可以不往我的简历上写写画画吗我明天的面试还要用。

面试官还面啥别的公司啊就来我这吧条件随便开

我那就100k吧此时面试官又拿起了他准备好的棍子

面试官你要是不来就给我推荐一下让别人来我这面试一下

我你先好好学习一下zookeeper吧今天幸亏只是我来了如果是小奇的忠实读者来了你将会被虐的很惨的。我将我的博客地址留给了面试官转身留下了帅气的背影而面试官落寞无神的呆呆的坐在那里仿佛一个亿离他而去。。。

八、总结

这里关于zookeeper还没有整理完毕文章后面持续更新建议收藏。

文章中涉及到的命令大家一定要像我一样每个都敲几遍只有在敲的过程中才能发现自己对命令是否真正的掌握了。

如果觉得我的文章还不错的话就点个赞吧另外可以微信搜索【小奇JAVA面试】阅读更多的好文章获取我为大家准备的资料。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6