其他问题——智力题、大数据处理、SQL 题
除算法模板外,面试还考三类「其他问题」,各整理成一篇完整题库:
三类题都没有统一的代码模板,核心是记「解题思维」:SQL 靠窗口函数和三值逻辑、智力题靠逆向归纳和概率直觉、大数据靠分治和位图。
💭 思考:为什么说 SQL 题没有统一模板,核心是记「窗口函数 + 三值逻辑」?——从「SQL 题在考什么」反推:绝大多数 SQL 题不是考语法,而是考「行 ↔ 列 ↔ 组」的互相转换,以及「NULL 参与运算时结果会怎么变」。窗口函数解决「组内排名 / 累加」这类「先分组再组内变换」的需求;三值逻辑则是所有「反向过滤」题的陷阱所在——
NOT IN遇 NULL 返回空集就是最典型的例子。这两样是「能力」,不是「模板」,所以没法靠背模板应付变体。如果不抓住这两条主线,刷再多的题,遇到换个表结构、加个 NULL 的变体还是会翻车。
💭 思考:为什么智力题靠「逆向归纳 + 概率直觉」、大数据靠「分治 + 位图」,而不是靠背答案?——从「这两类题的本质」反推:智力题(海盗分金、三门问题、帽子题)的共性是「从终点状态倒推每一步最优解」,概率题在纠正常人直觉的偏差;大数据题(海量 URL 去重、top-K、中位数)的共性是「内存装不下」的硬约束下,用分治切小、用位图 / 布隆过滤器压缩表示。它们的共同点是「约束很怪、解法很巧」,同一个答案换个数就没用。所以准备这两类题,记「怎么想到这一步」比记「答案是多少」值钱得多——面试官追问变体时,复述不出思路,答案背得再熟也白搭。
章末提问
追问 1:这三类「其他问题」为什么没有统一的代码模板?
结论先行:因为它们的难点在「解题思维」而非「代码骨架」,同一个模板换个数就没用。 因为:SQL 靠窗口函数和三值逻辑、智力题靠逆向归纳和概率直觉、大数据靠分治和位图——这些是「怎么想到这一步」的能力,不是能背下来的模板。所以准备的重心是记思路,而不是背答案。
追问 2:SQL 题的坑主要集中在哪?
结论先行:集中在三值逻辑(NULL 参与运算)和窗口函数的使用场景上。
因为:NOT IN 遇 NULL 返回空集、AVG 忽略 NULL 改变结果、排名函数 ROW_NUMBER / RANK / DENSE_RANK 的差异,都是「背会了语法、没理解语义」就会踩的坑。这类题考的不是你会不会写 SELECT,而是你清不清楚 NULL 和排名在逻辑上怎么算。
追问 3:大数据题在「内存装不下」的约束下,通用套路是什么?
结论先行:分治 + 位图 / 布隆过滤器,用「切小」和「压缩表示」对抗内存上限。 因为:海量 URL 去重、top-K、中位数这类题,内存装不下是硬约束,所以要么分治(哈希分桶后每个桶独立处理)、要么用位图 / 布隆过滤器压缩存储、要么堆排序只保留 top-K。核心是「在约束下转换表示」,而不是「把数据全读进内存」。