模块 1:网络

OSI七层模型

物理层(比特流传输,网线、光纤、网卡)

题目 1(基础)
物理层的主要功能是什么?常见设备有哪些?

答案

  • 功能:在物理媒介上传输比特流(0/1),实现数据的原始传输,不关心数据含义。
  • 设备:网线(铜缆)、光纤、网卡、集线器、收发器。

题目 2(场景题)
公司内网出现频繁掉线,怀疑是物理层问题,你会如何排查?

答案

  • 检查网线是否损坏或接触不良;
  • 使用网线测试仪或更换线缆;
  • 检查光纤接口是否有污染或折损;
  • 查看网卡指示灯或更换网卡;
  • 检查集线器/交换机端口状态。

题目 3(考点延伸)
物理层和数据链路层的主要区别是什么?

答案

  • 物理层:负责比特流传输,只关注信号,不处理数据含义;
  • 数据链路层:负责成帧、MAC 地址寻址、差错检测,保证帧正确到达邻居节点。

数据链路层(成帧、MAC 地址、交换机、以太网协议)

题目 1(基础)
交换机是如何通过 MAC 地址转发数据的?

答案

  • 交换机维护 MAC 地址表,将端口和 MAC 地址对应;
  • 帧到达交换机时查表决定转发端口,若未知则广播。

题目 2(场景题)
内网出现广播风暴,网络拥堵,原因可能是什么?如何解决?

答案

  • 原因:交换机环路、MAC 表不完整导致频繁广播。
  • 解决方案:启用 STP(生成树协议)、检查拓扑避免环路、划分 VLAN 减少广播域。

题目 3(考点延伸)
以太网帧结构包含哪些字段?

答案

  • 前导码+帧头(同步);
  • 目的 MAC(6B)、源 MAC(6B);
  • 类型/长度(2B);
  • 数据(46~1500B);
  • CRC(4B)用于错误检测。

网络层(IP 地址、子网、路由、ICMP、ARP)

题目 1(基础)
网络层的主要功能是什么?

答案

  • 功能:为数据包选择路径和传输,进行逻辑地址寻址;
  • 主要协议:IP、ICMP、ARP;
  • 设备:路由器。

题目 2(场景题)
用户无法访问某服务器,ping 不通,如何排查网络层问题?

答案

  • 检查本机 IP、子网掩码、默认网关;
  • 使用 ping 测试本机、网关、目标 IP;
  • 使用 traceroute 查看路由是否异常;
  • 检查防火墙和路由策略。

题目 3(考点延伸)
ARP 协议的作用是什么?

答案

  • ARP 用于将 IP 地址映射到 MAC 地址,实现局域网通信;
  • 通过广播请求目标 IP 的 MAC,目标回复 MAC。

传输层(TCP、UDP)

题目 1(基础)
TCP 和 UDP 的区别是什么?

答案

特性 TCP UDP
连接 面向连接 无连接
可靠性 可靠传输 不可靠
传输方式 流式 数据报
应用 文件传输、HTTP 视频、语音、DNS

题目 2(场景题)
视频会议使用 UDP 而不是 TCP,为什么?

答案

  • UDP 无连接、延迟低;
  • 丢包不会触发重传,保证实时性;
  • TCP 重传可能导致延迟增加,影响视频流畅度。

题目 3(考点延伸)
TCP 如何保证可靠传输?

答案

  • 三次握手建立连接;
  • 序列号、确认号保证顺序与可靠性;
  • 流量控制:滑动窗口;
  • 拥塞控制:慢启动、拥塞避免、快重传、快恢复。

会话层(建立、管理、终止会话)

题目 1(基础)
会话层的作用是什么?

答案

  • 建立、管理、终止应用间会话;
  • 提供会话恢复、同步、对话控制。

题目 2(场景题)
在长连接的聊天应用中,会话层出现问题可能导致什么?

答案

  • 会话无法正确建立 → 无法通信;
  • 会话异常终止 → 消息丢失或重复;
  • 解决方案:心跳包检测、会话重连机制。

题目 3(考点延伸)
举例说明会话层协议。

答案

  • PPTP、RPC、NetBIOS、SSL/TLS(兼作表示层加密)。

表示层(数据表示、加密解密、编码)

题目 1(基础)
表示层的主要功能是什么?

答案

  • 数据表示、加密解密、编码转换;
  • 常用协议:SSL/TLS、Unicode、ASCII。

题目 2(场景题)
HTTP 数据在网络上传输是明文还是加密?TLS 在表示层如何工作?

答案

  • HTTP 明文传输,HTTPS 使用 TLS 加密;
  • TLS 握手交换公钥、协商对称密钥,建立加密通道;
  • 表示层负责数据加密和解密。

题目 3(考点延伸)
解释前向保密(PFS)是什么?

答案

  • 即使私钥泄露,也无法解密历史通信数据;
  • TLS1.3 默认支持 PFS,通过临时密钥保证安全。

应用层(HTTP、HTTPS、FTP、DNS、SMTP、SSH)

题目 1(基础)
应用层协议有哪些?功能是什么?

答案

  • HTTP/HTTPS:网页传输;
  • FTP:文件传输;
  • DNS:域名解析;
  • SMTP:邮件发送;
  • SSH:远程登录。

题目 2(场景题)
用户访问网页显示 404,说明了什么?

答案

  • HTTP 状态码 404 → 请求的资源不存在;
  • 可通过 URL 检查、服务器文件路径、虚拟主机配置排查。

题目 3(考点延伸)
HTTPS 与 HTTP 的区别是什么?

答案

  • HTTP 明文传输;
  • HTTPS 使用 TLS 加密,保证数据机密性、完整性和身份验证。

网络接口层(驱动、网卡、MAC)

题目 1(基础)
网络接口层的主要功能是什么?

答案

  • 功能:负责把数据从主机传到物理网络,处理网卡驱动、MAC 地址寻址。
  • 设备:网卡、驱动程序。

题目 2(场景题)
网卡被替换后,局域网无法访问,怀疑网络接口层问题,你如何排查?

答案

  • 检查网卡是否正确安装驱动;
  • 确认 MAC 地址是否被禁用或冲突;
  • 使用 ifconfigip addr 查看网卡状态;
  • 测试物理连通性。

题目 3(考点延伸)
MAC 地址在网络接口层的作用是什么?

答案

  • 唯一标识网络接口设备;
  • 局域网中用于帧的目的/源地址寻址;
  • 交换机根据 MAC 地址转发帧。

网络层(IP、ICMP)

题目 1(基础)
网络层的作用是什么?

答案

  • 功能:逻辑地址寻址、路由选择、数据包传输。
  • 协议:IP、ICMP、ARP(局域网辅助)。

题目 2(场景题)
用户无法访问外网,ping 路由器成功但 ping 外网失败,如何排查?

答案

  • 检查默认网关配置是否正确;
  • 查看路由表(route -nip route);
  • 检查防火墙规则或 NAT 设置;
  • 使用 traceroute 确认数据包到达路径。

题目 3(考点延伸)
ICMP 的主要作用是什么?

答案

  • 网络诊断(如 ping);
  • 报告网络错误(目的不可达、超时等);
  • 帮助路由器控制数据流。

传输层(TCP、UDP)

题目 1(基础)
传输层的功能是什么?

