秋招面试题系列- - -Java工程师(八)

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 秋招面试题系列- - -Java工程师(八)

目录

ZooKeeper面试题

7.客户端注册 Watcher实现

8.服务端处理 Watcher实现

9.客户端回调 Watcher

10. ACL权限控制机制

11. Chroot特性

12.会话管理


\

ZooKeeper面试题

7.客户端注册 Watcher实现

1、调用 getData()/getChildren()/exist()三个 API,传入 Watcher对象

2、标记请求 request,封装 Watcher到 WatchRegistration

3、封装成 Packet对象,发服务端发送 request

4、收到服务端响应后,将 Watcher注册到 ZKWatcherManager中进行管理5、请求返回,完成注册。

\

8.服务端处理 Watcher实现

1、服务端接收 Watcher并存储

接收到客户端请求,处理请求判断是否需要注册 Watcher,需要的话将数据节点的节点路径和 ServerCnxn(ServerCnxn代表一个客户端和服务端的连接,实现了 Watcher的 process接口,此时可以看成一个 Watcher对象)存储在

WatcherManager的 WatchTable和 watch2Paths中去。

2、Watcher触发

以服务端接收到 setData()事务请求触发 NodeDataChanged事件为例:

2.1封装 WatchedEvent

将通知状态(SyncConnected)、事件类型(NodeDataChanged)以及节点路径封装成一个 WatchedEvent对象

2.2查询 Watcher

从 WatchTable中根据节点路径查找 Watcher

2.3没找到;说明没有客户端在该数据节点上注册过 Watcher

2.4找到;提取并从 WatchTable和 Watch2Paths中删除对应 Watcher(从这里可以看出 Watcher在服务端是一次性的,触发一次就失效了)

3、调用 process方法来触发 Watcher

这里 process主要就是通过 ServerCnxn对应的 TCP连接发送 Watcher事件通知。

\

9.客户端回调 Watcher

客户端 SendThread线程接收事件通知,交由 EventThread线程回调 Watcher。客户端的 Watcher机制同样是一次性的,一旦被触发后,该 Watcher就失效了。

\

10. ACL权限控制机制

UGO(User/Group/Others)

目前在 Linux/Unix文件系统中使用,也是使用最广泛的权限控制方式。是一种粗粒度的文件系统权限控制模式。

ACL(Access Control List)访问控制列表

包括三个方面:

权限模式(Scheme)

1、IP:从 IP地址粒度进行权限控制

2、Digest:最常用,用类似于 username:password的权限标识来进行权限配置,便于区分不同应用来进行权限控制

3、World:最开放的权限控制方式,是一种特殊的 digest模式,只有一个权限标识“world:anyone”

4、Super:超级用户

授权对象

授权对象指的是权限赋予的用户或一个指定实体,例如 IP地址或是机器灯。

权限 Permission

1、CREATE:数据节点创建权限,允许授权对象在该 Znode下创建子节点

2、DELETE:子节点删除权限,允许授权对象删除该数据节点的子节点

3、READ:数据节点的读取权限,允许授权对象访问该数据节点并读取其数据内容或子节点列表等

4、WRITE:数据节点更新权限,允许授权对象对该数据节点进行更新操作

5、ADMIN:数据节点管理权限,允许授权对象对该数据节点进行 ACL相关设置操作

\

11. Chroot特性

3.2.0版本后,添加了 Chroot特性,该特性允许每个客户端为自己设置一个命名空间。如果一个客户端设置了 Chroot,那么该客户端对服务器的任何操作,都将会被限制在其自己的命名空间下。

通过设置 Chroot,能够将一个客户端应用于 Zookeeper服务端的一颗子树相对应,在那些多个应用公用一个 Zookeeper进群的场景下,对实现不同应用间的相互隔离非常有帮助。

\

12.会话管理

分桶策略:将类似的会话放在同一区块中进行管理,以便于 Zookeeper对会话进行不同区块的隔离处理以及同一区块的统一处理。

分配原则:每个会话的“下次超时时间点”(ExpirationTime)

计算公式:

ExpirationTime_ = currentTime + sessionTimeout

ExpirationTime = (ExpirationTime_ / ExpirationInrerval + 1) *

ExpirationInterval , ExpirationInterval是指 Zookeeper会话超时检查时间间隔,默认 tickTime\


相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
22天前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
23天前
|
Java 编译器 C++
【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
这篇文章解释了Java能够实现“一次编写,到处运行”的原因,主要归功于Java虚拟机(JVM),它能够在不同平台上将Java源代码编译成的字节码转换成对应平台的机器码,实现跨平台运行。
【Java基础面试一】、为什么Java代码可以实现一次编写、到处运行?
|
23天前
|
Java
【Java基础面试四】、介绍一下Java的数据类型
这篇文章介绍了Java的数据类型,包括8种基本数据类型(整数、浮点、字符、布尔)和3类引用数据类型(数组、类、接口),并提供了基本数据类型所占内存空间和数据范围的详细信息。
|
23天前
|
Java C++
【Java基础面试十七】、Java为什么是单继承,为什么不能多继承?
这篇文章讨论了Java单继承的设计原因,指出Java不支持多继承主要是为了避免方法名冲突等混淆问题,尽管Java类不能直接继承多个父类,但可以通过接口和继承链实现类似多继承的效果。
【Java基础面试十七】、Java为什么是单继承,为什么不能多继承?
|
23天前
|
Java
【Java基础面试三】、说一说你对Java访问权限的了解
这篇文章介绍了Java中的四种访问权限:private、default(无修饰符时的访问权限)、protected和public,以及它们分别在修饰成员变量/方法和类时的不同访问级别和规则。
【Java基础面试三】、说一说你对Java访问权限的了解
|
23天前
|
Java
【Java基础面试二】、个Java文件里可以有多个类吗(不含内部类)?
这篇文章讨论了Java文件中类的定义规则,指出一个Java文件可以包含多个类(不包含内部类),但其中最多只能有一个public类,且如果有public类,它的名称必须与文件名一致。
|
22天前
|
XML 存储 JSON
【IO面试题 六】、 除了Java自带的序列化之外,你还了解哪些序列化工具?
除了Java自带的序列化,常见的序列化工具还包括JSON(如jackson、gson、fastjson)、Protobuf、Thrift和Avro,各具特点,适用于不同的应用场景和性能需求。
|
22天前
|
Java
【Java基础面试三十七】、说一说Java的异常机制
这篇文章介绍了Java异常机制的三个主要方面:异常处理(使用try、catch、finally语句)、抛出异常(使用throw和throws关键字)、以及异常跟踪栈(异常传播和程序终止时的栈信息输出)。
|
22天前
|
Java
【Java基础面试三十八】、请介绍Java的异常接口
这篇文章介绍了Java的异常体系结构,主要讲述了Throwable作为异常的顶层父类,以及其子类Error和Exception的区别和处理方式。
|
23天前
|
Java
【Java基础面试十六】、Java中的多态是怎么实现的?
这篇文章解释了Java中多态的实现机制,主要是通过继承,允许将子类实例赋给父类引用,并在运行时表现出子类的行为特征,实现这一过程通常涉及普通类、抽象类或接口的使用。