面试官:Zookeeper是什么,它有什么特性与使用场景?_zookeeper是什么 zookeeper对应用场景主要有哪些-程序员宅基地

技术标签: 趣学编程  java  zookeeper  架构师  分布式  

哈喽!大家好,我是小奇,一位不靠谱的程序员
小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧
文章持续更新,可以微信搜索【小奇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的事务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还没有整理完毕,文章后面持续更新,建议收藏。

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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44096133/article/details/123695087

智能推荐

盲图像超分辨率重建 ( CVPR,2022) (Pytorch)(附代码)_盲超分辨率重建-程序员宅基地

文章浏览阅读1.1w次,点赞33次,收藏141次。基于噪声和核函数的精细退化盲图像超分辨率重建,这篇测评文章用心写了一个下午,个人觉得作为一个初学者入门教程,再合适不过了,敬请查阅_盲超分辨率重建

Executors创建的4种线程池的使用-程序员宅基地

文章浏览阅读74次。为什么80%的码农都做不了架构师?>>> ..._private executor 建立的线程池

android 使用shell模拟触屏_Android随笔之——用shell脚本模拟用户按键、触摸操作...-程序员宅基地

文章浏览阅读720次。之前写过两篇关于Android中模拟用户操作的博客(其实用一篇是转载的),现在就来讲讲用shell脚本来模拟用户按键操作。本次的目标是用shell脚本打开微信并在其搜索框中搜索相关内容。本文的模拟功能主要是用adb的input命令来实现,如果你adb的环境变量配置正确的话,在cmd中输入adb shell input就可以看见input的用法了。usage: input ...input te..._androd shell操作ui

Java之集合常见的笔试题_空题hashmap<integer,string> hh=new hashmap<integer, -程序员宅基地

文章浏览阅读961次,点赞2次,收藏4次。一、请说明Map接口和Collection接口的区别简答如下: 1)都是集合类的接口,但是Collection是存储一组数据的,比如Set,List,Queue这些接口都是继承Collection的。而Map是按键值对存储的,有key和value,关注点在key的使用 2)Collection中存储了一组对象,而Map存储关键字/值对。 在Map对象中,每一个关键字最多有一个关联的值。 ..._空题hashmap hh=new hashmap();hh.put(202

NFS实现系统启动时延迟挂载-程序员宅基地

文章浏览阅读1.2k次。nfs客户端1. vi /etc/fstab 加入一下选项_netdev10.10.10.1:/vol1/fs1 /data nfs defaults,_netdev 0 02. service netfs start; chkconfig netfs onthat's it.Now your mount boot process should look somethin..._fstab 延迟挂载

一文读懂微服务编排利器—Zeebe-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏18次。导语 | 微服务架构的一大核心是把大的复杂的业务系统拆分成高内聚的微服务,每个服务负责相对独立的逻辑。服务拆分的好处无需赘述,但是要实现业务价值,不是看单个服务的能力,而是要协调所有服务保..._zeebe 失败任务重复创建job新实例

随便推点

Oracle11g数据库详细安装步骤_oracle database 11g软件没有典型安装-程序员宅基地

文章浏览阅读1.9k次,点赞4次,收藏28次。一,Oracle数据库安装包下载1.从Oracle官网下载所需的数据库安装包【下载需要注册登录Oracle账户】http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html2.此处有下载好的Oracle Database 11g Release 2 百度云网盘 提取码:ze2z;【此..._oracle database 11g软件没有典型安装

docker、docker-compose环境变量以及传参_docker-compose env参数传递-程序员宅基地

文章浏览阅读5.6k次。docker中传参可用ARG接收参数#构建镜像docker build -f /manage/src/main/docker/Dockerfile -t manage:1.0 --build-arg server_name= --build-arg server_version=1.0 /manage/targetdockerFile# 该镜像需要依赖的基础镜像FROM java:8#传参ARG server_nameARG server_version#环境变量ENV jar_docker-compose env参数传递

Linq 基本语法_linq语法介绍-程序员宅基地

文章浏览阅读1.2k次。以下都是转载内容1.简单的linq语法 //1 var ss = from r in db.Am_recProScheme select r; //2 var ss1 = db.Am_recProScheme; //3 _linq语法介绍

springcloudgateway+oauth2实现权限控制_springcloudoauth2权限控制-程序员宅基地

文章浏览阅读1.2w次,点赞7次,收藏34次。文章目录鉴权服务基础配置鉴权配置网关服务基础配置网关过滤器配置权限校验过滤器配置接口调试前端适配鉴权服务OAuth 2.0 的四种方式OAuth2实现分析基础配置新建house-oauth模块,依赖oauth2。 <dependencies> <dependency> <groupId>com.babyjuan</groupId> <artifactId>house-common</art_springcloudoauth2权限控制

广州大学c语言期末考试题,广州大学C语言程序的设计期末考试卷含答案(2)-程序员宅基地

文章浏览阅读243次。广州大学C语言程序的设计期末考试卷含答案(2) (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!14.9 积分. . . . .院、系领导审批并签名 A 卷参考答案广州大学 2009-2010 学年第 1 学期考试卷课程 程序设计 1 考试形式(闭卷,考试)学院 数学与信息 系 专业 信安,计 班级 学号 姓名_ 题次一二三四五六七八九十总分评卷人..._广州大学c语言题库

画出lightGBM的特征重要性并排序_lightgbm特征重要性排序-程序员宅基地

文章浏览阅读4.2k次。df = pd.DataFrame()df['feature name'] = data_df.drop(["label"], axis=1).columns #data_df为特征数据集df['importance'] = clf.feature_importance()df.sort_values(by='importance',inplace=True, ascending=False)df2 = df.head(50)df2.plot.barh(x = 'feature name',._lightgbm特征重要性排序

推荐文章

热门文章

相关标签