面灵AI→

滴滴27校招一面(Spark引擎开发):秒挂复盘

轮次
一面
结果
已挂
时间
2026-09
来源
牛客网

《面试题目》

时间:09.20 11:30;岗位:Spark 引擎开发

  1. 实习内容叙述
  2. Java 实现接口的三种形式
  3. 算法:最长递增子序列

《参考解析》

Java 实现接口的三种形式:① 普通类(或抽象类)用 implements 实现接口并给出全部方法实现,这是最常见的形式;② 匿名内部类 new SomeInterface() { ... },适合只在一处使用、需要访问局部变量的场景(只能访问 effectively final 的局部变量);③ Lambda 表达式或方法引用,如 Runnable r = () -> {}、list.sort(String::compareTo)——注意它的前提是接口必须是函数式接口(只有一个抽象方法,可用 @FunctionalInterface 标注)。答题时要把这个前提讲出来,否则第③条不成立。可以再补充接口的 default 方法和静态方法(Java 8+),它们不需要实现类覆写,这也是「接口可以有方法体」的常见追问点。

最长递增子序列(LIS):两种解法都要会。① 动态规划 O(n²):dp[i] 表示以 a[i] 结尾的 LIS 长度,转移是 dp[i] = 1 + max(dp[j])(j < i 且 a[j] < a[i])。② 贪心 + 二分 O(n log n):维护数组 tails,tails[k] 表示长度为 k+1 的递增子序列的最小结尾值;遍历每个元素时在 tails 中二分找到第一个 ≥ 它的位置并替换(严格递增用 lower_bound,非严格递增用 upper_bound),最终 tails 的长度就是答案。要主动说明:tails 本身不是某个具体的最优子序列,如果要输出子序列需要额外记录前驱或下标。常见变体:最长递增子序列的个数(力扣 673)、俄罗斯套娃信封(先按宽度升序、高度降序排序后做 LIS)、最长数对链。

实习叙述怎么讲:用「业务背景 → 我的职责 → 技术方案 → 量化结果」四段式,两分钟内讲完主干,并主动留出可以被追问的技术钩子。投 Spark 引擎岗时,最好提前准备一两个具体技术点:shuffle 的写读流程与溢写、数据倾斜的定位与处理(加盐、两阶段聚合、AQE 的 skew join)、内存模型与 OOM 排查、AQE 的动态合并分区、DataSource V2 与连接器、存算分离下的读优化。泛泛说「做了个数据平台、写 SQL」基本等于没有竞争力。

复盘:为什么一面就挂:这场面试题量极少,只有三问,说明面试官在极短时间内就得出了结论。一面被秒挂的典型原因有两个:实习经历讲不出技术深度(只描述业务、说不出自己做了什么、为什么这么做、遇到什么问题),以及算法题写得不干净(边界、复杂度、能否优化答不上来)。可执行的改进是:把 LIS 这类高频题练到能默写并解释变体;把实习经历按「我负责的模块 + 技术选型理由 + 一个具体难点」重写成三个可深挖的故事。