【面试官】那ZooKeeper事务ID呢?

  • 面试官:你说说ZooKeeper数据模型?
  • 面试官:那ZooKeeper数据节点有几种类型?
  • 面试官:数据节点版本知道吧?
  • 面试官:ZooKeeper事务ID呢?
  • 面试官:ZooKeeper数据变更通知使用什么对象?

大家好,我是南哥。

一个Java学习与进阶的领路人,跟着南哥我们一起Java成长。

文章目录

  1. ZooKeeper数据模型
    1. ZooKeeper数据节点
    2. 数据节点类型
    3. 数据节点的版本
    4. 事务ID
  2. Watcher机制

1. ZooKeeper数据模型

1.1 ZooKeeper数据节点

面试官:你说说ZooKeeper数据模型?

ZooKeeper的数据模型是一颗树结构,每一个树节点是一个数据节点,我们称它为ZNode

而每一个ZNode的节点路径标识使用斜杠/作为分隔符,我们可以在ZNode节点下写入数据、创建节点,这种斜杠/作为路径分隔符的方式和Unix文件系统路径非常相似。

大家可以看下Unix文件系统路径,以斜杠/作为路径分隔符。

# 根目录
/
# 可执行文件所在位置
/bin
# 设备驱动
/dev

另外ZooKepper这种斜杠/作为路径分隔符正好和Windows相反,Windows使用的是反斜杠\

# Windows路径示例
C:\Java\jdk1.8.0_311

1.2 数据节点类型

面试官:那ZooKeeper数据节点有几种类型?

ZooKeeper一共有四种节点类型,但从整体来看主要是持久节点类型、临时节点类型这两种,另外两种类型只是在以上两种节点类型基础上增加了顺序的特性。大家这样理解会更方便记忆~

  1. 持久节点:这种数据节点一旦背创建后,就会一直存在于ZooKeeper服务器上,除非对该数据节点执行删除操作。
  2. 持久顺序节点:刚刚和大家说了,该节点类型就是在持久节点基础上增加了顺序的特性。如果在持久顺序节点类型的父节点创建子节点,ZooKeeper会为该子节点名加上一个数字后缀来维护子节点的顺序。
  3. 临时节点:临时节点比较特殊,它的生命周期是和客户端会话绑定在一起的。这个客户端可以是连接ZooKeeper的某一个终端命令窗口,也可以是连接ZooKeeper的某一个Spring服务线程。如果客户端会话失效了,那这个临时节点就会被自动清除。
  4. 临时顺序节点:在临时节点的基础上添加了顺序特性。

另外大家记住一点,临时节点只能作为叶子节点,是不能在临时节点下面创建任何子节点的。原因大概是临时节点子节点没有存在的意义,创建子节点的场景大多是基于持久节点的场景,这种设计也可以防止对临时节点的误用。

1.3 数据节点的版本

面试官:数据节点版本知道吧?

ZooKeeper数据节点的版本概念和CAS操作的版本概念是一样的,同样是在多线程环境下,通过乐观锁这种无锁操作来保证线程安全性。

当一个数据节点被创建后,该节点的version值为0,代表它被更新过0次,如果后续对该节点进行更新操作,那version便会递增。

对数据节点的每次更新,都会对比数据节点的version是否是预期值,只有符合预期值,才会将新值更新到该数据节点。

大家可以通过以下CAS例子代码来了解CAS操作的执行过程。

@Slf4j
public class CAS implements Runnable {

    private static AtomicInteger val = new At

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Java面试突击 文章被收录于专栏

👉以面试官面试的形式,涵盖了你怒怼大厂面试官、拿下大厂面试所需掌握的核心知识、面试重点! 👉相信一定对你顺利通关面试、拿到理想Offer有所帮助! 👉花费大量精力去制作本专栏,创作不易,各位的支持就是我创作的最大动力!

全部评论

相关推荐

已老实求offer😫:有点像徐坤(没有冒犯的意思哈)
点赞 评论 收藏
分享
09-27 00:29
东北大学 Java
伟大的麻辣烫:查看图片
阿里巴巴稳定性 75人发布 投递阿里巴巴等公司10个岗位
点赞 评论 收藏
分享
3 4 评论
分享
牛客网
牛客企业服务