美团面试复盘 | 面试题复习

文章是关于美团实习面试的经验分享,主要涉及BRAC模型在权限管理中的应用,Redis的数据存储(如点赞量使用String类型),Redis的原子操作及持久化方式,以及如何保证分布式环境下的数据一致性。此外,还讨论了消息队列如RabbitMQ和Kafka如何确保消息的可靠性和有序性,以及处理消息重复和幂等性设计。最后提到了OSS服务的使用,并对学习方向给出了建议,强调了微服务和底层原理的重要性。
摘要由CSDN通过智能技术生成

美团实习一面复盘总结

  • BRAC模型实现权限管理怎么做的?

  • 项目用redis储存了什么数据?

  • redis5种基本数据类型?

  • 储存点赞量用什么数据类型?-String

    • String数据类型能自增吗?
      • incrby 命令可以实现String自增操作。在自增的时候,因为 Redis 没有专用的整数类型,所以 key 内储存的字符串被解释为十进制 64 位有符号整数来执行 INCR 操作。
      • 本操作的值限制在 64 位(bit)有符号数字表示之内
      • 如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误
  • 多线程在共同更新该数据,怎么保证其原子性?

    • 加锁
  • redis持久化方式?

  • Redis缓存一致性问题?

    • 为什么使用延时双删策略?这样不会导致数据库流量巨大吗?
      • 确实,缓存删两次,更多的请求落到了数据库。一致性要求没那么高的情况下,使用旁路缓存模式即可
    • 旁路缓存模式;
  • 你缓存的数据有强一致性的需求吗?

    • 其实不太需要,主要是学习使用
  • Redis分布式锁,释放锁的时候,怎么解决可能释放了不同线程的锁的问题?

    • lua脚本,判断、删除两步写成一个lua脚本,原子执行
  • 不用lua脚本,用ThreadLocal能不能解决这个问题?

    • 这是线程本地私有的变量,跟ThreadLocal什么关系啊?
    • 可能是可以用来保存线程的产生的唯一标识,这个标识保存到ThreadLocal防止被其他线程修改。当解锁的时候,比较该标识与锁的标识是否相同,相同才能释放锁,这里还是需要用到lua脚本,保证判断、删除两步的原子性。
  • rabbitMQ怎么保证消息可靠性?

    • 生产者:ack、事务、重试、日志保存
    • 消费者:ack、重试、日志保存
    • rabbitMQ本身:消息持久化、集群Broker做副本
    • 如果是kafka,每个分区都有副本
    • 如果是RocketMQ,有刷盘机制
  • 代码层面,你怎么保证消息不丢失?丢失了怎么处理?

    • trycatch捕获异常、重试、日志保存
  • 怎么保证消息处理的有序性?

    先回答可能造成乱序的场景:多个队列、一个队列多个消费者、一个队列一个消费者但是消费者prefech预取数大于1

    • 把队列拆成多个,使得一个队列只能对应一个消费者
      • 把队列拆成多个,使得能够一个队列匹配一个消费者。具有顺序的一组消息就根据 哈希法 全都发送到其中一个队列
    • 生产者给消息添加序号,使用redis保存当前所需消费的消息序号
      • 消费者获取到消息,要检验消息是否为redis中当前需要消费的消息序号
    • 可以使用basic.qos方法来设置QoS参数设置 prefetch count 消息预取数 为1
  • 消息重复消费的问题怎么解决?

    • 面试官:没关系,有想法就好; T_T菜狗落泪
    • 幂等性:redis去重、数据库消息日志表ID唯一性
  • OSS服务怎么使用的?

  • 反问

    • 学习方向? -加强底层原理学习
    • 微服务学习的必要?- 可以了解相关知识,搭建微服务框架比较难
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值