答案

  • 为应用提供端到端通信;
  • 实现可靠传输(TCP)或低延迟传输(UDP);
  • 流量控制、端口寻址。

题目 2(场景题)
同一台服务器同时运行 HTTP(TCP)和 DNS(UDP)服务,它们如何通过端口区分?

答案

  • 传输层通过 端口号 区分不同应用;
  • TCP HTTP 默认 80/443,UDP DNS 默认 53;
  • 内核根据四元组(源 IP/端口 + 目的 IP/端口 + 协议)区分流量。

题目 3(考点延伸)
TCP 如何保证可靠传输?

答案

  • 三次握手建立连接;
  • 序列号、确认号保证顺序;
  • 滑动窗口进行流量控制;
  • 拥塞控制:慢启动、拥塞避免、快重传、快恢复。

TCP 机制

三次握手(SYN、SYN+ACK、ACK)

题目 1(基础)
TCP 三次握手的目的是什么?

答案

  • 建立可靠连接;
  • 双方同步初始序列号;
  • 确认通道可用。

题目 2(场景题)
三次握手中客户端发送 SYN 但服务器未响应,可能原因是什么?

答案

  • 服务器端口未开启;
  • 防火墙阻止 SYN 包;
  • 网络丢包或路由问题;
  • SYN 攻击导致资源耗尽。

题目 3(考点延伸)
三次握手与四次挥手的区别是什么?

答案

  • 三次握手用于建立连接,双方确认序列号;
  • 四次挥手用于断开连接,双方确认数据已传输完毕,涉及 TIME_WAIT 状态。

四次挥手(FIN/ACK、TIME_WAIT)

题目 1(基础)
TCP 四次挥手的作用是什么?

答案

  • 正确关闭 TCP 连接;
  • 确保双方数据传输完毕;
  • TIME_WAIT 防止旧报文干扰新连接。

题目 2(场景题)
客户端关闭连接后一直处于 TIME_WAIT,这会影响服务器吗?

答案

  • TIME_WAIT 会占用本地端口;
  • 不会直接影响服务器,但大量短连接可能耗尽可用端口;
  • 可通过缩短 TIME_WAIT 或复用端口优化。

题目 3(考点延伸)
TCP 状态机中 CLOSE_WAIT、FIN_WAIT 的含义是什么?

答案

  • CLOSE_WAIT:等待本端关闭连接(收到 FIN);
  • FIN_WAIT:等待对端确认关闭连接。

拥塞控制、流量控制

题目 1(基础)
TCP 拥塞控制包含哪些算法?

答案

  • 慢启动(Slow Start);
  • 拥塞避免(Congestion Avoidance);
  • 快重传(Fast Retransmit);
  • 快恢复(Fast Recovery)。

题目 2(场景题)
大量并发用户下载文件,服务器出现拥塞,TCP 如何缓解?

答案

  • 慢启动限制初始发送窗口;
  • 拥塞避免算法动态调整窗口大小;
  • 快重传+快恢复减少丢包重传延迟;
  • 流量控制(滑动窗口)防止接收端过载。

题目 3(考点延伸)
流量控制与拥塞控制的区别是什么?

答案

  • 流量控制:接收端控制发送端,保证接收端不溢出;
  • 拥塞控制:网络控制,防止过多报文导致网络拥塞。

UDP

题目 1(基础)
UDP 的特点是什么?

答案

  • 无连接、不可靠;
  • 无序到达、无重传;
  • 低延迟,适合实时通信。

题目 2(场景题)
在线直播使用 UDP,如果出现丢包,该怎么办?

答案

  • 丢包不重传保证实时性;
  • 使用前向纠错(FEC)或应用层重传部分关键帧;
  • 使用 QoS 优化网络优先级。

题目 3(考点延伸)
UDP 如何区分不同应用?

答案

  • 通过 源端口和目的端口
  • 内核使用四元组(源 IP/端口 + 目的 IP/端口 + 协议)区分不同数据流。

HTTPS/TLS

握手、证书、加密

题目 1(基础)
HTTPS 与 HTTP 的区别是什么?

答案

  • HTTP 明文传输;
  • HTTPS 在应用层使用 TLS 加密,保证机密性、完整性和身份验证。

题目 2(场景题)
访问 HTTPS 网站时,浏览器提示证书不可信,可能原因是什么?

答案

  • 自签名证书;
  • CA 根证书未安装或过期;
  • 中间证书链缺失;
  • 域名与证书不匹配。

题目 3(考点延伸)
TLS 握手流程简述。

答案

  1. 客户端发 ClientHello,支持协议版本和加密套件;
  2. 服务端发 ServerHello,选择协议和套件,并发送证书;
  3. 客户端验证证书,生成预主密钥并加密发送;
  4. 双方生成会话密钥,完成握手;
  5. 加密通信开始。

TLS 版本与前向保密

题目 1(基础)
TLS1.3 相比 TLS1.2 有哪些改进?

答案

  • 简化握手,减少 RTT;
  • 默认启用前向保密(PFS);
  • 弃用不安全加密算法(如 RC4、MD5)。

题目 2(场景题)
攻击者获取服务器私钥,是否可以解密历史 HTTPS 会话?

答案

  • TLS1.2+使用 PFS 或 TLS1.3:不能解密历史会话;
  • 非 PFS 情况:可解密历史通信。

题目 3(考点延伸)
证书链、CA、OCSP 的作用是什么?

答案

  • 证书链验证身份的可信性;
  • CA 签发证书,保证合法性;
  • CRL/OCSP 用于撤销检查,防止使用被吊销的证书。

常用网络工具

ping、traceroute

题目 1(基础)
ping 命令的作用是什么?

答案

  • 检测网络连通性;
  • 测量往返时间(RTT);
  • 使用 ICMP 回显请求。

题目 2(场景题)
ping 成功但网页访问失败,可能原因是什么?

答案

  • HTTP/HTTPS 服务未启动或端口被阻塞;
  • 防火墙允许 ICMP、阻止 TCP;
  • DNS 解析失败。

题目 3(考点延伸)
traceroute 的作用是什么?

答案

  • 显示数据包经过的路由节点;
  • 帮助定位网络延迟或故障点。

tcpdump、wireshark

题目 1(基础)
tcpdump 和 Wireshark 的作用是什么?

答案

  • 抓包、分析网络流量;
  • tcpdump 命令行,Wireshark 图形化。

题目 2(场景题)
用户访问 HTTP 网站超时,用 tcpdump 如何分析?

答案

  • 抓取客户端和服务器通信包;
  • 检查 SYN/ACK 是否正常返回;
  • 检查是否有丢包、重传或拒绝连接。

题目 3(考点延伸)
tcpdump 常用参数有哪些?

答案

  • -i 指定接口;
  • -n 不解析域名;
  • -s 指定抓包长度;
  • porthost 过滤特定流量。

ss、netstat、iftop

题目 1(基础)
netstat 和 ss 有什么区别?

答案

  • ss 更快、替代 netstat;
  • 显示 TCP/UDP 连接、监听端口、套接字状态;
  • 支持高级过滤。

题目 2(场景题)
服务器高负载时,如何用 iftop 排查流量?

答案

  • iftop 实时显示网络带宽使用情况;
  • 可按源/目的 IP 排序,找到流量大户;
  • 可结合 tcpdump 精细抓包分析。

