2026-10-27 11:36:32
拼多多暑期实习面试流程包括多轮技术考核,涵盖八股文知识、手撕算法题及项目经验,整体节奏紧凑且考察深度较大。具体各轮面试内容如下:
一面(八股+两道手撕)
八股文考察:
对象相等判断:==比较地址或基本类型值,equals默认继承Object类(地址比较),需重写实现内容比较。
对象创建过程:类加载检查→分配内存(堆区)→初始化零值→设置对象头→执行<init>方法。
输出语句原理:System.out.print调用本地方法,通过操作系统接口将字符写入标准输出流(如终端或文件)。
二维数组特性:Java中int[][]是数组的数组,第二维可不同长度(如new int[3][]后分别初始化new int[2]、new int[3])。
Integer[n]合法性:合法,但需后续初始化(如new Integer[5]仅创建数组,元素为null)。
线程竞争关系:若两线程读取同一共享变量且至少一个线程修改,则存在竞争(需同步机制如锁或volatile)。
Java线程与OS线程:Java线程基于OS线程实现,数量可超过CPU线程数(通过时间片轮转调度)。
线程生命周期:新建→就绪→运行→阻塞→死亡(阻塞场景包括等待锁、sleep、wait等)。
泛型实现原理:通过类型擦除实现,编译后泛型信息被移除,仅保留原始类型(如List<String>擦除为List)。
手撕算法题:
链表判环:快慢指针法,快指针每次走两步,慢指针走一步,若相遇则有环。
逆序对计数:暴力法(双重循环比较)或优化法(归并排序过程中统计逆序对)。
二面(项目+一道手撕)
项目考察:
缓存问题:重点问缓存穿透(查询空值击穿缓存)、缓存击穿(热点key过期导致大量请求直达DB)、缓存雪崩(大量key同时过期引发系统崩溃)的解决方案(如布隆过滤器、互斥锁、随机过期时间等)。
手撕算法题:
孤岛数量:通过深度优先搜索(DFS)或广度优先搜索(BFS)遍历二维网格,统计连通区域数量(需处理边界条件)。
三面(项目+八股+一道手撕)
项目考察:
项目深度:因项目较简单未深挖,但需准备对项目技术选型、难点及优化点的清晰阐述。
八股文考察:
JVM垃圾回收算法:标记-清除、标记-整理、复制算法及分代收集思想。
标记整理与复制算法对比:复制算法适用于新生代(对象存活率低),通过牺牲空间换时间;标记整理适用于老年代(对象存活率高),需移动存活对象,无空间浪费但效率较低。
三色标记法:垃圾回收中的对象标记方法,将对象分为白(未标记)、灰(已标记但未处理引用)、黑(已标记且处理完引用)三类,用于解决并发标记时的漏标问题。
CMS回收器过程:初始标记(STW,标记根对象)→并发标记(与用户线程并发)→重新标记(STW,修正并发标记结果)→并发清除(与用户线程并发)。跨代引用问题通过卡表(Card Table)记录老年代对象引用新生代的情况,减少重新标记阶段扫描范围。
老年代回收与新生代对象:若老年代可达对象引用新生代对象,需继续标记新生代对象的可达对象(通过跨代引用机制或记忆集实现)。
手撕算法题:
KVS数组查找:给定严格递增的key数组(如[2,4,5,6])和对应的value(每个key的value比前一个多1,如2对应9,4对应1,5对应3,6对应5),需处理value长度不固定的情况。解题思路:
遍历数组,记录当前key的起始位置和后续value长度(根据key的递增性推断)。
构建key到索引范围的映射(如2→[0,1],4→[2,3]等),查询时二分查找key所在的区间。
需处理边界条件(如最后一个key的value可能未填满)。
建议: