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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,182元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
简介: 秋招面试题系列- - -Java工程师(九)

ZooKeeper面试题


13.服务器角色

Leader


1、事务请求的唯一调度和处理者,保证集群事务处理的顺序性2、集群内部各服务的调度者


Follower


1、处理客户端的非事务请求,转发事务请求给 Leader服务器2、参与事务请求 Proposal的投票


3、参与 Leader选举投票


Observer


1、3.0版本以后引入的一个服务器角色,在不影响集群事务处理能力的基础上提升集群的非事务处理能力


2、处理客户端的非事务请求,转发事务请求给 Leader服务器


3、不参与任何形式的投票


14. Zookeeper下 Server工作状态

服务器具有四种状态,分别是 LOOKING、FOLLOWING、LEADING、OBSERVING。


1、LOOKING:寻找 Leader状态。当服务器处于该状态时,它会认为当前集群中没有 Leader,因此需要进入 Leader选举状态。


2、FOLLOWING:跟随者状态。表明当前服务器角色是 Follower。


3、LEADING:领导者状态。表明当前服务器角色是 Leader。


4、OBSERVING:观察者状态。表明当前服务器角色是 Observer。


15.数据同步

整个集群完成 Leader选举之后,Learner(Follower和 Observer的统称)回向Leader服务器进行注册。当 Learner服务器想 Leader服务器完成注册后,进入数据同步环节。


数据同步流程:(均以消息传递的方式进行)


Learner向 Learder注册


数据同步


同步确认


Zookeeper的数据同步通常分为四类:


1、直接差异化同步(DIFF同步)


2、先回滚再差异化同步(TRUNC+DIFF同步)


3、仅回滚同步(TRUNC同步)


4、全量同步(SNAP同步)


在进行数据同步前,Leader服务器会完成数据同步初始化:


peerLastZxid:


从 learner服务器注册时发送的 ACKEPOCH消息中提取 lastZxid(该


Learner服务器最后处理的 ZXID)


minCommittedLog:


Leader服务器 Proposal缓存队列 committedLog中最小 ZXID


maxCommittedLog:


Leader服务器 Proposal缓存队列 committedLog中最大 ZXID


直接差异化同步(DIFF同步)


场景:peerLastZxid介于 minCommittedLog和 maxCommittedLog


之间


先回滚再差异化同步(TRUNC+DIFF同步)


场景:当新的 Leader服务器发现某个 Learner服务器包含了一条自己没


有的事务记录,那么就需要让该 Learner服务器进行事务回滚--回滚到 Leader服务器上存在的,同时也是最接近于 peerLastZxid的 ZXID


仅回滚同步(TRUNC同步)


场景:peerLastZxid大于 maxCommittedLog


全量同步(SNAP同步)


场景一:peerLastZxid小于 minCommittedLog


场景二:Leader服务器上没有 Proposal缓存队列且 peerLastZxid不等


于 lastProcessZxid


16. zookeeper是如何保证事务的顺序一致性的?

zookeeper采用了全局递增的事务 Id来标识,所有的 proposal(提议)都在被提出的时候加上了 zxid,zxid实际上是一个 64位的数字,高 32位是 epoch(时期;纪元;世;新时代)用来标识 leader周期,如果有新的 leader产生出来,epoch会自增,低 32位用来递增计数。当新产生 proposal的时候,会依据数据库的两阶段过程,首先会向其他的 server发出事务执行请求,如果超过半数的机器都能执行并且能够成功,那么就会开始执行。


17.分布式集群中为什么会有 Master?

在分布式环境中,有些业务逻辑只需要集群中的某一台机器进行执行,其他的机器可以共享这个结果,这样可以大大减少重复计算,提高性能,于是就需要进行leader选举。

相关文章
|
3月前
|
搜索推荐 算法 Java
2025 年互联网大厂校园招聘 JAVA 工程师笔试题及备考要点解析
本文针对互联网大厂校招Java工程师笔试题进行解析,涵盖基础知识、面向对象编程、数据结构与算法、异常处理及集合框架等核心内容。从数据类型、运算符到流程控制语句,从类与对象、继承多态到数组链表、排序算法,再到异常捕获与集合框架应用,结合实际案例深入剖析,助你系统掌握考点,提升应试能力。资源链接:[点此获取](https://pan.quark.cn/s/14fcf913bae6)。
161 9
|
3月前
|
Java 数据库连接 API
互联网大厂校招 JAVA 工程师笔试题解析及常见考点分析
本文深入解析互联网大厂校招Java工程师笔试题,涵盖基础知识(数据类型、流程控制)、面向对象编程(类与对象、继承与多态)、数据结构与算法(数组、链表、排序算法)、异常处理、集合框架、Java 8+新特性(Lambda表达式、Stream API)、多线程与并发、IO与NIO、数据库操作(JDBC、ORM框架MyBatis)及Spring框架基础(IoC、DI、AOP)。通过技术方案讲解与实例演示,助你掌握核心考点,提升解题能力。
169 2
|
7月前
|
机器学习/深度学习 Java PyTorch
Java工程师如何理解张量?
刚接触AI和PyTorch,理解“张量(Tensor)”是入门关键。张量可类比为Java中的多维数组,但更强大,尤其在AI领域支持GPU加速、自动求导等特性。它不仅能高效存储数据,还能进行复杂运算,是深度学习的核心数据结构。掌握张量的维度、数据类型及GPU加速特性,对学习PyTorch至关重要。
167 3
|
10月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
10月前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
1151 2
|
10月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
10月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
253 4
|
11月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
963 2
|
11月前
|
JSON 安全 前端开发
第二次面试总结 - 宏汉科技 - Java后端开发
本文是作者对宏汉科技Java后端开发岗位的第二次面试总结,面试结果不理想,主要原因是Java基础知识掌握不牢固,文章详细列出了面试中被问到的技术问题及答案,包括字符串相关函数、抽象类与接口的区别、Java创建线程池的方式、回调函数、函数式接口、反射以及Java中的集合等。
142 0
|
人工智能 前端开发 Java
Java开发工程师转哪个行业比较好?
Java开发工程师转哪个行业比较好?
724 2