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缓存的核心知识点。我希望你能在业余时间学到更多