4.17蚂蚁一面凉经
- 自我介绍
- 毕业想从事什么方向的工作
- 聊一下自己做的项目(我自己挑了一个黑马点评)
- UV统计怎么做的?为什么要这么实现呢?用HyperLogLog为什么不会占用很大空间呢?16KB怎么去存储这个数据呢
- 好友关注怎么做的
- 项目的哪个点是有挑战性的(回答了优惠券秒杀)
- 秒杀为什么要用消息队列
- Redis挂了怎么办(回答用集群方案来解决)整个集群挂了就不行了对吧?(面试官追问 回答考虑限流)
- 但你的库存信息都是在 Redis 里面,对吧?就是限流,你取不到库存了吗
- 你怎么保证那个 Redis 里面库存和 DB 里面的库存它是一致的,没有可能出错?
- 你那个 Redis 你去做扣减库存怎么保障它的原子性呢?
- 不用lua脚本会带来什么样的问题?
- 扣减库存的原子性是为了解决什么样的问题
- 假设这个地方我们不用 lua 脚本,对吧?就用最普通的方案会带来什么样的问题?
- 乐观锁怎么解决超卖的问题
- 你能那个详细的描述一下 lua 脚本里面是用了什么样的 Redis 的命令?
- 你lua脚本就是怎么写的?就是你肯定是用了 Redis 的命令,对吧?
- 比如说你扣了库存,我们肯定是要做支付,对吧?那库存和支付的顺序是怎么样?先支付再扣,或者先扣库存再支付,这个过程你来讲一下吧。
- 创建订单,然后假设支付失败了呢。
- 那怎么去把数据写到 Redis 里面呢?你这个时候你 Redis 里面库存也得回加,对吧?这里就可以会涉及到一个你 DB 的库存跟 Redis 的库存的一致性的问题,怎么去保障它们一致性?
- 因为消息丢失导致的这个消息消费失败导致的库存不一致,怎么发现这个问题
- 重新发消息的时候会不会导致那个库存的操作重复?
- 通过订单号去做幂等是吗。
- 那假设那个用户量进一步的变大,就可能你一步的去消费 MQ 的消息的时候, DB 的压力还是会比较大,还是会消化不完,这个时候我们应该怎么去优化呢?(考虑集群、分库)
- 你这个场景你会怎么去做?分库用什么字段去分?(回答用订单号作为分配的依据)
- 假设一个用户下了 3 笔单,然后落到了 3 个库,他最终去查的时候,他会涉及一个全库式扫描,对吧?你怎么去避免这种问题呢?(答用用户id来做分库)
- 那假设商家要查他有多少秒杀进来的订单,这个情况怎么办呢?
- 如果用 MQ 消息队列可以做吗?用消息队列可以去怎么优化这个 case (指的是用消息队列优化商家查询订单的速度)吗?
- 反问阶段
全程拷打点评项目,一天后挂了
还是太菜了 再沉淀沉淀吧