题目 3(考点延伸)
netstat/ss 可以查看哪些信息?

答案

  • 本地和远端 IP/端口;
  • TCP 状态(ESTABLISHED、TIME_WAIT);
  • 使用的程序 PID/名称;
  • 统计数据(包数、字节数)。

模块 2:Linux

常用命令(top、ps、df、du、netstat、ss、lsof、journalctl)

题目 1(基础)
top 命令显示了哪些关键指标?

答案

  • CPU 使用率(us、sy、id、wa);
  • 内存使用情况(total、used、free、buffers/cache);
  • 进程信息(PID、USER、%CPU、%MEM、COMMAND);
  • 负载平均值(load average)。

题目 2(场景题)
服务器 CPU 占用过高,如何使用 topps 排查?

答案

  • top 查看占用 CPU 高的进程;
  • ps aux --sort=-%cpu 查看 CPU 排名前几的进程;
  • 结合 lsof 查看进程打开的文件;
  • 判断是否为异常进程或应用逻辑问题。

题目 3(考点延伸)
dfdu 的区别是什么?

答案

  • df 显示文件系统剩余空间(按分区统计);
  • du 显示目录或文件占用的实际空间;
  • df 查看磁盘整体使用,du 查看具体目录。

权限管理(rwx、chmod、chown、ACL、SUID/SGID/sticky bit)

题目 1(基础)
Linux 文件权限 r、w、x 分别代表什么?

答案

  • r:可读;
  • w:可写;
  • x:可执行;
  • 权限分为 用户、用户组、其他 三类。

题目 2(场景题)
用户 A 无法执行某脚本,文件权限显示 -rw-r--r--,如何解决?

答案

  • 脚本缺少执行权限;
  • 使用 chmod +x script.sh 添加执行权限;
  • 若需要指定特定用户或组执行,可使用 SUID/SGID 或修改所有者。

题目 3(考点延伸)
SUID、SGID 和 sticky bit 的作用是什么?

答案

  • SUID:执行文件时以文件所有者权限运行;
  • SGID:新建文件继承目录组或执行文件以文件组权限运行;
  • Sticky bit:目录下文件只能被所有者或 root 删除。

进程管理(kill、jobs、fg、bg、nohup、tmux)

题目 1(基础)
Linux 中如何查看所有进程?

答案

  • ps aux 显示所有进程;
  • top 实时监控;
  • htop 图形化显示(如安装)。

题目 2(场景题)
后台运行的任务被意外终止,如何保证任务继续执行?

答案

  • 使用 nohup command &disown
  • 使用 tmuxscreen 启动会话保持任务;
  • 可通过 jobsfgbg 管理作业。

题目 3(考点延伸)
kill 命令中不同信号作用是什么?

答案

  • kill -9:强制终止(不可捕获);
  • kill -15:正常终止,可捕获处理;
  • kill -HUP:重新加载配置。

文件系统(ext4、inode、硬/软链接、挂载)

题目 1(基础)
inode 在文件系统中的作用是什么?

答案

  • 保存文件元数据(权限、所有者、时间戳、数据块地址);
  • 文件名存储在目录结构中与 inode 对应;
  • 修改文件名不影响 inode。

题目 2(场景题)
硬链接和软链接有什么区别?

答案

特性 硬链接 软链接
指向对象 inode 文件路径
可跨文件系统
删除原文件 链接仍可访问数据 链接失效

题目 3(考点延伸)
如何挂载新磁盘并永久生效?

答案

  1. 分区:fdiskparted
  2. 格式化:mkfs.ext4 /dev/sdx1
  3. 临时挂载:mount /dev/sdx1 /mnt
  4. 永久挂载:编辑 /etc/fstab 添加挂载信息。

IO 模型(阻塞、非阻塞、I/O 多路复用)

题目 1(基础)
Linux 中常见 IO 模型有哪些?

答案

  • 阻塞 IO:调用阻塞,等待完成;
  • 非阻塞 IO:立即返回,需轮询;
  • I/O 多路复用:selectpollepoll
  • 信号驱动 IO、异步 IO(AIO)。

题目 2(场景题)
高并发服务器使用阻塞 IO,会遇到什么问题?如何优化?

答案

  • 问题:线程/进程数受限,CPU 利用率低,阻塞等待影响性能;
  • 优化:使用 epoll 或异步 IO,实现单线程处理大量连接。

题目 3(考点延伸)
epoll 相比 select 有哪些优势?

答案

  • 支持大量 fd(文件描述符);
  • O(1) 查询事件;
  • 支持水平触发(LT)和边缘触发(ET);
  • 减少内核/用户空间复制开销。

网络排查(ping、tcpdump、iftop)

题目 1(基础)
ping 命令用于什么?

答案

  • 检测网络连通性;
  • 测量延迟(RTT);
  • 使用 ICMP 回显请求。

题目 2(场景题)
网络访问慢,如何用 iftop 和 tcpdump 排查?

答案

  • iftop:实时显示带宽使用情况,找出流量大 IP;
  • tcpdump:抓取异常流量或丢包数据包;
  • 分析网络瓶颈或异常连接。

题目 3(考点延伸)
ss 和 netstat 的作用是什么?

答案

  • 查看 TCP/UDP 连接、监听端口;
  • 查看套接字状态和对应进程 PID;
  • ss 更快,可替代 netstat。

性能调优(ulimit、sysctl、内存管理、I/O 调度)

题目 1(基础)
ulimit 的作用是什么?

答案

  • 限制用户进程资源:最大打开文件数、最大内存、最大进程数等;
  • 可防止单用户消耗过多系统资源。

题目 2(场景题)
高并发应用报 “Too many open files”,如何解决?

答案

  • 增加用户文件描述符限制:ulimit -n 65535
  • 修改 /etc/security/limits.conf 永久生效;
  • 检查应用是否正确关闭文件。

题目 3(考点延伸)
Linux I/O 调度器有哪些?如何选择?

答案

  • cfq:适合桌面系统;
  • deadline:实时/数据库系统;
  • noop: SSD 设备,最少调度;
  • 可通过 cat /sys/block/sda/queue/scheduler 查看并切换。

systemd(systemctl、服务管理)

题目 1(基础)
systemctl 用于什么?

答案

  • 管理 systemd 服务:启动、停止、重启、状态查询;
  • 管理开机启动项。

题目 2(场景题)
某服务无法启动,日志提示依赖未满足,如何排查?

答案

  • 查看服务状态:systemctl status service
  • 查看依赖关系:systemctl list-dependencies service
  • 查看 journal 日志:journalctl -u service
  • 修复依赖或配置后重新启动。

题目 3(考点延伸)
systemd 启动流程简述。

答案

  • PID 1 启动 systemd;
  • 读取 /etc/systemd/system 配置;
  • 启动 target(类似 runlevel);
  • 按依赖顺序启动服务单元。

安全(SELinux、AppArmor)

题目 1(基础)
SELinux 的作用是什么?

答案

  • 提供强制访问控制(MAC),限制进程对资源访问;
  • 安全策略:enforcing、permissive、disabled。

题目 2(场景题)
应用访问文件被拒绝,但权限正常,如何排查?

答案

  • 检查 SELinux 状态:getenforce
  • 查看审计日志 /var/log/audit/audit.log
  • 临时切换 permissive 或调整策略解决。

