Java面试

2023-09-21 00:31:23

一、redis

1、缓存-缓存穿透

缓存穿透就是查询一个数据库不存在的数据,这样就会缓存不命中导致一直查询数据库

解决方案:
1、设置空值
2、布隆过滤器

布隆过滤器误判解决:
1、redis分布式锁
2、给布隆过滤器设置误判率

在这里插入图片描述

2、缓存击穿

缓存击穿的意思是对于设置了过期时间的key,缓存在某个时间点过期的时
候,恰好这时间点对这个Key有大量的并发请求过来,这些请求发现缓存过
期一般都会从后端 DB 加载数据并回设到缓存,这个时候大并发的请求可能
会瞬间把 DB 压垮。

解决方案有两种方式:

第一可以使用互斥锁:当缓存失效时,不立即去load db,先使用如 Redis 的
setnx 去设置一个互斥锁,当操作成功返回时再进行 load db的操作并回设缓
存,否则重试get缓存的方法
第二种方案可以设置当前key逻辑过期,大概是思路如下:
①:在设置key的时候,设置一个过期时间字段一块存入缓存中,不给当前
key设置过期时间
②:当查询的时候,从redis取出数据后判断时间是否过期
③:如果过期则开通另外一个线程进行数据同步,当前线程正常返回数据,
这个数据不是最新
当然两种方案各有利弊:
如果选择数据的强一致性,建议使用分布式锁的方案,性能上可能没那么
高,锁需要等,也有可能产生死锁的问题
如果选择key的逻辑删除,则优先考虑的高可用性,性能比较高,但是数据
同步这块做不到强一致

在这里插入图片描述

3、缓存雪崩

在这里插入图片描述

解决方案:
1、给不同的key设置随机过期时间
2、加互斥锁
3、redis集群
4、缓存预热

4、双写一致性

在这里插入图片描述
解决方案:
1、分布式锁
在这里插入图片描述
2、rabbitmq
在这里插入图片描述
先更新数据库,成功后往消息队列发消息,消费到消息后再删除缓存,借助消息队列的重试机制来实现,达到最终一致性的效果。
在这里插入图片描述
3、延迟双删
延时双删的方案的思路是,为了避免更新数据库的时候,其他线程从缓存中读取不到数据,就在更新完数据库之后,再sleep一段时间,然后再次删除缓存。

sleep的时间要对业务读写缓存的时间做出评估,sleep时间大于读写缓存的时间即可。

流程如下:

1、线程1删除缓存,然后去更新数据库
2、线程2来读缓存,发现缓存已经被删除,所以直接从数据库中读取,这时候由于线程1还没有更新完成,所以读到的是旧值,然后把旧值写入缓存
3、线程1,根据估算的时间,sleep,由于sleep的时间大于线程2读数据+写缓存的时间,所以缓存被再次删除
4、如果还有其他线程来读取缓存的话,就会再次从数据库中读取到最新值
在这里插入图片描述

5、持久化存储

RDB

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

AOF

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
原理:
在这里插入图片描述

6、过期删除策略

惰性删除

在这里插入图片描述

定期删除

在这里插入图片描述

7、数据淘汰策略

在这里插入图片描述
在这里插入图片描述

8、主从复制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

9、哨兵

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10、分片集群

分片集群

11、redis是单线程的为什么还这么快

在这里插入图片描述

二、Mysql

1、主从复制

在这里插入图片描述

2、分库分表

在这里插入图片描述

垂直分库

在这里插入图片描述

垂直分表

在这里插入图片描述

水平分库

在这里插入图片描述

水平分表

在这里插入图片描述
在这里插入图片描述

三、spring

更多推荐

【RocketMQ】路由中心NameServer

【RocketMQ】路由中心NameServer参考资料:RocketMQNameserver背后的设计理念RocketMQ之NameServer详解深入剖析RocketMQ源码-NameServer——vivo互联网技术《RocketMQ技术内幕》文章目录【RocketMQ】路由中心NameServerNameSer

java接入烽火科技拾音器详细步骤

