在淘宝、京东等电商类平台面试中,容易碰到一个很常见的场景题:秒杀场景
。本渣作者不敢瞎写,附上两篇“标准答案”,希望小伙伴们可以从中学习到东西,也祝面试顺利。
本渣认为,类似问题有几个考点:
- 全局思考能力和把控能力,包括从前端–>网络–>网关–>后端–>存储等一整个信息传输交互线路都有优化的点。
- 架构设计原则:有效控制并发,把问题都拦截在前面,充分利用缓存。
- 基础架构设计实战经验:限流、降级、熔断等的基本使用。
容易被问到的几个问题:
- 如何解决超卖:mysql乐观锁+redis预减库存+redis缓存卖完标记
- 如何解决重复下单:mysql唯一索引+分布式锁
- 如何防刷:IP限流 | 验证码 | 单用户 | 单设备 | IMEI | 源IP |均设置规则
- 热key问题如何解决:redis集群+本地缓存+限流+预热+定时刷新+key加随机值分布在多个实例中
- 如何应对高并发读请求:多级缓存+限流
- 如何应对高并发写请求:MQ削峰填谷+限流+服务隔离+首要业务次要业务异步化处理。
- 如何保证缓存数据一致性:延迟双删,写请求先删缓存再更新数据库,然后延迟再次删除缓存。读请求更新缓存。
- 可靠性如何保障:sentinel监控,快速扩容
- 如何解决日志磁盘IO瓶颈:基于内存的临时文件系统、缓冲区
- 池化技术:连接池、线程池等,减少连接建立销毁成本,限流
这里面涉及的东西就很多了:架构设计、网络、前后端、缓存、数据库、安全、并发、锁、队列
,需要对每一个知识点都有相应的理解才能把每一个环节设计的更合理,本渣只能感慨学无止境,再接再厉。