46、ZAB 协议 JAVA 实现(FLE-发现阶段和同步合并为 Recovery Phase(恢复阶段) )
46、ZAB 协议 JAVA 实现(FLE-发现阶段和同步合并为 Recovery Phase(恢复阶段))
47、投票机制
每个 sever 首先给自己投票,然后用自己的选票和其他 sever 选票对比,权重大的胜出,使用权重较大的更新自身选票箱。具体选举过程如下:
- 每个 Server 启动以后都询问其它的 Server 它要投票给谁。对于其他 server 的询问,server 每次根据自己的状态都回复自己推荐的 leader 的 id 和上一次处理事务的
zxid(系统启动时每个 server 都会推荐自己)
- 收到所有 Server 回复以后,就计算出 zxid 最大的哪个 Server,并将这个 Server 相关信息设置成下一次要投票的 Server。
- 计算这过程中获得票数最多的的 sever 为获胜者,如果获胜者的票数超过半数,则改server 被选为 leader。否则,继续这个过程,直到 leader 被选举出来
- leader 就会开始等待 server 连接
- Follower 连接 leader,将最大的 zxid 发送给 leader
- Leader 根据 follower 的 zxid 确定同步点,至此选举阶段完成。
- 选举阶段完成 Leader 同步后通知 follower 已经成为 uptodate 状态
- Follower 收到 uptodate 消息后,又可以重新接受 client 的请求进行服务了
目前有 5 台服务器,每台服务器均没有数据,它们的编号分别是 1,2,3,4,5,按编号依次启动,它们的选择举过程如下:
- 服务器 1 启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器 1 的状态一直属于 Looking。
- 服务器 2 启动,给自己投票,同时与之前启动的服务器 1 交换结果,由于服务器 2 的编号大所以服务器 2 胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是
LOOKING。
- 服务器 3 启动,给自己投票,同时与之前启动的服务器 1,2 交换信息,由于服务器 3 的编号最大所以服务器 3 胜出,此时投票数正好大于半数,所以服务器 3 成为领导者,
服务器1,2 成为小弟。
- 服务器 4 启动,给自己投票,同时与之前启动的服务器 1,2,3 交换信息,尽管服务器 4 的编号大,但之前服务器 3 已经胜出,所以服务器 4 只能成为小弟。
- 服务器 5 启动,后面的逻辑同服务器 4 成为小弟
48、Zookeeper 工作原理(原子广播)
- Zookeeper 的核心是原子广播,这个机制保证了各个 server 之间的同步。实现这个机制的协议叫做 Zab 协议。 Zab 协议有两种模式,它们分别是恢复模式和广播模式。
- 当服务启动或者在领导者崩溃后, Zab 就进入了恢复模式,当领导者被选举出来,且大多数 server 的完成了和 leader 的状态同步以后,恢复模式就结束了。
- 状态同步保证了 leader 和 server 具有相同的系统状态
- 一旦 leader 已经和多数的 follower 进行了状态同步后,他就可以开始广播消息了,即进入广播状态。这时候当一个 server 加入 zookeeper 服务中,它会在恢复模式下启
动,发现 leader,并和 leader 进行状态同步。待到同步结束,它也参与消息广播。 Zookeeper服务一直维持在 Broadcast 状态,直到 leader 崩溃了或者 leader 失去了大部分的followers 支持。
- 广播模式需要保证 proposal 被按顺序处理,因此 zk 采用了递增的事务 id 号(zxid)来保证。所有的提议(proposal)都在被提出的时候加上了 zxid。
- 实现中 zxid 是一个 64 为的数字,它高 32 位是 epoch 用来标识 leader 关系是否改变,每次一个 leader 被选出来,它都会有一个新的 epoch。低 32 位是个递增计数。
- 当 leader 崩溃或者 leader 失去大多数的 follower,这时候 zk 进入恢复模式,恢复模式需要重新选举出一个新的 leader,让所有的 server 都恢复到一个正确的状态
49、Znode 有四种形式的目录节点
- PERSISTENT:持久的节点。
- EPHEMERAL:暂时的节点。
- PERSISTENT_SEQUENTIAL:持久化顺序编号目录节点。
- EPHEMERAL_SEQUENTIAL:暂时化顺序编号目录节点。

