Redis考什么+高频题汇总

由于内容较多,我分类出来汇总了,全部面试题汇总的看这里:八股文题库(必看)

关于 Redis 我先说下面试考察形式:一般来说,如果你项目没有用到 redis,即使不学也没事,不过项目基本是需要用到 redis 的了,不然项目是真的空,如果项目有了 redis,那么面试官基本会问 redis。

不过面试官问 redis,基础的问的多,像集群,主从这种,会问,但是问的少,一般是先问你简单,看你觉得还行,才会一直问,有些是直到问到你不会。

关于学习资料:看书的话,可以看《redis设计与实现》,当然,即使你直接看我总结的面试题也是可以的,不过有时间的,就顺带看一下书,零基础入门的可以看咱们课程的视频:Redis入门

不过无论你看了哪些,我都希望你可以来看下我总结的这些面试题,并且每道题我都会说下大致怎么回答这些,当然,我不可能面面俱到哈,只能说给你们总结高频的题。

当然,如果你觉得懂,可以不看,但是没有把握的,都得看哈,面试题训练,这是训练营最重点的一个环节,大家认真看下,这块我花了很多时间弄的,每个视频和文章,都自己看过很多之后,筛选出来,无论你看不看,都要重视下我说的那些知识点。

另外,大家可以做一下笔记,帅地个人是推荐自己做笔记哈,不是直接 copy 别人的笔记。

redis

1. Redis单线程为啥还能这么快?:看完需要掌握如下

(1)、能够回答 memcached 与 redis 区别

(2)、redis 单线程为何还这么快,回答这个问题的时候,如果熟悉,就先扯下 redis 的线程模型,这样不会干巴巴如同死记硬背那样讲基于内存操作啊,线程切换开销啊,核心还是IO多路复用 + 基于内存,而这些都是基于 redis 的线程模型来发挥作用的

2. redis都有哪些数据类型?分别在哪些场景下使用比较合适呢?:回答的时候,记得不要只说五种数据类型,还要说一说他们各自的应用场景,我给你们的项目中,也用到了 list 之类的,所以被问到的概率非常大。
另外,关于有序集合底层是基于跳跃表的,如果不懂跳跃表麻烦看这篇文章:别再问我什么是跳跃表了

其实很多东西都是互相关联的,如果你都能回答,那么就是大大加分,这也是我为何推荐大家多接触。

3、Redis持久化机制:这个视频几个图片有点模糊,适合快速复习,学完目标如下:
1、明白持久化的意义:主要用于故障恢复

2、自己可以跟着视频操作下 AOF/RDB 的配置以及执行下对应命令之类的,这样实操过,也比较有印象

3、掌握他们两个的区别和优缺点,本质就是一个保存命令,一个是保存所有数据,和 mysql 的日记系统有点像。

4、知道 RDB 的 bgsave 大致流程,了解 copy-on-write,知道什么时候出发 RDB 的 save

补充:这里有一篇快问快答 https://www.iamshuaidi.com/1515.html

另外,如果要看具体的,可以看书的,《redis开发与运维》关于持久化那块,很短,但是讲的挺清楚,这个视频你们当作复习吧,记得 4.0 支持混合模式。

4、redis实现分布式锁:自己可以简单实现下,还是有不少人被面试官问到,让他写个简单的分布式锁,一般大型的分布式锁用其他实现,redis的分布式锁适合小型/简单的,这里有一篇文章版,可以用来加深理解 :Redis实现分布式锁

5、redis实现消息队列:这个了解下,知道 List 还能实现一个消息队列的功能,以及异步消息队列,咱们那个牛客网项目,以前有个类似的版本,就是用 redis 实现消息队列。

6、redis的过期策略能介绍一下?要不你再手写一个LRU?
1、了解定期删除和惰性删除的一些优缺点,并且记住系统是采用这两种方法结合。另外注意,过期不代表就会被删除。
2、掌握几种删除策略,特别是 LRU。另外,要会写 LRU 算法,这个我当时被被阿里问过,身边读者也有好几个被问过,所以面大厂的必须要掌握,可以看我写的这篇:记一次阿里面试:面试挂在了 LRU 缓存算法设计上

7、你能说说redis的并发竞争问题该如何解决吗?:分布式锁的一个补充,这个还挺重要,被问过两次,就是对于缓存的更新,不是说加锁就行,核心还得加上时间戳,看这个视频希望大家能够明白这个时间戳的事情,其实我实习的时候,也用到了这个,不过我只是写个脚本,用 redis 当作分布式锁,并且加上时间戳。

8、缓存雪崩+穿透+数据库缓存一致性问题:看完掌握如下:
1、缓存雪崩和缓存穿透,这个问的实在太多了,不过不难,说一说啥是雪崩和穿透 + 如何解决就行。
2、缓存与数据库双写一致,这个有点 难,比较烧脑,常见策略就两种,先删缓存再更新数据库和先更新在删除,每一种都有优缺点,我之前在腾讯实习,业务用的是先更新数据库再删除缓存,如果缓存删除失败,也没理了,一是业务允许存在一些延迟,不用卡的那么死,二是 30 分钟会刷新所有缓存。

9、哈希扩容:rehash上(简单原理)

哈希扩容:rehash下(源码剖析),这个我给大家准备了两篇文章,你先看下基本原理,之后看下源码实现,源码不难,注释也写的很清楚。

因为 Java 中 HashMap 也有扩容,而 redis 的扩容是和它完全不一样的,所以有可能会被问到,目标:

1、掌握 redis 和 Java 中扩容的区别,redis 有两个数组,主要用于渐进式扩容

2、掌握渐进式扩容原理,之所以需要渐进,主要是为了分摊扩容的压力,不然数据太多,太消耗时间,那么 redis 「快」的性质收到影响,所谓渐进式,就是把扩容分担到多次操作中。

3、大家掌握了原理,最好可以看下源码,看源码是个不错的加分,到时候你在回答面试官的时候,也可以暗示面试官自己研究过源码,比如回答的时候说:这个我之前有简单看过源码实现,我给您大致讲 一下过程 吧。

这些都是回答的技巧,反正面试的时候 ,最好是把自己会的表达出来,不然就白研究了是吧,还是那句话,面试官更多是想挖掘你会什么

10、分布式一致性算法:leader选举,这里划分为哨兵的知识了,也就是 redis 主从复制的知识,这个我京东面试也被问过,建议大家了解下,一方面是可以拓展思维,一方面以防被问到。

主从复制的问题很多,这是其中一块被问到最多的问题了,就是选举一个主节点的策略,这里我只介绍了Leader的选举,和日志复制的概要流程,面试官问起,你这样简单介绍就可以了,如果想深入了解,可以看这里:哈希一致性算法

发表评论

后才能评论