题目 3(考点延伸)
AppArmor 与 SELinux 区别是什么?

答案

  • SELinux:基于标签的强制访问控制,粒度更细;
  • AppArmor:基于路径控制,策略易于配置,但粒度相对粗;
  • SELinux 更复杂、AppArmor 更易上手。

好的,我们继续生成 模块 3:MySQL 的完整面试题库,每个小要点至少三题(基础题、场景题、考点延伸题),并给出详细解答。


模块 3:MySQL

慢查询优化(slow_query_log、EXPLAIN、performance_schema)

题目 1(基础)
如何开启 MySQL 慢查询日志?

答案

  • 配置 my.cnf
1
2
3
4
5
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_queries_not_using_indexes = 1
  • 启动后,记录执行时间超过 long_query_time 的 SQL;
  • 可通过 mysqldumpslow 分析日志。

题目 2(场景题)
查询执行很慢,如何定位瓶颈?

答案

  1. 查看慢查询日志,找出耗时 SQL;
  2. 使用 EXPLAIN SELECT ... 查看执行计划(全表扫描、索引使用情况);
  3. 使用 performance_schema 监控查询、锁、IO、等待事件;
  4. 针对慢查询优化:添加索引、改写 SQL、分表分库。

题目 3(考点延伸)
EXPLAIN 输出中 key、type、rows 字段分别代表什么?

答案

  • key:使用的索引;
  • type:访问类型(ALL、index、range、ref、eq_ref、const);
  • rows:估计扫描行数;
  • 通过这些信息判断是否全表扫描或索引失效。

索引(B+ 树结构、聚簇索引 vs 非聚簇索引)

题目 1(基础)
InnoDB 默认索引结构是什么?

答案

  • B+ 树;
  • 主键索引为聚簇索引,数据和索引在一起存储;
  • 辅助索引为非聚簇索引,叶子节点存主键。

题目 2(场景题)
查询使用了索引但速度仍慢,可能原因是什么?

答案

  • 索引失效:函数操作、隐式类型转换、like %xxx
  • 数据分布不均衡导致索引选择不理想;
  • 覆盖索引未命中,需要回表。

题目 3(考点延伸)
聚簇索引和非聚簇索引的区别?

答案

特性 聚簇索引 非聚簇索引
数据存储 叶子节点存数据 叶子节点存主键
查询效率 范围查询快 单值查询快
占用空间 较大 较小

事务(ACID、隔离级别、并发问题、MVCC)

题目 1(基础)
MySQL 支持哪些事务隔离级别?

答案

  1. 读未提交(Read Uncommitted):可能脏读;
  2. 读已提交(Read Committed):避免脏读,但可能不可重复读;
  3. 可重复读(Repeatable Read,默认):避免脏读和不可重复读,但可能幻读;
  4. 串行化(Serializable):完全避免并发问题,但性能最低。

题目 2(场景题)
两条并发事务读写同一行数据,出现不可重复读,如何解决?

答案

  • 设置事务隔离级别为可重复读或串行化;
  • 使用锁(行锁)保证一致性;
  • 使用 MVCC(InnoDB 默认)避免读阻塞。

题目 3(考点延伸)
MVCC 的实现原理是什么?

答案

  • 利用 undo log 保存数据旧版本;
  • read view 决定事务可见数据版本;
  • 隐藏列存储事务 ID,保证快照读;
  • 保证读写不阻塞,提高并发。

锁(表锁、行锁、共享锁、排他锁、间隙锁、Next-Key 锁、乐观锁、悲观锁)

题目 1(基础)
InnoDB 支持哪些锁类型?

答案

  • 行锁(Record Lock)、表锁;
  • 共享锁(S):可读但不可写;
  • 排他锁(X):读写都阻塞;
  • Next-Key 锁 = 行锁 + 间隙锁(防止幻读)。

题目 2(场景题)
大量更新出现死锁,如何排查并解决?

答案

  • 使用 SHOW ENGINE INNODB STATUS\G 查看死锁信息;
  • 确认事务操作顺序一致,避免交叉锁;
  • 对热点数据加索引,减少锁粒度;
  • 考虑乐观锁(版本号)替代悲观锁。

题目 3(考点延伸)
乐观锁与悲观锁的区别?

答案

  • 乐观锁:假设无冲突,通过版本号/时间戳检查冲突,适合读多写少;
  • 悲观锁:假设会冲突,先加锁,适合写多场景。

存储引擎(InnoDB、MyISAM)

题目 1(基础)
InnoDB 与 MyISAM 区别?

答案

特性 InnoDB MyISAM
事务 支持 不支持
锁机制 行锁 表锁
MVCC 支持 不支持
外键 支持 不支持

题目 2(场景题)
MyISAM 表频繁更新大表导致锁争用,如何优化?

答案

  • 改用 InnoDB 支持行锁;
  • 分表分库降低单表压力;
  • 优化索引减少全表扫描。

题目 3(考点延伸)
InnoDB 事务日志有哪些?作用?

答案

  • redo log:保证持久性(Crash 恢复);
  • undo log:回滚事务,实现 MVCC;
  • binlog:主从复制和数据恢复。

日志(redo log、undo log、binlog)

题目 1(基础)
redo log 的作用是什么?

答案

  • 保证事务提交的持久性;
  • 写入磁盘前采用预写日志(WAL),事务提交后再刷新数据页。

题目 2(场景题)
数据库突然宕机,如何利用日志恢复?

答案

  • 利用 redo log 恢复已提交事务;
  • 利用 undo log 回滚未提交事务;
  • binlog 可用于主从同步或点时间恢复。

题目 3(考点延伸)
binlog 有哪些格式?

答案

  • STATEMENT:记录 SQL 语句,体积小,但可能出现不可重复执行问题;
  • ROW:记录每行数据变化,精确但体积大;
  • MIXED:混合模式,根据情况选择。

模块 4:Java

基本类型与包装类

题目 1(基础)
Java 有哪八种基本数据类型及其包装类?

答案

类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean

题目 2(场景题)
Integer a = 100; Integer b = 100; a == b 是 true 还是 false?为什么?

答案

  • true;
  • 因为 JVM 缓存了 -128~127 的 Integer 对象;
  • 超出范围则 == 比较不同对象引用返回 false。

题目 3(考点延伸)
自动装箱/拆箱可能带来哪些性能或空指针风险?

答案

  • 装箱:基本类型 → 包装类对象,增加对象创建开销;
  • 拆箱:包装类 → 基本类型;
  • null 拆箱会抛出 NullPointerException。

Object 类

题目 1(基础)
Object 类常用方法有哪些?

答案

  • equals():比较对象内容;
  • hashCode():返回对象哈希值;
  • toString():对象字符串表示;
  • clone():浅拷贝对象;
  • wait()/notify()/notifyAll():线程通信。

题目 2(场景题)
两个对象 ab 内容相同但 a == b 返回 false,如何让 a.equals(b) 返回 true?

答案

  • 重写 equals() 方法,按属性判断对象内容是否相等;
  • 通常同时重写 hashCode() 保证哈希一致性。

题目 3(考点延伸)
clone() 和深拷贝、浅拷贝区别?

答案

  • 浅拷贝:对象属性引用仍指向原对象;
  • 深拷贝:对象属性也复制新对象;
  • clone() 默认浅拷贝,需手动实现深拷贝。