数据结构面试题
全站分卷索引 · 222 卷
- 1JavaOOP面试题
- 27、Java的数据结构有那些?
- 314、Char类型能不能转成int类型?能不能转化成string类型,能不能转成double类型
- 420、访问修饰符 public,private,protected,以及不写(默认) 时的区别?
- 525、equals与==的区别
- 641、Object类常用方法有那些?
- 747、构造方法能不能显式调用?
- 854、String str=”aaa”,与String str=new String(“aaa”)一样吗?
- 963、Hashcode的作用
- 1066、有没有可能两个不相等的对象有相同的hashcode
- 1170、final、finalize()、finally
- 1278、什么是成员内部类
- 1385、排序都有哪几种方法?请列举
- 1495、String 和 StringBuilder、StringBuffer 的区别?
- 15100、Java 中会存在内存泄漏吗,请简单描述。
- 16101、抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被 synchronized修饰?
- 17104、接口是否可继承(extends)接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?
- 18107、内部类可以引用它的包含类(外部类)的成员吗?有没有什么限制?
- 193、Collection包结构,与Collections的区别
- 208、集合类存放于 Java.util 包中, 主要有几 种接口
- 2114、HashSet( Hash 表)
- 2216、说说LinkHashSet( HashSet+LinkedHashMap)
- 2319、HashTable(线程安全)
- 2421、LinkHashMap(记录插入顺序)
- 253、如何自定义一个异常
- 266、Thow与thorws区别
- 273、常用io类有那些
- 2810、JAVA NIO
- 29Java反射面试题
- 308、Java 反射 API
- 31Java序列化面试题
- 327、序列化 ID
- 332、注解是什么?
- 343、实现 Runnable 接口。
- 357、如何停止一个正在运行的线程
- 368、notify()和notifyAll()有什么区别?
- 3711、Thread 类中的start() 和 run() 方法有什么区别?
- 3817、SynchronizedMap和ConcurrentHashMap有什么区别?
- 3922、说说自己是怎么使用 synchronized 关键字,在项目中用到了吗synchronized关键字最主要的三种使用方式
- 4030、阻塞状态(BLOCKED)
- 4133、start 与 run 区别
- 4238、Synchronized 同步锁
- 4340、Condition 类和 Object 类锁方法区别区别
- 4443、Semaphore 与 ReentrantLock 区别
- 4549、轻量级锁
- 4657、线程中断(interrupt)
- 4764、寄存器
- 4874、拒绝策略
- 4977、Java 中的阻塞队列
- 5078、ArrayBlockingQueue(公平、非公平)
- 5185、在 java 中守护线程和本地线程区别
- 5292、在 Java 中 Executor 和 Executors 的区别?
- 5397、什么是阻塞队列?阻塞队列的实现原理是什么?如何使用阻塞队列来实现生产者-消费者模型?
- 54103、为什么我们调用 start()方法时会执行 run()方法,为什么我们不能直接调用 run()方法?
- 55JVM面试题
- 5610、解释 Java 堆空间及 GC?
- 5712、程序计数器(线程私有)
- 5818、描述一下 JVM 加载 class 文件的原理机制
- 5923、新生代
- 6029、标记清除算法( Mark-Sweep)
- 6132、分代收集算法
- 6238、JAVA虚引用
- 6346、Parallel Scavenge 收集器(多线程复制算法、高效)
- 6459、CMS 收集器(多线程标记清除算法)
- 6562、类加载器
- 6663、双亲委派
- 6767、JVM内存模型
- 6876、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
- 6979、Java对象创建过程
- 7086、Minor GC与Full GC分别在什么时候发生?
- 712、TokuDB( Fractal Tree-节点带数据)
- 726、InnoDB与MyISAM的区别
- 7311、第二范式(2nd NF- 每个表只描述一件事情)
- 7415、简单说一说drop、delete与truncate的区别
- 7520、大表如何优化?
- 7622、分库分表之后,id 主键如何处理
- 7729、简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别
- 7838、列对比运算符是什么?
- 7948、MySQL 支持事务吗?
- 8055、什么情况下设置了索引但无法使用
- 8161、为表中得字段选择合适得数据类型
- 8267、完整性约束包括哪些?
- 8375、主键、外键和索引的区别?
- 8483、什么是页级锁
- 856、Memcache 与 Redis 的区别都有哪些?
- 8611、热点数据和冷数据是什么
- 8715、Redis 常见性能问题和解决方案?
- 8819、Redis 常见性能问题和解决方案:
- 8926、Redis 集群方案什么情况下会导致整个集群不可用?
- 9040、Redis 如何做内存优化?
- 9147、假如 Redis 里面有 1 亿个 key,其中有 10w 个 key 是以某个固定的已知的前缀开头的,如果将它们全部找出来?
- 922、memcached 服务在企业集群架构中有哪些应用场景?
- 935、memcached 是怎么工作的?
- 9412、如何将 memcached 中 item 批量导入导出?
- 9520、什么是二进制协议,我该关注吗?
- 96MongoDB面试题
- 974、NoSQL数据库有哪些类型?
- 9815、如何执行事务/加锁?
- 9929、如果我在使用复制技术(replication),可以一部分使用日志(journaling)而其他部分则不使用吗?
- 10042、分析器在MongoDB中的作用是什么?
- 10156、MongoDB的优势有哪些
- 10267、MongoDB中的命名空间是什么意思?
- 10375、在MongoDB中如何除去一个数据库Collection Methods24.在MongoDB中如何除去一个数据库
- 10485、如何在集合中插入一个文档
- 10593、在MongoDB中如何排序
- 1065、Spring Framework 中有多少个模块,它们分别是什么?
- 1078、使用 Spring 有哪些方式?
- 10816、Spring IoC 的实现机制。
- 10919、spring 支持集中 bean scope?
- 11023、自动装配有哪些方式?
- 11130、@Qualifier 注解有什么用?
- 11234、spring JDBC API 中存在哪些类?
- 11340、什么是切点(JoinPoint)
- 11446、如何理解 Spring 中的代理?
- 11550、介绍一下 WebApplicationContext
- 11655、Spring中Autowired和Resource关键字的区别
- 11757、讲一下什么是Spring
- 11859、springMVC是什么
- 11965、解释Spring支持的几种bean的作用域。
- 12071、解释 AOP 模块
- 12181、有哪些不同类型的 IOC(依赖注入)方式?
- 12291、什么是 Spring 的内部 bean?
- 123102、@Autowired 注解
- 124113、解释 AOP
- 125126、什么是 Spring 的 MVC 框架?
- 1263、Spring Boot 有哪些优点?
- 1277、如何在Spring Boot启动的时候运行一些特定的代码?
- 12815、Spring Boot 的核心配置文件有哪几个?它们的区别是什么?
- 12923、如何实现 Spring Boot 应用程序的安全性?
- 13034、什么是 AOP?
- 13140、运行 Spring Boot 有哪几种方式?
- 13249、如何重新加载Spring Boot上的更改,而无需重新启动服务器?
- 13353、Spring Boot 还提供了其它的哪些 Starter Project Options?
- 13455、创建一个 Spring Boot Project 的最简单的方法是什么?
- 13558、 什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?
- 13661、什么是 Spring Data REST?
- 13765、如何使用 Spring Boot 生成一个 WAR 文件?
- 13873、如何不通过任何配置来选择 Hibernate 作为 JPA 的默认实现?
- 13976、Spring Boot 配置的默认 H2 数据库的名字是上面?为什么默认的数据库名字是 testdb?
- 14081、如何使用配置文件通过 Spring Boot 配置特定环境的配置?
- 14183、如何禁用特定的自动配置?
- 14287、SpringBoot 中静态首页默认位置可以放在哪里?
- 143Spring Cloud面试题
- 1447、什么是 Netflix Feign?它的优点是什么?
- 1459、什么是微服务
- 14611、Eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?
- 14714、说说 RPC 的实现原理
- 14819、微服务之间是如何独立通讯的?
- 14927、springcloud断路器作用?
- 15035、Eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?
- 1513、使用 rabbitmq 的场景
- 15210、使用 RabbitMQ 有什么好处?
- 15315、如何保证消息的可靠传输?如果消息丢了怎么办
- 15417、如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决
- 15520、什么是Publisher ?
- 15631、Fanout(广播分发)?
- 157Dubbo 面试题
- 1585、一般使用什么注册中心?还有别的选择吗?
- 15914、Dubbo 集群容错有几种方案?
- 16019、Dubbo 配置文件是如何加载到 Spring 中的?
- 16124、Dubbo 必须依赖的包有哪些?
- 16231、Dubbo是什么?
- 16342、Dubbo可以对结果进行缓存吗?
- 16430、服务读写推荐的容错策略是怎样的?
- 165MyBatis 面试题
- 1668、 模糊查询 like 语句该怎么写?
- 16713、如何获取自动生成的(主)键值?
- 16814、在 mapper 中如何传递多个参数?
- 16918、为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?
- 17024、什么是 MyBatis 的接口绑定?有哪些实现方式?
- 17128、MyBatis实现一对一有几种方式?具体怎么操作的 ?
- 1726、四种类型的数据节点 Znode
- 17311、ACL 权限控制机制
- 17417、zookeeper 是如何保证事务的顺序一致性的?
- 17524、Zookeeper 对节点的 watch监听通知是永久的吗?为什么不是永久的?
- 17632、分布式通知和协调
- 17739、事务编号 Zxid(事务请求计数器+ epoch)
- 17846、ZAB 协议 JAVA 实现(FLE-发现阶段和同步合并为 Recovery Phase(恢复阶段) )
- 1791、栈(stack)
- 1805、排序二叉树
- 1816、 前缀树
- 1827、红黑树
- 1838、B-TREE
- 1849、位图
- 185算法面试题
- 1863、假设今日是2015年3月1日,星期日,请算出13个月零6天后是星期几,距离现在多少天(请用代码实现,谢绝调用API方法)
- 1875、二分查找
- 1888、快速排序算法
- 1899、希尔排序算法
- 19010、归并排序算法
- 19111、桶排序算法
- 19213、剪枝算法
- 19317、AES
- 19419、CRC
- 19521、更多算法练习
- 1963、elasticsearch 索引数据多了怎么办,如何调优,部署
- 1976、详细描述一下 Elasticsearch 搜索的过程?
- 1989、Elasticsearch 是如何实现 Master 选举的?
- 19913、详细描述一下 Elasticsearch 更新和删除文档的过程。
- 20017、对于 GC 方面,在使用 Elasticsearch 时要注意什么?
- 20122、介绍一下你们的个性化搜索方案?
- 202Kafka 面试题
- 2033、数据文件分段 segment(顺序读写、分段命令、二分查找)
- 2048、Consumer Group
- 20513、讲一下主从同步
- 20619、消费者如何不自动提交偏移量,由应用提交?
- 207微服务 面试题
- 2083、微服务有哪些特点?
- 2095、微服务架构如何运作?
- 2108、在使用微服务架构时,您面临哪些挑战?
- 21113、什么是无所不在的语言?
- 21220、Spring Cloud 解决了哪些问题?
- 21328、双因素身份验证的凭据类型有哪些?
- 21434、什么是端到端微服务测试?
- 21540、我们如何进行跨功能测试?
- 21646、什么是持续集成(CI)?
- 2173、怎么清屏?怎么退出当前命令?怎么执行睡眠?怎么查看当
- 2188、建立软链接(快捷方式),以及硬链接的命令
- 21914、复制文件用哪个命令?如果需要连同文件夹一块复制呢?如果需要有提示功能呢?
- 22025、怎么查看系统支持的所有信号?
- 22134、查找命令的可执行文件是去哪查找的? 怎么对其进行设置及添加?
- 22241、如果你的助手想要打印出当前的目录栈,你会建议他怎么做?