3940 字
约 13 分钟
5
S02-X01 · 面试问答速查:操作系统 / 计算机网络 / 网络编程
定位:速查附录,可跳读。只做"题干 → 一句话答案 → 正文小节"的索引,不重复正文。
前置:S02-B01–B10。
覆盖旧文:A-2323(34 道操作系统八股,449 点)、A-2639(操作系统面试题及答案,329 点)、A-2320(63 道计算机网络八股,1,086 点)、A-2611(网络编程面试题,368 点)、A-1897(操作系统学习路线,85 点)= 2,317 点。
上一篇:S02-B10 · 从 OpenAPI 到可执行工具:API 描述如何变成插件
下一篇:S02-J01 · TCP 排障与调优。
使用说明:括号里是正文小节(如
B03 §2)。先读正文再背答案——只有答案没有机制,追问一句就露馅。
标注⚠的条目是旧文口径需要修正的地方,正文里已说明原因。
1. 操作系统(A-2323 / A-2639)
| # | 问题 | 一句话答案 | 正文 |
|---|---|---|---|
| 1 | 进程与线程的区别 | 进程是资源分配单位,线程是调度单位;线程共享地址空间 | B02 §2 |
| 2 | 线程共享哪些资源 | 堆、全局变量、代码段、fd 表;栈与寄存器独立 | B02 §2 |
| 3 | 为什么线程切换比进程切换便宜 | 线程切换不换页表,无 TLB/cache 大范围失效 | B02 §4 |
| 4 | 协程为什么轻 | 用户态切换 + 小栈(KB 级);不经过内核调度 | B02 §5 |
| 5 | 线程越多越好吗 | 否;CPU 密集受核数限制,切换开销随数量上升 | B02 §3(实测) |
| 6 | 用户态与内核态 | 两档权限;系统调用是穿越通道 | B01 §5.1 |
| 7 | 系统调用为什么有开销 | 保存/恢复上下文 + 权限切换 | B02 §4 |
| 8 | 什么是中断 | 打断当前执行去处理事件;分硬中断(网卡)与软中断(延后处理) | B01 §5.4 |
| 9 | 软中断为什么会影响网络性能 | 收包在软中断上下文处理,高流量下 ksoftirqd 吃满 CPU |
B01 §5.4、J01 |
| 10 | 进程创建过程 | fork 复制地址空间(写时复制)+ exec 换程序 |
B02 §6 |
| 11 | 什么是写时复制(COW) | fork 后父子共享物理页,写入才真正复制 | B02 §6 |
| 12 | 多线程程序能 fork 吗 | 能但要立刻 exec;其他线程在子进程中不存在 |
B02 §6 |
| 13 | 进程有哪些状态 | 新建/就绪/运行/阻塞/终止 | B01 §9.1 |
| 14 | 进程间通信方式 | 管道、消息队列、共享内存、信号、socket | B01 §9.1 |
| 15 | 共享内存为什么最快 | 不需要内核拷贝,但要自己做同步 | B01 §9.1 |
| 16 | 什么是僵尸进程 | 子进程退出但父进程未 wait 回收 |
B01 §9.1、S15 |
| 17 | 孤儿进程 | 父进程先退出,子进程被 init/systemd 收养 | B01 §9.1 |
| 18 | 守护进程 | 脱离终端、在后台长期运行 | B01 §9.1 |
| 19 | 死锁的四个必要条件 | 互斥、占有并等待、不可剥夺、循环等待 | B01 §9.1、S05 |
| 20 | 如何避免死锁 | 破坏任一条件:统一加锁顺序、超时、资源一次性分配 | S05 |
| 21 | 常见调度算法 | FCFS、SJF、时间片轮转、优先级、多级反馈队列 | B02 §7 |
| 22 | Linux 用的什么调度器 | CFS(按虚拟运行时间分配,交互任务优先) | B02 §7 |
| 23 | 什么是虚拟内存 | 进程看到连续地址,实际映射到物理页 | B01 §5.3 |
| 24 | 页表 / 快表 / MMU | 映射表 / TLB 缓存 / 地址转换硬件 | B01 §5.3 |
| 25 | 缺页中断 | 访问的页不在内存,内核从磁盘取入 | B01 §5.3 |
| 26 | 页面置换算法 | FIFO、LRU、Clock、OPT(理论最优) | B01 §9.1、S05 |
| 27 | 局部性原理 | 时间局部性 + 空间局部性,是缓存有效的前提 | B01 §9.1 |
| 28 | 内存覆盖与交换 | 手工复用内存 / 整进程换出到磁盘 | B01 §9.1 |
| 29 | 为什么 socket 缓冲不算进程堆内存 | 它是内核内存,不受 -Xmx 限制 |
B01 §5.3 |
| 30 | 磁盘调度算法 | FCFS、最短寻道(SSTF)、电梯(SCAN) | B01 §9.1 |
| 31 | 总线/输入输出设备 | 连接 CPU、内存与外设的通道 | B01 §9.1 |
| 32 | 学习路线建议 | 先机制(进程/内存/IO)再算法(调度/置换),配合命令验证 | 附录 A |
2. 计算机网络(A-2320)
| # | 问题 | 一句话答案 | 正文 |
|---|---|---|---|
| 33 | OSI 七层与 TCP/IP 四层 | 教学模型 vs 实现模型;排障按四层看 | B01 §6 |
| 34 | 交换机与路由器的区别 | 交换机按 MAC(链路层),路由器按 IP(网络层) | B01 §9.2 |
| 35 | 三次握手过程 | SYN → SYN+ACK → ACK | B03 §2 |
| 36 | 为什么是三次不是两次 | 双向确认收发能力;两次无法让服务端确认自己的 SYN 被收到 | B03 §2.1 |
| 37 | 什么是半连接队列 | 收 SYN 未完成握手的连接;SYN Flood 的攻击目标 | B03 §2.2 |
| 38 | accept 队列满了会怎样 | 已完成握手但应用 accept 慢;ss -lnt 的 Recv-Q 逼近 Send-Q |
B03 §2.2 |
| 39 | 四次挥手过程 | FIN → ACK → FIN → ACK | B03 §3 |
| 40 | 为什么挥手是四次 | 全双工,两个方向各自关闭;被动方可能还有数据要发 | B03 §3 |
| 41 | TIME_WAIT 为什么存在 | 保证最后 ACK 可达 + 让旧包消亡(2×MSL) | B03 §4.2 |
| 42 | TIME_WAIT 出现在哪一端 | 主动关闭方(实测:30 次主动关闭 → 多 30 条) | B03 §4.1 |
| 43 | 端口耗尽怎么办 | 连接池/keepalive(根治);tcp_tw_reuse 仅对出向有效 |
B03 §4.3 |
| 44 | tcp_tw_recycle 能用吗 |
⚠ 不能,新内核已移除,NAT 下会导致连接失败 | B03 §7 |
| 45 | TCP 如何保证可靠 | 序号、确认、超时重传、窗口 + 拥塞控制 | B04 §1 |
| 46 | 什么是快重传 | 收到 3 个重复 ACK 立即重传,不等超时 | B04 §3.1 |
| 47 | RTO 是什么 | 重传超时,按 RTT 动态计算;最小 200 ms 级 | B04 §3.2 |
| 48 | 流量控制与拥塞控制的区别 | 前者怕撑爆接收方(window),后者怕撑爆网络(cwnd) | B04 §3.3–3.4 |
| 49 | 慢启动与拥塞避免 | cwnd 指数增长 → 到阈值后线性增长 | B04 §3.4 |
| 50 | BDP 与吞吐的关系 | 吞吐 ≈ 窗口 / RTT;跨国高延迟必须放大窗口 | B04 §3.5 |
| 51 | 丢包为什么让吞吐断崖 | 丢包被当作拥塞信号 → cwnd 砍半/回 1(实测 472 MB/s → 0.27 MB/s) | B04 §2 |
| 52 | TCP 与 UDP 的区别 | 连接/可靠/有序/字节流 vs 无连接/不可靠/数据报 | B04 §4 |
| 53 | UDP 什么时候更好 | 数据迟到就没用(音视频、游戏、DNS、QUIC) | B04 §4.1 |
| 54 | 什么是粘包 | ⚠ 术语误导:TCP 是字节流,边界要应用层自己划 | B05 §1 |
| 55 | 粘包怎么解决 | 长度前缀 / 分隔符 / 定长;Netty 有对应解码器 | B05 §4 |
| 56 | HTTP 报文结构 | 起始行 + 头部 + 空行 + 体 | B06 §3 |
| 57 | 常见状态码 | 200/201/204;301/302/304;400/401/403/404/429;500/502/503/504 | B06 §3 |
| 58 | 301 与 302 的坑 | 301 会被浏览器长期缓存,改错难挽回 → 调试用 302 | B06 §3 |
| 59 | HTTP 与 HTTPS 的区别 | HTTPS = HTTP + TLS;加密在 TCP 之上 | B06 §1 |
| 60 | HTTPS 加密发生在哪一层 | 传输层之上、应用层之下(TLS 记录层) | B06 §1 |
| 61 | 证书链如何验证 | 叶→中间→根;根必须在客户端信任库 | B06 §5 |
| 62 | 证书验证的三个检查 | 链可信、域名匹配、时间有效 | B06 §5 |
| 63 | SNI 是什么 | ClientHello 里带的域名,服务器据此选证书 | B06 §5.1 |
| 64 | TLS 1.3 比 1.2 强在哪 | 1-RTT、强制前向安全、精简套件 | B06 §4 |
| 65 | 0-RTT 有什么风险 | 数据可被重放 → 只能用于幂等请求 | B06 §4.1 |
| 66 | HTTPS 挡不住什么 | 域名(SNI)、流量特征、服务端泄露、应用漏洞 | B06 §6 |
| 67 | HTTP/1.1 → 2 → 3 | 队头阻塞 → 多路复用 → QUIC(UDP) | B01 §9.2、B06 |
| 68 | HPACK 省什么 | 重复头部只传索引号;高频小请求收益最大 | B09 §3.1 |
| 69 | WebSocket 握手过程 | HTTP Upgrade → 101 Switching Protocols | B07 §3 |
| 70 | Sec-WebSocket-Accept 怎么算 |
base64(SHA1(key + GUID)) | B07 §3.2 |
| 71 | SSE 与 WebSocket 的区别 | 单向文本流(内置续传) vs 双向二进制 | B07 §4 |
| 72 | 长轮询与短轮询 | 挂起等数据 vs 定时问;实时性与连接数此消彼长 | B07 §4 |
| 73 | WebSocket 断线怎么办 | 心跳发现 + 退避重连 + 序号补发 + 幂等去重 | B08 §3–5 |
| 74 | TCP keepalive 够用吗 | 不够;默认 7200 s 才探测,且穿不透应用层代理 | B08 §3 |
| 75 | 心跳间隔怎么定 | < min(LB/NAT 空闲超时)/2;并计入额外 QPS | B08 §3.1 |
| 76 | 重连为什么要抖动 | 防重连风暴(服务端恢复瞬间被打挂) | B08 §4 |
| 77 | HTTP 与 RPC 的区别 | HTTP 是传输协议,RPC 是调用模型(可跑在 HTTP/2 上) | B09 §1 |
| 78 | RPC 为什么更快 | 二进制序列化 + 头部压缩 + 多路复用 + 语义开销小 | B09 §3 |
| 79 | 什么时候用 gRPC | 内部高频、强契约、需要流式 | B09 §5 |
| 80 | DNS 解析过程 | 递归/迭代查询;本机 hosts → 本地 DNS → 根/顶级/权威 | B01 §2.1 |
| 81 | ARP 的作用 | 本地网段内 IP → MAC | B01 §4 |
| 82 | 网关的作用 | 跨网段的出口 | B01 §2.2 |
| 83 | 子网掩码 | 划分网络号与主机号 | B01 §9.2 |
| 84 | ping 用的是什么协议 | ICMP | B01 §9.2、J01 |
| 85 | 中间人攻击能防吗 | HTTPS 能防(除非客户端信任了攻击者根证书) | B06 §6 |
| 86 | SQL 注入属于网络问题吗 | 不是;属应用层安全(S13) | B01 §9.2 |
| 87 | 数字签名作用 | 完整性 + 来源认证(私钥签、公钥验) | B06 §5 |
| 88 | 对称与非对称加密 | AES 快(传数据);RSA/ECDHE 慢但能协商密钥 | B06 §4 |
| 89 | 有状态 vs 无状态协议 | TCP 维护连接状态;UDP 不维护 | B04 §4 |
3. 网络编程(A-2611)
| # | 问题 | 一句话答案 | 正文 |
|---|---|---|---|
| 90 | socket 编程的基本步骤 | 服务端 socket/bind/listen/accept;客户端 connect | B01 §3 |
| 91 | 四元组是什么 | 源 IP/端口 + 目的 IP/端口,唯一确定连接 | B01 §3 |
| 92 | 端口与进程的关系 | 绑定关系;一个端口可承载多连接 | B01 §3 |
| 93 | 阻塞/非阻塞/IO 多路复用 | 等结果 vs 立即返回 EAGAIN vs 一次等多个 fd | B01 §9.2、S05 |
| 94 | select / poll / epoll 的区别 | fd 上限、是否轮询、是否事件驱动 | S05 |
| 95 | 水平触发与边缘触发 | 有数据就通知 vs 只在状态变化时通知 | S05 |
| 96 | 为什么 epoll 更适合高并发 | 无需线性扫描全部 fd | S05 |
| 97 | 一次 recv 能拿到多少 |
缓冲区当前可用的字节数,与 send 次数无关 |
B05 §2 |
| 98 | 为什么会出现半包 | 数据还没到齐;解析要判断"够不够一条" | B05 §5 |
| 99 | 长度字段为什么要校验上限 | 伪造长度可打爆内存 | B05 §5.1 |
| 100 | SO_REUSEADDR 干什么 | 允许复用处于 TIME_WAIT 的地址 | B03 §4 |
| 101 | TCP_NODELAY 的作用 | 关闭 Nagle,减少小包合并带来的延迟 | B05 §8 |
| 102 | 如何优雅关闭连接 | shutdown(SHUT_WR) 发 FIN,再等对端关闭 |
B03 §3 |
| 103 | 为什么不要用 RST 关闭 | RST 会丢弃未读数据,对端看不到完整报文 | B03 §3 |
| 104 | 长连接怎么保活 | 应用心跳 + 调小 keepalive 作兜底 | B08 §3 |
| 105 | 单机能撑多少连接 | 受 fd 上限、内存(每连接缓冲)、端口范围约束 | J03 |
| 106 | 连接数与内存怎么估算 | 每连接缓冲 × 连接数 + 内核结构开销 | B08 §6、J03 |
| 107 | 如何诊断连接数异常 | ss -s、ss -tan state 分类统计 |
B01 §3、J01 |
| 108 | ss -ti 里的 cwnd 是什么 |
拥塞窗口(单位 MSS),长期很小说明被限速 | B03 §6 |
| 109 | 如何看是否在重传 | nstat -az | grep TcpRetransSegs 看增量 |
B04 §5 |
| 110 | 抓包没权限怎么办 | 需要 CAP_NET_RAW/NET_ADMIN;容器内常受限,用 ss/nstat 替代 |
J01 |
附录 A · 学习路线(A-1897 的重排)
| 阶段 | 内容 | 对应正文 |
|---|---|---|
| 第 1 周 | 分层模型、封装、端口与 socket | B01 |
| 第 2 周 | 进程/线程/内存/中断 | B01 §5、B02 |
| 第 3 周 | TCP 握手挥手、可靠传输 | B03、B04 |
| 第 4 周 | 应用层协议:HTTP/HTTPS、实时通信 | B05–B08 |
| 第 5 周 | 调用模型与工具化 | B09、B10 |
| 进阶 | 抓包排障、TLS 深水区、连接数工程 | J01–J03 |
原则:每个概念都配一条命令验证(getent、ss、curl -v、openssl s_client、nstat)。只看不练,一周就忘。
附录 B · 旧文口径修正清单
| # | 旧说法 | 修正 | 正文 |
|---|---|---|---|
| 1 | "TCP 粘包" | 术语误导:字节流无边界 | B05 §1 |
| 2 | "tcp_tw_recycle=1 解决 TIME_WAIT" |
新内核已移除,NAT 下导致连接失败 | B03 §7 |
| 3 | "开了 keepalive 就不用心跳" | 默认 2 小时才探测 | B08 §3 |
| 4 | "RPC 比 HTTP 快" | RPC 常跑在 HTTP/2 上,差距来自序列化/头部 | B09 §1 |
| 5 | "WebSocket 天生支持重连" | 协议不提供,必须自己实现 | B07 §7 |
| 6 | "加了 HTTPS 就安全" | 只保护传输 | B06 §6 |
本篇属于系列《S02 · 计算机与网络基础》,是基础层附录。旧文来源:A-2323/2639/2320/2611/1897;每条答案均可在对应正文小节核对。
S02-X01 · 面试问答速查:操作系统 / 计算机网络 / 网络编程
https://www.clxhxhhr.top/posts/5197/ 评论
0 条
还没有评论,先写一条吧。