String

题目 1(基础)
为什么 String 是不可变对象?

答案

  • String 存储在字符串常量池中;
  • 通过不可变性保证线程安全;
  • 修改操作会生成新对象,原对象不变。

题目 2(场景题)
大量字符串拼接性能低,如何优化?

答案

  • 使用 StringBuilder(非线程安全,效率高)或 StringBuffer(线程安全,略慢);
  • 避免频繁生成临时 String 对象。

题目 3(考点延伸)
StringPool 是如何工作的?

答案

  • 字符串常量池保存编译期确定的字符串;
  • 相同字面量只存一份,节省内存;
  • new String("abc") 会生成新对象,不在池中。

异常(Checked vs Unchecked、try-with-resources)

题目 1(基础)
Checked 与 Unchecked 异常区别?

答案

  • Checked:编译器检查,必须处理或抛出(如 IOException);
  • Unchecked:运行时异常,不强制捕获(如 NullPointerException、ArrayIndexOutOfBoundsException)。

题目 2(场景题)
如何保证文件操作后资源被正确关闭?

答案

  • 使用 try-with-resources 自动关闭实现 AutoCloseable 接口的资源;
1
2
3
4
5
try (FileInputStream fis = new FileInputStream("file.txt")) {
// 读文件
} catch (IOException e) {
e.printStackTrace();
}

题目 3(考点延伸)
异常的传播机制是怎样的?

答案

  • 异常沿调用栈向上抛出;
  • 捕获最接近的匹配 catch 块;
  • finally 块保证无论是否抛异常都执行资源释放。

并发(synchronized、ReentrantLock、CAS、原子类、ThreadLocal、Thread、Runnable、Callable、线程池)

题目 1(基础)
synchronized 与 ReentrantLock 区别?

答案

特性 synchronized ReentrantLock
是否可重入
公平锁 不支持 支持
手动释放锁
支持条件变量 是(Condition)

题目 2(场景题)
多线程累加共享变量出现错误,如何解决?

答案

  • 使用 synchronizedReentrantLock 保护共享变量;
  • 使用 AtomicInteger 等原子类;
  • 避免同时修改非线程安全对象。

题目 3(考点延伸)
Thread、Runnable、Callable 的区别?

答案

  • Thread:继承 Thread 类实现线程;
  • Runnable:实现接口,适合资源共享,不能返回值;
  • Callable:实现接口,可返回值并抛异常;
  • Runnable 可通过 FutureTask 转 Callable 使用。

题目 4(线程池)
ThreadPoolExecutor 核心参数及作用?

答案

  • corePoolSize:核心线程数;
  • maximumPoolSize:最大线程数;
  • keepAliveTime:空闲线程存活时间;
  • workQueue:任务队列;
  • RejectionPolicy:拒绝策略(Abort、CallerRuns、Discard、DiscardOldest)。

集合(List、Set、Map、并发集合)

题目 1(基础)
ArrayList 与 LinkedList 区别?

答案

特性 ArrayList LinkedList
底层结构 动态数组 双向链表
随机访问 O(1) O(n)
插入删除 慢(数组搬移) 快(链表操作)

题目 2(场景题)
HashMap 的 get() 方法能否判断 key 是否存在?

答案

  • 不能;因为 value 可能为 null;
  • 使用 containsKey() 判断 key 是否存在。

题目 3(考点延伸)
ConcurrentHashMap 如何保证线程安全?

答案

  • Java 8 采用 CAS + 链表/红黑树 + 分段锁 机制;
  • 读操作无锁,写操作仅锁局部桶,提高并发性能;
  • 避免全局锁。

JVM 内部结构(运行时内存区域、类加载、双亲委派、OOM)

题目 1(基础)
JVM 堆和方法区区别?

答案

  • 堆:存对象实例,垃圾回收主要区域;
  • 方法区(元空间):存类元信息、静态变量、常量;
  • 堆可调节大小,方法区可使用 Metaspace。

题目 2(场景题)
出现 java.lang.OutOfMemoryError: Metaspace,可能原因及解决?

答案

  • 原因:类加载过多、内存泄漏(动态生成类未卸载);
  • 解决:增加 Metaspace 大小,检查类加载逻辑,避免动态类泄漏。

题目 3(考点延伸)
双亲委派机制为什么重要?

答案

  • 保证核心类优先由父类加载器加载,避免类冲突;
  • 防止加载不安全的自定义类覆盖核心类;
  • 提高类加载安全性和稳定性。

GC(垃圾回收)

题目 1(基础)
常见垃圾回收算法有哪些?

答案

  • 引用计数;
  • 标记清除;
  • 标记整理;
  • 复制算法。

题目 2(场景题)
新生代 Minor GC 和老年代 Full GC 的区别?

答案

  • Minor GC:回收新生代对象,频繁、快速;
  • Full GC:回收整个堆(新生代 + 老年代),耗时长;
  • 调优:控制对象存活时间,减少 Full GC。

题目 3(考点延伸)
G1、CMS、ZGC、Shenandoah 各自特点?

答案

  • CMS:并发标记清理,减少停顿;
  • G1:分代 + 区域化管理,控制停顿时间;
  • ZGC、Shenandoah:低延迟 GC,适合大内存应用。

模块 5:Web

HTTP(请求方法、状态码、Header)

题目 1(基础)
常用 HTTP 请求方法有哪些?分别作用是什么?

答案

  • GET:获取资源,不应有副作用;
  • POST:提交数据,可能创建或修改资源;
  • PUT:更新或创建资源;
  • DELETE:删除资源;
  • PATCH:部分更新资源;
  • HEAD:只获取响应头,不返回正文;
  • OPTIONS:获取支持的方法。

题目 2(场景题)
浏览器请求页面返回 304 状态码,意味着什么?如何处理?

答案

  • 304 Not Modified:客户端缓存未过期,资源未修改;
  • 浏览器直接使用缓存,减少带宽和加载时间;
  • 通过 ETag 或 Last-Modified 进行缓存验证。

题目 3(考点延伸)
HTTP 常用 Header 及作用?

答案

  • 请求头:Content-Type(请求类型)、Authorization(身份验证)、Accept(可接受类型);
  • 响应头:Content-TypeCache-ControlSet-CookieLocation(重定向);
  • Header 用于控制缓存、安全、数据格式等。

HTTPS(TLS 加密)

题目 1(基础)
HTTPS 与 HTTP 区别?

答案

  • HTTPS 在 HTTP 基础上使用 TLS/SSL 加密;
  • 确保数据传输机密性、完整性、身份认证;
  • HTTPS 端口默认 443,HTTP 端口 80。

题目 2(场景题)
浏览器访问 HTTPS 页面提示证书错误,可能原因?

答案

  • 证书过期;
  • 证书不被信任(非 CA 签发);
  • 域名不匹配;
  • 证书链不完整。

题目 3(考点延伸)
TLS 握手流程简述。

答案

  1. 客户端发起握手,发送支持的加密套件;
  2. 服务端返回证书及选定加密套件;
  3. 客户端验证证书,生成对称密钥并加密发送;
  4. 服务端解密,握手完成,双方使用对称密钥加密数据。

Cookie、Session、Token

题目 1(基础)
Cookie 与 Session 区别?

