虾皮 核心搜推后端(上海) ld面

记录我的面试

虾皮 核心搜推后端(上海) ld面

面试

  1. redis:
    • zset 底层数据结构:跳表
    • 一致性怎么做
    • 延迟双删为什么大家不常用
    • 你做的缓存一致性过期时间具体是多少
  2. ES 了解多少:不了解
  3. MQ:
    • 为什么在搜索这种业务上要用 Kafka
    • Kafka 为什么快,列七点
    • 批处理具体体现在哪儿
    • 零拷贝是什么
    • mmap 是什么,你之前用 C++ 肯定经常用吧
  4. JMM
  5. 设计模式了解吧,Spring Boot 中用什么设计模式,AOP 什么设计模式
  6. 微服务的缺陷:
    • HTTP 慢要用 RPC,不对
    • 复杂度提升,维护成本上升,不对
    • 下游依赖服务出问题了怎么办,如何解决:维护快照到缓存,离线数据
  7. AI 的研究,有没有实现过 RAG,longchain 框架用过吗
  8. 分布式事务:
    • 对账:
      • 业务操作阶段:直接执行创建订单的本地事务,同时发送事件,其他服务订阅并异步执行
      • 实时对账阶段:轻量级流式快速粗检,通过订单创建时间触发,通知对账服务实时检查数据,若不一致则告警
      • 离线对账阶段:天级别的彻查,保证完全的最终一致性,进行事务补偿
    • 2PC:
      • Prepare 阶段:协调者向所有参与者发送“准备”指令,询问它们是否可以执行事务。执行者执行事务但不提交,并将结果发送给协调者,所有资源均被锁定。
      • Commit 阶段:若所有参与者均返回成功,则提交并释放资源。若存在至少一个参与者返回失败,则取消事务回滚并释放资源。
    • 3PC:
      • CanCommit 询问阶段:协调者询问所有参与者是否准备好执行事务。如果所有参与者都响应“可以”,则进入下一阶段。
      • PreCommit 预提交阶段:协调者向参与者发送预提交指令。
      • DoCommit/DoRollback 提交/回滚阶段:协调者根据预提交阶段的结果,决定最终是提交还是回滚。
    • TCC(Try-Confirm-Cancel):
      • Try(尝试):尝试执行业务,完成所有资源的预留或锁定。
      • Confirm(确认):确认执行业务,当所有参与者都成功执行了 Try 阶段,协调者会执行 Confirm 阶段,真正完成操作。
      • Cancel(取消):取消执行业务,如果任何一个参与者在 Try 阶段失败,协调者会执行 Cancel 阶段,释放所有预留的资源。
    • Saga(将分布式事务独立转化为本地事务,以服务为粒度抽象本地事务和补偿事务):
      • 按顺序执行事务,检测到异常,以类似栈的顺序执行本地的补偿事务
    • 本地事务表:
      • 服务 A 执行操作时,原子性地写入消息到本地事务表(持久化介质)中
      • A 的本地事务提交,服务 B 订阅并消费消息,执行其本地事务
      • 服务 B 不断重试消息直到成功,由 A 的本地事务表记录事务成功与否
  9. 分布式一致性算法:
    • Raft 和 CAP
    • 幂等性在多集群 DB 中的落库应该怎么做
  10. Flink 和 HBase:
    • 它们的特点
    • 列式存储的优势

手撕

  1. 删除排序链表中的重复元素
  2. 合并两个有序数组