每天十道面试题-20200331 梦里梦外; 2023-07-20 10:48 20阅读 0赞 ### 每天十道面试题-20200331 ### * * * * 题目 * 解答 * * * 题目一 * 题目二 * 题目三 * 题目四 * 题目五 * 题目六 * 题目七 * 题目八 * 题目九 * 题目十 #### 题目 #### * 1、Zookeeper的java客户端都有哪些? * 2、Zookeeper 下 Server工作状态 * 3、chubby是什么,和zookeeper比你怎么看? * 4、ZAB和Paxos算法的联系与区别? * 5、Zookeeper的典型应用场景 * 6、Chroot特性 * 7、会话创建过程会话管理? * 8、服务器角色 * 9、集群支持动态添加机器吗? * 10、Zookeeper对节点的watch监听通知是永久的吗?为什么不是永久的? #### 解答 #### ###### 题目一 ###### * 题干:Zookeeper的java客户端都有哪些? * 分析: * > zk自带的zkclient及Apache开源的Curator * 回答: * > zk自带的zkclient及Apache开源的Curator。 ###### 题目二 ###### * 题干:Zookeeper 下 Server工作状态? * 分析: * > 服务器具有四种状态,分别是LOOKING、FOLLOWING、LEADING、OBSERVING。 > LOOKING:寻找Leader状态。当服务器处于该状态时,它会认为当前集群中没有Leader,因此需要进入Leader选举状态。 > FOLLOWING:跟随者状态。表明当前服务器角色是Follower。 > LEADING:领导者状态。表明当前服务器角色是Leader。 > OBSERVING:观察者状态。表明当前服务器角色是Observer。 * 回答: * > LOOKING:寻找Leader状态。当服务器处于该状态时,它会认为当前集群中没有Leader,因此需要进入Leader选举状态。 > FOLLOWING:跟随者状态。表明当前服务器角色是Follower。 > LEADING:领导者状态。表明当前服务器角色是Leader。 > OBSERVING:观察者状态。表明当前服务器角色是Observer。 ###### 题目三 ###### * 题干:chubby是什么,和zookeeper比你怎么看? * 分析: * > chubby是google的,完全实现paxos算法,不开源。zookeeper是chubby的开源实现,使用zab协议,paxos算法的变种。。 * 回答: * > chubby是google的,完全实现paxos算法,不开源。zookeeper是chubby的开源实现,使用zab协议,paxos算法的变种。。 ###### 题目四 ###### * 题干:ZAB和Paxos算法的联系与区别? * 分析: * > 相同点: > 两者都存在一个类似于Leader进程的角色,由其负责协调多个Follower进程的运行 > Leader进程都会等待超过半数的Follower做出正确的反馈后,才会将一个提案进行提交 > ZAB协议中,每个Proposal中都包含一个 epoch 值来代表当前的Leader周期,Paxos中名字为Ballot > 不同点: > ZAB用来构建高可用的分布式数据主备系统(Zookeeper),Paxos是用来构建分布式一致性状态机系统。 * 回答: * > 见分析。 ###### 题目五 ###### * 题干:Zookeeper的典型应用场景? * 分析: * > 数据发布/订阅 > 负载均衡 > 命名服务 > 分布式协调/通知 > 集群管理 > Master选举 > 分布式锁 > 分布式队列 * 回答: * > 数据发布/订阅 > 负载均衡 > 命名服务 > 分布式协调/通知 > 集群管理 > Master选举 > 分布式锁 > 分布式队列 ###### 题目六 ###### * 题干:Chroot特性 * 分析: * > Chroot特性,该特性允许每个客户端为自己设置一个命名空间。如果一个客户端设置了Chroot,那么该客户端对服务器的任何操作,都将会被限制在其自己的命名空间下。 > 通过设置Chroot,能够将一个客户端应用于Zookeeper服务端的一颗子树相对应,在那些多个应用公用一个Zookeeper进群的场景下,对实现不同应用间的相互隔离非常有帮助。 * 回答: * > 见分析 ###### 题目七 ###### * 题干:会话创建过程会话管理? * 分析: * > 分桶策略:将类似的会话放在同一区块中进行管理,以便于Zookeeper对会话进行不同区块的隔离处理以及同一区块的统一处理。 > 分配原则:每个会话的“下次超时时间点”(ExpirationTime) * 回答: * > 见分析 ###### 题目八 ###### * 题干:服务器角色 * 分析: * > Leader > 事务请求的唯一调度和处理者,保证集群事务处理的顺序性 > 集群内部各服务的调度者 > Follower > 处理客户端的非事务请求,转发事务请求给Leader服务器 > 参与事务请求Proposal的投票 > 参与Leader选举投票 > Observer > 3.3.0版本以后引入的一个服务器角色,在不影响集群事务处理能力的基础上提升集群的非事务处理能力 > 处理客户端的非事务请求,转发事务请求给Leader服务器 > 不参与任何形式的投票 * 回答: * > 见分析 ###### 题目九 ###### * 题干:集群支持动态添加机器吗? * 分析: * > 全部重启:关闭所有Zookeeper服务,修改配置之后启动。不影响之前客户端的会话。 > 逐个重启:在过半存活即可用的原则下,一台机器重启不影响整个集群对外提供服务。这是比较常用的方式。。 * 回答: * > 全部重启:关闭所有Zookeeper服务,修改配置之后启动。不影响之前客户端的会话。 > 逐个重启:在过半存活即可用的原则下,一台机器重启不影响整个集群对外提供服务。这是比较常用的方式。 ###### 题目十 ###### * 题干:Zookeeper对节点的watch监听通知是永久的吗?为什么不是永久的? * 分析: * > Watch Manger时服务端的Watcher管理者并且还负责Watcher事件的触发,并且移除那些被触发的Watcher见 第六题 > 如果服务端变动频繁,而监听的客户端很多情况下,每次变动都要通知到所有的客户端,给网络和服务器造成很大压力。 > 一般是客户端执行getData(“/节点A”,true),如果节点A发生了变更或删除,客户端会得到它的watch事件,但是在之后节点A又发生了变更,而客户端又没有设置watch事件,就不再给客户端发送。 > 在实际应用中,很多情况下,我们的客户端不需要知道服务端的每一次变动,我只要最新的数据即可。 * 回答: * > Watch Manger时服务端的Watcher管理者并且还负责Watcher事件的触发,并且移除那些被触发的Watcher见 第六题 > 如果服务端变动频繁,而监听的客户端很多情况下,每次变动都要通知到所有的客户端,给网络和服务器造成很大压力。 > 一般是客户端执行getData(“/节点A”,true),如果节点A发生了变更或删除,客户端会得到它的watch事件,但是在之后节点A又发生了变更,而客户端又没有设置watch事件,就不再给客户端发送。 > 在实际应用中,很多情况下,我们的客户端不需要知道服务端的每一次变动,我只要最新的数据即可。
还没有评论,来说两句吧...