编程语言
首页 > 编程语言> > java面试基础知识点,你值得拥有!

java面试基础知识点,你值得拥有!

作者:互联网

前言

我朋友也是个写了四年Java代码的程序员,跟女友已经恋爱多年,最近突然结婚了。

他结婚以前,换了一家公司,咱俩就好久没见过面了。刚好今天出门办事碰上了,找了一家店坐一起喝酒聊天。

我聊天时打趣他:“亏得你小子运气好,还能娶到老婆。咱们这一行,不是加班就是加班,天天就是和代码过日子。”

朋友说:“做这一行也就工资看着高点,确实是每天都累死累活。我还不是一样的加班,都没时间陪老婆!”

跟着又聊到了工作,朋友听到我还在写业务代码非常意外:“你还在原来的公司做?我跳槽后就开始学习分布式架构、微服务、JVM调优、并发编程、SpringCloud等,虽然过程很是艰辛;但是后面接手做了几个大项目后就升职了,薪水也涨了不少、不然就凭以前那点工资,哪敢结婚买房。”

我于是问了问他的月薪税后28K,不由得心底一凉…瞬间觉得最该同情的是自己。同时我也有点心动了,谁不想升职加薪呢?

我和朋友倒起了苦水:自己在公司干了这么久了,工资也没有提升,每天都是写业务代码,技术也得不到提高,很焦虑。我也想自己去学点东西,增加自己的价值,就是遇到瓶颈,不知道从哪入手。

他一听就说:“现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技术),要是你上对车,自身能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的Coder而已!

你现在就是缺少进阶Java中高级的机会,去深入去学习下数据结构算法、JVM调优、分布式架构设计等等;不然你在市场上没有核心竞争力,根本拿不到高薪!时间就是金钱,我向你推荐一套免费精品Java高级教程,保证你学了以后保证薪资上升一个台阶。”

1. 面试官:工作中使用过Zookeeper嘛?你知道它是什么,有什么用途呢?

小菜鸡的我:

用途跟功能不是一个意思咩?

2. 面试官:说下什么是命名服务,什么是配置管理,又什么是集群管理吧

小菜鸡的我(幸好我刷过面试题),无所畏惧

3. 面试官:你提到了znode节点,那你知道znode有几种类型呢?zookeeper的数据模型是怎样的呢?

小菜鸡的我(我先想想):

zookeeper的数据模型

ZooKeeper的视图数据结构,很像Unix文件系统,也是树状的,这样可以确定每个路径都是唯一的。zookeeper的节点统一叫做znode,它是可以通过路径来标识,结构图如下:

znode的4种类型

根据节点的生命周期,znode可以分为4种类型,分别是持久节点(PERSISTENT)、持久顺序节点(PERSISTENT_SEQUENTIAL)、临时节点(EPHEMERAL)、临时顺序节点(EPHEMERAL_SEQUENTIAL)

4、面试官:你知道znode节点里面存储的是什么吗?每个节点的数据最大不能超过多少呢?

小菜鸡的我:

znode节点里面存储的是什么?

Znode数据节点的代码如下

public class DataNode implements Record {
    byte data[];                    
    Long acl;                       
    public StatPersisted stat;       
    private Set<String> children = null; 
}

哈哈,Znode包含了存储数据、访问权限、子节点引用、节点状态信息,如图:

每个节点的数据最大不能超过多少呢

为了保证高吞吐和低延迟,以及数据的一致性,znode只适合存储非常小的数据,不能超过1M,最好都小于1K。

5、面试官:你知道znode节点上的监听机制嘛?讲下Zookeeper watch机制吧。

小菜鸡的我:

Watcher监听机制

Zookeeper 允许客户端向服务端的某个Znode注册一个Watcher监听,当服务端的一些指定事件触发了这个Watcher,服务端会向指定客户端发送一个事件通知来实现分布式的通知功能,然后客户端根据 Watcher通知状态和事件类型做出业务上的改变。

可以把Watcher理解成客户端注册在某个Znode上的触发器,当这个Znode节点发生变化时(增删改查),就会触发Znode对应的注册事件,注册的客户端就会收到异步通知,然后做出业务的改变。

Watcher监听机制的工作原理

Watcher特性总结

6、面试官:你对Zookeeper的数据结构都有一定了解,那你讲下Zookeeper的特性吧

小菜鸡的我:(我背过书,啊哈哈)

