面灵AI

货拉拉一面

时间
2026-08
来源
牛客网

《面试题目》

  1. 货拉拉一面流程:自我介绍 → 实习深挖 → Java 基础 → JVM/GC → MySQL → 消息队列 → WebSocket → 自研 RPC 框架 → Redis 缓存 → 反问。一、实习深挖简单自我介绍一下。你刚才说这个发布平台,在这个过程中你做的最有价值的一件事是什么?二、Java 基础HashMap 在 JDK 8 中是怎么解决哈希冲突的?它是怎么解决环形链表的问题的?讲一下 AQS?ThreadLocal 是怎么实现线程隔离的?代理模式和装饰者模式有什么区别?(追问)场景上有什么区分?什么场景下应该用装饰者,什么场景下应该用代理?三、JVM 与 GC一个对象在什么场景下会进入到老年代?(追问)除了这两个还有吗?垃圾收集器 CMS 和 G1 有什么区别?四、MySQLB+ 树相对 B 树来讲有什么优势?在 MySQL 中是如何实现它的事务四大特性的?了解吗?五、消息队列RabbitMQ 在使用过程中,怎么保证消息不丢?(追问)有了解过它是怎么实现延迟消息的吗?如果要实现顺序消费,需要怎么做?六、WebSocket你在项目里用到的 WebSocket,它是如何维护

《参考解析》

  1. Redis常用于缓存、分布式锁和计数。缓存与数据库更新通常采用“先写数据库、再删除缓存”,并通过重试、延时双删或消息补偿处理删除失败。
  2. MySQL索引通常使用B+树,叶子节点按顺序连接,适合范围查询;设计索引时结合选择性、最左匹配原则和执行计划,避免无效索引与回表开销。
  3. 并发问题应先明确共享状态和一致性边界,再选择锁、CAS或队列。线程池需要根据任务是CPU密集还是IO密集设置核心线程数、队列容量和拒绝策略,并监控活跃数与队列长度。