答案

特性 Cookie Session
存储位置 客户端 服务器
容量限制 小(4KB) 较大(服务器内存)
安全性 容易被篡改 相对安全
生命周期 可设置过期 默认会话结束清除

题目 2(场景题)
实现用户登录状态保持有哪些方式?

答案

  • Cookie + Session:服务器存储 Session,客户端保存 SessionID;
  • JWT(Token):无状态认证,客户端存储 Token,每次请求携带验证;
  • Redis 保存 Token,提高分布式场景一致性。

题目 3(考点延伸)
Token 相比 Session 的优势?

答案

  • 无状态,易扩展分布式系统;
  • 不依赖服务器内存;
  • 支持自包含信息,减少数据库查询。

RESTful API 设计

题目 1(基础)
RESTful API 设计原则有哪些?

答案

  • 资源为中心(URI 表示资源);
  • 使用 HTTP 方法表示操作(GET、POST、PUT、DELETE);
  • 无状态请求;
  • 返回合适 HTTP 状态码;
  • 可使用 JSON/XML 表示数据。

题目 2(场景题)
设计用户管理接口,哪些 URL 和方法符合 RESTful 规范?

答案

操作 URL 方法
查询用户 /users/{id} GET
创建用户 /users POST
更新用户 /users/{id} PUT
删除用户 /users/{id} DELETE

题目 3(考点延伸)
RESTful 与 RPC 风格 API 区别?

答案

  • RESTful:以资源为中心,使用标准 HTTP 方法;
  • RPC:以动作或函数为中心,通常 POST 调用;
  • RESTful 易于缓存、可扩展,符合 Web 标准。

跨域(CORS、JSONP)

题目 1(基础)
什么是跨域请求?

答案

  • 浏览器同源策略限制不同域、协议或端口的请求访问资源;
  • 跨域请求需特殊处理。

题目 2(场景题)
前端请求跨域接口报错,如何解决?

答案

  • CORS:服务端设置 Access-Control-Allow-Origin 等 Header;
  • JSONP:通过 <script> 标签请求跨域 GET 接口;
  • 代理转发:前端请求同源接口,由后端转发到目标域。

题目 3(考点延伸)
CORS 的简单请求与预检请求区别?

答案

  • 简单请求:GET/POST(Content-Type 为 application/x-www-form-urlencoded、multipart/form-data、text/plain),直接发送;
  • 预检请求:复杂请求(PUT、DELETE 或自定义 Header),浏览器先发 OPTIONS 请求确认。

缓存(Cache-Control、ETag、Last-Modified)

题目 1(基础)
HTTP 缓存机制有哪些?

答案

  • 强缓存:浏览器直接使用缓存,Cache-ControlExpires
  • 协商缓存:浏览器与服务器确认资源是否更新,ETagLast-Modified

题目 2(场景题)
前端请求频繁导致服务器压力大,如何优化?

答案

  • 设置合理缓存策略,减少重复请求;
  • 使用 ETag 或 Last-Modified 验证资源更新;
  • 对静态资源 CDN 缓存加速。

题目 3(考点延伸)
Cache-Control 指令常见有哪些?

答案

  • no-cache:必须向服务器验证;
  • no-store:不缓存;
  • max-age:最大缓存时间;
  • public:可被共享缓存;
  • private:只能被浏览器缓存。

WebSocket、SSE、长轮询

题目 1(基础)
WebSocket 与 HTTP 有何区别?

答案

  • WebSocket:全双工通信,客户端和服务器可主动发送消息;
  • HTTP:请求-响应模式,客户端发起请求;
  • WebSocket 建立后可持续连接,减少轮询开销。

题目 2(场景题)
实现实时聊天应用,如何选择通信方式?

答案

  • 需要高频率双向通信:WebSocket;
  • 只需服务端推送,客户端偶尔获取:SSE;
  • 无 WebSocket 支持,低频通信:长轮询。

题目 3(考点延伸)
长轮询与 WebSocket 性能差异?

答案

  • 长轮询:每次请求结束立即重新发送,频繁 HTTP 建立连接,开销大;
  • WebSocket:一次连接可持续通信,CPU 和网络开销小;
  • 高并发或低延迟场景推荐 WebSocket。

模块 6:框架

6.1 Spring(IoC 容器、Bean 生命周期、AOP)

题目 1(基础)
Spring 的 IoC 容器是什么?

答案

  • IoC(Inversion of Control,控制反转):对象创建、依赖管理交给容器;
  • 容器管理 Bean 的生命周期和依赖注入;
  • 支持 XML、注解、JavaConfig 等配置方式。

题目 2(场景题)
如何自定义 Bean 初始化和销毁方法?

答案

  • 方法一:在 @Bean(initMethod="init", destroyMethod="destroy") 中指定;
  • 方法二:实现 InitializingBean.afterPropertiesSet()DisposableBean.destroy()
  • 方法三:使用 @PostConstruct@PreDestroy 注解。

题目 3(考点延伸)
Spring AOP 的实现原理?

答案

  • JDK 动态代理:接口代理,生成代理对象实现接口;
  • CGLIB:继承目标类生成子类代理(非接口类);
  • 代理对象拦截方法调用,织入切面逻辑(Before、After、Around)。

6.2 Spring Boot(自动配置原理、Starter 模块、配置优先级、Actuator)

题目 1(基础)
Spring Boot 自动配置原理是什么?

答案

  • 通过 @EnableAutoConfiguration 注解触发;
  • 根据类路径存在的依赖、条件注解(@ConditionalOnClass@ConditionalOnMissingBean)自动创建 Bean;
  • 避免手动繁琐配置,提高开发效率。

题目 2(场景题)
同一个配置项在多个地方定义,Spring Boot 如何选择?

答案

  • 优先级:命令行 > application.yml/application.properties > 外部配置文件 > @Value/@ConfigurationProperties 默认值;
  • Spring Boot 按顺序覆盖配置,确保灵活性。

题目 3(考点延伸)
Spring Boot Actuator 能做什么?

答案

  • 健康检查 /actuator/health
  • 监控应用指标 /actuator/metrics
  • 查看环境变量 /actuator/env
  • 支持自定义端点,结合 Prometheus/Grafana 可观测性。

6.3 Spring MVC(DispatcherServlet、拦截器、异常处理)

题目 1(基础)
Spring MVC 的请求处理流程?

答案

  1. 请求到 DispatcherServlet
  2. 根据 HandlerMapping 找到 Controller 方法;
  3. HandlerAdapter 执行方法;
  4. 返回 ModelAndView
  5. ViewResolver 渲染视图;
  6. 返回响应给客户端。

题目 2(场景题)
需要在 Controller 执行前后做统一处理,比如日志或权限,如何实现?

答案

  • 使用 Spring MVC 拦截器 HandlerInterceptor
  • preHandle 前置处理,postHandle 后置处理,afterCompletion 请求完成处理;
  • 可用于统一日志记录、权限校验、性能监控。

题目 3(考点延伸)
Spring MVC 如何统一处理异常?

答案

  • 使用 @ControllerAdvice + @ExceptionHandler
  • 也可继承 ResponseEntityExceptionHandler
  • 可返回统一错误响应 JSON,方便前端处理。

6.4 MyBatis(SQL 映射、动态 SQL、缓存、N+1 问题)

