Java面试题 -系统解决方案

1. 利⽤消息中间件和缓存实现简单的秒杀系统

a. Redis是⼀个分布式缓存系统,⽀持多种数据结构,我们可以利⽤Redis轻松实现⼀个强⼤的秒杀系统。

b. 我们可以采⽤Redis 最简单的key-value数据结构,⽤⼀个原⼦类型的变量值(AtomicInteger)作为key,把⽤户id作 为value,库存数量便是原⼦变量的最⼤值。对于每个⽤户的秒杀,我们使⽤ RPUSH key value插⼊秒杀请求, 当插⼊的秒杀请求数达到上限时,停⽌所有后续插⼊。

c. 然后我们可以在台启动多个⼯作线程,使⽤ LPOP key 读取秒杀成功者的⽤户id,然后再操作数据库做最终的下订单减库存操作。

d. 当然,上⾯Redis也可以替换成消息中间件如ActiveMQ、RabbitMQ等,也可以将缓存和消息中间件 组合起来,缓存系统负责接收记录⽤户请求,消息中间件负责将缓存中的请求同步到数据库。

2. 如何实现双11购物限流:

1、限流策略:

  • Nginx接⼊层限流:按照⼀定的规则如帐号、IP、系统调⽤逻辑等在Nginx层⾯做限流
    业务应⽤系统限流,通过业务代码控制流量这个流量可以被称为信号量,可以理解成是⼀种锁,它可以限制⼀项资源最多能同时被多少进程访问。

2、lua脚本:
在这里插入图片描述

减少⽹络开销: 不使⽤ Lua 的代码需要向 Redis 发送多次请求, ⽽脚本只需⼀次即可, 减少⽹络传输;
原⼦操作: Redis 将整个脚本作为⼀个原⼦执⾏, ⽆需担⼼并发, 也就⽆需事务; 复⽤: 脚本会永久保存 Redis 中, 其他客户端可继续使⽤.

3、ip限流lua脚本:
在这里插入图片描述4、java执行代码:
在这里插入图片描述

3. 要缓存⽹站登录的⽤户信息,你有⼏种⽅式?

a. redis和memcached

b. Ehcache

c. ConcurrentHashMap

4. 让你设计⼀套分布式缓存,如何设计可以同时更新所有服务器的缓存?

a. rabbitmq?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值