LOOP 12 / INTERVIEW LOOP / 4H
综合模拟:把算法、系统和证据接成回答
模拟一场 accelerator runtime 面试:有界输入流经过筛选和求和,最终返回一个结果。面试官会不断修改边界;你需要守住合同,并在不确定时说清下一步验证。
完成单元 78 · 陌生变体、英文答辩与下一阶段选择及其先备后安排本次训练。不绑定日历周。
先写自己的答案,再展开参考。这里按技能编写问题,不声称公司真题;自评与阅读都不会自动通过 G0。
先备与学习位置
TIME WITH OUTPUTS
240 分钟怎样用
闭卷恢复先备 · 15min
不查书解释五个词:oracle、背压、排空、部分结果、测量范围。用自己的代码或推演回答,不能把教材的实现当作个人项目经历。
留下:先不查章节,写三条判断和一个不确定点;再只补读相关章节的解释段。
澄清题目与手算 · 25min
读主问题,逐条写输入、输出、范围与失败行为。手算前两个公开用例,给自己的方案找一个反例。
留下:一份接口合同、逐步状态表和最小反例;不要先打开参考推演。
独立实现或设计 · 55min
为一个单客户端处理器写串行 oracle 与设计说明。每条记录是 int,输入最多 100 条、值在 [-100,100];只保留非负值,输出保留后的序列与总和。系统接收层采用容量 2 的队列。设计正常关闭和解析失败两条路径:已成功入队的记录按序处理;关闭后拒绝新入队;排空后完成;失败结果携带 error 标记及已经接受的数据的部分结果,不能装成完整成功。
留下:保存个人代码或设计稿。编码题保留编译命令;设计题为每个事件编号,不能只画没有状态的箭头。
边界与反证 · 25min
用题目的全部公开用例核对真实输出;另外创造一个与公开输入不同的边界。发现失败时缩小输入,再解释修复。
留下:实际结果、原始失败和修复原因各一份;设计题记录一个被拒绝的执行顺序。
按表现进入追问树 · 35min
从 n1 开始。每题先录下自己的回答,再展开标准;按满足或未满足条件跳转。树最多走一轮,卡住时把剩余时间用于分支中的纠错,不循环加时。
留下:记录经过的节点、原话、缺失条件和修订;只会复述标准的节点仍标记待重做。
英文口述与打断 · 30min
用本页英文提纲录制两轮 90 秒回答;第二轮在 30 秒处自问追问,先回答追问再回到主线。每轮回听并改写两个含糊句。
留下:两轮录音或逐字稿;圈出输入、因果、边界和限制各一句。参考英文在录完第一轮后再读。
复盘与安排重做 · 25min
对照强弱答案,选择一个真正出错的环节:合同、状态、实现、验证或表达。填本页记录模板,并约定下一天的 30 分钟。
留下:一个有失败输入的错误记录和一个可观察修复标准;不要把全部问题归因为粗心。
次日无答案重做 · 30min
次日改保留条件为严格正数,并把容量改为1。独立处理 accepted=[0,4,-2,4] 的正常关闭,以及只接受 [0,4] 后失败;画一次生产者被背压阻塞又被 close 唤醒的轨迹。
留下:这是本周 240 分钟中的最后 30 分钟,不另加预算。先关闭解答,用 20 分钟独立做,再用 10 分钟核验并记录是否仍需复习。
包括次日重做,总计 240min。局部错因复盘属于本次练习,额外的计划复盘按实际需要另记。
SOLVE BEFORE READING THE ANSWER
先独立处理这个问题
为一个单客户端处理器写串行 oracle 与设计说明。每条记录是 int,输入最多 100 条、值在 [-100,100];只保留非负值,输出保留后的序列与总和。系统接收层采用容量 2 的队列。设计正常关闭和解析失败两条路径:已成功入队的记录按序处理;关闭后拒绝新入队;排空后完成;失败结果携带 error 标记及已经接受的数据的部分结果,不能装成完整成功。
输入与输出合同
- 本场以结构化记录作为 oracle 输入;TCP 只讨论可能分片,不要求在 55 分钟实现完整 socket server。
- 处理非负值包括 0;总和采用足够范围的整数。
- 队列与线程设计必须说明谁关闭、如何唤醒、何时 join,以及输出是完整还是部分。
- 设计与本机运行记录分别标记;没有设备结果时只讨论 accelerator 后续验证计划。
手算之后,对照公开用例
| 输入或情形 | 预期 | 为什么 |
|---|---|---|
| 正常 accepted=[3,-1,0,2],然后 close | retained=[3,0,2]; sum=5; status=complete | 关闭后先排空,保留0。 |
| 接受 [3,-1] 后解析失败,再 close | retained=[3]; sum=3; status=error_partial | 部分结果必须带失败状态。 |
| 没有记录,正常 close | retained=[]; sum=0; status=complete | 空完成不永久等待。 |
| 容量2且消费者暂停,连续尝试加入3项 | 第三项等待或显式返回背压状态 | 不能覆盖前两项或无限增长;必须选一种合同。 |
| 正常 close 后再次 push | 拒绝 | 关闭状态不能悄悄复活。 |
先保留自己的解法、状态轨迹与验证记录,再打开参考。允许用自然语言或伪代码补充解释;不能用参考输出代替真实运行。
保存独立尝试后,阅读解法与状态轨迹
解法依据
先实现仅处理 accepted vector 的串行 oracle,保留 x≥0 并累计总和,用它验证处理语义。系统设计中所有队列状态与 closed 标记由同一同步协议保护;等待条件是有数据或已关闭,push 等待条件是有空间或已关闭。关闭唤醒相关等待者。消费者仅在 closed 且队列空时退出;拥有线程的作用域负责关闭并 join。解析失败由生产者记录错误并关闭;最终输出包含部分标记。给具体事件表而不是把全部操作写成“异步”。
逐步推演
容量2:push3→队列[3];push-1→[3,-1];消费3→[ -1 ]且 retained=[3],sum3;push0→[-1,0];消费-1 不改输出;push2;close;再消费0、2;closed且空时退出,最后得到 [3,0,2]/5/complete。失败路径只接受前两项,则不能出现未接受的0、2。
FOLLOW THE ANSWER, NOT A SCRIPT
从回答进入下一层追问
从 n1 开始。先录下回答,再展开判定;达到条件就走深入分支,未达到就按反馈缩小问题。一次最多走一轮,不靠反复查看同一答案累积“通过”。
NODE n1
消费者正等空队列,生产者解析失败退出但没 close,会怎样?
NODE r1
把第一个追问缩到最小输入,重新逐步说明。
我已作答:查看判定与下一分支
需要解释清楚:消费者可能永远等不到数据或结束;生产者失败路径必须可靠地发布关闭并唤醒,线程所有者最终 join。
NODE n2
如果 TCP 一次 read 只拿到半条记录,能当错误直接丢掉吗?
NODE n3
声称“优化后快2倍”时必须给出哪些证据?
我已作答:查看判定与下一分支
需要解释清楚:同一正确性合同、输入与环境、测量范围、原始样本、基线和变动;说明是否含传输及 warm-up,若未运行则只给验证计划。
达到
结论正确,并解释本节点给出的具体状态或反例。
保留关键推理:同一正确性合同、输入与环境、测量范围、原始样本、基线和变动;说明是否含传输及 warm-up,若未运行则只给验证计划。
这一分支结束:对照并复盘 →答案强在哪里,弱在哪里
保存自己的回答后,打开对照
弱答案
“我会用 GPU 并行处理,再给队列加锁。之前例子跑通了,所以这也可靠。”
强答案
“我先固定已接受记录的串行语义,再分别处理队列容量、关闭和失败。正常关闭要排空,解析失败返回显式部分结果。CPU oracle 验证数学结果;线程交错、网络分片和设备执行需要各自的测试,不能共用一句跑通了。”
强答案按输入合同、状态机、失败和验证建立联系,面对追问可以修改一个条件而不推翻整套说法。技术面试的可信度来自明确的责任和可验证边界。
在自己的原回答里划出一个缺失的条件或错误推理,再重说一遍。完整句子背熟,不代表能处理新约束。
ANSWER, THEN HANDLE AN INTERRUPTION
英文口述与打断
Give a two-minute design answer, then handle an interruption about failure.
- Start with accepted-record semantics.
- Explain close-and-drain and partial failure.
- Separate correctness, concurrency, and performance evidence.
“Your producer throws while the consumer is waiting. What happens next?”
录完第一轮后,读英文示范
I first define the result over records that were successfully accepted. A normal close drains the queue before completion, while a parsing failure produces an explicitly marked partial result. Waiting consumers must be notified when the queue closes. I use a serial oracle for the transformation and separate tests for shutdown interleavings, framing, and any later device implementation.- 前 15 秒说明输入、输出和一个关键约定。
- 至少用一个本题的数值解释因果,不只罗列英文术语。
- 明确一个边界或尚未验证的限制;不能把教学推演说成项目经验。
次日关掉解答,换一个问题
次日改保留条件为严格正数,并把容量改为1。独立处理 accepted=[0,4,-2,4] 的正常关闭,以及只接受 [0,4] 后失败;画一次生产者被背压阻塞又被 close 唤醒的轨迹。
独立重做后核对
正常 retained=[4,4],sum=8,complete;部分 retained=[4],sum=4,error_partial。容量1满时后续push不能成功;close唤醒后应检查closed并拒绝,不能因刚获得锁而继续插入。
- 关闭主问题答案并使用新输入独立完成。
- 给出结果与原因;失败时记录最小反例,不能只把完成标记改成通过。
重做的 30min 已计入本套4h;需要更多补课时记录实际用时,按缺口顺延。
记录实际回答与证据
# W12 算法 / 英文训练记录(仅个人练习,不是能力认证)
日期:
本次先备与尚不确定点:
主问题接口合同:
我最初的方案与状态表:
运行命令或设计事件编号:
失败输入 / 预期 / 实际:
修复与理由:
追问路径(节点 → 自己原话 → 缺口):
英文第一轮两处含糊句:
英文第二轮修订:
次日重做日期(30 分钟已含本周预算):
重做输入 / 实际结果 / 解释:
仍需补练:
本次练习的检查依据
正常/空/失败/关闭/容量边界都有输出或可检查设计;能完成三层追问和英文打断;据实际缺口决定继续专项,12周结束不自动代表通过所有面试。
模板在你的个人笔记中填写。网页只提供空模板;不会把这次训练写成项目经验或学习验收结果。