4.3面试

发布时间 2023-04-03 20:52:03作者: 小王应该在学习!
# 脏读,不可重复读,幻读 ,mysql5.7以后默认隔离级别是什么?
# 什么是qps,tps,并发量,pv,uv
# 什么是接口幂等性问题,如何解决?
脏读,不可重复读,幻读 ,mysql5.7以后默认隔离级别是什么?
脏读:事物A读取事物B 更新的数据,然后B进行了回滚,A读取到的数据是脏数据
不可重复读:事物A多次读取同一数据时,事物B在事物A在读取过程中对数据进行了更新并提交,导致了A多次读取同一数据时,结果不一致
幻读:指一个事物在前后两次查询同一个范围的时候,后一个查询看到了前一次没有看到的行
(系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。)
mysql5.7以后默认隔离级别是什么?
可重复读,也是最常用的隔离级别。
当启用可重复读隔离级别时,使用select语句获取到的数据是事物开始执行时的状态。即使其他事物修改了同样的数据,当前事物查询到的数据也会受影响
# 什么是qps,tps,并发量,pv,uv
qps:即Queries Per Second的缩写,每秒能处理的查询数目(发出请求到服务器处理完成功返回结果),是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准
    
tps:即Transactions Per Second的缩写,每秒处理的事物数目。
一个事物是指一个客户机向服务器发送请求然后服务器做出反应的过程,客户机在发送请求时开始计时,收到服务器做出反应后结束计时,以此来计算使用的时间和完成的事物个数

并发量:系统能同时处理的请求数

PV:即 page view,页面的浏览量,用户每对网站中的每个页面访问均被记录一次,用户对同一页面的多次刷新,访问量累计

UV:即 Unique visitor,独立访客,通过客户端的cookies实现,即同一页面,客户端点击只计算一次,访问量不累计
# 什么是接口幂等性问题,如何解决?
接口幂等性:就是指用户对于同一操作发起的一次或者多次请求,其操作的结果都是一致的,不会因为多次请求而改变。

不做接口幂等性有什么影响:用户购买商品,发起支付操作,支付系统显示已经支付成功后,由于网络原因没有及时返回成功的信息给用户,其实这个时候订单已经扣过款,相应的支付流水也都已经生成。这个时候,用户又点击支付操作,此时会进行第二次扣款,扣款成功后吧操作成功的信息返回给了用户。用户去查看支付订单和流水时 会发现自己支付了两次,完蛋了,该系统要被用户投诉了。这就是没有保证接口的幂等性而造成的不良后果。
什么 情况下需要保证接口幂等性:
在增删改查四个操作中,尤为需要注意的是增加和修改操作
select是天然的幂等操作,update对数据不会产生副作用
使用幂等性的业务场景:
1.前端重复提交
2.接口超时重试
3.MQ消息重复消费
幂等性的解决方案:
1.唯一索引:
	使用唯一索引可以避免脏数据的insert,当插入重复数据时数据库会抛出异常,确保了数据的唯一性
     
2.乐观锁:
	为表增加一个version字段,当数据需要更新时,先去获取version版本号。和最新版本号进行对比,如果不相等,说明已经有其他的请求去更新数据了,则会提示更新失败,让用户重试
    
3.悲观锁:
    在获取数据的时候加锁,当同时有多个重复请求过来时,其他的请求都会因为无法获得被操作数据的锁而阻塞住,因此,其他请求都无法对被操作的数据进行操作
    
4.CAS思想保证接口幂等性:
    状态机制来实现接口幂等性
    
5.分布式锁:
    分布式锁可以通过redis或zookeeper来实现
    在分布环境下,锁定全局唯一资源,使多个请求串行化,实际表现为互斥锁,可以防止重复,以此来解决幂等性问题。
    
6.基于token+redis机制实现(通用性强):
    每次操作都生成一个唯一性的凭证,也就是token,一个token在操作的每个阶段只有一次执行权
    
7.基于redis命令setnx实现

8.通过业务代码逻辑判断实现

img