Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

R.9 面试竞技场

面试不是背答案,是在追问下保持路径完整。每题的「追一问」是面试官最常接的下一句;答不上来,说明上一题是背的。

1. 初级:会不会用

#问题一句话答案追一问
1ps 的 STAT 里 D 是什么?不可中断睡眠,通常在等块设备 I/OD 多怎么查?
2硬链接和软链接区别?同一 inode vs 独立 inode 存路径为什么硬链接不能跨文件系统?
3chmod 4755 的 4 是什么?setuid,执行时以文件属主身份运行为什么现在不推荐?
4df 满但 du 小,为什么?被删除文件仍被进程持有怎么找?
5kill -9 和 kill -15 区别?KILL 不可捕获,TERM 可捕获清理为什么先 TERM?
6systemctl enable 和 start 区别?开机自启 vs 立即启动unit 的 WantedBy 是什么?
7ip addr 和 ifconfig 区别?iproute2/netlink vs 旧 ioctl为什么新系统不装 net-tools?
8crontab 和 systemd timer 怎么选?简单周期用 cron,要日志/依赖/精度用 timertimer 的 OnCalendar 怎么写?

2. 中级:说不说得清机制

#问题一句话答案追一问
9fork 后父子共享什么?打开文件描述(偏移)、COW 页;fd 表复制为什么 fork 大内存进程慢?
10write 返回就落盘了吗?没有,只到 page cache怎么保证落盘?
11O_APPEND 原子吗?单次 write 原子追加;多条写仍交错NFS 上呢?
12短读/短写怎么处理?循环 + EINTR 重试 + 0 处理为什么 read 可能只返回 1 字节?
13close 失败能重试吗?不能,fd 可能被复用那怎么保证数据安全?
14条件变量为什么 while?虚假唤醒/竞争,醒来重查谓词wait 内部做了什么?
15pthread_* 怎么报错?返回错误码,不设 errno为什么这样设计?
16epoll LT/ET 区别?持续通知 vs 变化通知ET 为什么必须非阻塞?
17epoll 为什么快?回调挂就绪链表,不轮询全部 fd红黑树干什么?
18select 的 1024 限制来自哪?fd_set 位图大小 FD_SETSIZEpoll 为什么没有?
19TCP 三次握手为什么不是两次?防止旧 SYN 建立错误连接/确认双方收发能力四次挥手为什么多一次?
20TIME_WAIT 为什么存在?处理迟到报文 + 让旧连接消散什么时候要 tcp_tw_reuse?
21CLOSE_WAIT 多说明什么?应用没 close,是 bug怎么定位?
22listen backlog 限制哪个队列?accept 队列SYN 队列怎么调?
23收包路径?NIC→NAPI→协议栈→socket 队列软中断打满怎么优化?

3. 高级:能不能做取舍

#问题答题骨架追一问
24设计百万连接服务器多 reactor + SO_REUSEPORT + epoll ET + 内存池 + 定时器 + fd/内存/backlog 估算怎么压测?瓶颈在哪?
25实现容器运行时namespace/cgroups/overlayfs/pivot_root/OCI/信号/安全容器逃逸怎么防?
26实现 B+ 树存储引擎页格式/buffer pool/分裂合并/WAL/恢复/事务崩溃恢复怎么保证幂等?
27实现用户态 TCP状态机/序号/重传/窗口/校验和/TUN怎么和 Linux 栈互通?
28排查 CPU 高top 分 us/sy/si/wa → perf → 内核/用户态 → 锁/拷贝%si 高怎么查?
29排查内存涨free/PSS/smaps/valgrind/ASan → 泄漏 vs 缓存 vs 碎片OOM 怎么定位?
30排查网络慢ss -tin/tcpdump/mtr → 重传/RTT/cwnd/丢包BBR 什么时候有用?

4. 答题纪律

  1. 先给结论,再给路径:一句话答案 + 三步展开,不要从定义背起。
  2. 带条件:「在 Linux 6.8 上」「对普通文件」「除非 O_DIRECT」。
  3. 承认边界:「这块我没做过,但我会这样查」比编造好。
  4. 给证据:说「用 ss -tin 看 retrans」比「可能是网络问题」强。
  5. 追问链:每个答案留一个可追问的钩子(版本、失败路径、替代方案),引导面试官往你熟的地方问。

5. 高频「送命题」

问题陷阱正确姿势
「write 之后数据在哪?」只说 page cache分「进程崩溃 vs 机器断电」两种情况
「fork 复制内存吗?」说「复制」COW;页表复制仍是成本
「epoll 一定比 poll 快?」绝对化连接多且活跃比例低时快;少量 fd 未必
「容器是轻量 VM?」混淆共享内核,隔离靠 namespace/cgroups
「TIME_WAIT 要调小?」乱调内核先分清主动/被动关闭;CLOSE_WAIT 才是 bug
「load 高就是 CPU 忙?」忽略 D 状态load 含不可中断睡眠
「O_DIRECT 一定快?」忽略对齐/缓存只有自管缓存且对齐时才可能
「volatile 能解决竞争?」混淆可见性/原子性用 atomic/锁

回 R.8 自测卷;需要补基础去 R.7 回忆卡。