Redis面试复习大纲在手面试不慌,讲的明明白白!

前言

面试时间将近两个小时(期间等待二面面试官来面我的时候等了半个多小时)面试官问的东西很多,还挖了好几个坑,一个技术点套着一个技术点的问,一定要做好万全的准备。问了一些基本层面上的技术点都答出来了,稍微问深一点我就有点懵了(实战经验还是不足)。

回来之后把这些题目做了一个分类并整理出答案(每次去面试的时候面试官问的问题面试结束后我都会做笔记)分为Spring+逻辑算法+MySQL+Java+Redis+并发编程+JVM+RabbitMQ等,接下来分享一下我的这次蚂蚁二面面经+一些我的学习笔记。

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

小菜鸡的我:

  • 有使用过的,使用ZooKeeper作为dubbo的注册中心,使用ZooKeeper实现分布式锁
  • ZooKeeper,它是一个开放源码的分布式协调服务,它是一个集群的管理者,它将简单易用的接口提供给用户。
  • 可以基于Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能
  • Zookeeper的用途:命名服务、配置管理、集群管理、分布式锁、队列管理

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

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

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

  • 命名服务就是

    命名服务是指通过指定的名字来获取资源或者服务地址。Zookeeper可以创建一个全局唯一的路径,这个路径就可以作为一个名字。被命名的实体可以是集群中的机器,服务的地址,或者是远程的对象等。一些分布式服务框架(RPC、RMI)中的服务地址列表,通过使用命名服务,客户端应用能够根据特定的名字来获取资源的实体、服务地址和提供者信息等。

  • 配置管理:

    实际项目开发中,我们经常使用.properties或者xml需要配置很多信息,如数据库连接信息、fps地址端口等等。因为你的程序一般是分布式部署在不同的机器上(如果你是单机应用当我没说),如果把程序的这些配置信息保存在zk的znode节点下,当你要修改配置,即znode会发生变化时,可以通过改变zk中某个目录节点的内容,利用watcher通知给各个客户端,从而更改配置。

  • 集群管理

    集群管理包括集群监控和集群控制,其实就是监控集群机器状态,剔除机器和加入机器。zookeeper可以方便集群机器的管理,它可以实时监控znode节点的变化,一旦发现有机器挂了,该机器就会与zk断开连接,对用的临时目录节点会被删除,其他所有机器都收到通知。新机器加入也是类似酱紫,所有机器收到通知:有新兄弟目录加入啦。

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

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

zookeeper的数据模型

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

znode的4种类型

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

  • 持久节点(PERSISTENT)

    这类节点被创建后,就会一直存在于Zk服务器上。直到手动删除。

  • 持久顺序节点(PERSISTENT_SEQUENTIAL)

    它的基本特性同持久节点,不同在于增加了顺序性。父节点会维护一个自增整性数字,用于子节点的创建的先后顺序。

  • 临时节点(EPHEMERAL)

    临时节点的生命周期与客户端的会话绑定,一旦客户端会话失效(非TCP连接断开),那么这个节点就会被自动清理掉。zk规定临时节点只能作为叶子节点。

  • 临时顺序节点(EPHEMERAL_SEQUENTIAL)

    基本特性同临时节点,添加了顺序的特性。

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

小菜鸡的我:

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

Znode数据节点的代码如下

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

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

  • data: znode存储的业务数据信息
  • ACL: 记录客户端对znode节点的访问权限,如IP等。
  • child: 当前节点的子节点引用
  • stat: 包含Znode节点的状态信息,比如事务id、版本号、时间戳等等。

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

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

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

小菜鸡的我:

  • Watcher机制
  • 监听机制的工作原理
  • Watcher特性总结

Watcher监听机制

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

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

Watcher监听机制的工作原理

  • ZooKeeper的Watcher机制主要包括客户端线程、客户端 WatcherManager、Zookeeper服务器三部分。
  • 客户端向ZooKeeper服务器注册Watcher的同时,会将Watcher对象存储在客户端的WatchManager中。
  • 当zookeeper服务器触发watcher事件后,会向客户端发送通知, 客户端线程从 WatcherManager 中取出对应的 Watcher 对象来执行回调逻辑。

Watcher特性总结

  • **一次性:**一个Watch事件是一个一次性的触发器。一次性触发,客户端只会收到一次这样的信息。
  • 异步的: Zookeeper服务器发送watcher的通知事件到客户端是异步的,不能期望能够监控到节点每次的变化,Zookeeper只能保证最终的一致性,而无法保证强一致性。
  • 轻量级: Watcher 通知非常简单,它只是通知发生了事件,而不会传递事件对象内容。
  • 客户端串行: 执行客户端 Watcher 回调的过程是一个串行同步的过程。
  • 注册 watcher用getData、exists、getChildren方法
  • 触发 watcher用create、delete、setData方法

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

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

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

  • 顺序一致性:从同一客户端发起的事务请求,最终将会严格地按照顺序被应用到 ZooKeeper 中去。
  • 原子性:所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群中所有的机器都成功应用了某一个事务,要么都没有应用。
  • 单一视图:无论客户端连到哪一个 ZooKeeper 服务器上,其看到的服务端数据模型都是一致的。
  • 可靠性: 一旦服务端成功地应用了一个事务,并完成对客户端的响应,那么该事务所引起的服务端状态变更将会被一直保留下来。
  • 实时性(最终一致性): Zookeeper 仅仅能保证在一定的时间段内,客户端最终一定能够从服务端上读取到最新的数据状态。

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

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

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

