跳转至

Kimi 二面录音复盘:coding 现场崩点与恢复路线

一句话结论

这场二面确实表现差,但不是“整个人没价值”。面试官开场就说上一位面试官对整体评价不错,只是题目写得不太 ok;结束时也说“能看到你的优势在哪里,但是短板也是很短”。这说明核心问题仍然非常集中:裸手 coding、基础建模、现场调试和 AI coding 责任边界没有过线

不要把它解释成 Agent 方向失败、项目经历失败或未来实习失败。正确解释是:

项目/方向/沟通有亮点,但 coding 基线太薄;
AI 可以帮写代码,但我必须能建模、读错、调试、验收和兜底。

面试流程还原

1. 开场信号

面试官明确说这次是加面,原因是上一位面试官觉得整体还可以,但 coding 题目写得不够好,所以这次先上来写一个比较简单的题。这个信号非常清楚:这不是泛项目面,而是 coding 过线面。

你开场表达了感谢和准备强度,但说得太满、太慌:

  • “我以为要挂了”
  • “什么都不干一直刷题”
  • “白天实习一边摸鱼一边刷题”
  • “尽人事听天命”

以后开场只需要说:

谢谢老师给我加面的机会。我也复盘了一面里 coding 暴露的问题,
这几天主要在补手写和调试流程。今天我会尽量把思路、边界和调试过程讲清楚。

2. coding 题:不定长二维数组按列转置

题目大意可以还原为:给一个不定长二维数组,把每行的第 0 个元素组成输出的第 0 行,每行的第 1 个元素组成输出的第 1 行,以此类推。核心不是复杂算法,而是 jagged array 的列遍历

标准低压写法:

def transpose_jagged(nums):
    if not nums:
        return []

    max_len = max(len(row) for row in nums)
    ans = []

    for col in range(max_len):
        level = []
        for row in nums:
            if col < len(row):
                level.append(row[col])
        ans.append(level)

    return ans

如果题目要求扁平输出,把最后一行换成:

res.extend(level)

这题的核心句只有一句:

外层 col 表示我要取第几列;内层 row 遍历每一行;只有 col < len(row) 才能取 row[col]。

现场真正卡住的不是 Python 高级语法,而是变量语义没有钉住:

  • i/j 没有先定义清楚谁是行、谁是列。
  • 把普通矩阵转置、排序、哈希表、长度映射混在一起。
  • level 放错循环层级,导致输出形状错。
  • 对不定长数组缺少 if col < len(row) 越界保护。
  • 没有先用 [[1,2],[3,4]][[1,2,3],[4],[5,6]] 手推。

以后遇到二维数组,第一句必须先说:

我先不写代码,先把两个下标定义清楚:row 是第几行,col 是第几列。
这题输出按列组织,所以外层应该是 col,内层扫所有 row。

3. 调试流程暴露的问题

面试官多次提醒“一步一调”“打印你正在处理的数据”“先保存文件”。这里暴露的是工程调试基线:

  • 文件没保存,导致运行结果和当前代码不一致。
  • 打印了辅助变量,却没有打印真正要处理的数据结构。
  • sort 放在循环里,每次 append 都排序,导致结果越看越乱。
  • 看到报错时没有先读报错含义,而是继续改结构。
  • 依赖 Codex 给答案,但没有把 Codex 输出转成自己的变量语义。

以后现场调试固定五步:

1. 保存文件。
2. 只放一个最小样例。
3. 打印输入、关键中间变量、输出。
4. 先解释当前输出为什么错,再改一行。
5. 每改一小步就重新运行。

4. AI coding 展示没有转成优势

面试官后来其实给了一个机会:让 Codex 帮忙用 Go 写快速排序并跑起来,想观察你怎么和 AI 协作。这本来是你的强项入口,但你当时的回答又滑回了“我不熟环境”“不知道会装到哪里”“平时 AI 帮我改”。

更好的做法是直接把任务拆给 Codex:

请在当前目录创建一个最小 Go 项目,写 quicksort 的 main.go,
包含一个固定数组样例,打印排序前后。
先检查本机是否有 go;如果没有,不要随意全局安装,先告诉我缺少什么。

然后自己负责三件事:

1. 看生成的文件在哪里。
2. 看运行命令和报错。
3. 看输出是否真的排序成功。

AI coding 面试不是证明“AI 能写”,而是证明:

我能给 AI 清楚上下文,约束它不要乱装环境;
我能读懂它改了什么;
我能运行、验证、定位错误,并让它按我的判断修。

5. 自我叙事伤害了自己

这场面试后半段最大的问题不是技术,而是你把短板解释得太自毁。下面这些话以后都不要再说:

  • “学校作业也都是 AI 做的”
  • “小厂不体面”
  • “三天肯定就是拟合题”
  • “希望考一道 LeetCode 原题然后默写”
  • “如果是大一的我可能都能做出来”

这些话会让面试官把问题从“短期 coding 不稳”升级成“长期学习和工程责任感不稳”。

更安全的表达是:

我过去在项目里更多承担的是需求拆解、AI 协作、代码 review 和功能验收,
所以对裸手写小题的训练不足。这个问题今天暴露得很明显。
但我也知道在 AI coding 场景里,人仍然要负责建模、边界、调试和最终质量,
所以后面我会把训练重点从背题转到基础循环、数据结构和调试流程。

真正的失败层级

P0:裸手小题建模不过线

不是 Hot100 没刷够,而是普通数组题一旦不是熟悉母题,就不能稳定拆成变量、循环、边界。

训练目标:

题意 -> 最小样例 -> 变量语义 -> 外层循环是什么 -> 内层循环是什么 -> 越界条件是什么

P1:Python 基础循环和容器不够自动化

你会概念,但写代码时 range(len(...))、二维数组下标、append 层级、sort(key=...)、越界保护没有形成肌肉记忆。

训练目标:

每天 20 分钟裸写 5 个小函数:
二维数组转置、不定长数组列遍历、按长度排序、频次统计、BFS/DFS 小图遍历。

P2:调试流程不够工程化

如果看不到报错、保存、打印、样例验证,AI coding 岗也会危险。因为真实工作里 AI 会写错,人的职责就是发现它错在哪里。

训练目标:

每个 drill 必须记录:输入、期望输出、实际输出、错因、改动。

P3:面试沟通过度自我否定

真实短板可以承认,但不能把自己讲成“不可靠”。要承认问题,同时强调修复路径和已有优势。

固定句:

这块我确实暴露了短板,但我能明确定位到是裸手建模和调试流程问题,
不是完全没有工程经验。后续我会用小题和 AI coding drill 把这层补起来。

接下来怎么修

今晚

不要继续惩罚式刷题。今晚只做三件事:

  1. 读完这份复盘。
  2. 手写一遍 transpose_jagged,用两个样例跑过。
  3. 睡前只记一句:AI coding 也要求人能建模、读错、调试、验收。

未来 7 天

每天 60-90 分钟,分成两块:

30 min 基础 coding drill:
数组/字符串/哈希/排序/二维数组/图 BFS/DFS,不追 Hot100 原题。

30-60 min LeetCode Easy/Medium recall:
题名 -> 思路注释 -> 主循环 -> 样例跑通。

新增一个专项:非 LeetCode 小题。题目来源可以非常朴素:

  • 不定长二维数组按列输出。
  • 按字符串长度排序。
  • 统计日志里每个 user 出现次数。
  • 合并两个列表并去重。
  • 给邻接表做 BFS。
  • 读一段文本,按行解析字段。

目的不是刷难题,而是恢复“看到普通需求也能写代码”的能力。

未来 3 周

把路线从“押题”改成“coding 基线 + Agent 项目防守”:

P0:基础 coding 小题和 Hot100 Easy/Medium 主模板
P1:AI coding drill,练 prompt、运行、读错、验收
P2:YouNavi / 实习项目按工程责任讲清楚
P3:DB/CA/OOP 期末保底,不再逃避课程底座

如果还有后续沟通

不要主动长篇解释失败。如果 HR 或面试官追问,可以用这版:

谢谢老师今天的加面,我也意识到自己这次主要暴露在裸手 coding 和调试流程上。
之前项目里我更多依赖 AI 协作完成需求拆解、review 和验收,但今天这题说明我在基础建模、边界和现场运行验证上还需要补。
不管结果如何,这个反馈对我很明确,我后面会把训练重点从背题转到小题建模、基础数据结构和 AI coding 的质量控制上。

最重要的判断

这次不是“方向错了”,而是“方向需要补底盘”。

你仍然适合继续投 Agent / AI coding / AI infra application 相关岗位,但必须把简历上的 AI coding 叙事从“我会用 AI 写代码”升级成:

我能用 AI 提效,但我对需求、代码理解、边界、调试、验证和质量负责。

这是下一轮能不能翻盘的核心。