一、限流面试题:
- 限流原因:应对并发量大和防止用户恶意刷接口,如抢券业务会有大流量冲击,需进行限流。
- 常见限流方式:单体项目可通过Tomcat设置最大连接数限流;微服务项目常用Nginx和网关限流,也可自定义拦截器。
- Nginx限流:提供控制速率和并发连接数两种方式,控制速率采用漏斗算法,水滴代表请求,漏斗以固定速率流出请求;控制并发连接数可限制单个IP和整个服务的连接数。
- 网关限流:使用令牌桶算法,通过局部过滤器request rate limit实现,可按IP或路径限流,设置令牌生成速度和令牌桶总容量。
- 回答思路:介绍业务场景和QPS,说明Nginx和网关的限流方式及算法,也可介绍令牌桶和漏桶算法的区别。
二、分布式系统理论面试题:
- CAP定理:分布式系统有一致性、可用性和分区容错性三个指标,三者不能同时满足,只能根据业务选择CP或AP。
- BASE理论:是对CAP的解决思路,包括基本可用、软状态和最终一致性,可用于解决分布式事务问题。
- 回答思路:解释CAP和BASE的含义,举例说明如何应用于分布式事务。
- 分布式事务:
- 解决方案:主流框架是阿里的Seata,提供XA、AT和TCC三种模式;也可用MQ解决。
- Seata模式:XA模式采用CP模型,保证强一致性,但性能差;AT模式采用AP模型,性能好,通过undo log记录数据;TCC模式也采用AP模型,需手动编码实现。
- MQ解决方案:异步性能高,但实时性差,适用于对数据强一致性要求不高的场景。
- 回答思路:根据业务选择合适的解决方案,向面试官陈述。
三、接口幂等性面试题:
- 幂等概念:多次调用方法或接口不改变业务状态,结果与单次调用一致,如下单操作。
- 需考虑幂等的请求:POST请求新增操作和PUT请求按增量更新操作需考虑幂等。
- 解决方案:数据库唯一索引可解决新增问题;TOKEN加Redis可解决新增和修改问题,通过生成唯一TOKEN并存储在Redis中验证;分布式锁也可解决新增和修改问题,但性能较低。
- 回答思路:解释幂等含义,根据业务选择合适的解决方案。
四、分布式任务调度面试题:
- XXL-Job优势:解决集群任务重复执行问题,任务定义灵活,可进行失败重试和统计,支持大数据量任务分片执行。
- 路由策略:常见的有轮询、故障转移和分片广播等,可根据需求选择。
- 任务执行失败解决方法:设置路由策略为故障转移,设置失败重试次数,查看日志并设置邮件告警。
- 大数据量任务执行方法:采用分片广播路由策略,在代码中获取分片总数和当前分片,按取模方式分摊任务。
- 回答思路:介绍XXL-Job优势,说明常见路由策略、任务失败解决方法和大数据量任务执行方法。