拼多多服务端研发一面 55min
- 时间
- 2026-08
- 来源
- 牛客网
《面试题目》
- 项目深挖: 挑一个亮点项目,重点讲难点及最终解决方案。
- Java基础: HashMap 底层数据结构?
- 线程池原理: 核心参数有哪些?工作流程是怎样的?
- 线程池应用: 线程工厂的作用?execute 和 submit 的区别?
- 代码场景: 如何用线程池实现“延迟3秒执行任务”?
- 缓存策略: 经典的 Cache-Aside 模式原理是什么?为什么要这么设计?
- 缓存一致性: 对比以下四种方案的优缺点及适用场景
- a. 先写 Redis 再写 MySQL
- b. 先写 MySQL 再写 Redis
- c. 先删 Redis 再写 MySQL
- d. 先写 MySQL 再删 Redis
- 极端场景: 加上 TTL 后,上述方案在“缓存空窗期”会有什么风险?
- 并发锁: 悲观锁 vs 乐观锁的区别?
- JUC底层: CAS 流程及自旋锁设计?固定自旋次数会有什么问题?
- 系统设计: 参考抖音设计短视频评论表。需包含:表结构、唯一Key设计、分库分表策略。
- 设计模式: 针对内容审核系统,如何设计扩展性强的架构以支持新增审核类型?。
- 手撕算法:爬楼梯
- PDD一面这55分钟简直像开了二倍速!面试官完全不按套路出牌,八股文刚问完线程池,反手就甩出缓存一致性的连环追问,系统设计也是直接拿抖音评论表来考。
《参考解析》
- Redis常用于缓存、分布式锁和计数。缓存与数据库更新通常采用“先写数据库、再删除缓存”,并通过重试、延时双删或消息补偿处理删除失败。
- MySQL索引通常使用B+树,叶子节点按顺序连接,适合范围查询;设计索引时结合选择性、最左匹配原则和执行计划,避免无效索引与回表开销。
- 并发问题应先明确共享状态和一致性边界,再选择锁、CAS或队列。线程池需要根据任务是CPU密集还是IO密集设置核心线程数、队列容量和拒绝策略,并监控活跃数与队列长度。
- 算法题先写出不变量和边界条件,再分析复杂度;常见数组、链表和树问题可分别使用双指针、哈希表、递归或迭代遍历,目标是在线性或对数复杂度内完成。