2020-04-22 今日题目

面试过程中有几个回答的不太好,整理回顾

1.zk在什么时候会发生脑裂,zk集群要配置多少台,为什么?
先说结论:zk的目前3的版本实现中不会发生脑裂
原因是zk选主遵循Quorums机制,说人话就是选主的成功需要N/2的节点投票成功。举个例子,比如目前异地的2个机房A和B分别部署了5+3一共8台,leader在A机房,此时突然两个机房无法互通,那B机房的节点会尝试选主,但并没有大于N/2个成功投票,故不会脑裂。然后你会说leader在B机房咋办呢,A机房选主不是大于N/2了吗,如果这个时候网络不通他们就相安无事,如果网络同了。老leader发起同步请求,follower会拒绝(选主后epoch+1),这样老leader就知道自己大势已去变为follower。

配置奇数台,和Quorums有关,主要是节省资源。

2.扩容的时候比如数据库sharding、rehash为什么都是2的幂
主要和扩容的算法有关,不管是位与还是取模,如果不是2的幂,转换为二进制的时候最后一位是0,导致hash后末位永久为0,导致有一半的空间无法利用,分布不均衡。

3.为什么要尽量避免锁升级?
偏向锁升级为自旋锁,自旋也是消耗性能的;自旋锁升级为重量级锁,会涉及到系统调用,用户态到内核态到转换。还有一种可能是升级后有一个降级的过程。这里需要引入jvm安全点的概念,简单说就是达到一定的条件,会发生GC,GC过程中会检测是否需要有降级的锁,会消耗一定的性能(这个答案没有完全考究)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 包含的重点内容:JAVA基础JVM 知识开源框架知识操作系统多线程TCP 与 HTTP架构设计与分布式算法数据库知...
    消失er阅读 9,839评论 1 10
  • 声明:本文写的时候,当时就是完全不懂zk,边看网上的文章边学习归纳和整理,这不是我的产出,不用点赞打赏。大家理智友...
    _Zy阅读 76,483评论 38 129
  • zookeeper为分布式应用提供了高效且可靠的分布式协调服务,提供了如统一命名服务、配置管理和分布式锁等分布式的...
    小manong阅读 5,158评论 0 0
  • 首先来看Leader做的工作:二)中提到的同步数据时使用的逻辑时钟,它的初始值是0,每次选举过程都会递增的,在le...
    香沙小熊阅读 11,121评论 0 7
  • 今天周五,上午,我所在的小镇阳光特别好。 临近中午,天色突然暗下来、顷刻间电闪雷鸣、马上便哗啦啦大雨️自天而降! ...
    盛世清风阅读 3,064评论 2 2