动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

总结10道Java缓存面试题(附答案)

08-24 17:47 365浏览
举报 T字号
  • 大字
  • 中字
  • 小字

Java面试考察到的知识范围很广,不仅要求应聘者有基本的计算机素养,java语言的方方面面都有涉及到,但是好在java面试主要是对基础知识进行考察,内容虽然涉猎的广,但还是比较简单的。今天为大家带来了java缓存面试题的内容,里面基本包括了java缓存的基础知识,都是在面试中常出现的知识点。

1、什么是缓存?

答:(1)缓存就是数据交换的缓冲区(称作:Cache),当某一硬件要读取数据时,会首先从缓存汇总查询数据,有则直接执行,不存在时从内存中获取。由于缓存的数据比内存快的多,所以缓存的作用就是帮助硬件更快的运行;(2)缓存往往使用的是RAM(断电既掉的非永久存储),所以在用完后还是会把文件送到硬盘等存储器中永久存储。电脑中最大缓存就是内存条,硬盘上也有16M或者32M的缓存。

2、高速缓存是什么?

答:高速缓存是用来协调CPU与主存之间存取速度的差异而设置的。一般CPU工作速度高,但内存的工作速度相对较低,为了解决这个问题,通常使用高速缓存,高速缓存的存取速度介于CPU与主存之间。系统将一些CPU在最近几个时间段经常访问的内容存在高速缓存,这样就在一定程度上缓解了由于主存速度低造成的CPU“停工待料”的情况。

3、在不同的场景下,缓存的作用是怎样的?

答:(1)操作系统磁盘缓存:减少磁盘机械操作;(2)数据库缓存:减少文件系统IO;(3)应用程序缓存:减少对数据库的查询;(4)Web服务器缓存:减少应用服务器请求;(5)客户端浏览器缓存:减少对网站的访问。

4、产生数据不一致性情况的原因是什么?

答:先操作缓存,再写数据库成功之前,如果有读请求发生,可能导致旧数据入缓存,引发数据不一致。在分布式环境下,数据的读写都是并发的,一个服务多机器部署,对同一个数据进行读写,在数据库层面并不能保证完成顺序,就有可能后读的操作先完成(读取到的是脏数据),如果不采用给缓存设置过期时间策略,该数据永远都是脏数据。

先操作数据库,再清除缓存。如果删缓存失败了,就会出现数据不一致问题。

5、如何防止缓存穿透?

答:缓存穿透是说收到一个请求,但是该请求缓存中不存在,只能去数据库中查询,然后放进缓存。但当有好多请求同时访问同一个数据时,业务系统把这些请求全发到了数据库;或者恶意构造一个逻辑上不存在的数据,然后大量发送这个请求,这样每次都会被发送到数据库,最总导致数据库挂掉。

解决缓存穿透的办法:对于恶意访问,一种思路是先做校验,对恶意数据直接过滤掉,不要发送至数据库层;第二种思路是缓存空结果,就是对查询不存在的数据也记录在缓存中,这样就可以有效的减少查询数据库的次数。非恶意访问,结合缓存击穿说明。

6、Redis主从复制、哨兵和集群这三个的区别是什么?

答:主从模式:读写分离,备份,一个Master可以有多个Slaves。

哨兵sentinel:监控,自动转移,哨兵发现主服务器挂了后,就会从slave中重新选举一个主服务器。

集群:为了解决单机Redis容量有限的问题,将数据按一定的规则分配到多台机器,内存/QPS不受限于单机,可受益于分布式集群高扩展性。

7、缓存雪崩是什么以及该如何解决?

答:数据大批量到过期时间,而查询数据量巨大,在缓存失效的一瞬间,有多高并发请求直接透过缓存请求数据库,使得数据库挂掉。例如淘宝网首页商品缓存突然全部失效,那么所有的刷新请求都会直接怼到数据库,会造成数据库挂掉,重启数据库还是会继续挂掉。

解决办法:(1)给缓存失效时间加“盐”,不让所有的缓存的失效时间一样。甚至某些更新少的页面可以设置永久缓存;(2)分布式部署,使用分布式锁;(3)保险一些,可以加一些服务熔断降级的逻辑,以及本地缓存。

8、Redis的同步机制?

答:第一次同步的时候,主节点做一次bgsave,并将后续的操作记录到内存buffer,待完成后将RDB文件全量同步到复制节点,复制节点接受完成后将RDB镜像加载到内存。加载完成后,再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程。后续的增量数据通过AOF日志同步即可。

9、Redis的数据结构都有哪些?

答:(1)String:可以是字符串,整数或者浮点数,对整个字符串或者字符串中的一部分执行操作,对整个整数或者浮点执行自增(increment)或者自减(decrement)操作。

2)List:一个链表,链表上的每个节点都包含了一个字符串,链表的两端推入或者弹出元素,根据偏移量对链表进行修剪(trim),读取单个或者多个元素,根据值查找或者移除元素。

3)Set:包含字符串的无序收集器(unordered collection)、并且被包含的每个字符串都是独一无二的。添加,获取,移除单个元素,检查一个元素是否存在于集合中,计算交集(sinter),并集(suion),差集(sdiff),从集合里面随机获取元素。

4)SortSet:是一个排好序的Set,它在Set的基础上增加了一个顺序属性score,这个属性在添加修改元素时可以指定,每次指定后,SortSet会自动重新按新的值排序。

10、缓存是如何实现高并发的?

答:

以上就是今天整理的java缓存面试题内容,共有10道题目,在上面都相应的附上了答案,各位面试java程序员岗位的朋友可以做一个参考,另外这些题目也是比较基础的,正在学习java和缓存方面知识的朋友们也可以从这10道题目中学习到java缓存的核心知识点,希望大家可以在空余时间里多多学习java培训课程,以全方面的提高自己的java编程水平

0人推荐
共同学习,写下你的评论
0条评论
噜啦噜啦咧
程序员噜啦噜啦咧

5篇文章贡献18112字

作者相关文章更多>

推荐相关文章更多>

Java数据结构

HelloWorld10-31 08:24

浅谈MySQL中SQL优化的常用方法

军哥08-12 23:29

五分钟读懂UML类图

江湖人称小李白12-10 10:41

MyBatis开发框架的四大核心

IT逐梦者08-17 21:43

一次搞定continue,break和return

HelloWorld11-06 11:19

发评论

举报

0/150

取消