拼多多Java服务端面经(已OC)
- 时间
- 2026-08
- 来源
- 牛客网
《面试题目》
- 楼主211本硕,两段中大厂实习。上周面完拼多多Java服务端,前天刚收到OC。整体感觉就是,没有自我介绍寒暄几句就直接开问,节奏极快,像是一场压力测试。特来还愿,给后面的兄弟们参考。
- 面试官是个很干练的小哥,不开摄像头,上来直接写算法。
- 算法(15分钟):手撕LRU。要求不仅写出get和put,还要考虑并发情况下的线程安全。我加了ReentrantLock,他追问如果get操作很频繁,锁竞争太激烈怎么办?引导我往ConcurrentHashMap + CAS的方向改。
- Java并发
- ThreadLocal内存泄漏讲一下。ThreadLocalMap的Key为什么要设计成弱引用?如果线程池复用线程,ThreadLocal怎么清理?
- synchronized锁升级过程。无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁,每个状态的标志位在对象头哪里?
- 让我手写一个死锁代码。写完问我怎么排查(jstack),然后问如果死循环导致CPU飙高怎么排查(top -Hp 找线程ID,jstack看堆栈)。
- 线上系统突然OOM了,怎么排查?我说了看Heap Dump文件,用MAT分析大对象。
- 追问:如果OOM时JVM没自动生成Dump文件怎么办?答:启动参数加-XX:+HeapDumpOnOutOfMemoryError。
- G1收集器的Mixed GC触发条件是什么?Region大小怎么划分的?
- MySQL
- binlog、redo log、undo log的作用和区别。
- 两阶段提交(2PC)讲一下。如果redo log写完了,binlog没写完,崩溃恢复时会怎么处理?
- 一面面完脑子嗡嗡的,感觉像被扒了一层皮,但好在都答上来了。
- 二面气场很强,主要围绕我的实习项目和场景设计展开。
- 项目拷打(30分钟
- 我简历写了用Redis做分布式锁,面试官直接开大:“Redis分布式锁是绝对安全的吗?”
- 我说主从切换可能导致锁丢失。他追问:“那Redlock怎么解决的?Redlock就一定安全吗?”(这里被怼了,聊到了分布式系统的CAP和时钟漂移问题,确实有点盲区,硬着头皮扯了几句)。
《参考解析》
- Redis常用于缓存、分布式锁和计数。缓存与数据库更新通常采用“先写数据库、再删除缓存”,并通过重试、延时双删或消息补偿处理删除失败。
- MySQL索引通常使用B+树,叶子节点按顺序连接,适合范围查询;设计索引时结合选择性、最左匹配原则和执行计划,避免无效索引与回表开销。
- 并发问题应先明确共享状态和一致性边界,再选择锁、CAS或队列。线程池需要根据任务是CPU密集还是IO密集设置核心线程数、队列容量和拒绝策略,并监控活跃数与队列长度。
- TCP通过三次握手建立连接、四次挥手释放连接;HTTPS在TLS握手中协商会话密钥,并用证书校验服务端身份,数据传输阶段主要使用对称加密。