智力题(二):概率、博弈、数学与综合名题
智力题(二):概率、博弈、数学与综合名题
导语:这一篇是智力题的"进阶区",也是区分度最高的部分。覆盖概率与贝叶斯的反直觉结论(三门问题、两个孩子、检测阳性)、博弈与不变量的构造(100 苹果、25 匹马、猴子搬香蕉)、公共知识的归纳链(病狗与黑帽)、数学与数论(剩余定理、连续整数之和),最后给出「如何把智力题思维迁移到工程与系统设计」的收尾套路。
一、概率与贝叶斯
1. 三门问题:为什么换门能把中奖率从 1/3 提到 2/3?
答:
题面:三扇门,一扇后是汽车(奖品),另两扇是山羊。你选了 1 号门;知道答案的主持人打开了 3 号门——里面是山羊。此时他问:要不要换成 2 号门?
关键洞察:主持人的行为不是随机的——他知道答案,并且一定会打开一扇羊门。这正是本题与「随机打开一扇门恰好是羊」的本质区别。
按「概率被集中」来理解(推荐)
穷举验证(最直观,推荐面试时用)
三种情形等概率 → 不换赢 1 次(1/3),换赢 2 次(2/3) ✅
两个高频追问:
| 追问 | 答案 |
|---|---|
| 如果主持人不知道答案、随机打开一扇门,恰好是羊呢? | 此时换与不换各 1/2。因为"主持人随机开门恰好开到羊"这件事提供了信息(说明车更可能在剩下的门里),概率分布被重新分配了。这就是"主持人是否知情"决定答案的原因 |
| 如果有 100 扇门呢? | 你选 1 扇(1/100),主持人知道答案并打开 98 扇羊门,只剩 1 扇 → 那扇门是车的概率 = 99/100。换门优势极大,直觉上更容易接受 |
一句话总结:「主持人的开门口令是"条件信息",它不改变你原选择的概率,而是把其余所有概率集中到未打开的那扇门上。」
2. 两个孩子:已知至少一个是女孩,另一个也是女孩的概率是多少?
答: 必须先澄清题面的"信息是怎么获得的"——不同问法答案不同,这是这道题真正的考点。
问法一:「已知至少有一个是女孩」→ 答案是 1/3
样本空间(按【出生顺序】区分,四种等可能):
男男、男【女】、女男、(女女)
↑ 排除 ↑ 保留 ↑ 保留 ↑ 保留
已知"至少一个女孩" → 排除"男男" → 剩 3 种等可能:
男女、女男、女女
其中"两个都是女孩"只有 1 种 → **P = 1/3** ✅问法二:「先看大的那个,她是女孩」→ 答案是 1/2
已知老大是女孩 → 只可能是:
女男、女女
其中"两个都是女孩"有 1 种 → **P = 1/2** ✅
为什么变了?
因为"先看老大"这个动作【改变了条件空间】:
· 问法一的条件是"集合中至少有一个女孩"(对两个孩子【对称】)
· 问法二的条件是"某个【特定位置】的孩子是女孩"(信息更具体、更强)| 问法(常见变体) | 条件空间 | 答案 |
|---|---|---|
| 已知至少一个是女孩 | 男女、女男、女女 | 1/3 |
| 已知老大是女孩 | 女男、女女 | 1/2 |
| 在街上随机遇到一个孩子,是女孩,问"另一个也是女孩" | (随机抽样,等价于"某个特定个体是女孩") | 1/2 |
| 有人说「我见过其中一个,是女孩」(不确定是老大还是老二) | 需要明确"他见的这次选择是否随机" | 答案取决于选择的机制 |
面试标准姿势:「这题的答案取决于条件是怎么得到的。如果条件是"至少一个是女孩",答案是 1/3;如果是"某个特定位置/特定个体是女孩",答案是 1/2。所以我需要先确认题意。」 —— 主动澄清比直接报 1/3 得分更高。
3. 检测阳性就等于 99% 患病吗?(贝叶斯与基数效应)
答: 不等——这正是"基数效应(base rate fallacy)"的经典反直觉题。
题面:某病患病率 1/10000;检测的真阳性率 99%(患病者检出阳性);假阳性率 1%(健康人误报阳性)。某人检测阳性,他真正患病的概率是多少?
【用"10000 人"来算(最直观,推荐面试用)】
取 10000 人:
· 患病者:1 人 → 检出阳性 ≈ 1 × 99% = **0.99 人**
· 健康者:9999 人 → 误报阳性 ≈ 9999 × 1% = **约 100 人**
阳性总人数 ≈ 0.99 + 100 ≈ 101 人
其中真患病者 ≈ 0.99 人
→ P(患病 | 阳性) ≈ 0.99 / 101 ≈ **约 1%** ✅
★ 直觉之所以错:**健康人基数(9999)太大,1% 的误报就产生了 100 个假阳性,
把 1 个真阳性彻底淹没了。**
【公式(贝叶斯)】
P(D|+) = P(+|D)·P(D) / [ P(+|D)·P(D) + P(+|¬D)·P(¬D) ]
= 0.99×0.0001 / (0.99×0.0001 + 0.01×0.9999)
≈ 0.0098 ≈ 1%追问:连续两次检测都阳性呢?
P(D|++) = P(++|D)·P(D) / [ P(++|D)·P(D) + P(++|¬D)·P(¬D) ]
= 0.99²×0.0001 / (0.99²×0.0001 + 0.01²×0.9999)
≈ 0.9801 / (0.9801 + 0.9999) ≈ **49.5% ≈ 50%** ✅
★ 从 1% 到 50% —— **第二次阳性把概率提升了 50 倍**,但仍不到一半。
这就是为什么"筛查结果不能直接当诊断",必须结合重复检测与临床判断。可迁移的结论(最有价值的部分):
| 结论 | 工程/业务映射 |
|---|---|
| 低先验概率场景下,单次"阳性信号"参考价值极低 | 风控/反欺诈:低频事件(如欺诈率 0.1%)的检测必须看精确率,而不是召回率;否则会误杀大量正常用户 |
| 不要只看"准确率",要看混淆矩阵 | 机器学习模型评估必须看 Precision / Recall / AUC,并结合业务先验选择阈值 |
| 基数效应会放大"小概率错误" | 告警系统:若某项异常的基础发生率极低,用"单指标阈值"告警会产生大量误报(这正是"多指标联合判定 + 抑制"的由来) |
| 重复独立检测能显著提升置信度 | 安全场景的多因子验证、多维度交叉验证 |
4. 两个罐子装 50 红 50 蓝球,如何最大化取到红球的概率?
答:
题面:100 个弹球(50 红 50 蓝)分到两个罐子里(必须全部放完、每罐至少 1 个);随机选一个罐子、再从中随机取 1 个球。如何放置使取到红球的概率最大?
【策略】把一个罐子做成"几乎纯红",另一个承担全部蓝球:
罐 A:1 个红球
罐 B:49 个红 + 50 个蓝
【计算】
P(红) = P(选 A)·P(红|A) + P(选 B)·P(红|B)
= 1/2 × (1/1) + 1/2 × (49/99)
= 0.5 + 0.2475
≈ **0.7475 ≈ 3/4** ✅
【对照:均匀分配(各 25 红 25 蓝)】
P(红) = 1/2 × 25/50 + 1/2 × 25/50 = 0.5 → 明显更差为什么这是最优(面试加分):
① 极端化最小罐子:让"小罐子"只放 1 个红球 → 该分支的成功率锁定为 100%
② 剩下的球全在另一个罐子 → 那个罐子的红球比例 ≈ 与总体相同(49/99 ≈ 1/2)
③ 结果 = 1/2 × 1 + 1/2 × 1/2 = 3/4
★ 通用结论:**当"先随机选一个容器、再从容器里随机取"时,
把最重要的概率"押注"在一个极小的容器上,收益最大**
(直觉:小容器里的 1 个球被选中的概率虽只有 1/2,但它被选中时必定成功)可迁移的工程思想:
这是"用结构的偏斜换取整体期望最优" —— 在工程上对应「把少量关键流量引导到"确定性最高"的通路」:如分级缓存(小容量的 L1 命中即返回)、灰度发布(小流量先行验证)、限流时优先保护核心链路。
二、博弈与不变量
5. 100 个苹果,每次拿 1~5 个,如何保证拿到最后一个?
答: 先手必胜——核心是构造不变量。
【核心洞察】
每次可拿 1 ~ 5 个 → 两人一轮的"可控制总量" = 1 + 5 = **6**
【构造不变量】
先手第一次拿 **4** 个 → 剩余 **96**
(为什么不拿别的?因为要让剩余数成为 6 的倍数:100 − 4 = 96 = 6 × 16)
【之后的套路】
对手拿 n 个(n ∈ [1,5])→ 你就拿 **6 − n** 个
→ 每一轮两人合计拿走 6 个 → 剩余始终保持 6 的倍数
【锁定序列】
100 →(先手拿4) 96 →(每轮-6) 90 → 84 → … → 12 → 6 → **0**
★ 最后"6 个"时:对手拿 n,你拿 6−n → 你必然拿到最后一个 ✅通用解法(博弈题的套路,值得背下来):
问题形式:一堆 n 个物品,两人轮流取 1~m 个,取到最后一个者胜。
解:
① 令 k = 1 + m(一个"回合"的可控总量)
② 若 n % k == 0 → **后手必胜**(后手模仿:先手拿 x,后手拿 k − x)
③ 若 n % k != 0 → **先手必胜**,且先手第一次拿 **n % k** 个,
之后每次拿 k − (对手刚拿的)
本题:n = 100,m = 5,k = 6 → 100 % 6 = 4 → 先手拿 4 个 ✅
【博弈题的通用四步(面试可以照说)】
① 找【必败态】(谁面对这个局面谁输)
② 找【必胜态】(能一步走到必败态的局面)
③ 观察模运算规律(往往是 n % (m+1) 之类的周期性)
④ 构造不变量,并【验证边界】(n 很小时是否仍成立)追问:「如果改成'拿到最后一个的人输'呢?」
变成"取到最后一个者输"(Misère 版本):
→ 只需把原策略的"最后一个"让给对手:目标变成"给对方留 1 个"
→ 先手第一次拿 **n % k − 1** 个(本题:100 % 6 − 1 = 3 个)
→ 之后每轮凑 6,保证最后剩 1 个给对手 ✅
★ 说明:"胜负条件改变"会改变先/后手优势 → 面试时先澄清规则6. 五个囚犯依次抓绿豆,谁存活几率最大?(开放博弈题)
答:
题面:100 颗绿豆,5 个囚犯依次抓取(每人至少抓 1 颗、可摸到剩余数量但不能交流);抓完后,抓得最多和最少的人被处死(并列时都处死)。第几个囚犯存活概率最大?
【面试要点:这题【没有唯一确定答案】——考察的是建模与推理过程】
⚠️ 网上流传的"标准答案"互相矛盾,因为答案强依赖于:
① 并列时如何处理(都处死 / 都不处死 / 随机)
② 囚犯的理性假设(完全理性 / 有心理博弈 / 随机)
③ 抓完后是否知道其他人抓了多少
→ 所以正确的面试姿势是:【先澄清规则与假设,再给出定性分析】定性分析(按"信息量与位置优势"来答):
| 位置 | 优势 / 劣势 |
|---|---|
| 第 1 个 | 信息最少(不知道任何人的选择),只能押"平均数"附近;但优势是选择空间最大 |
| 第 2~4 个 | 信息逐渐增多(知道前面的人数与剩余量),可以做"针对性选择" |
| 第 5 个(最后) | 信息最多(知道前 4 人的总和与剩余),可以精确构造自己的数避开最大最小;但选择空间最小(剩余量可能很小) |
核心结论(表述方式比数字重要):
① 这是一个【非合作博弈】,不存在"绝对最优策略",只存在"相对更优的策略"。
② 理性人会【避免抓极端值】(最多/最少必死),因此倾向于抓【接近平均值】的数量
(100/5 = 20 附近)。
③ 因为大家都在往中间挤,**靠近中间的值更容易与他人"并列"**,而并列往往也危险
→ 产生"没有人能确保安全"的困境。
④ **越往后的位置信息优势越大**(能观察到前面所有人的选择),
但**越往后剩余量越少、可选空间越小**。
⑤ 综合而言,**通常认为"第 5 个(最后)"或"第 3/4 个"存活概率相对更高**,
但具体数值依赖并列规则与理性假设。面试怎么答(这是关键):
「这题没有唯一答案,我先要澄清三件事:并列怎么处理、囚犯是否完全理性、抓完是否公布。 在这些假设下,我的分析思路是:理性人会向平均数收敛 → 中间值反而更拥挤 → 极端值必死但中间值可能并列致死的两难。所以核心结论是「位置越靠后信息优势越大,但选择空间越小」——最后一个人可以利用已知信息精确避开极值。如果要给出数字,需要先固定并列规则与理性模型,否则任何数字都只是某个假设下的模拟结果。」这种回答展示的是"先定义问题再求解"的工程思维,远优于背诵一个可能错误的数字。
7. 25 匹马、5 条赛道,最少几场找出前三名?
答: 7 场——核心思想是「局部排序 + 利用偏序关系剪枝」。
【第 1 步:初赛(5 场)】
25 匹分成 5 组(每组 5 匹),每组跑一场 → 得到组内排名
设结果为:
A组:A1 > A2 > A3 > A4 > A5
B组:B1 > B2 > B3 > B4 > B5
C组:C1 > C2 > C3 > C4 > C5
D组:D1 > D2 > D3 > D4 > D5
E组:E1 > E2 > E3 > E4 > E5
【第 2 步:各组第一名决赛(1 场)】
跑 A1 B1 C1 D1 E1,得到组间顺序。假设结果是:
**A1 > B1 > C1 > D1 > E1**
→ **A1 一定是总第 1 名**(它比本组所有人都快,又比 B1~E1 都快)
【第 3 步:确定第 2、3 名(1 场)】
现在做【剪枝】:谁还有可能是总第 2 或第 3?
· D 组、E 组全部淘汰(连 D1/E1 都排在 C1 之后,不可能进前三)
· 各组的第 4、5 名淘汰(本组就至少有 3 匹比它快)
· A 组的 A4、A5 淘汰(A1 A2 A3 都比它快)
· B 组的 B3 及以后淘汰(B1 B2 加上 A1 至少 3 匹比它快)
· C 组只剩 C1 可能(C1 前面已有 A1 B1)
候选集 = { **A2, A3, B1, B2, C1** } —— 恰好 5 匹!
→ 让这 5 匹跑一场,**前两名即总第 2、第 3 名** ✅
【总计】5 + 1 + 1 = **7 场**可能进前三的只剩 5 匹:
A2、A3、B1、B2、C1—— 恰好一场就能决出第 2、3 名。
可迁移的思想(面试最有价值的部分):
| 思想 | 说明 |
|---|---|
| 局部排序 → 全局剪枝 | 不必知道全部 25 匹的全序,只需排除掉不可能的候选——这就是"减少搜索空间" |
| 利用偏序传递性 | "A1 > A2 且 A1 > B1 且 B1 > B2"可以推导"A1 > B2",从而剪掉大量候选 |
| 工程映射 | Top-K 问题(大顶堆/小顶堆)、多路归并(K 个有序流合并取前 N)、数据库的 ORDER BY LIMIT(各分片先局部 Top-N,再归并)、锦标赛/败者树(多路归并的高效实现) |
三、公共知识与归纳
8. 100 户人家的病狗:第 7 天全部被处决,共有几只病狗?
答: 7 只——核心是公共知识的层层归纳。
题面:每户养 1 条狗,共 100 条。主人能看出别人的狗是否有病,但看不出自己的(且不会告诉别人)。规则:一旦确定自己的狗有病,就必须当天处决。第 1~6 天无人行动,第 7 天所有病狗同时被处决。问共有几只病狗?
归纳推理(从 n=1 开始):
每一层推理都依赖上一层的"没人动手"——链条的起点是那条公开宣布("至少有一只病狗"),它把「我知道」升级为「所有人都知道所有人都知道……」。
为什么这是"公共知识"问题(关键,面试要讲这一层):
★ 题目的"公告"("至少有一只病狗,发现就要处决")看似是所有人都知道的事,
但它真正的价值在于让"我知道"升级为【所有人都知道】,
进而【所有人都知道所有人都知道】……(无限层)
对比:
· 若【没有公开宣布】"至少有一只病狗":
→ 如果只有 1 只,主人看到【没有】病狗时会想"也许一只都没有"
→ 无法启动归纳链 → **永远不会有人动手**
· 【公开宣布】之后:
→ 归纳链启动 → 第 n 天处决 ← 这就是公告的价值
★ 所以这题的答案不是关键,"**公共知识的递推**"才是考点。
同理:黑帽子题(关灯后自认黑帽就打耳光,第 3 次关灯有声音 → 3 顶黑帽)、
数不清的绿眼睛岛民题,都是同一个模型。追问:「如果有人认为别人不一定理性,答案会变吗?」
会,而且会"崩掉"。
· 归纳链成立的【前提】是:**所有人都是理性的,且所有人都知道所有人都是理性的**……
· 一旦有一环"不知道别人是否理性"(或"不知道别人是否知道自己是理性的"),
归纳推理就无法启动或中断 → 可能出现"永远无人行动"或"提前/滞后行动"。
★ 这正是"公共知识"与"共识"在分布式系统中的难点所在。四、数学、建模与题面理解
9. 小猴子搬 100 根香蕉,走 50 米,每次最多搬 50 根,每走 1 米吃 1 根,最多搬回几根?
答: 16 根——关键是分段处理:在"需要来回搬运"和"只需一趟"的分界点切换策略。
分界点怎么找:只要剩余 > 50 根就必须来回搬(一次搬不完),代价是每米 3 根。
所以要尽快让剩余降到 50 以下:100 − 3x ≤ 50 → x ≥ 16.67,取 x = 17 米。
(若只走 16 米:消耗 48 剩 52 根,仍需两趟;17 米处剩 49 根,正好可以一趟 ✅)
为什么这样最优(面试要说的"为什么不能更优"):
① 只要剩余 > 50 根,就【必须】来回搬(一次搬不完)
→ 这个阶段"每米 3 根"的代价是无法避免的
② 所以最优策略是:【尽快让剩余量降到 50 以下】,即尽早进入"一趟"阶段
③ 这就是为什么要走到"刚好让剩余 ≤ 50"的位置(本题 17 米处)再改策略
④ 反过来,如果只走 16 米(消耗 48,剩 52 根):还要再回来一次,总消耗更大
→ 16 米处剩 52 根仍需两趟;17 米处正好 49 根,可以一趟 ✅可迁移的思想:
"分段最优化" —— 当成本函数在不同区间不同时,先找到成本结构变化的临界点,在每段内使用该段的最优策略。工程映射:批量处理的批次大小选择、网络传输的分片阈值、IO 的缓冲区大小(小于某阈值单次传输更优,超过则分批)——都是"成本结构在某个点发生变化"的同类问题。
10. 数学与数论三类:连续整数之和、余数问题、2 的幂
答:
① 连续正整数之和为 1000,共有几组?
【方法】设首项为 a(≥1),共 k 项(k ≥ 1),则:
a + (a+1) + … + (a+k−1) = k(2a + k − 1) / 2 = 1000
→ k(2a + k − 1) = 2000,且要求 a = (2000/k − k + 1) / 2 为 ≥1 的整数
【枚举 k(2000 的约数:1,2,4,5,8,10,16,20,25,40,…)】
k = 1 → a = (2000−1+1)/2 = 1000 ✅ → {1000}
k = 2 → a = (1000−2+1)/2 = 499.5 ✗
k = 4 → a = (500−4+1)/2 = 248.5 ✗
k = 5 → a = (400−5+1)/2 = 198 ✅ → {198…202}
k = 8 → a = 121.5 ✗
k = 10 → a = 95.5 ✗
k = 16 → a = (125−16+1)/2 = 55 ✅ → {55…70}
k = 20 → a = 40.5 ✗
k = 25 → a = (80−25+1)/2 = 28 ✅ → {28…52}
k ≥ 40 → a 为负或非整数 ✗
【答案】**4 组**:1000;198~202;55~70;28~52
【规律】k 必须整除 2000 且 (2000/k − k + 1) 为偶数。
也可用"平均值为整数或半整数"快速判断:k 为奇数时平均值须为整数。② 企业人数在 1700~1800 之间,被 5 除余 3、被 7 除余 4、被 11 除余 6,共多少人?
【技巧:把余数"凑成统一形式"】
观察:3, 4, 6 各自都"差 2"就到除数(5−3=2,7−4=3?)
换个思路:看 2N
2N ≡ 6 ≡ 1 (mod 5) (因为 2×3 = 6 ≡ 1)
2N ≡ 8 ≡ 1 (mod 7) (2×4 = 8 ≡ 1)
2N ≡ 12 ≡ 1 (mod 11) (2×6 = 12 ≡ 1)
→ **2N ≡ 1 (mod 385)**,其中 385 = 5 × 7 × 11(lcm)
→ 2N = 385k + 1
【求落区间的解】
385k + 1 要是偶数 → k 必须为奇数
· k = 7 → 2N = 2696 → N = 1348(不在区间)
· k = 9 → 2N = 3466 → **N = 1733** ✅(在 1700~1800)
【答案】**1733 人**
【可迁移】这是"中国剩余定理(CRT)"的实用解法:**先找一个能让所有同余式"统一"的变换
(乘 2 是为了把余数都变成 1),再用 lcm 递推**。
工程映射:分库分表的"路由取模"、哈希环、CRT 在密码学(RSA 加速)中的应用。③ 50 名运动员排成一排,"单数出列"反复执行,最后剩几号?
【模拟】
第 1 次:去掉奇数位 1,3,5,… → 剩 2,4,6,…,50(即原来的 2 的倍数)→ 25 人
第 2 次:把剩下的重新编号 1~25,去掉奇数位 → 剩原 4,8,…,48(4 的倍数)→ 12 人
第 3 次:剩原 8,16,…,48(8 的倍数)→ 6 人
第 4 次:剩原 16,32,48(16 的倍数)→ 3 人
第 5 次:剩原 32(32 的倍数)→ 1 人
【答案】**32 号** = 不超过 50 的最大 2 的幂(2⁵ = 32)✅
【通用结论】n 个人做这个操作,最后剩下的是 **不超过 n 的最大 2 的幂**。
(因为每一轮都保留"2 的倍数",k 轮后剩 2^k 的倍数)11. 抽象建模类:火车与鸟、4 人过桥
答: 这类题的特点是不要顺着"过程"模拟,而要抓"总量与时间"的关系。
① 火车与鸟(抽象建模的经典)
【题面】两列火车相距 s,分别以 15 km/h 和 20 km/h 相向而行;
一只鸟以 30 km/h 在两车之间往返飞行(碰到一车就折返),
直到两车相遇。问鸟总共飞了多远?
【❌ 错误做法】一段段累加鸟的飞行距离 —— 这是一个【无穷级数】,能做但很笨
【✅ 正确做法:抓"时间"】
① 两车相遇所需时间:t = s / (15 + 20) = s / 35 小时
② 鸟在这段时间里【一直在飞】,所以:
距离 = 30 × t = 30 × s/35 = **6s/7**
【为什么这是"建模"】把"无穷往返"这个困难的过程,
转化为"总时间 × 速度"这个简单的总量关系。
★ 面试价值:体现「**不要在细节上模拟,要找守恒量/总量关系**」的思维
(就像工程上"不要逐条模拟流量,而要看总吞吐与总时长")② 4 人过桥,1/2/5/10 分钟,手电只有一个、每次最多 2 人,如何 17 分钟过完?
规则:过桥必须带手电;每次最多 2 人同行,过桥耗时取较慢者;过去后必须有人把手电送回来。
❌ 直觉解法(让最快的 1 来回送手电)—— 19 分钟
✅ 最优解 —— 17 分钟(让最慢的两人「一次性一起过」)
本质:用两个快的人做「摆渡」,换取两个慢的人只通过一次。通用结论(4 人
a<b<c<d):
方案甲(快者摆渡)=c + a + d + a + b;方案乙(慢者结对)=b + a + d + b + b,取较小值。
【为什么这样最优(面试要说清)】
· 两个最慢的人(5 和 10)如果分别过桥,需要有人来回送手电,
总的"送手电成本"会很高
· 让 5、10 一起过 → 把"最慢的一次"只花一次,代价是让 1、2 各多跑一趟
· 本质是权衡:**"用两个快的人做'摆渡',换取两个慢的人只通过一次"**
· 通用结论(4 人 a<b<c<d):
方案甲(快者摆渡): c + a + d + a + b
方案乙(慢者结对): b + a + d + b + b ← 本题选这个
取两者较小值可迁移的思想:
「优化问题的关键往往不是"每步都最优",而是"把最贵的操作合并只做一次"」 —— 工程上对应:批量处理(把多次小开销合并成一次)、减少跨网络往返(RTT)、合并小文件。这也是"总成本最小化优于单步最优"的具体体现。
12. 题面理解类:九点十线、镜子问题、飞机绕地球
答: 这类题的共同点是——答案取决于你如何理解题面(隐含约束)。面试时先澄清、再作答是关键。
① 9 个点画 10 条直线,每条至少经过 3 个点
【经典陷阱】把"3×3 点阵的边界"当成了不可突破的限制
【正解】允许直线【延伸到点阵之外】:
3 条水平线 + 3 条竖直线 + 2 条对角线 = 8 条
+ 2 条【穿过点阵外部】的斜线(利用延长线上的点)
= 共 10 条,每条都过至少 3 个点 ✅
【考点】这是经典的"**打破题目没有明确规定的隐含约束**"
—— 题面只说"9 个点、10 条线、每条至少 3 点",
从未说"线不能超出 3×3 的方形区域"。
★ 这类思维在**产品/架构设计**里非常重要:
"用户说的限制,哪些是真实约束、哪些只是习惯假设?"② 镜子为什么颠倒左右而不颠倒上下?
【先纠正题面】镜子其实【既不颠倒左右,也不颠倒上下】——
它颠倒是【前后(深度)方向】。
用坐标表达:
镜像变换:(x, y, z) → (x, y, −z) ← 只有 z(前后)取反
x(左右)与 y(上下)都没有被改变
【那为什么"感觉"是左右颠倒?】
· 我们以【自己的身体】为参照系来解读镜像:
"镜中人的左手在我的右边" → 我们把它读成"左右交换了"
· 但实际上:镜中人是"**转过身来面对你**"的状态
—— 如果现实中真有个人转身面对你,他的左手也在你的右边
· 如果我们改用【客观坐标】(东南西北)描述,就不会有"左右颠倒"的错觉
【为什么上下不觉得颠倒?】
· 因为重力给了我们一个"绝对"的上下参照(头在上、脚在下),
而【左右没有绝对参照】(完全依赖人的朝向)
→ 所以"前后翻转"在"上下有绝对参照、左右没有"的情况下,
被我们【误读成了左右颠倒】
【面试表达】「镜子颠倒的是前后方向。之所以感觉像左右颠倒,
是因为我们用自己的身体(而非客观坐标)去解读镜像,
而上下有重力作为绝对参照、左右没有。」③ N 架相同飞机,每架油可绕地球半圈,可相互加油,至少几架能送一架绕地球一圈?
⚠️ 【这题条件敏感,答案强依赖于几个"没写出来的"假设,必须先澄清:】
① 飞机能否在机场降落、落地后能否重新加满油?
② 空中加油时,油能否无限转移?有没有"每架携带上限"?
③ 加油机是否必须安全返航(保住自己)?
④ 是否可以在沿途任何点加油?
【在常见版本(所有飞机必须安全返航、油可互相转移、携带上限 = 半圈油)下】
直观思路:把地球圆周按 1/8 为刻度分点,用"接力加油":
· 顺时针方向:多架飞机在不同刻度处为"主角"补油后返航
· 逆时针方向:另几架飞机在对面半圈处接应,保证主角到 1/2 处后
有人接回,且所有护航机都能安全返回
【面试安全答法】
「这题的关键在于【先明确假设】——是否允许落地加油、是否必须全员安全返航、
油能否自由转移。**在"必须全员安全返航、空中自由加油"的版本下,
经典结论是 3 架(含主角)即可;如果要求每架都返回原机场且不允许落地加油,
需要的架数会更多。** 我先把假设列出来,再推导。」
→ 展示"先定义问题"的严谨性,比报一个可能被追问倒的数字更安全面试总结(这类题的通用姿势):
「遇到题面含糊的题,第一句永远是『我先确认一下条件……』」。
这不是"答不上来",而是工程上最被看重的能力——需求不明时先定义清楚再动手。
13. 收尾必答:智力题的思维怎么迁移到工程与系统设计?
答: 这是智力题环节最有价值的收尾——面试官问完几道题后,通常会给机会让你总结。主动把套路映射到工程场景,能把"会做题"升级为"会思考"。
| 智力题套路 | 工程/系统设计中的对应 |
|---|---|
| 信息量 / 编码(天平、1000 瓶药) | 位图(Bitmap)、布隆过滤器、权限位、Feature Flag、请求 ID 分段编码、一致性哈希的虚拟节点——都是"把信息编码进有限的状态空间" |
| 二分/三分搜索 | 二分查找、B+ 树检索、ZooKeeper/etcd 的区间定位、git bisect、故障排查的"分段隔离法" |
| 状态转移 + BFS | 状态机(订单/工作流)、BFS/DFS 图搜索、限流算法(令牌桶本质是状态转移)、协议状态机(TCP 状态机) |
| 不变量 / 模运算 | 分布式 ID 的取模路由、分库分表的 hash 分片、一致性哈希、幂等设计中的"版本号/序列号" |
| 公共知识归纳 | 分布式共识(Raft/Paxos 的"多数派知道")、终止检测(Flink Checkpoint 等所有 task ack)、BYZANTINE 容错的"知道别人知道" |
| 贝叶斯与基数效应 | 告警降噪(低先验事件不能只看单指标阈值)、风控模型评估(Precision 优先)、A/B 实验的显著性判断 |
| 博弈与必胜态 | 限流与反爬的对抗(攻击者会试你的规则)、竞价/广告出价、资源调度中的策略博弈 |
| 找分界点分段优化(猴子搬香蕉) | 批量大小选择(batch size)、缓冲区大小、分批传输阈值、批处理 vs 实时处理的边界 |
| 把最贵的操作合并只做一次(过桥) | 批量写合并、减少 RPC 往返、合并小文件、日志批量刷盘 |
| 打破隐含约束(九点十线) | 架构评审中质疑"这是真约束还是习惯假设"、产品需求里区分"必须"与"想要" |
| 抓总量而非模拟过程(火车与鸟) | 容量规划(看总 QPS 与总耗时而非逐请求模拟)、性能测试的吞吐优先、成本预估的"总量法" |
| 先澄清条件再作答(镜子、飞机) | 需求澄清、接口契约定义、SLA 与边界条件的确定——工程上最重要的习惯 |
面试收尾的高分表达(可直接背):
「智力题考的不是答案,而是把自然语言转换成数学模型的能力——找状态、找约束、找不变量、验证边界。
这个能力在工程上的直接映射就是:面对模糊需求时,先定义清楚状态与约束(而不是急于写代码);面对复杂系统时,先找不变量与守恒量(而不是逐行模拟);面对反直觉现象时,先检查自己的先验假设(而不是相信直觉)。
就像设计模式不是背 23 个类图,而是识别变化点与职责边界——智力题也不是背答案,而是训练"把模糊问题结构化"的习惯。这两件事的本质是同一个能力。」
智力题系列小结:(一)信息量、状态与逻辑推理 →(二)概率、博弈、数学与综合名题。所有题目最终归到七个套路:信息量 / 状态转移 / 不变量 / 公共知识 / 贝叶斯 / 假设排除 / 抽象建模。掌握套路并在面试中主动展示推理过程,比背下答案重要得多。
