Appearance
中高级面试与系统设计
用法:先读题,尝试说出自己的答案,只讲不变量、失败场景和验证方法,再看追问。每组的工程关联分别是 Runtime 实验、事件驱动 Operator、MySQL/网关、真实 Pending 工作流。
阅读顺序:Go 并发 · Kubernetes 控制器 · ModelDock 账本 · OpsPilot 工具与审批。每组题在相关实验之后使用。
Go Runtime 与服务
1. CPU 低却有大量 G,应该加 P 吗?
展开答题思路和追问
**回答:**先从 trace 区分 runnable 与 waiting;只有前者说明等待执行资源。 **原理:**等待 socket 的 G 已 park,更多 P 不会增加后端响应速度。
**追问:**怎样验证是 DB 池而非调度? 同时看连接池 WaitCount 与 G 的阻塞栈。
2. GOMAXPROCS=1 能当锁吗?
展开答题思路和追问
**回答:**不能,G 可以在多步读写之间被调度出去。 **原理:**并行度上限不是临界区或 happens-before。
**追问:**单 P 能运行并发配额测试吗? 可以,但仍须断言成功次数,并用 race 检查共享状态。
3. 阻塞系统调用会拖住整个服务吗?
展开答题思路和追问
**回答:**阻塞 M 不必长期占用 P;运行时可把 P 交给另一 M。 **原理:**内核阻塞线程与 netpoll 可等待的 fd 走不同路径。
**追问:**为什么仍限制并发文件读取? 线程、页缓存和存储设备都有独立上限。
4. 为什么不用一个全局 G 队列?
展开答题思路和追问
**回答:**每次入队出队都会争同一锁;局部队列减少共享写入。 **原理:**空闲 P 用 stealing 转移工作,另有全局队列补充公平性。
**追问:**队列均匀代表延迟均匀吗? 不代表,任务执行时间和阻塞行为也不同。
5. 抢占可以保证请求按时返回吗?
展开答题思路和追问
**回答:**不能;抢占提供运行机会,没有请求级 deadline 语义。 **原理:**调度公平与业务超时是两层机制。
**追问:**网关怎样取消已派发请求? 将入站 context 传给上游请求并关闭响应体。
6. 为什么 goroutine 数在超时后还增长?
展开答题思路和追问
**回答:**查找生产者向无人消费的 channel 发送的栈。 **原理:**超时只影响监听取消的代码;阻塞发送仍持有对象引用。
**追问:**缓冲 channel 能根治吗? 不能,只会推迟填满;在发送处 select 取消分支。
7. 栈增长为什么影响指针设计?
展开答题思路和追问
**回答:**G 栈可以复制到更大区域,受跟踪指针要随复制修正。 **原理:**长期保存的整数地址不参与指针更新或 liveness。
**追问:**返回局部变量地址安全吗? 语言层面安全,编译器选择逃逸或内联优化。
8. 逃逸报告中出现 moved to heap 就值得优化吗?
展开答题思路和追问
**回答:**先用 benchmem 和热点 profile 确认它在热路径的频率。 **原理:**逃逸只是分配位置,不包含实际调用次数。
**追问:**如何避免 benchmark 被优化掉? 消费结果或使用 b.Loop,并保留相同功能对照。
9. mcache 为什么按 P 组织?
展开答题思路和追问
**回答:**小对象常用分配路径不用所有线程争一把全局锁。 **原理:**按 size class 从本地 span 取位,缺 span 才向 central 补充。
**追问:**大对象也走同一个缓存吗? 大分配通常直接走 heap 页级路径。
10. 写屏障防的是什么错误?
展开答题思路和追问
**回答:**并发标记过程中,指针变化可能让已可达对象被漏标。 **原理:**屏障与标记器维护可达性不变量,而非锁住整张对象图。
**追问:**无指针字节数组会被逐字节扫描吗? 无需扫描成指针,但仍占活堆和内存预算。
11. 为什么 GC 次数更少 P99 反而差?
展开答题思路和追问
**回答:**活堆或 RSS 增大、页面压力变高;一次周期的工作也可能更重。 **原理:**GOGC 调的是目标,不是某个请求的延迟。
**追问:**下一步收集什么? 并列记录分配速率、assist CPU、RSS 和尾延迟。
12. GC Assist 为何出现在业务 goroutine 栈?
展开答题思路和追问
**回答:**分配者分担标记工作,限制分配相对标记的超前速度。 **原理:**高频分配能把 GC 成本转到请求路径。
**追问:**如何验证缓冲池有效? 对照每帧 B/op、allocs/op 与真实并发下的 RSS。
13. GOMEMLIMIT 能保证不被 OOMKill 吗?
展开答题思路和追问
**回答:**不能;它是运行时软目标,容器总内存还含非 Go 分配。 **原理:**限制过紧可能导致频繁 GC 而活对象仍不能回收。
**追问:**应该留什么余量? 给 native 库、栈外映射和系统开销留空间并实测。
14. inuse_space 没变而 alloc_space 暴涨说明什么?
展开答题思路和追问
**回答:**大量短命分配被回收,可能耗 CPU 却未持续滞留。 **原理:**两种采样分别反映存活与累计分配。
**追问:**怎么判断真正泄漏? 在可比负载和 GC 后比较多份存活 profile 与引用链。
15. Pool 为什么不适合保存数据库连接?
展开答题思路和追问
**回答:**对象可被运行时丢弃,无法表达连接关闭和总数限制。 **原理:**Pool 是可回收缓存,不是具有生命周期契约的资源池。
**追问:**何时不归还大缓冲? 容量超过已测的复用阈值时丢弃,避免保留极端峰值。
16. 发指针到 channel 后还能改原对象吗?
展开答题思路和追问
**回答:**只有在约定所有权或额外同步时才安全。 **原理:**send 同步到对应 receive,不约束发送之后双方的写。
**追问:**如何交还所有权? 消费者处理完再通过独立信号归还对象。
17. CAS 成功是否等于配额事务成功?
展开答题思路和追问
**回答:**只线性化一个地址上的更新。 **原理:**总量、租户和 outbox 涉及多个状态,单 CAS 无法一起提交。
**追问:**两个独立 CAS 失败补偿足够吗? 中间状态可见且程序可能崩溃,跨实例应使用事务。
18. RWMutex 一定优于 Mutex 吗?
展开答题思路和追问
**回答:**否,读侧计数和写者等待也有成本。 **原理:**临界区很短、写入频繁时共享计数本身会形成热点。
**追问:**如何缩短网关临界区? 锁内选端点并计数,锁外做 HTTP I/O。
19. 为什么 HTTP Transport 应复用?
展开答题思路和追问
**回答:**复用空闲连接减少 TCP/TLS 建连和端口消耗。 **原理:**响应体关闭、可复用状态和连接池参数共同决定复用。
**追问:**MaxIdleConns 等于并发上限吗? 不是;独立设置连接/请求上限和 deadline。
20. 为什么错误应保留 cause?
展开答题思路和追问
**回答:**上层要区分资源冲突、取消和永久配置错误。 **原理:**用 %w 保留链,errors.Is/As 可分类处理。
**追问:**把所有错误统一重试有什么问题? 权限错误不会恢复,放大 API 压力并掩盖真实故障。
Kubernetes 控制面
21. kubectl apply 成功代表服务在线吗?
展开答题思路和追问
**回答:**只代表 API 接受声明;再看 Deployment 状态和 Ready 端点。 **原理:**控制器和 kubelet 异步推进实际状态。
**追问:**如何区分控制器未观察和 Pod 未就绪? 比较 observedGeneration 后检查 conditions。
22. 身份认证和准入的职责如何区分?
展开答题思路和追问
**回答:**认证给出主体,授权判断动作权限,准入检查或变更对象。 **原理:**能 patch 某资源并不意味着所有配置都符合策略。
**追问:**OpsPilot 为什么还要白名单? RBAC 通常不限制某个 JSON 字段的值。
23. 为何不能把 Watch 当业务审计日志?
展开答题思路和追问
**回答:**连接可断,历史版本可被清理,重连可能需要 relist。 **原理:**它用于收敛到当前状态,不保证每个中间动作可永久回放。
**追问:**审计记录应放哪? 独立持久审计或数据库事务日志。
24. Informer 缓存读到旧值怎么办?
展开答题思路和追问
**回答:**用当前资源版本做受约束更新,冲突则重新入队。 **原理:**缓存追赶 API 是异步的,强行 sleep 没有正确性保证。
**追问:**何时直接读 API? 关键身份/版本前置条件或缓存无法满足的强观察。
25. Reflector 和 Indexer 分别做什么?
展开答题思路和追问
**回答:**一个获取 List/Watch 变化,一个维护可索引本地对象。 **原理:**中间通过队列与 informer handler 分发更新。
**追问:**为什么不在 callback 里部署模型? 耗时业务会阻塞事件处理,handler 只入队键。
26. WorkQueue 为什么只存键?
展开答题思路和追问
**回答:**同一键可去重,Reconcile 再读取当前完整状态。 **原理:**它传递需要检查的信号,不是操作指令序列。
**追问:**若 create/delete 中间事件合并? 检查对象存在性和永不复用的 UID。
27. resourceVersion 和 generation 能互换吗?
展开答题思路和追问
**回答:**不能,前者参与并发控制,后者表达声明版本。 **原理:**状态写入也能改变 resourceVersion,而不等于意图更新。
**追问:**Ready 条件为何带 observedGeneration? 防止把旧版本的就绪结果误作新声明结果。
28. Status 为什么不能每轮更新时间?
展开答题思路和追问
**回答:**无变化也写入会触发 watch 和下轮 Reconcile。 **原理:**这种反馈扩大 etcd 写入和工作队列负载。
**追问:**什么时候改 lastTransitionTime? 条件真值发生转换时。
29. OwnerReference 为什么用 UID 而非名字?
展开答题思路和追问
**回答:**名字可删后重建,新对象不应继承旧对象的孩子。 **原理:**垃圾回收依赖对象身份和作用域。
**追问:**同名 Deployment 无 owner 怎么办? 拒绝接管,记录冲突,要求显式处理。
30. Finalizer 解决什么,代价是什么?
展开答题思路和追问
**回答:**在对象消失前给控制器机会完成清理。 **原理:**删除先设置时间戳,控制器清理后移除 finalizer。
**追问:**控制器故障会怎样? 对象停在 Terminating,需恢复控制器而非盲删 finalizer。
31. Leader Election 能防止重复外部扣款吗?
展开答题思路和追问
**回答:**不能,只减少并行领导者的正常工作。 **原理:**租约切换或响应丢失仍可重复执行副作用。
**追问:**ModelDock 的去重在哪里? 数据库唯一请求 ID 与确定名称的资源。
32. 为何 envtest 中 Pod 不会 Ready?
展开答题思路和追问
**回答:**它主要运行 etcd 与 API Server。 **原理:**没有调度器、kubelet 和完整控制器链。
**追问:**怎样测试真实恢复? Kind 注入漂移/重启控制器,再检查 UID 与状态。
33. Filter 与 Score 可以替代彼此吗?
展开答题思路和追问
**回答:**硬约束先过滤,评分仅对可行节点排序。 **原理:**不可行节点无论打多少分都不能承载请求。
**追问:**硬亲和不匹配该调权重吗? 不应该,先核对真实标签和意图。
34. Reserve 是否已经将容器设备传给 Pod?
展开答题思路和追问
**回答:**没有,它是调度周期内的扩展点。 **原理:**节点绑定与 kubelet 节点侧分配发生在不同阶段。
**追问:**平台业务预留又在哪层? 在集群之前约束租户预算,不拥有设备。
35. 为什么 toleration 不能保证 Pod 上 GPU 节点?
展开答题思路和追问
**回答:**容忍污点不强制选择节点。 **原理:**仍需设备 requests、selector 或 affinity 等约束。
**追问:**节点有 GPU 但未广告资源呢? 检查驱动和 Device Plugin、节点 allocatable。
36. Pod 没日志如何判断 FailedScheduling?
展开答题思路和追问
**回答:**查 PodScheduled condition 和同 UID 事件。 **原理:**未绑定节点时不存在可读的应用容器日志。
**追问:**事件过期怎么办? 保留不确定结论并采集当前约束及节点状态。
37. Service 有地址为什么仍 503?
展开答题思路和追问
**回答:**可能没有 Ready endpoint,或 targetPort 与监听不匹配。 **原理:**Service 对象存在不表示可用后端存在。
**追问:**怎么缩小范围? 查 EndpointSlice,再从同 namespace 检查 Pod 端口。
38. PDB 可以保护所有滚动更新吗?
展开答题思路和追问
**回答:**不可以,它约束受支持 eviction API 的自愿中断。 **原理:**Deployment 更新策略另行控制 surge 与 unavailable。
**追问:**GPU 满载时 surge 有何后果? 新 Pod 可能 Pending,旧 Pod 又不能及时退出。
39. liveness 和 startup 怎么为冷模型配置?
展开答题思路和追问
**回答:**加载期先用 startup probe,加载完成后再让 liveness 判活。 **原理:**过急的 liveness 会反复中断加载。
**追问:**readiness 的作用是什么? 控制是否接业务流量,不直接触发重启。
40. Namespace 能否隔绝跨租户网络?
展开答题思路和追问
**回答:**默认不能。 **原理:**RBAC、资源配额及网络策略保护不同维度。
**追问:**NetworkPolicy 写了就一定生效吗? 要确认 CNI 支持并验证实际连通性。
GPU 配额与推理
41. 为什么先写 request_id 再投递 CR?
展开答题思路和追问
**回答:**先有持久事实才能识别客户端重试与消息重放。 **原理:**唯一键把多个同意图申请折成一条。
**追问:**同 ID 不同 cost 怎么办? 拒绝并返回参数冲突。
42. 条件 UPDATE 为什么检查 RowsAffected?
展开答题思路和追问
**回答:**零行既可能是额度不足也可能目标不存在。 **原理:**WHERE 条件在数据库写入时求值,不靠过期的应用快照。
**追问:**Read Committed 还能防超卖吗? 正确条件、锁与事务共同保护不变量。
43. 不同租户为什么仍可能争同一把锁?
展开答题思路和追问
**回答:**它们可能选择同一个剩余 GPU 池记录。 **原理:**租户限额与节点容量是两个约束。
**追问:**怎样降低死锁风险? 统一加锁顺序,遇死锁回滚整笔事务再退避。
44. 事务 Outbox 解决哪个丢失窗口?
展开答题思路和追问
**回答:**本地扣账成功但发送事件前进程崩溃。 **原理:**副作用意图与账本同一事务提交。
**追问:**发完消息后崩溃怎么办? 按至少一次投递设计消费端幂等。
45. AlreadyExists 就能认定部署成功吗?
展开答题思路和追问
**回答:**不能,可能是名字冲突或对象不属于本申请。 **原理:**资源名称不是身份,参数也可能不同。
**追问:**生产应额外比对什么? 资源 UID、owner、不可伪造租户关系与 spec 摘要。
46. 为什么释放要等 Terminating Pod?
展开答题思路和追问
**回答:**旧容器有机会仍占设备,早释放会产生并存峰值。 **原理:**删除请求成功先于实际终止。
**追问:**节点失联怎么办? 保守对账并隔离节点,不能凭超时推断设备空闲。
47. 仅用优先级排序会怎样?
展开答题思路和追问
**回答:**持续到来的高优任务可以饿死低优任务。 **原理:**固定 priority 不体现等待时间。
**追问:**aging 能保证大申请一定运行吗? 不能,硬容量和到期时间仍限制可行性。
48. 为什么不用严格 FIFO?
展开答题思路和追问
**回答:**队头大申请不可满足会堵住后方可运行的小申请。 **原理:**跳过不可行项提升利用率却改变公平性。
**追问:**怎么观察取舍? 按租户和申请大小分别统计等待时间与超时率。
49. best-fit 有什么反例?
展开答题思路和追问
**回答:**作业动态退出,局部最紧凑的选择未必带来未来最优布局。 **原理:**它是在线启发式,不知道未来需求。
**追问:**真实 GPU 要额外看什么? 拓扑、卡型、MIG 分片、通信与显存约束。
50. 为什么扩容副本不能替代准入?
展开答题思路和追问
**回答:**声明副本数并不会产生设备,也未必有租户预算。 **原理:**HPA 写副本、scheduler 放置、平台扣账彼此独立。
**追问:**简化实现如何保安全? 预付峰值额度,接受闲置成本。
51. TTFT 包含哪些时间?
展开答题思路和追问
**回答:**客户端从发请求到首个非空生成内容的时延。 **原理:**含网络、排队、prefill 和首次 decode 的影响。
**追问:**首个 SSE 帧一定是首 token 吗? 不一定,role 或心跳帧可能没有内容。
52. 如何区分 TPOT 和端到端 P95?
展开答题思路和追问
**回答:**前者描述首 token 后的平均生成间隔,后者是请求总时延分位数。 **原理:**长输出可有小 TPOT 但总耗时很长。
**追问:**没有 token 用量能用 chunk 数吗? 不能,一帧可合并多个 token。
53. 为什么长 prompt 会影响别人?
展开答题思路和追问
**回答:**prefill 消耗算力、显存和调度预算。 **原理:**即使后续 decode 短,也可能推迟其他请求的首 token。
**追问:**如何设计对照实验? 固定输出长度、并发和硬件,只改变 prompt 长度。
54. KV cache 为什么随会话增长?
展开答题思路和追问
**回答:**每层历史位置的 K/V 需要在后续注意力计算中重用。 **原理:**避免重复计算换来了显存随序列长度增长。
**追问:**共享前缀是否自动节省所有显存? 取决于运行时支持、命中与分块管理。
55. PagedAttention 为什么减少碎片?
展开答题思路和追问
**回答:**逻辑连续序列可映射到分散的物理块。 **原理:**无需为每个序列预留连续最大长度。
**追问:**仍有什么浪费? 最后一块未用满、管理开销和容量上限。
56. Continuous Batching 为什么不是固定大 batch?
展开答题思路和追问
**回答:**生成轮次间可让已结束序列离开、新请求进入。 **原理:**不同请求的输出长度差异很大。
**追问:**batch 越大越好吗? 吞吐可能上升,显存压力和单请求排队也会变差。
57. 最少在途为什么也会失衡?
展开答题思路和追问
**回答:**两个在途请求可能有完全不同的 token 工作量。 **原理:**仅计请求个数看不到 decode 剩余工作和 KV 压力。
**追问:**加入指标要防什么? 样本陈旧、量纲错误、所有网关同时涌向同一低值。
58. 为什么流开始后不能随意换后端?
展开答题思路和追问
**回答:**新后端不共享已有序列上下文,客户端可能收到重复或分叉内容。 **原理:**下游已观察到副作用。
**追问:**在什么阶段可以有限重试? 尚未下传内容、请求可安全重放且总 deadline 允许时。
59. KEDA 的 cooldown 能解决 N 到 1 抖动吗?
展开答题思路和追问
**回答:**不能只依赖它,常规 HPA 缩容还要设计 stabilization window。 **原理:**缩零与非零副本调整属于不同控制路径。
**追问:**冷启动慢时如何验证策略? 同时记录队列、Ready 副本、加载时间和等待 SLA。
60. 同一模型多个 Pod 应如何验证 P95?
展开答题思路和追问
**回答:**从客户端按完成请求采样并报告错误率,不平均各 Pod 的 P95。 **原理:**分位数不可用简单算术平均聚合。
**追问:**监控查询怎么聚合? 对兼容 bucket 的直方图先聚合计数再算 quantile。
Agent 与运维执行
61. LLM 返回命令等于 Agent 吗?
展开答题思路和追问
**回答:**不等于,还需要宿主决定权限、执行工具并处理观测。 **原理:**模型输出只是建议,状态循环在应用里。
**追问:**本项目谁决定最终动作? 固定策略验证故障证据,再交人工批准。
62. Function Calling 与 MCP 区别?
展开答题思路和追问
**回答:**前者描述模型请求结构化工具,后者是宿主发现和调用工具的协议。 **原理:**模型不直接连接同一套 Kubernetes 凭证。
**追问:**不使用 LLM 还能用 MCP 吗? 可以,规则 planner 同样调用协议服务。
63. 为什么先 list_tools?
展开答题思路和追问
**回答:**确认当前服务能提供哪些能力和输入 schema。 **原理:**服务版本或权限可能改变工具集合。
**追问:**发现了写工具就能交给模型吗? 不能,planner 的枚举只允许读观察源。
64. ReAct 循环如何停止?
展开答题思路和追问
**回答:**证据已足、达到调用上限、超时或策略失败时停止。 **原理:**每一步都消耗时间和上下文,循环无条件重试会失控。
**追问:**步数满了却无结论怎么办? 输出证据不足,拒绝进入修复。
65. 如何防日志里的指令改变动作?
展开答题思路和追问
**回答:**把日志放在不可信观测字段,执行端单独限制动作与目标。 **原理:**提示词不是权限边界,参数还需服务端校验。
**追问:**为什么不提供通用 shell 工具? 任意参数会越过既定资源和操作范围。
66. FailedScheduling 是否足以删除 nodeSelector?
展开答题思路和追问
**回答:**不足,必须确认事件描述、目标 Pod 和实际 Deployment 约束。 **原理:**可能是 taint、资源不足或其它 affinity。
**追问:**本实验允许移除哪些标签? 仅专用 Deployment 的精确注入键值。
67. OOMKilled 和 137 为何组合判断?
展开答题思路和追问
**回答:**137 只表示 SIGKILL 形式退出,需结合 termination reason。 **原理:**独立信号能减少误把人工终止判成 OOM。
**追问:**生产根因如何继续细分? 核对 limit、峰值内存与节点压力。
68. CrashLoopBackOff 能否自动反复重启?
展开答题思路和追问
**回答:**不能,它说明退避,不说明重启会修复根因。 **原理:**配置错误和缺依赖在重启后仍存在。
**追问:**下一条证据是什么? 前次退出状态和 previous logs,必要时看配置版本。
69. DNS 失败和 Service 无端点怎么区别?
展开答题思路和追问
**回答:**先分名字能否解析,再分 DNS 成功后流量是否有 Ready 后端。 **原理:**两者发生在发现名称与转发端点两个层次。
**追问:**lookup 失败能证明 CoreDNS 崩溃吗? 不能,拼写、搜索域与网络策略都可能造成相同现象。
70. 为什么把完整日志留在模型外?
展开答题思路和追问
**回答:**长日志提高时延、成本,还会挤掉关键状态。 **原理:**用来源、UID、错误片段投影,检查点保留原始有界观测。
**追问:**为什么不能只留自动摘要? 摘要可能改变否定词或丢失版本,审批要能核对原证据。
71. 字符预算等于 token 预算吗?
展开答题思路和追问
**回答:**不等,tokenizer 与语言影响分词。 **原理:**字符截断仅是粗略输入界限。
**追问:**如何核对真实成本? 读取实际 usage,按模型/价格计费,缺失时标未知。
72. Checkpoint 与 Memory 能否共用语义?
展开答题思路和追问
**回答:**不能,一个恢复单任务,一个提供跨任务参考。 **原理:**前者按 thread_id 定位执行节点,后者有来源和验证时间。
**追问:**旧经验能直接触发 patch 吗? 不能,需要本次证据和审批。
73. 为何只保存已验证经验?
展开答题思路和追问
**回答:**否则错误建议可能被后续任务反复引用。 **原理:**修复返回 200 不等于业务恢复。
**追问:**验证成功也能永久复用吗? 不能,版本、命名空间和配置会变,应设 TTL 和来源。
74. interrupt 之前可否发通知或写数据?
展开答题思路和追问
**回答:**恢复时节点可能重新执行,应先把非幂等副作用拆开。 **原理:**检查点恢复不是跳到函数栈中任意一行。
**追问:**如果必须执行一次怎么设计? 独立节点加操作 ID 与幂等存储。
75. 审批保存的应是“同意修复”还是精确计划?
展开答题思路和追问
**回答:**应绑定主体、资源 UID、版本、动作和依据。 **原理:**宽泛批准无法限制稍后变更后的目标。
**追问:**Deployment 被同名重建怎么办? 拒绝旧批准,针对新 UID 重做诊断。
76. patch 为什么使用 test 操作?
展开答题思路和追问
**回答:**在 apiserver 同一 JSON Patch 中原子检查前置条件。 **原理:**先 GET 后普通 PATCH 中间存在并发窗口。
**追问:**冲突应自动放宽条件吗? 不应,先重新判断计划是否仍适用。
77. RBAC 为什么还要分读写身份?
展开答题思路和追问
**回答:**多数诊断阶段只需读取,写权限应只给受控执行器。 **原理:**Role 可以限制部署名称、资源与动词。
**追问:**能用 Role 原生限制 patch 字段吗? 通常不足,还需动作白名单或准入策略。
78. 修复 API 成功为什么还要 Verify?
展开答题思路和追问
**回答:**资源写入只是控制面接受,新的 revision 可能一直无法就绪。 **原理:**Deployment 滚动期间旧副本可持续 Ready。
**追问:**怎样避免旧 Ready 假阳性? 核对 UID、observedGeneration、updated/available 与总副本。
79. 如何评价拒绝未知故障?
展开答题思路和追问
**回答:**记录正确弃权与漏诊,不把所有拒绝都归为安全成功。 **原理:**准确率、任务成功率和越权率的分母不同。
**追问:**离线夹具可以测 MTTR 吗? 不能,只测诊断/工具选择;MTTR 需要真实注入与恢复时间。
80. 工作流重启怎样保证“最多一次修复效果”?
展开答题思路和追问
**回答:**同一操作 ID 重放时先检查已记录结果和资源版本。 **原理:**网络回包丢失时执行次数可能多于一次,效果仍可幂等。
**追问:**数据库和集群谁是真相? 审批/意图在数据库,实际执行结果要按 UID 回读集群。