题目 1(基础)
MyBatis 的核心功能是什么?

答案

  • SQL 映射:Java 对象与数据库表对应;
  • 动态 SQL:通过 <if><where> 等标签生成 SQL;
  • 支持 XML 和注解方式配置;
  • 支持一级缓存、二级缓存提高性能。

题目 2(场景题)
查询用户及其订单列表出现 N+1 问题,如何优化?

答案

  • 使用关联查询(JOIN)减少 SQL 次数;
  • 使用 collectionassociation 在 MyBatis 中一条 SQL 查询完成多表关联;
  • 可通过批量查询再在内存组装数据。

题目 3(考点延伸)
MyBatis 一级缓存和二级缓存区别?

答案

特性 一级缓存 二级缓存
范围 SqlSession Mapper/namespace
生命周期 SqlSession 级别 Mapper 级别,可跨 SqlSession
默认开启 需配置 <cache/>

好的,我们继续生成 模块 7:分布式 的完整面试题库,每个小要点至少三题(基础题、场景题、考点延伸题),并给出详细解答。


模块 7:分布式

7.1 Spring Cloud(服务注册发现、负载均衡、网关、熔断限流)

题目 1(基础)
Spring Cloud 的服务注册与发现机制是什么?

答案

  • 使用 Eureka 或 Nacos 作为注册中心;
  • 服务启动时注册自身信息(IP、端口、元数据);
  • 客户端通过服务名称查询可用实例,实现服务调用;
  • 支持心跳检测,保证服务可用性。

题目 2(场景题)
微服务调用经常出现实例不可用或延迟,如何优化?

答案

  • 使用 Ribbon 或 Feign 实现客户端负载均衡;
  • 引入 Hystrix 或 Sentinel 实现熔断、降级、限流;
  • 结合 Spring Cloud Gateway 做统一路由、限流;
  • 监控服务健康状态,剔除不可用实例。

题目 3(考点延伸)
负载均衡策略有哪些?

答案

  • 轮询(Round Robin);
  • 随机(Random);
  • 最小并发请求(Least Connections);
  • 权重轮询(Weighted Round Robin);
  • Ribbon 默认支持多种策略,可自定义。

7.2 分布式核心要点(雪花算法、JWT/OAuth2、Redis、MQ、分布式事务、CAP/BASE、一致性协调、可观测性)

雪花算法(分布式唯一 ID)

题目 1(基础)
雪花算法生成 ID 原理是什么?

答案

  • 64 位二进制结构:1 位符号 + 41 位时间戳 + 10 位机器 ID + 12 位序列号;
  • 高性能生成唯一、递增 ID,避免数据库瓶颈;
  • 可支持分布式系统多节点生成。

题目 2(场景题)
为什么需要雪花算法而不是自增 ID?

答案

  • 自增 ID 在多节点下会冲突,需要数据库集中管理;
  • 雪花算法分布式生成,无需依赖中心 DB,性能高;
  • 支持水平扩展。

题目 3(考点延伸)
雪花算法生成的 ID 可能存在问题吗?

答案

  • 系统时间回退可能导致重复 ID;
  • 序列号溢出需等待下一毫秒;
  • 需保证机器 ID 唯一,否则可能重复。

JWT / OAuth2(无状态认证)

题目 1(基础)
JWT 有哪三个部分?

答案

  • Header:算法类型、Token 类型;
  • Payload:用户信息、过期时间等;
  • Signature:签名,保证数据完整性。

题目 2(场景题)
前后端分离项目如何使用 JWT 实现登录?

答案

  • 登录成功生成 JWT,返回给前端;
  • 前端每次请求携带 Token;
  • 服务端通过验证签名和过期时间确认身份,无需存储会话。

题目 3(考点延伸)
JWT 的安全问题及解决方法?

答案

  • 不可存储敏感信息(如密码);
  • 使用 HTTPS 避免中间人攻击;
  • 过期时间控制 Token 生命周期;
  • 可使用刷新 Token 机制。

Redis(数据结构、持久化、集群、分布式锁、缓存问题)

题目 1(基础)
Redis 常用数据结构有哪些?

答案

  • String、Hash、List、Set、ZSet(有序集合);
  • 支持快速读写、计数、排行榜、缓存。

题目 2(场景题)
高并发下如何实现 Redis 分布式锁?

答案

  • 使用 SETNX key value NX PX 10000 原子操作;
  • 使用 Redisson 客户端封装安全的分布式锁;
  • 确保过期时间防止死锁。

题目 3(考点延伸)
缓存问题(穿透、击穿、雪崩)如何解决?

答案

  • 穿透:请求不存在数据,可缓存空对象;
  • 击穿:热点 key 过期并发请求,可加互斥锁;
  • 雪崩:大量 key 同时过期,分散过期时间或使用随机过期;
  • 使用合理 TTL、双级缓存策略。

MQ(削峰填谷、解耦、异步、消费语义)

题目 1(基础)
消息队列常用场景?

答案

  • 流量削峰填谷;
  • 系统解耦;
  • 异步处理;
  • 异步通知、日志处理、订单系统等。

题目 2(场景题)
Kafka、RocketMQ、RabbitMQ 消费语义有何区别?

答案

消费语义 描述
at-most-once 消息可能丢失,但不会重复
at-least-once 消息可能重复,但不丢失
exactly-once 消息不丢失也不重复(事务或幂等性实现)

题目 3(考点延伸)
如何保证 MQ 消息顺序消费?

答案

  • Kafka 分区顺序消费,保证同一分区内顺序;
  • RabbitMQ 使用单队列 + 单消费者;
  • 避免多线程并行消费同一顺序队列。

分布式事务(2PC、XA、Saga、补偿、Seata)

题目 1(基础)
2PC(两阶段提交)流程?

答案

  1. 准备阶段:协调者询问各参与者能否提交;
  2. 提交阶段:所有参与者同意提交则正式提交,否则回滚;
  • 保证原子性,但性能低,阻塞资源。

题目 2(场景题)
电商系统跨服务扣库存和创建订单,如何保证分布式事务?

答案

  • 方案 1:2PC/XA,保证强一致性;
  • 方案 2:Saga 事务 + 补偿事务,保证最终一致性;
  • 方案 3:使用 Seata 框架管理分布式事务,简化开发。

题目 3(考点延伸)
分布式事务与本地事务区别?

答案

  • 本地事务:单数据库,ACID 保证强一致性;
  • 分布式事务:跨服务或数据库,需要协调机制,通常追求最终一致性,性能开销大。

CAP / BASE 理论

题目 1(基础)
CAP 理论是什么?

答案

  • Consistency(强一致性)、Availability(可用性)、Partition tolerance(分区容错);
  • 分布式系统最多同时保证两项。

题目 2(场景题)
电商秒杀系统为什么选择 AP 系统而非 CP 系统?

答案

  • 秒杀系统追求高可用和快速响应;
  • 可接受最终一致性;
  • AP 系统保证可用性和分区容错,牺牲短时间一致性。

题目 3(考点延伸)
BASE 理论如何理解?

答案

  • Basically Available(基本可用)、Soft state(软状态)、Eventually consistent(最终一致性);
  • 弥补 CAP 理论的实际应用场景,实现高可用分布式系统。

一致性协调(Zookeeper、etcd)

