美团面经分享
一面
这个面试官是我面试以来遇到的水平比较高的面试官,人也很好,会不断指引你面试
-
自我介绍
-
介绍秒杀项目
-
做这个系统的初衷是什么
-
保证库存不多卖(悲观锁能不能优化)
-
比如说5000个请求进入我们的mysql中,5000个请求能保证不把db拖跨吗
-
QPS实现能压到多少
-
怎么判断你的瓶颈在cpu
-
怎么保证不会少卖?(其实一开始可以考虑给redis里面设置的库存稍微多一点)
-
如果轮询后将mysql数据更新到redis中,这样会不会比较诡异,发现不能抢了之后又能抢了,怎么解决这个问题
-
到db实际的qps是多少
-
限流上你是怎么考虑的
-
redis的缓存穿透怎么处理
-
除了布隆过滤器怎么解决user缓存穿透的问题?(我考虑到了在前端对用户的id进行规则验证,面试官又说一种思路,符合就查一次,查一次之后在redis中置为空值)
-
kafka怎么保证消息不丢?
- 持久化
- 消费应答
- 集群
- 先持久化,再应答,没成功就一直发送
- 控制Kafka的落盘,落盘后再ack,不让内核决定
-
消息队列都有哪些环节可能会导致消息丢失
-
怎么从操作系统角度保证消息不丢
-
消费者那端怎么保证消息不丢
-
消费者怎么解决消息重复
-
如果有重复的消息以哪个为准
-
Kafka的消费顺序怎么保证和业务逻辑是一样的(生产者同步发送,一个生产者一个分区和一个消费者实现)
-
消息不丢生产者同步的话会不会有瓶颈(答到了1.不需要集群所有节点都ack 2.缓冲区发送 面试官又提到了滑动窗口)
-
MySql事务什么时候会用到事务,举一个具体的场景
-
应该是先扣库存再存订单?能反过来吗?
-
扣库存和存订单能拆倒分开的吗
-
Mysql里面有不可重复读和幻读?可以解释一下这两个东西的区别吗
-
怎么解决不可重复读?
-
mvcc能解决幻读吗(没答好整理一下)
在快照读的情况下,可以解决幻读,在当前读的情况下不能解决幻读,可能需要加一定的锁来解决幻读。
-
Mysql主键为什么要自增
-
select * from xxx offset 10 limit 10 和select * from xxx offset 90000 limit 10 执行效率有区别吗
可能有区别虽然说爬树都会做3层随机io,但是在叶子节点链表的移动上可能会有区别
-
多线程线程池怎么设计参数?
-
线程池queue里面大小怎么设计(想考察你会问什么信息来解决这个问题)
queue的大小设置要考虑以下几点:
- 生产方生产任务的速度:
- 是io密集还是计算密集:
- 线程池处理线程的速度:
- 拒绝策略是什么样的: