因为zookeeper(后面简称zk)是一个功能比较优秀且强大的分布式组件,使用场景也很多,很受欢迎,所以相对来说关于zk的问题也就很多。
下面总结归纳一些常见的面试问题:
1、请简述ZooKeeper的选举机制?
2、客户端对zk的serverList的轮训机制。
3、客户端如何处理connection loss(连接断开)和sessionExpired(session过期)两类连接异常?
4、一个客户端修改了某个节点的数据,其他客户端能够马上获取到这个最新的数据吗?
5、zk对节点的watch监听是永久的吗?为什么?
6、zk使用watch的注意事项是什么?
7、能否收到每次节点变化的通知?
8、能否为临时节点创建子节点?
9、是否可以拒绝单个IP对zk的访问?如何实现?
10、在getChildren(String path, boolean watch)是注册节点对子节点的变化,那么子节点的子节点变化能通知吗?
11、创建的临时节点什么时候会被删除?是连接一断就会被删除吗?延时是多少?
12、zk是否支持机器动态扩容?如果目前不支持,那么要如何才能支持?
13、zk集群中服务器之间是怎么通信的?
14、zk是否会自动进行日志清理?如何进行日志清理?
15、谈谈你对zk的理解?
16、zk节点类型?
17、请说明zk的通知机制?
18、zk的监听原理是什么?
19、请说明zk使用到的各个端口的作用?
20、zk的部署方式有几种?集群中的角色有哪些?集群最少需要几台机器?
21、zk集群如果有3台机器,如果挂掉一台还能工作吗?挂掉两台呢?
22、zk使用ZAB协议与paxos算法有何不同?
23、请谈谈zk对事务性的支持?
问题的答案请参考:https://zhuanlan.zhihu.com/p/121060596
最后有疑问还是以官方为准。