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

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

ZooKeeper面试题


24. Zookeeper的 java客户端都有哪些?

java客户端:zk自带的 zkclient及 Apache开源的 Curator。


25. chubby是什么,和 zookeeper比你怎么看?

chubby是 google的,完全实现 paxos算法,不开源。zookeeper是 chubby的开源实现,使用 zab协议,paxos算法的变种。


26.说几个 zookeeper常用的命令。

常用命令:ls get set create delete等。


27. ZAB和 Paxos算法的联系与区别?

相同点:


1、两者都存在一个类似于 Leader进程的角色,由其负责协调多个 Follower进程的运行


2、Leader进程都会等待超过半数的 Follower做出正确的反馈后,才会将一个提案进行提交


3、ZAB协议中,每个 Proposal中都包含一个 epoch值来代表当前的 Leader周期,Paxos中名字为 Ballot


不同点:


ZAB用来构建高可用的分布式数据主备系统(Zookeeper),Paxos是用来构建分布式一致性状态机系统。


28. Zookeeper的典型应用场景

Zookeeper是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员可以使用它来进行分布式数据的发布和订阅。


通过对 Zookeeper中丰富的数据节点进行交叉使用,配合 Watcher事件通知机制,可以非常方便的构建一系列分布式应用中年都会涉及的核心功能,如:


1、数据发布/订阅


2、负载均衡


3、命名服务


4、分布式协调/通知5、集群管理


6、Master选举


7、分布式锁


8、分布式队列


1.数据发布/订阅


介绍


数据发布/订阅系统,即所谓的配置中心,顾名思义就是发布者发布数据供订阅者进行数据订阅。


目的


动态获取数据(配置信息)


实现数据(配置信息)的集中式管理和数据的动态更新


设计模式


Push模式


Pull模式


数据(配置信息)特性


1、数据量通常比较小


2、数据内容在运行时会发生动态更新3、集群中各机器共享,配置一致


如:机器列表信息、运行时开关配置、数据库配置信息等


基于 Zookeeper的实现方式


数据存储:将数据(配置信息)存储到 Zookeeper上的一个数据节点


数据获取:应用在启动初始化节点从 Zookeeper数据节点读取数据,并


在该节点上注册一个数据变更 Watcher


数据变更:当变更数据时,更新 Zookeeper对应节点数据,Zookeeper


会将数据变更通知发到各客户端,客户端接到通知后重新读取变更后的数据即可。


2.负载均衡


zk的命名服务


命名服务是指通过指定的名字来获取资源或者服务的地址,利用 zk创建一个全局的路径,这个路径就可以作为一个名字,指向集群中的集群,提供的服务的地址,或者一个远程的对象等等。


分布式通知和协调


对于系统调度来说:操作人员发送通知实际是通过控制台改变某个节点的状态,然后 zk将这些变化发送给注册了这个节点的 watcher的所有客户端。


对于执行情况汇报:每个工作进程都在某个目录下创建一个临时节点。并携带工作的进度数据,这样汇总的进程可以监控目录子节点的变化获得工作进度的实时的全局情况。


zk的命名服务(文件系统)


命名服务是指通过指定的名字来获取资源或者服务的地址,利用 zk创建一个全局的路径,即是唯一的路径,这个路径就可以作为一个名字,指向集群中的集群,


提供的服务的地址,或者一个远程的对象等等。


zk的配置管理(文件系统、通知机制)


程序分布式的部署在不同的机器上,将程序的配置信息放在 zk的 znode下,当有配置发生改变时,也就是 znode发生变化时,可以通过改变 zk中某个目录节点的内容,利用 watcher通知给各个客户端,从而更改配置。


Zookeeper集群管理(文件系统、通知机制)


所谓集群管理无在乎两点:是否有机器退出和加入、选举 master。


对于第一点,所有机器约定在父目录下创建临时目录节点,然后监听父目录节点的子节点变化消息。一旦有机器挂掉,该机器与 zookeeper的连接断开,其所创建的临时目录节点被删除,所有其他机器都收到通知:某个兄弟目录被删除,于是,所有人都知道:它上船了。


新机器加入也是类似,所有机器收到通知:新兄弟目录加入,highcount又有了,对于第二点,我们稍微改变一下,所有机器创建临时顺序编号目录节点,每次选


取编号最小的机器作为 master就好。


Zookeeper分布式锁(文件系统、通知机制)


有了 zookeeper的一致性文件系统,锁的问题变得容易。锁服务可以分为两类,一个是保持独占,另一个是控制时序。


对于第一类,我们将 zookeeper上的一个 znode看作是一把锁,通过 createznode的方式来实现。所有客户端都去创建 /distribute_lock节点,最终成功创建的那个客户端也即拥有了这把锁。用完删除掉自己创建的 distribute_lock节点就释放出锁。