ZXID的生成规则如下:

ZXID有两部分组成:

  • 任期:完成本次选举后,直到下次选举前,由同一Leader负责协调写入;
  • 事务计数器:单调递增,每生效一次写入,计数器加一。

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挂了,进入该模式,选一个新的leader出来
  • 消息广播: 把更新的数据,从Leader同步到所有Follower

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

结语

小编也是很有感触,如果一直都是在中小公司,没有接触过大型的互联网架构设计的话,只靠自己看书去提升可能一辈子都很难达到高级架构师的技术和认知高度。向厉害的人去学习是最有效减少时间摸索、精力浪费的方式。

我们选择的这个行业就一直要持续的学习,又很吃青春饭。

虽然大家可能经常见到说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。

小编整理的学习资料分享一波!

送给每一位想学习Java小伙伴,用来提升自己。想要资料的可以点击这里免费获取
在这里插入图片描述

我们选择的这个行业就一直要持续的学习,又很吃青春饭。

虽然大家可能经常见到说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。

小编整理的学习资料分享一波!

送给每一位想学习Java小伙伴,用来提升自己。想要资料的可以点击这里免费获取
[外链图片转存中…(img-SiWUTOWB-1624600978842)]

本文到这里就结束了,喜欢的朋友可以帮忙点赞和评论一下,感谢支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ消息丢失场景及解决办法,已拿offer入职

前言 当前我们都会说SpringBoot是Spring框架对“约定优先于配置理念的最佳实践的产物&#xff0c;一个典型的SpringBoot应用本质上其实就是一个基于Spring框架的应用&#xff0c;而如果大家对Spring框架已经了如指掌&#xff0c;那么&#xff0c;在我们一步步揭开SpringBoot微…

java抓rtp包_Wireshark抓取RTP包,还原语音

最近在做基于SIP的VoIP通信研究&#xff0c;使用Wireshark软件可以对网络流量进行抓包。VoIP使用RTP协议对语音数据进行传输&#xff0c;语音载荷都封装在RTP包里面。要对传输中的语音进行截获和还原&#xff0c;需要通过Wireshark对RTP包进行分析和解码。该过程如下&#xff1…

RocketMQ消费者是如何获取消息的?转疯了!

前言 前两天&#xff0c;我收到了蚂蚁金服的offer&#xff0c;从朋友的内推开始面试到拿到最后offer经历了4面技术、一面交叉面和一面HR面。经过了漫长的等待和几次几乎折磨的面试之后&#xff0c;终于拿到了offer。 第1章&#xff1a;Dubbo的简史、后续的规划和整体架构大图 …

java if在内存中_java如何将对象暂存到内存中?

展开全部form表单提交文件&#xff0c;建议用62616964757a686964616fe59b9ee7ad9431333264623862smartupload上传&#xff0c;暂存在web服务器目录下&#xff0c;然后稍微一下下面的代码&#xff0c;ftp上传后&#xff0c;删除暂存文件&#xff0c;okimport java.io.File;impor…

K8S+Docker理论与实践深度集成

前言&#xff1a; 这篇文章主要介绍了26道Spring经典面试题总结(附带答案)的相关资料,小编在网上看到的觉得挺不错的&#xff0c;现在分享给大家&#xff0c;希望对你们有所帮助。 另外本人整理收藏了多家公司面试知识点整理 &#xff0c;以及各种Java核心知识点免费分享给大…

Kafka的精髓全写这本“限量笔记”里了

前言 大厂面试真题向来是求职者的最佳练兵场&#xff0c;华为在Java开发工程师招聘中有哪些技术性考察和倾向&#xff1f;那今天咱就给大家分享一下近期的华为5面面经&#xff01; 注&#xff1a;以下所分享的华为面试问题&#xff0c;相关的答案我也整理出来了&#xff0c;且…

MongoDB数据分布不均的解决方案

前言 算法血拼&#xff1a;Google百度Alibaba字节Tencent网易360拼夕夕美团 不知不觉双11就来了,轰轰烈烈的秋招也完美结束了,不知算法与数据结构成为了多少小伙伴进击大厂的绊脚石&#xff1f; 恰好&#xff0c;我这两天花了点时间&#xff0c;整理了些各大厂&#xff08;G…

Mybatis-plus常用API全套教程

前言 前两天&#xff0c;我收到了蚂蚁金服的offer&#xff0c;从朋友的内推开始面试到拿到最后offer经历了4面技术、一面交叉面和一面HR面。经过了漫长的等待和几次几乎折磨的面试之后&#xff0c;终于拿到了offer。 正文 下文中截图来源于朋友一个pdf版本的面经&#xff0c;…

