来了来了他来了!六十题初级开发刷真题答案(1-6)
Posted XiaoLin__Java
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了来了来了他来了!六十题初级开发刷真题答案(1-6)相关的知识,希望对你有一定的参考价值。
序言
真没想到,我那一次应粉丝请假刷真题的文章大获好评:应粉丝要求,请假一周,面了9家深圳非外包初级开发,只为刷一刷真题(文末有福利),直接给我干到了有史以来最好的数据,也是感谢粉丝的一键三连。
本来是早就想出答案的了,但是一直在接私活(开发一个简历系统,等结账后会开源甚至是带着粉丝们从0开始手敲,使用的技术是SpringBoot+Freemarker)。
很多的评论和私信说让我赶紧出一期答案,我决定以连载的形式进行出答案,一来方便查阅,二来可以保证质量,话不多说,我们开始!有问题可以在私信里面喷我,别来评论区(卑微)
一、 redis的持久化机制
思路
这道题其实不难,思路是我们首先要先说出Redis的持久化机制有哪几种,最后给个结论,什么时候用哪一种,我们公司使用的是哪一种。
回答
Redis提供了RDB持久化和AOF持久化。
RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,也是默认的持久化方式,这种方式是就是将内存中数据以快照的方式写入到二进制文件中。他的好处是一旦采用该方式,那么你的整个Redis数据库将只包含一个文件,这样非常方便进行备份,他在恢复数据的时候速度比AOF快。他的坏处是会丢失很多的数据。
AOF持久化是Redis会将每一个收到的写命令都通过write函数追加到文件中(默认是 appendonly.aof)。他的优势是丢失的数据尽可能少,但是他恢复数据的速度比RDB慢。
目前在企业中,我是两者都用,扬长避短。
二、redis都配置过吧,配置步骤
思路
这道题其实面试官是想考察一下你是否真正使用过Redis,而不是背八股文的。如果对Redis不熟的可以看我的这篇文章:我用一天时间爆肝出了这份Redis详细笔记
回答
下面我就说一下最主流的配置:SpringBoot整合Redis
总共就三步走:
- 引入依赖
- 书写配置
- 使用StringRedisTemplate或者RedisTemplate
三、redis缓存击穿和缓存穿透
思路
这道题其实有一点背八股文内味了,但是需要用自己的语言概述出来是最好的,给面试官一种你理解了的感觉。我们要用大白话解释什么是缓存击穿和缓存穿透,然后再说一下如何避免这个问题。
回答
- 缓存击穿:key对应的数据存在,但在redis中过期,此时若有大量并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。
- 缓存击穿的解决方案:
- 设置热点数据永远不过期。
- 接口限流与熔断,降级。
- 使用互斥锁(mutex key)
- 缓存穿透:缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻击可能压垮数据库。
- 缓存穿透的解决方案:
- 接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截。
- 使用布隆过滤器。
四、mysql索引用过吗,他有几种数据结构类型
思路
这道题纯粹送分,如果自己不是很懂,千万不要说太多。
回答
B树、B+树、哈希
五、每种索引数据结构类型有什么区别?
B树
MySQL 使用的是 Btree 索引。一颗B树,浅蓝色的块我们称之为一个磁盘块,可以看到每个磁盘块包含几个数据项(深蓝色所示)和指针(黄色所示)。
B+tree
B+Tree中,所有数据记录节点都是按照键值大小顺序放在同一层的叶子节点上,而非叶子节点只存储key信息,这样可以大大增加每个节点存储的key值的数量,降低B+Tree的高度。
六、B树或者B+树的工作原理
和上题类似,可以看我的上一篇博客中的第三部分:你真的了解MySQL了吗,那你给我说一下锁机制!
以上是关于来了来了他来了!六十题初级开发刷真题答案(1-6)的主要内容,如果未能解决你的问题,请参考以下文章
合宙Luat | 来了来了,Luat训练营第一期01月18日正式开营