关于2022招聘季:面试官Zookeeper是什么它有什么特性与使用场景

9次阅读

共计 4415 个字符,预计需要花费 12 分钟才能阅读完成。

哈喽!大家好,我是小奇,一位不靠谱的程序员
小奇打算以轻松风趣的对话形式来分享一些技术,如果你感觉通过小奇的文章学到了货色,那就给小奇一个赞吧
文章继续更新

一、前言

作为一名 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 的事务 id(Zxid 的值)。
2、mZxid:最初批改 znode 的事务 id。
3、pZxid:最初增加或删除子节点的事务 id(子节点列表发生变化才会产生扭转)。
4、ctime:znode 创立工夫。
5、mtime:znode 最近批改工夫。
6、dataVersion:znode 的以后数据版本。
7、cversion:znode 的子节点后果集版本(一个节点的子节点减少、删除都会影响这个版本)。
8、aclVersion:示意对此 znode 的 acl 版本。
9、ephemeralOwner:znode 是长期 znode 时,示意 znode 所有者的 sessionid,如果 znode 不是长期节点,则该字段设置为零。
10、dataLength:znode 数据字段的长度。

面试官: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 还没有整顿结束,文章前面继续更新,倡议珍藏。

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

如果感觉我的文章还不错的话就点个赞

本文参加了 SegmentFault 思否征文「如何“反杀”面试官?」,欢送正在浏览的你也退出。

正文完
 0