我的世界手动选择java_如何选中路径-我的世界怎么选择java路?我的世界怎么选择java路径 爱问知识人...

2014-06-03 11:26:47首先确定你安装了Java&#xff0c;如没有自行去官网下载最近版本 如果已安装&#xff0c;打开启动器&#xff0c;一般的启动器都有设置选项&#xff0c;在设置里选择正确的Java路径或者让启动器自行搜索 设置完毕后启动游戏~全部2014-06-03 11:26:472014-06…

Mycat和Mysql搭建高可用企业数据库集群

个人背景 如标题所示&#xff0c;我的个人背景非常简单&#xff0c;Java开发经验1年半&#xff0c;学历普通&#xff0c;2本本科毕业&#xff0c;毕业后出来就一直在Crud&#xff0c;在公司每天重复的工作对我的技术提升并没有什么帮助&#xff0c;但小镇出来的我也深知自我努…

MySQL+Tomcat+JVM,看完还怕面试官

前言 我朋友也是个写了四年Java代码的程序员&#xff0c;跟女友已经恋爱多年&#xff0c;最近突然结婚了。 他结婚以前&#xff0c;换了一家公司&#xff0c;咱俩就好久没见过面了。刚好今天出门办事碰上了&#xff0c;找了一家店坐一起喝酒聊天。 我聊天时打趣他&#xff1…

java因子分析_因子分析(Factor Analysis)

1 问题之前我们考虑的训练数据中样例的个数m都远远大于其特征个数n&#xff0c;这样不管是进行回归、聚类等都没有太大的问题。然而当训练样例个数m太小&#xff0c;甚至m<多元高斯分布的参数估计公式如下&#xff1a;分别是求mean和协方差的公式&#xff0c;表示样例&#…

MySQL+多线程+Redis+算法+网络

开头 我们面试的时候 &#xff0c;经常会被问这种到问题:Spring中bean的循环依赖怎么解决&#xff1f; Spring中bean的加载过程&#xff1f; spring相关的问题一直是大厂面试常问到的一个问题,也是一直困扰这我们&#xff0c;不知道从哪里下手&#xff0c;今天举例分析大厂的一…

python 函数进度条怎么_python输出结果刷新及进度条的实现操作

print函数python输出主要使用print函数&#xff0c;print函数介绍&#xff1a;print(*objects, sep" ", end"", filesys.stdout, flushFalse)*objects表示要打印的值&#xff0c;表示多个无名参数或需要打印的值&#xff1b;sep" "&#xff0c;对…

MySQL优化原理分析及优化方案总结

前言 今天中午收到我司安全部发了一封邮件&#xff1a;Jackson存在安全漏洞。查了一下&#xff0c;这件事并不算很新鲜了&#xff08;已经过了5天的样子&#xff09;&#xff0c;本文来聊聊吧。 说起来还蛮戏剧化&#xff1a;阿里云向Jackson官方提交了一个Jackson序列化安全…

MySQL千万数据量深分页优化

前言 提到MySQL的事务&#xff0c;我相信对MySQL有了解的同学都能聊上几句&#xff0c;无论是面试求职&#xff0c;还是日常开发&#xff0c;MySQL的事务都跟我们息息相关。 而事务的ACID&#xff08;即原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durabili…

Mysql和Redis数据同步该怎么做

前言 算法血拼&#xff1a;Google百度Alibaba字节Tencent网易360拼夕夕美团 不知不觉双11就来了,轰轰烈烈的秋招也完美结束了,不知算法与数据结构成为了多少小伙伴进击大厂的绊脚石&#xff1f; 恰好&#xff0c;我这两天花了点时间&#xff0c;整理了些各大厂&#xff08;G…

java源代码保存在扩展名为,看完跪了

正文 在实际的工作项目中&#xff0c; 缓存成为高并发、高性能架构的关键组件 &#xff0c;那么Redis为什么可以作为缓存使用呢&#xff1f;首先可以作为缓存的两个主要特征&#xff1a; 在分层系统中处于内存/CPU具有访问性能良好&#xff0c;缓存数据饱和&#xff0c;有良好…

java源码文件丢恢复需要多少钱,上岸蚂蚁金服!

京东Java研发岗一面&#xff08;基础面&#xff0c;约1小时&#xff09; 自我介绍&#xff0c;主要讲讲做了什么和擅长什么 springmvc和spring-boot区别 Autowired的实现原理 Bean的默认作用范围是什么&#xff1f;其他的作用范围&#xff1f; 索引是什么概念有什么作用&am…

java特性多态,90%的人看完都说好

01.第一份资料是图解网络 根据读者阅读偏好不同&#xff0c;共出了两个版本风格的 PDF&#xff0c;分别是亮白版本和暗黑版本。 02.第二份资料是计算机的相关知识 看完能让你对计算机有一个基础的了解和入门&#xff0c;是培养你 内核 的基础&#xff0c;我们看下目录大纲 基…