网易社招java岗面经(接上)

11、哨兵机制作用?

(1)监控(Monitoring):哨兵会不断地检查主节点和从节点是否运作正常。

(2)自动故障转移(Automatic failover):当主节点不能正常工作时,哨兵会开始自动故障

转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复

制新的主节点。

(3)配置提供者(Configuration provider):客户端在初始化时,通过连接哨兵来获得当前

Redis 服务的主节点地址。

(4)通知(Notification):哨兵可以将故障转移的结果发送给客户端。

12、哨兵机制节点组成?

它由两部分组成,哨兵节点和数据节点:(1)哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的 redis 节点,不

存储数据。

(2)数据节点:主节点和从节点都是数据节点。

13、哨兵机制原理?

(1)定时任务:每个哨兵节点维护了 3 个定时任务。定时任务的功能分别如下:通过向主

从节点发送info 命令获取最新的主从结构;通过发布订阅功能获取其他哨兵节点的信息;

通过向其他节点发送ping 命令进行心跳检测,判断是否下线。

(2)主观下线:在心跳检测的定时任务中,如果其他节点超过一定时间没有回复,哨兵节

点就会将其进行主观下线。顾名思义,主观下线的意思是一个哨兵节点“主观地”判断下线;

与主观下线相对应的是客观下线。

(3 ) 客 观 下 线 : 哨 兵 节 点 在 对 主 节 点 进 行 主 观 下 线 后 , 会 通 过 sentinel

is-master-down-by-addr 命令询问其他哨兵节点该主节点的状态;如果判断主节点下线的

哨兵数量达到一定数值,则对该主节点进行客观下线。

(4)选举领导者哨兵节点:当主节点被判断客观下线以后,各个哨兵节点会进行协商,选

举出一个领导者哨兵节点,并由该领导者节点对其进行故障转移操作。监视该主节点的所有

哨兵都有可能被选为领导者,选举使用的算法是Raft 算法;Raft 算法的基本思路是先到先

得:即在一轮选举中,哨兵A 向 B 发送成为领导者的申请,如果 B 没有同意过其他哨兵,

则会同意A 成为领导者。选举的具体过程这里不做详细描述,一般来说,哨兵选择的过程

很快,谁先完成客观下线,一般就能成为领导者。

(5)故障转移:选举出的领导者哨兵,开始进行故障转移操作,该操作大体可以分为 3 个

步骤:

①在从节点中选择新的主节点:选择的原则是,首先过滤掉不健康的从节点;然后选择优先

级最高的从节点(由 slave-priority 指定);如果优先级无法区分,则选择复制偏移量最大的从

节点;如果仍无法区分,则选择runid 最小的从节点。

②更新主从状态:通过 slaveof no one 命令,让选出来的从节点成为主节点;并通过 slaveof

命令让其他节点成为其从节点。

③将已经下线的主节点(即 6379)设置为新的主节点的从节点,当 6379 重新上线后,它会成

为新的主节点的从节点。

14、哨兵机制缺点

写操作无法负载均衡;存储能力受到单机的限制。(Redis 集群解决了该情况)

15、Zookeeper 锁是如何实现的?

一般使用Curator 进行使用 Zookeeper 锁,例如有两个客户端 A 和客户端 B,首先 A 先在锁

节点下创建例如01 子节点的锁,然后再获取节点信息,发现自己的 01 节点排名第一,那

么就获得锁。

客户端B 也需要获取锁,现在锁节点下创建例如 02 的子节点,然后再获取锁节点信息,发

现锁节点信息为[01,02],并不排第一,因此获取不到锁,客户端 B 会在他的顺序节点的上一

个顺序节点加一个监听器。

当客户端A 使用完锁,删除 01 节点,客户端 B 获取到 01 删除的监听,然后发现自己的 02

节点排名第一,那么就获取到锁。16、分布式缓存读写不一致问题

17、Java 线程你是怎么使用的

18、数据库是如何调优的?

(1)数据表加合适的索引

(2)针对执行计划进行优化

(3)根据慢 sql 进行优化

(4)加缓存

(5)参数调优

19、git rebase 命令发生了什么?

rebase 命令可以帮我们把整个提交历史变成干净清晰的一条线。

20、手撕代码。牛客题霸上的原题,可以去看看:NC13 二叉树的最大深度

 

#网易##社招##面经##java工程师#
全部评论

相关推荐

1 26 评论
分享
牛客网
牛客企业服务