本期推出 八股文骚套路之 Redis
,目前 Redis 也是后端技术栈中的一员大将,后端面试过程中对 Redis 的考察也越来越多。不过在后端面试过程中对 Redis 的要求没有像 MySQL 那么高(就是面试官问你 Redis,你直接否定三连,这是啥?没听说过!我不会!问题也不是太大)。不过还是我在之前面试八股文系列的文章中所提到的,大家在准备后端面试时,后端技术栈中除了 Java 基础外至少还要有两到三项做到熟悉,作为面试亮点,这样在面试大厂时才和面试官有的聊。我在准备秋招的过程中就把 Redis 部分详细准备,当作我面试的亮点了。
面试小技巧
又是面试小技巧分享时间。本期介绍的面试小技巧是要学会根据你自身的学习情况,给面试官一个对你各部分知识掌握情况的一个合理的心理预期。
其实在校招面试过程中,单论技术栈基础知识考察这方面,你会背负着两个期望值。
一个是大厂目前内卷行情对应届生的期望值,根据我的经验,目前对面试后端开发的应届生的期望就是 Java 基础做到熟悉、JVM 基本掌握,然后其它技术栈中有两到三项做到熟悉,比如我熟悉的是 MySQL、Redis、Spring 框架,其它的能做到了解就差不多了,其它部分我准备的时间就很少,Linux 部分我总共用了不到半天时间看了看常用命令,RabbitMQ 也就记熟了通信过程,Mybatis 就看了下最常问的几个问题,计算机基础知识也没花多长时间(不过计算机基础知识我平时学的还不错呀)。
另一个是面试官根据你的简历和你开始的自我介绍对你的期望值。写简历过程中大部分人都会适当包装自己,但是做到稍高于目前行情对应届生的期望以后就可以了,切忌让面试官在面试开始之前就给你一个很高的期望。在面试过程中如果你的表现和面试官心理预期相差比较大(俗称你拉了跨),即使你达到了面试官平时通过的水平,你也很可能被刷。另外面试过程中比如面试官准备问你 Redis,一般会先问你一句你 Redis 熟悉不,如果真熟悉你就说你这里学的还可以。如果不熟,你就说这里了解一些基本的概念和操作~ 这样一旦你觉得面试官的问题招架不住,你就说这最近接触的不多,记得不太清楚,这样面试官通常情况下也理解就会换一块内容问了。如果你在简历和自我介绍中就夸下海口,又是精通,又有调优经验的,面试过程中却只能答上几个最常问的八股文问题,那面试官肯定是不会满意的。
绝大多数面试官是根据你熟悉的东西展开问,把你会的尽可能挖出来,看你学到一个什么程度。少数面试官会揪着一些他在意但你不了解的东西硬问,这种情况说明你和他没什么缘分,不要在意。
可能有人看着这张图血压已经上来了~
没有太多时间准备 Redis 的朋友看这里
对于没有太多时间准备 Redis 的同学,我在这里给大家准备一些面试常问的八股问题。你在面试大厂时,只要别给面试官对你 Redis 部分太高的期望,你把下面这些问题能回答清楚就算过关了。
1.什么是 Redis?
2.Redis 有哪些数据类型?
3.Redis 是单线程还是多线程?
4.Redis 过期删除策略讲一下。
5.Redis 的持久化策略了解嘛?分别介绍下 RDB 和 AOF。
6.Redis 的缓存更新策略了解嘛?
7.什么是缓存穿透?什么是缓存击穿?什么是缓存雪崩?怎么解决(最高频问题)
8.设计一个分布式锁?
9.Redis 缓存失效策略?
10.Redis 事务你了解嘛?
11.如何保证 Redis 和 MySQL 的数据一致性?(如果项目同时用到 Redis 和 MySQL,这个问题特别容易被问)
答案的话,大家看一下 Redis 常见问题总结这篇文章就可以了,文章地址:https://snailclimb.gitee.io/javaguide/#/docs/database/Redis/redis-all 。
当然了,你也可以直接百度/Google 搜索,篇幅有限,我就不贴答案了。
想要详细准备 Redis 的同学看这里
我在准备 Redis 前没任何 Redis 经验,我集中准备 Redis 用了差不多三周的时间,每天看四个小时左右。后期每次在重要面试前也会花一两个小时进行复习。这是我在 Redis 上花的时间,供大家参考。
学 Redis 我推荐这本书《Redis 的设计与实现》,我先声明,我可不是卖书的哈。我推荐的是我实际看过的书,没书的大家自己想办法呀~不过还是尽可能支持一下作者噢。
推荐理由:这本书讲的特别特别详细,又有概念讲解,又有实际例子。十分通俗易懂。
学习内容
第一部分 数据结构与对象
Redis 的数据结构设计十分巧妙,我也是在看这部分时决定详细学习 Redis 的。大家千万不要去背这些数据结构的代码是怎么写的,这么多你肯定记不住。大家主要体会一下 Redis 的这些 数据结构设计好在哪
,面试的时候如果面试官问到这些数据结构,可以相应的抛出一些我觉得 xxx 这样设计的很不错,他用 xxx 优化了什么问题的观点,也是不错的。另外在这本书上没有,但是一个挺重要的数据结构叫 布隆过滤器
强烈建议大家看一下,这个数据结构在解决许多面试官提出的场景题时都是很管用的。
第二部分 单机数据库的实现
面试官特别喜欢从这一部分出问题,所以是需要花点功夫把这些八股文背熟的。
第 9 章 数据库
这一章要记牢 Redis 的过期删除策略
、以及 AOF、RDB 和复制功能对过期键的处理
。其它的内容做到理解就好。
第 10 章 RDB 持久化
记熟Redis 服务器保存和载入 RDB 文件的方法
,要辨别出SAVE 命令
和 BGSAVE
的区别。把自动保存功能
的实现原理也尽可能记熟。RDB 的文件结构了解就好。
第 11 章 AOF 持久化
记熟 AOF 持久化
的实现方式,记熟 AOF 文件载入与数据还原
的流程,记熟 AOF 重写方式
。这一章学习过程中要与 RDB 去做对比。
第 12 章 事件
Redis 文件事件处理器
的组成部分要记熟,特别是 I/O 多路复用
要充分理解,这里在面试官问 I/O 相关的时候可以给面试官讲,并且可以很自然的把话题扯到 Redis~
时间事件理解就好了。
第 13 章 客户端
这一章理解就好
第 14 章 服务器
把一个命令请求从发送到获得回复的过程理解,不用硬背,不过要大概能复述出来。serverCron 函数
负责管理服务器的资源,把这个函数理解了给面试官讲也是不错的。
第三部分 多机数据库的实现
这一部分如果你不主动提,面试官一搬不会主动问。不过把这里理解清楚以后融合到项目中主动给面试官讲还是挺不错的。我就把这部分融合到我的秒杀系统中了,给面试官讲完以后感觉效果还不错。
第 15 章 复制
主从复制的流程
要尽可能记熟呀,把这里记熟给面试官讲还是挺不错的。注意区分新旧版本的 Redis 在主从复制上的差异。
第 16 章 哨兵
记牢 Sentinel
的初始化过程,记牢 Sentinel 监视服务器的方法和原理,记牢 Sentinel 系统对主服务器执行故障转移的过程。
第 17 章 集群
我把 Redis 集群用在我的秒杀系统上了,所以集群的节点
、槽指派
、命令执行
、重新分片
、转向
、故障转移
、消息
都背的很熟了。讲项目的时候也能用上这些。
第四部分 独立功能的实现
这一部分,我就重点看了发布与订阅
、看了 Lua 脚本
,其它的就没怎么看了。大家感兴趣可以多看一下。
好了,经过上面的学习,Redis 的基础就打的很牢了。不过我在这里还要给大家多推荐一本书,它就是《Redis 深度历险》。《Redis 设计与实现》偏向与 Redis 的原理,而《Redis 深度历险》偏向于实际场景的应用。大家在学完我上述讲的知识点以后,再选择性的学习两三个《Redis 深度历险》中的实例。在校招面试中就不用担心面试官的发难了。
好了,这就是 Redis 部分的全部内容了,这份讲解可真的是保姆级的面试指导了,希望大家能一键三连呀~ 下期我们来看 JVM。