# 1. Linux namespace 的 Mount、PID、Network、UTS、IPC、User 六种 A Mount 隔离挂载点、PID 隔离进程 ID、Network 隔离网络栈、UTS 隔离主机名、IPC 隔离 IPC、User 隔离 UID/GID ✓ 正确答案 B PID namespace 隔离网络栈 C Network namespace 隔离挂载点 D User namespace 不映射 UID
# 2. cgroup v2 的 cpu、memory、io 三大控制器 v2 形式 A memory 控制器没有 max 限制 B cpu 控制器用 io.max 控制带宽 C cpu 用 cpu.max/cpu.weight,memory 用 memory.max/high/low,io 用 io.max/io.weight 控制资源 ✓ 正确答案 D io 控制器不管设备 IO
# 3. cpu cgroup 的 cpu.max(quota + period)的带宽限制 A quota 是相对权重 B quota 是每周期可用的 CPU 时间,用尽后任务被 throttle 直到下周期 ✓ 正确答案 C period 决定 CPU 优先级 D quota 超过后可无限使用
# 4. Mount namespace 的 pivot_root 与容器根文件系统 A pivot_root 在 Mount namespace 中把根切换为容器镜像根,比 chroot 更彻底且防逃逸 ✓ 正确答案 B pivot_root 与 chroot 完全等价 C pivot_root 不改变根文件系统 D chroot 提供内核级隔离
# 5. 如何结合 PSI 与 cgroup 指标判断容器是 CPU 受限、内存受限还是 IO 受限,从而选择扩容维度? A 无法区分三者的瓶颈 B PSI 只能看到 cpu 压力 C throttle 说明内存受限 D cpu.pressure 高且 nr_throttled 增长说明 CPU 受限,memory.pressure 与 max 事件说明内存受限,io.pressure 说明 IO 受限 ✓ 正确答案
# 6. CPU 带宽控制(cpu.max)在突发负载下为何会出现 throttle 抖动,burst 参数如何缓解? A burst 允许突发时借用未来配额,平滑突发节流,但会从未来周期扣除 ✓ 正确答案 B burst 提高配额上限且不扣除 C burst 与 quota 无关 D burst 会永远解除限制
# 7. cgroup v2 的 namespace(cgroup namespace),容器内可见的 cgroup 路径隔离 A cgroup namespace 为容器提供伪根,隔离 /proc/self/cgroup 显示的路径,但不改变资源限制 ✓ 正确答案 B cgroup namespace 改变资源限制 C cgroup namespace 隐藏 CPU 用量 D cgroup namespace 与路径无关
# 8. io cgroup 的 io.max 与 io.stat 的 PSI 指标 A io.stat 无法观测 IO 用量 B io.max 只限制 CPU C io.max 按设备设置 IO 绝对上限,io.stat 提供 IO 统计,io.pressure 反映 IO 压力 ✓ 正确答案 D io.pressure 反映内存压力
# 9. User namespace 的 UID/GID 映射(rootless 容器) A uid_map 把容器内 UID 映射到宿主 UID,容器内 root 在宿主上是非 root 用户,支撑 rootless 容器 ✓ 正确答案 B 容器内 root 在宿主上也是 root C User namespace 不映射 UID D rootless 容器不需要 User namespace
# 10. Time namespace(Linux 5.6+)的容器内时钟偏移 A Time namespace 不影响任何时钟 B Time namespace 隔离墙上时间 C Time namespace 隔离 hostname D Time namespace 通过偏移隔离 boottime/monotonic 时钟,支持容器迁移一致性,但不隔离 REALTIME ✓ 正确答案
# 11. cgroup v2 的 domain controller 与 threaded controller 有何区别,delegation 机制如何支持容器运行时安全分权? A delegation 需要 root 才能管理任何子 cgroup B domain 控制器是线程级 C threaded 控制器是进程级 D domain 控制器进程级、threaded 控制器线程级,delegation 允许在子树内安全分权管理 cgroup ✓ 正确答案
# 12. pids 控制器如何限制容器内进程与线程总数,fork bomb 如何被 pids.max 拦截? A pids.max 只限制内存 B pids.max 限制进程/线程总数,达到上限后 fork 失败,从而拦截 fork bomb ✓ 正确答案 C fork bomb 无法被 pids 限制 D pids.max 限制 CPU 使用
# 13. memory.high 与 memory.max 在触发回收与触发 OOM 上的语义差异,为何 high 被推荐为软性节流阀? A 两者语义完全相同 B high 超限立即 OOM C max 超限不会 OOM D max 超限触发回收与 OOM,high 超限触发软性节流不立即 OOM,因此 high 是软性节流阀 ✓ 正确答案
# 14. cgroup v1 与 v2 的设计哲学差异,单一 hierarchy vs 多 hierarchy A v1 用统一 hierarchy B v1 用多 hierarchy 每控制器独立挂载,v2 用统一 hierarchy 所有控制器挂同一棵树保证一致 ✓ 正确答案 C v2 用多 hierarchy D 两者设计完全相同
# 15. cgroup v2 的统一层级(unified hierarchy)与 subtree_control 委派 A 统一层级允许多棵独立树 B subtree_control 禁用所有控制器 C 统一层级是单棵 cgroup 树,subtree_control 决定子节点启用的控制器并实现委派 ✓ 正确答案 D 控制器在子 cgroup 默认启用
# 16. memory cgroup 的 memory.peak 与 memory.current 观测 A memory.current 是历史峰值 B memory.peak 是当前用量 C memory.current 是当前用量,memory.peak 记录历史峰值,用于合理设置内存上限 ✓ 正确答案 D 两者无法观测内存
# 17. unshare 与 clone 新 namespace 的工程应用 A clone 让当前进程进新 namespace B clone 让子进程进入新 namespace,unshare 让当前进程进入新 namespace,两者都用 CLONE_NEW* 标志 ✓ 正确答案 C unshare 创建新进程 D 两者都不涉及 CLONE_NEW*
# 18. Network namespace 的独立网络栈与 veth pair A veth pair 隔离网络栈 B Network namespace 隔离各自网络栈,veth pair 是一对虚拟网卡用于连通两个 namespace ✓ 正确答案 C Network namespace 共享一份 IP 表 D veth pair 无法连接容器
# 19. PID namespace 与进程 ID 隔离(独立 PID 1) A PID namespace 隔离进程 ID 视图,容器内 PID 1 是 init,负责回收孤儿并处理信号,其退出会导致 namespace 失效 ✓ 正确答案 B 容器内 PID 1 能看到宿主所有进程 C PID 1 不负责回收 D PID namespace 不隔离进程 ID
# 20. cgroup v2 的 BPF 子系统(cgroup_skb_md)的高级用例 A cgroup_skb_md 是内存上下文 B cgroup BPF 只能监控 CPU C BPF 程序可挂载到 cgroup,通过 cgroup_skb_md 等实现网络过滤、限速与基于 cgroup 的访问控制 ✓ 正确答案 D BPF 无法挂载到 cgroup
# 21. cgroup v2 的"委派"(delegation)机制与 systemd 协同 A delegation 与 systemd 无关 B delegation 需要 root 管理所有子 cgroup C systemd 不用 cgroup 管服务 D delegation 把子树资源控制权委派给子 owner,systemd 通过 cgroup 管理服务并可与容器运行时协同委派 ✓ 正确答案
# 22. namespace 负责“视图隔离”、cgroup 负责“资源限额”,二者的职责边界如何划分? A cgroup 负责视图隔离 B namespace 负责限制资源 C namespace 负责视图隔离(看什么),cgroup 负责资源限额(用多少),二者互补 ✓ 正确答案 D 两者职责完全相同
# 23. cpu.weight 比例分配与 cpu.max 绝对上限的关系,两种限制同时存在时如何共同决定 CPU 带宽? A 实际带宽 = 权重分配 + max 上限 B 实际 CPU 带宽 = min(按权重分配的份额, cpu.max 上限),权重决定竞争份额、max 决定封顶 ✓ 正确答案 C 存在 cpu.max 时权重失效 D 两者取较大者
# 24. cgroup freezer(cgroup.freeze)如何实现容器快照与批量暂停,与 SIGSTOP 在语义上的差异? A cgroup.freeze 与 SIGSTOP 完全相同 B cgroup.freeze 只冻结单个进程 C SIGSTOP 能冻结整个 cgroup D cgroup.freeze 一次性冻结整个 cgroup 所有进程,适合容器快照/批量暂停,比逐进程 SIGSTOP 更原子 ✓ 正确答案
# 25. io.weight(BFQ/blkio 权重)与 io.max 分别提供按比例分配与绝对上限,各自的适用与局限是什么? A 两者作用完全相同 B io.max 提供按比例分配 C io.weight 提供绝对上限 D io.weight 提供竞争时的按比例分配(无上限),io.max 提供硬性绝对上限(不随竞争变化) ✓ 正确答案
# 26. IOPRIO(io_priority)在 mq-deadline/bfq 调度器下如何影响请求派发,为何在 none 调度器下基本无效? A bfq 不消费优先级 B none 调度器会处理 IOPRIO C IOPRIO 与调度器无关 D mq-deadline/bfq 会按 IOPRIO 调度请求,none 直接透传不做优先级处理所以基本无效 ✓ 正确答案
# 27. cgroup v2 的 “no internal process” 约束为何要求控制器只作用于叶子节点,迁移进程时如何遵守? A 父节点可拥有自己的进程 B 进程可放在任何 cgroup 节点 C 启用了控制器的 cgroup 中进程只能放叶子节点,父节点做聚合,迁移进程时需放入叶子 ✓ 正确答案 D 该约束与控制器无关
# 28. memory.swap.max 与 memory.max 的协同,swap 上限为何默认与内存上限联动,内存回收时 swap 的优先级如何? A swap 上限默认 0 需显式启用,"内存+swap"总量限制防止绕过内存上限,回收时优先回收文件页、swappiness 决定匿名页 swap 倾向 ✓ 正确答案 B swap 上限独立于内存上限 C swap 回收优先于文件页 D swappiness 不影响 swap