面灵AI

拼多多服务端研发一面面经

时间
2026-08
来源
牛客网

《面试题目》

  1. 前天面的,秋招岗位,面了50min左右,感觉考察的范围比较广
  2. 自我介绍一下。
  3. 挑一个项目进行介绍,重点讲一下项目中遇到的技术难点、解决思路以及最终效果。
  4. HashMap 的底层数据结构是什么?JDK 不同版本之间有什么变化?
  5. Java 线程池的核心参数有哪些?任务提交之后线程池内部的执行流程是什么?
  6. 线程池中的 ThreadFactory 有什么作用?execute 和 submit 两种提交任务方式有什么区别?
  7. 如果需要实现一个任务延迟3秒执行,你会如何基于线程池进行设计?
  8. Cache-Aside 缓存模式的具体流程是什么?为什么实际开发中经常采用这种方式?
  9. 针对缓存和数据库数据一致性问题,以下几种更新策略分别有什么优缺点?
  10. 先更新 Redis,再更新 MySQL;
  11. 先更新 MySQL,再更新 Redis;
  12. 先删除 Redis,再更新 MySQL;
  13. 先更新 MySQL,再删除 Redis。
  14. 如果在缓存更新过程中加入 TTL 机制,缓存失效期间可能会出现哪些问题?如何优化?
  15. 悲观锁和乐观锁分别是什么?两者适合哪些业务场景?
  16. CAS 的底层实现流程是什么?基于 CAS 实现自旋锁时,固定自旋次数可能存在哪些问题?
  17. 系统设计题:参考短视频平台设计评论系统,需要考虑哪些内容?包括表结构设计、主键设计以及分库分表方案。
  18. 设计一个内容审核系统,未来需要不断新增不同审核类型,如何设计一个方便扩展的架构?

《参考解析》

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