对于第二类, /distribute_lock已经预先存在,所有客户端在它下面创建临时顺序编号目录节点,和选 master一样,编号最小的获得锁,用完删除,依次方便。


Zookeeper队列管理(文件系统、通知机制)


两种类型的队列:


1、同步队列,当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达。


2、队列按照 FIFO方式进行入队和出队操作。


第一类,在约定目录下创建临时目录节点,监听节点数目是否是我们要求的数目。


第二类,和分布式锁服务中的控制时序场景基本原理一致,入列有编号,出列按编号。在特定的目录下创建 PERSISTENT_SEQUENTIAL节点,创建成功时


Watcher通知等待的队列,队列删除序列号最小的节点用以消费。此场景下


Zookeeper的 znode用于消息存储,znode存储的数据就是消息队列中的消息内容,SEQUENTIAL序列号就是消息的编号,按序取出即可。由于创建的节点是持久化的,所以不必担心队列消息的丢失问题。

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
1月前
|
架构师 前端开发 Java
Java开发工程师的职业规划应该是什么样的?
Java开发工程师的职业规划涵盖多个阶段,包括初入行业(0-1年)、技能提升(1-3年)、技术专家(3-5年)及管理或专家路线选择(5年以上)。各阶段设定了明确的技能要求与职业目标,从掌握Java基础、常用框架到深入研究高级技术、微服务架构乃至担任管理职务或成为技术专家。通过持续学习与实践,结合个人兴趣,Java工程师可在技术或管理领域找到合适的发展方向,最终实现职业成功。
297 83
|
14天前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
35 2
|
1月前
|
设计模式 架构师 Java
Java开发工程师转架构师需要学习什么
Java开发工程师转型为架构师需掌握多项技能:精通Java及框架、数据库与分布式系统;熟悉设计模式与架构模式;积累项目经验;提升沟通与领导力;持续学习新技术;培养系统设计与抽象能力;了解中间件及开发工具;并注重个人特质与职业发展。具体路径应结合个人目标与实际情况制定。
58 18
|
1月前
|
人工智能 前端开发 Java
Java开发工程师转哪个行业比较好?
Java开发工程师转哪个行业比较好?
177 2
|
18天前
|
JSON 安全 前端开发
第二次面试总结 - 宏汉科技 - Java后端开发
本文是作者对宏汉科技Java后端开发岗位的第二次面试总结,面试结果不理想,主要原因是Java基础知识掌握不牢固,文章详细列出了面试中被问到的技术问题及答案,包括字符串相关函数、抽象类与接口的区别、Java创建线程池的方式、回调函数、函数式接口、反射以及Java中的集合等。
21 0
|
1月前
|
小程序 前端开发 JavaScript
Java开发工程师转小程序开发的前景如何?
Java开发工程师转小程序开发的前景如何?
35 0
|
2月前
|
XML 存储 JSON
【IO面试题 六】、 除了Java自带的序列化之外,你还了解哪些序列化工具?
除了Java自带的序列化,常见的序列化工具还包括JSON(如jackson、gson、fastjson)、Protobuf、Thrift和Avro,各具特点,适用于不同的应用场景和性能需求。
|
2月前
|
C# Windows 开发者
当WPF遇见OpenGL:一场关于如何在Windows Presentation Foundation中融入高性能跨平台图形处理技术的精彩碰撞——详解集成步骤与实战代码示例
【8月更文挑战第31天】本文详细介绍了如何在Windows Presentation Foundation (WPF) 中集成OpenGL,以实现高性能的跨平台图形处理。通过具体示例代码,展示了使用SharpGL库在WPF应用中创建并渲染OpenGL图形的过程,包括开发环境搭建、OpenGL渲染窗口创建及控件集成等关键步骤,帮助开发者更好地理解和应用OpenGL技术。
148 0
|
2月前
|
Java 编译器 开发工具
JDK vs JRE:面试大揭秘,一文让你彻底解锁Java开发和运行的秘密!
【8月更文挑战第24天】JDK(Java Development Kit)与JRE(Java Runtime Environment)是Java环境中两个核心概念。JDK作为开发工具包,不仅包含JRE,还提供编译器等开发工具,支持Java程序的开发与编译;而JRE仅包含运行Java程序所需的组件如JVM和核心类库。一个简单的"Hello, World!"示例展示了两者用途:需借助JDK编译程序,再利用JRE或JDK中的运行环境执行。因此,开发者应基于实际需求选择安装JDK或JRE。
49 0
|
2月前
|
算法 Java
【多线程面试题十八】、说一说Java中乐观锁和悲观锁的区别
这篇文章讨论了Java中的乐观锁和悲观锁的区别,其中悲观锁假设最坏情况并在访问数据时上锁,如通过`synchronized`或`Lock`接口实现;而乐观锁则在更新数据时检查是否被其他线程修改,适用于多读场景,并常通过CAS操作实现,如Java并发包`java.util.concurrent`中的类。