SpringCloud 各个组件的底层原理?
    Raft 协议,如何选举,如何保证数据一致性,数据如何同步,哪些地方用到了 Raft?
    一致性 Hash 算法是怎样的?哪些地方用到了?
    Redis 在集群环境下,如何做 slot 迁移?

    地铁最优路线?
    缓存穿透、雪崩、击穿?

    RocketMQ 分布式消息事务的原理?

    其实就是MQ利用了反复向客户端进行确认的机制进行保证客户端和消息发送的事务

    执行流程

    1. 客户端向MQ发送一个half消息,MQ会把真正的消息存储在一个临时的队列里面
    2. 客户端收到MQ的响应后进行本地事务的处理,如果本地事务处理完则反馈给MQ处理成功,失败则反馈给MQ处理失败,执行中则反馈给MQ正在执行中
    3. MQ收到客户端的反馈后进行响应的处理,如果是失败则直接丢弃消息,如果是成功,则把消息发往真正的队列中去,如果是执行中,那么每隔一定时间会再调用客户端提供的方法进行校验事务状态
    4. 默认情况下MQ会回调15次,如果15次都没有确定,那么就会丢掉消息

    RocketMQ 如何保证消息不丢失?

    生产者:需要使用同步消息或者事务消息保证生产者不弄丢消息
    RocketMQ: 使用同步刷盘+同步复制保证MQ不弄丢消息
    消费者:使用手工提交ack,同时要确保消息被业务方正常处理完以后才响应ack给MQ服务器

    但是如果这么做了以后性能肯定会大幅度下降,可以考虑在消息丢失的时候提供补偿机制来处理,比如在后台开放一个手工补消息的按钮,需要结合业务进行设计

    RocketMQ 如何保证消息顺序性?