面试问题二
-
数据库中的锁有哪些?
1.按照锁的种类划分,分为行锁和表锁,无锁。 -
锁算法有哪些?
1.行锁算法,分为普通行锁,gap-lock间隙锁,和next-key锁 -
表锁算法,
1.意向锁,
当一个事务,已经有表锁了,去访问加行锁的资源,行锁就会升级为意向锁。
2.自增锁
就是插入一个自增数据时候,其他事务不能访问。 -
如何设计一个秒杀系统?
1.拆分服务,把订单服务,支付服务,库存服务分别拆分出来,单独设立服务。
2.使用redis缓存订单信息,提前生成orderid并且把相关订单信息存入redis,用户,支付服务获取直接从redis获取订单信息即可。
3.同时订单服务需要用redis做计数器,超过订单容量直接返回秒杀完毕。
4.同时使用队列,kafka或者rabbitmq写入队列处理支付请求。防止数据库压力过大,库存服务监听订单服务的消息,处理数据库减库存。 -
微服务之间调用失败如何处理?
springcloud中使用Hystrix做服务降级处理,方法内加上Hystrixcommand做异常处理即可。 -
redis缓存雪崩怎么处理?
1.设计redis缓存的过期时间尽量均匀,不要同一时间都过期
2.增加redis集群,防止redis机器挂机导致不可用。 -
redis缓存击穿怎么处理?
1.热点数据永不过期,或者做一个监控把快过期的使用锁更新过期时间,延迟返回。 -
redis缓存穿透怎么处理?
1.使用布隆过滤,把一些不存在的值做缓存直接返回。
2.设置token校验,防止恶意攻击。