Zookeeper 保证了如下分布式一致性特性:

7、面试官:你刚提到顺序一致性,那zookeeper是如何保证事务的顺序一致性的呢?

小菜鸡的我:(完蛋了这题不会)

需要了解事务ID,即zxid。ZooKeeper的在选举时通过比较各结点的zxid和机器ID选出新的主结点的。zxid由Leader节点生成,有新写入事件时,Leader生成新zxid并随提案一起广播,每个结点本地都保存了当前最近一次事务的zxid,zxid是递增的,所以谁的zxid越大,就表示谁的数据是最新的。

ZXID的生成规则如下:

ZXID有两部分组成:

ZXID的低32位是计数器,所以同一任期内,ZXID是连续的,每个结点又都保存着自身最新生效的ZXID,通过对比新提案的ZXID与自身最新ZXID是否相差“1”,来保证事务严格按照顺序生效的。

8、面试官:你提到了Leader,你知道Zookeeper的服务器有几种角色嘛?Zookeeper下Server工作状态又有几种呢?

小菜鸡的我:

Zookeeper 服务器角色

Zookeeper集群中,有Leader、Follower和Observer三种角色

Leader

Leader服务器是整个ZooKeeper集群工作机制中的核心,其主要工作:

  • 事务请求的唯一调度和处理者,保证集群事务处理的顺序性
  • 集群内部各服务的调度者

Follower

Follower服务器是ZooKeeper集群状态的跟随者,其主要工作:

  • 处理客户端非事务请求,转发事务请求给Leader服务器
  • 参与事务请求Proposal的投票
  • 参与Leader选举投票

Observer

Observer是3.3.0 版本开始引入的一个服务器角色,它充当一个观察者角色——观察ZooKeeper集群的最新状态变化并将这些状态变更同步过来。其工作:

  • 处理客户端的非事务请求,转发事务请求给 Leader 服务器
  • 不参与任何形式的投票

Zookeeper下Server工作状态

服务器具有四种状态,分别是 LOOKING、FOLLOWING、LEADING、OBSERVING。

  • 1.LOOKING:寻找Leader状态。当服务器处于该状态时,它会认为当前集群中没有 Leader,因此需要进入 Leader 选举状态。
  • 2.FOLLOWING:跟随者状态。表明当前服务器角色是Follower。
  • 3.LEADING:领导者状态。表明当前服务器角色是Leader。
  • 4.OBSERVING:观察者状态。表明当前服务器角色是Observer。

9、面试官:你说到服务器角色是基于ZooKeeper集群的,那你画一下ZooKeeper集群部署图吧?ZooKeeper是如何保证主从节点数据一致性的呢?

小菜鸡的我:

ZooKeeper集群部署图

ZooKeeper集群是一主多从的结构:

ZooKeeper如何保证主从节点数据一致性

我们知道集群是主从部署结构,要保证主从节点一致性问题,无非就是两个主要问题:

Zookeeper是采用ZAB协议(Zookeeper Atomic Broadcast,Zookeeper原子广播协议)来保证主从节点数据一致性的,ZAB协议支持崩溃恢复和消息广播两种模式,很好解决了这两个问题:

Leader服务器挂了,所有集群中的服务器进入LOOKING状态,首先,它们会选举产生新的Leader服务器;接着,新的Leader服务器与集群中Follower服务进行数据同步,当集群中超过半数机器与该 Leader服务器完成数据同步之后,退出恢复模式进入消息广播模式。Leader 服务器开始接收客户端的事务请求生成事务Proposal进行事务请求处理。

最后

分享一套我整理的面试干货,这份文档结合了我多年的面试官经验,站在面试官的角度来告诉你,面试官提的那些问题他最想听到你给他的回答是什么,分享出来帮助那些对前途感到迷茫的朋友。

面试经验技巧篇

面试真题篇

需要这份文档的朋友可以点击蓝色传送门即可免费获取!

资料整理不易,点个关注再走吧

内某顶级手机制造商软件工程师笔试题

[外链图片转存中…(img-Pq1NlYSo-1621488310272)]

需要这份文档的朋友可以点击蓝色传送门即可免费获取!

资料整理不易,点个关注再走吧

标签:知识点,java,Zookeeper,Leader,面试,服务器,节点,题真题,客户端
来源: https://blog.csdn.net/m0_57286679/article/details/117073000