1背景项目中需要拾音器去采集音频数据并保存成mp3这种音频文件,以便以后如果有纠纷后可以作为证据去减少纠纷,于是采购了一台烽火科技的拾音器设备,包括一个采音器及一个处理终端。2接线设备拿过来第一件事是接线,通电,让设备运行起来。采音器一共有三根线,红、黑、白,白线接音频输入端R、黑线接音频输入端的G、红色接音频输入端的

GaussDB技术解读系列:运维自动驾驶探索

近日,在第14届中国数据库技术大会(DTCC2023)的GaussDB“五高两易”核心技术,给世界一个更优选择专场,华为云数据库运维研发总监李东详细解读了GaussDB运维系统自动驾驶探索和实践。随着企业数字化转型进入深水区,数据库系统越来越复杂,运维团队维护的数据库规模越来越大,传统工具化的运维已无法满足当前运维的要

PHP初中高级1000道面试题大全(持续更新中50/1000)

目录1、echo(),print(),print_r(),var_dump()的区别?2、表单中get与post提交方法的区别?3、session与cookie的区别?4、请说明PHP中传值与传引用的区别。什么时候传值什么时候传引用?5、请解释PHP中的PDO是什么?6、请解释PHP中的抽象类和接口的区别是什么?7、请

一、Java面试题基础第十天

一、Java面试题基础第十天1.什么是反射?Java是一门静态语言,它通过编译以后才能执行的编程语言,但是可以通过反射使Java成为一个准动态语言,Java在运行过程中动态获取获取对象的属性,调用它的方法,就叫做反射2.反射有哪些应用场景呢?1.jdbc连接数据库的时候加载驱动时Class.forName()2.Jav

Webpack 热更新原理

什么是热更新模块热替换(hotmodulereplacement或HMR)是webpack提供的最有用的功能之一。它允许在运行时更新所有类型的模块,而无需完全刷新一般的刷新我们分两种:一种是页面刷新,不保留页面状态,就是简单粗暴,直接window.location.reload()。另一种是基于WDS(Webpack-

【C++从0到王者】第三十三站:AVL树

文章目录前言一、AVL树的概念二、AVL树的实现1.AVL树的结点定义2.AVL树的插入之插入部分3.AVL树的插入之平衡因子的改变4.AVL树的插入之左旋5.AVL树的左旋抽象图6.AVL树的右旋抽象图7.AVL树的双旋8.AVL树的右左双旋9.AVL树的右左双旋的本质10.AVL树的左右双旋11.AVL树的验证12

opencv 图像的缩放(放大,缩小),翻转,旋转

文章目录opencv图像的缩放(放大,缩小),翻转,旋转1、图像的缩放,旋转过程中为什么需要插值:2、常见的插值算法包括:3、图像的缩放,翻转,旋转:(1)图像的缩放cv2::resize(),用于改变图像大小的函数,它可以用于图像的放大、缩小操作:函数原型:示例:将一个图像缩小为原来的一半(2)图像的翻转cv2::f

javaee之黑马乐优商城5

分析一下spu与sku的数据结构再来说一下什么是spustandardproductunit标准产品单元:SPU级别的规格参数通常是与整个产品类型或产品系列相关的通用参数。比如华为手机下面的p系列、荣耀系列,都可以标识为spu级别规格参数skustockkeepingunit库存保管单位:SKU级别的规格参数是具体到每

Git基础操作

前言本文会向您介绍如何安装git,以及快速地上手add,commit,push,版本回退操作基础配置关于windous上的安装git官网已经介绍的很清楚了,您可以直接点入链接windows安装如果你的平台是centos,以centos7.6为例:⾸先,你可以试着输⼊git,看看系统有没有安装Git:-bash:git:

java面向对象(七)

文章目录一、单例设计模式是什么?1.概念2.如何实现1.饿汉式2.懒汉式3.区分饿汉式和懒汉式二、main()方法的使用1.使用说明三、类的成员之四:代码块(或初始化块)1.概念2.静态代码块3.非静态代码块四、final关键字五、多态性的补充六、类变量和实例变量的内存解析七、static声明的属性被所有对象所共享提示

热文推荐