题目 1(基础)
Zookeeper 的主要功能?

答案

  • 分布式协调服务;
  • 提供选举、配置管理、命名服务、分布式锁等;
  • 使用 ZAB 协议保证顺序一致性。

题目 2(场景题)
多个微服务如何利用 Zookeeper 实现分布式锁?

答案

  • 使用临时顺序节点;
  • 获取最小序号节点的客户端获得锁;
  • 锁释放后通知下一个等待客户端。

题目 3(考点延伸)
etcd 与 Zookeeper 有何区别?

答案

  • etcd:使用 Raft 协议,API 简洁,HTTP/JSON 接口;
  • Zookeeper:ZAB 协议,Java 原生客户端,功能丰富;
  • 都可实现配置管理、分布式锁、服务注册。

可观测性(ELK、Prometheus、Grafana、Jaeger)

题目 1(基础)
可观测性三要素?

答案

  • Metrics(指标);
  • Logs(日志);
  • Tracing(分布式调用链)。

题目 2(场景题)
服务出现性能瓶颈,如何定位?

答案

  • 使用 Prometheus 收集指标(CPU、内存、请求延迟);
  • Grafana 可视化监控;
  • ELK 分析日志,定位错误或异常;
  • Jaeger 查看分布式调用链,找出慢链路。

题目 3(考点延伸)
为什么微服务系统需要可观测性?

答案

  • 系统复杂,单点问题难定位;
  • 提前发现异常,提高可靠性;
  • 支持容量规划和优化决策。

好的,我们继续生成 模块 8:运维/容器化 的完整面试题库,每个小要点至少三题(基础题、场景题、考点延伸题),并附详细解答。


模块 8:运维/容器化

Docker(镜像、容器、Dockerfile)

题目 1(基础)
Docker 镜像和容器有什么区别?

答案

  • 镜像:静态文件,包含应用及运行环境;
  • 容器:镜像运行后的实例,独立进程环境,可读写文件系统;
  • 镜像不可修改,容器可写。

题目 2(场景题)
如何构建一个轻量化的 Docker 镜像?

答案

  • 使用官方基础镜像(Alpine、Debian Slim);
  • 多阶段构建减少临时文件;
  • 清理缓存和不必要文件;
  • 合理拆分层,减少镜像体积。

题目 3(考点延伸)
Dockerfile 常用指令有哪些?

答案

  • FROM:基础镜像;
  • COPY/ADD:复制文件到镜像;
  • RUN:构建期间执行命令;
  • CMD/ENTRYPOINT:容器启动命令;
  • EXPOSE:暴露端口;
  • ENV:设置环境变量;
  • WORKDIR:工作目录。

Kubernetes(Pod、Deployment、Service、Ingress、ConfigMap、Secret、StatefulSet)

题目 1(基础)
Kubernetes 中 Pod、Deployment、Service 有何作用?

答案

  • Pod:最小调度单元,封装容器及资源;
  • Deployment:管理 Pod 副本,保证期望状态;
  • Service:提供访问入口,实现负载均衡,暴露 Pod。

题目 2(场景题)
如何在 Kubernetes 中配置应用数据库连接信息?

答案

  • ConfigMap:存储非敏感配置;
  • Secret:存储敏感信息(密码、Token),支持加密;
  • Pod 通过环境变量或挂载卷读取配置。

题目 3(考点延伸)
StatefulSet 与 Deployment 有何区别?

答案

特性 Deployment StatefulSet
Pod 名称 随机 稳定,序号递增
数据持久化 不保证 与 Pod 一一对应的持久卷
场景 无状态应用 有状态应用(数据库、缓存)

部署策略(滚动更新、蓝绿、金丝雀)

题目 1(基础)
Kubernetes 中滚动更新是什么?

答案

  • Deployment 默认策略;
  • 逐步替换旧 Pod,保证服务不中断;
  • 可配置最大不可用和最大超额副本数。

题目 2(场景题)
如何在生产环境中安全发布新版本?

答案

  • 蓝绿部署:同时保留旧版本和新版本,流量切换后回退简单;
  • 金丝雀发布:先小部分用户访问新版本,验证稳定后全量切换;
  • 滚动更新:逐步替换 Pod,减少宕机。

题目 3(考点延伸)
滚动更新与蓝绿部署优缺点?

答案

  • 滚动更新:平滑升级,不占用额外资源,但回退复杂;
  • 蓝绿部署:快速回退,但需要双份资源,成本高。

CI/CD(Jenkins、GitLab CI、ArgoCD)

题目 1(基础)
CI/CD 的核心作用是什么?

答案

  • 持续集成(CI):自动构建、测试代码,提高开发效率;
  • 持续交付/部署(CD):自动发布、部署到环境,保证快速、可重复交付;
  • 提高软件质量和发布速度。

题目 2(场景题)
如何实现微服务应用自动化部署?

答案

  • Jenkins/GitLab CI 构建镜像、执行测试;
  • Docker Push 镜像到 Registry;
  • ArgoCD 或 Helm 部署更新 Kubernetes 集群;
  • 结合监控报警和回滚策略保证安全。

题目 3(考点延伸)
CI/CD 常见挑战有哪些?

答案

  • 多环境一致性问题;
  • 构建/部署失败回滚处理;
  • 依赖管理和版本控制;
  • 流水线安全、权限控制;
  • 微服务依赖顺序和配置管理。

高可用(多 AZ、故障切换、自动伸缩)

题目 1(基础)
高可用的核心指标是什么?

答案

  • SLA(Service Level Agreement):服务可用性目标;
  • 容错能力:单点故障不影响系统整体;
  • 自动故障切换和自愈能力。

题目 2(场景题)
Web 服务在单 AZ 宕机时如何保证可用?

答案

  • 多可用区部署(Multi-AZ);
  • 使用负载均衡器自动切换健康节点;
  • 自动伸缩(HPA/VPA)保证服务压力可控;
  • 数据库采用主备或集群模式,保证数据可用性。

题目 3(考点延伸)
Kubernetes 如何实现自动伸缩?

答案

  • HPA(Horizontal Pod Autoscaler):根据 CPU/内存或自定义指标自动增加/减少 Pod 副本;
  • VPA(Vertical Pod Autoscaler):动态调整 Pod 资源请求;
  • Cluster Autoscaler:动态扩缩集群节点。

监控与告警(SLO/SLI/SLA,Prometheus+Grafana)

题目 1(基础)
SLO、SLI、SLA 含义?

答案

  • SLI(Service Level Indicator):服务级别指标,如延迟、错误率;
  • SLO(Service Level Objective):服务指标目标值;
  • SLA(Service Level Agreement):与用户约定的服务可用性协议,包含处罚条款。

题目 2(场景题)
如何监控微服务性能并触发告警?

答案

  • 使用 Prometheus 收集指标(CPU、内存、请求延迟、错误率);
  • Grafana 可视化,创建仪表盘;
  • 设置 Alertmanager 告警规则,触发短信/邮件/钉钉通知;
  • 可结合自动伸缩策略缓解高负载。

题目 3(考点延伸)
微服务可观测性与单体系统有何不同?

答案

  • 微服务分布式,链路复杂,需要分布式追踪;
  • 指标、日志、追踪需集中采集;
  • 故障定位需支持跨服务调用分析;
  • SLA/SLO 监控粒度更细。