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

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

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实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
2月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
2月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
4月前
|
架构师 前端开发 Java
Java开发工程师的职业规划应该是什么样的?
Java开发工程师的职业规划涵盖多个阶段,包括初入行业(0-1年)、技能提升(1-3年)、技术专家(3-5年)及管理或专家路线选择(5年以上)。各阶段设定了明确的技能要求与职业目标,从掌握Java基础、常用框架到深入研究高级技术、微服务架构乃至担任管理职务或成为技术专家。通过持续学习与实践,结合个人兴趣,Java工程师可在技术或管理领域找到合适的发展方向,最终实现职业成功。
547 83
|
2月前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
100 2
|
2月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
76 4
|
3月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
98 2
|
4月前
|
设计模式 架构师 Java
Java开发工程师转架构师需要学习什么
Java开发工程师转型为架构师需掌握多项技能:精通Java及框架、数据库与分布式系统;熟悉设计模式与架构模式;积累项目经验;提升沟通与领导力;持续学习新技术;培养系统设计与抽象能力;了解中间件及开发工具;并注重个人特质与职业发展。具体路径应结合个人目标与实际情况制定。
80 18
|
4月前
|
人工智能 前端开发 Java
Java开发工程师转哪个行业比较好?
Java开发工程师转哪个行业比较好?
343 2
|
3月前
|
JSON 安全 前端开发
第二次面试总结 - 宏汉科技 - Java后端开发
本文是作者对宏汉科技Java后端开发岗位的第二次面试总结,面试结果不理想,主要原因是Java基础知识掌握不牢固,文章详细列出了面试中被问到的技术问题及答案,包括字符串相关函数、抽象类与接口的区别、Java创建线程池的方式、回调函数、函数式接口、反射以及Java中的集合等。
40 0
|
4月前
|
小程序 前端开发 JavaScript
Java开发工程师转小程序开发的前景如何?
Java开发工程师转小程序开发的前景如何?
60 0