先这样答
我的设计是先把复杂任务拆成子任务 DAG,再按依赖关系安排执行。每个节点代表一个子任务,边表示前置任务和后续任务之间的依赖。调度时做拓扑排序,先执行没有前置依赖的节点。遇到互不依赖的步骤,就让它们并发执行。DAG 加并发是这个问题的关键。
执行过程中,我不会完全照着最初的计划走。系统要读取中间结果,并根据结果重新规划后续步骤。如果结果符合预期,就继续执行剩余节点。如果结果改变了后续任务的条件,就调整 DAG 或执行顺序。出现错误时,我按三级方式处理:先重试当前任务;重试仍然失败,就回退到前一个可用步骤;如果回退也无法解决,就交给人工介入。这样既能利用并发减少等待,也能根据实际结果调整计划。
面试官会怎么追问
-
「为什么要用 DAG,而不是按固定顺序执行?」 DAG 能明确表达子任务之间的依赖关系。拓扑排序可以保证前置任务先完成。互不依赖的节点可以并发执行,所以计划不会被固定串行流程限制。
-
「中间结果和原计划不一致时,你怎么重新规划?」 先判断中间结果影响了哪些后续节点。对仍然有效的部分继续执行,对受影响的部分重新安排。必要时修改后续 DAG,再按新的依赖关系执行。
-
「任务失败时,重试、回退和人工介入怎么选择?」 先重试当前任务,处理可能暂时出现的错误。多次重试仍失败,就回退到前一个可用步骤。回退无法继续时,再交给人工介入,避免系统继续执行错误计划。
回答的坑
- 只说多步规划,不说子任务 DAG、拓扑排序和并发执行,容易漏掉关键得分点。
- 只描述初始计划,不说明如何根据中间结果重新规划,也没有交代错误恢复层级。
同系列的题
这家公司的面经实录
—— 本题完 ——