Skip to content

第二十八部分:50 道核心必背题 (多语言后端 + 分布式 + AI 核心背诵版)


📌 说明

本章精选 50 道高级后端 (PHP/Java/Go/Python) + 分布式/微服务 + AI 应用工程最核心、最拉开差距的高频必背面试题,提供精炼口语化背诵回答与抓手口诀


Q01: JVM 内存物理模型与 32G 指针压缩?

  • 背诵回答:堆划分为 Eden, S0, S1 (新生代) 和老年代。堆内存需控制在 31GB 内 (-Xmx31g);超过 32GB 会导致 Compressed OOPs (指针压缩) 失效,指针膨胀为 64bit,CPU Cache 命中率下降且浪费 20% 内存。
  • 口诀:堆设三十一 G 内,指针压缩效率高。

Q02: CMS 与 G1 垃圾收集器深度对比?

  • 背诵回答:CMS 基于物理代采用标记-清除算法,追求短停顿但产生大量内存碎片,易引发并发模式失败降级;G1 将堆切为 Region,基于拷贝-整理算法,按垃圾收益打分回收 (Garbage-First),无碎片且 STW 可预测 (<200ms)。
  • 口诀:CMS 清除有碎片,G1 切片 STW 可预测。

Q03: Java AQS 物理架构与抢锁机制?

  • 背诵回答:由 volatile int state 状态变量和 CLH 双向 FIFO 队列组成。线程 CAS 抢锁修改 state;失败则入队列并调用 LockSupport.park() 挂起;释放锁时 unpark() 唤醒头节点线程。
  • 口诀:state 加双向链表,CAS 抢锁失败进队列。

Q04: ThreadLocal 内存泄漏根因与防御?

  • 背诵回答:ThreadLocalMap 的 Key 是弱引用 (WeakReference),Value 是强引用。Key 被 GC 回收后,在长生命周期线程池中 Value 依然强引用无法释放。必须在 finally 中显式调用 remove()
  • 口诀:Key 是弱引用 Value 强引用,线程池用完必须 remove。

Q05: Go 语言 GMP 调度模型物理机制?

  • 背诵回答:G (协程 2KB), M (内核线程), P (逻辑处理器,持有 256 本地队列)。基于 Work Stealing (从其他 P 偷任务) 与 Hand Off (系统调用阻塞时转交 P) 算法实现高并发。
  • 口诀:G 协程 M 线程 P 处理器,偷任务转交 P。

Q06: Go Channel 底层 hchan 物理结构与关闭铁律?

  • 背诵回答:包含 buf 环形缓冲区、lock 互斥锁以及 recvq/sendq 双向等待链表。铁律:只有发送方才能 close Channel;向已关闭的 Channel 发送或重复关闭会引发 Panic 崩溃。
  • 口诀:hchan 带锁环形缓冲区,发送端关闭防 Panic。

Q07: Python GIL 锁本质与内存 GC 三代机制?

  • 背诵回答:CPython 互斥锁保证同一时刻仅一个线程跑字节码,限制 CPU 密集型但对 IO 密集型/Asyncio 友好。GC 采用引用计数为主、标记清除解循环引用、0/1/2 分代回收做效率优化。
  • 口诀:GIL 锁住单线程,引用计数主回收,分代提高效率。

Q08: Linux 线上 CPU 100% 排查四步法?

  • 背诵回答top -Hp <pid> 找最高 CPU 线程 ➔ printf "%x\n" <tid> 转十六进制 ➔ jstack <pid> \| grep -A 20 <hex_tid> 定位源码崩溃行。
  • 口诀:top -Hp 找线程,十六进制 jstack 查源码。

Q09: Linux 零拷贝 (sendfile + SG-DMA) 物理过程?

  • 背诵回答:传统 IO 需 4 次切换与 4 次拷贝;sendfile 结合 SG-DMA 将 PageCache 数据由 DMA 直接传给网卡,实现 2 次上下文切换、2 次 DMA 拷贝与零 CPU 拷贝。
  • 口诀:sendfile 内核直吐网卡,两次切换零 CPU 拷贝。

Q10: TCP 为什么主动关闭方要等待 2MSL?

  • 背诵回答:一是为了保证最后一个 ACK 报文能可靠到达被动方(若丢包可重传);二是为了让网络中残留的旧报文在 2MSL 时间内自然消亡,防止污染新连接。
  • 口诀:保证最后 ACK 到达,清除网络残留报文。

Q11: MySQL InnoDB 2PC (两阶段提交) 原理?

  • 背诵回答:Prepare 阶段写 Redo Log 设 prepare 刷盘 ➔ Commit 阶段写 Binlog 刷盘 ➔ 追加 Redo Log commit 标记。崩溃恢复时对比 Binlog 补全 Commit,保障主从一致。
  • 口诀:Prepare 写 Redo,Commit 写 Binlog 主从一致。

Q12: MySQL LIMIT 1000000 深分页卡死优化?

  • 背诵回答:深分页抛弃前 100 万条前引发了 100 万次聚簇索引回表;优化:重构为延迟关联 JOIN (SELECT id FROM t WHERE ... LIMIT 1000000, 10) 在覆盖索引树上极速切片。
  • 口诀:深分页回表如灾难,延迟关联覆盖索引切片。

Q13: MySQL MVCC 与 Read View 4 条可见性规则?

  • 背诵回答:借助隐藏列 (DB_TRX_ID, DB_ROLL_PTR) 顺 Undo 链。Read View 规则:trx_id == creator< min_trx_id 可见;>= max_trx_id 隐;min <= trx_id < max 时在 m_ids 活跃列表隐。
  • 口诀:小于 min 可见,大于 max 隐,m_ids 活跃列表隐。

Q14: MySQL InnoDB 7 种锁与死锁排查?

  • 背诵回答:S/X 锁、意向锁 IS/IX、记录锁 Record Lock、间隙锁 Gap Lock、临键锁 Next-Key Lock、插入意向锁、自增锁。执行 SHOW ENGINE INNODB STATUS 查看死锁日志堆栈。
  • 口诀:SHOW ENGINE 看死锁,间隙意向冲突必死锁。

Q15: Redis 7 为什么快?多线程 IO 原理?

  • 背诵回答:纯内存 + 单线程 Reactor 执行命令防锁竞争 + Linux epoll 多路复用。Redis 6/7 多线程仅用于并发处理 Socket 读写,命令执行依然是单线程。
  • 口诀:多线程只处理 Socket 读写,单线程跑命令保原子。

Q16: Redis ListPack 对比 ZipList 优势?

  • 背诵回答:ZipList 节点存前节点长度导致连锁内存重分配 (级联更新);ListPack 在结尾存当前节点长度,彻底消除了级联更新卡顿,压缩内存 70%。
  • 口诀:ListPack 消除级联更新,连续内存极省空间。

Q17: Redis Dict 渐进式 Rehash 原理?

  • 背诵回答:维护两个 Hash 表 (ht[0], ht[1])。扩容时通过 rehashidx 将大字典迁移开销平摊到后续每一次增删改查中,避免单线程卡死。
  • 口诀:化整为零平摊开销,渐进 Rehash 防卡顿。

Q18: Redis 分布式锁 Watchdog 看门狗与锁丢失?

  • 背诵回答:后台线程每隔 10s (TTL/3) 自动检查并续期。主从异步复制可能丢锁,强一致场景结合 Redlock 或数据库唯一索引保底。
  • 口诀:看门狗自动续期,主从异步找 DB 保底。

Q19: 缓存击穿 Hotkey 互斥锁 vs 逻辑过期?

  • 背诵回答:Hotkey 过期引发击穿。互斥锁 (SETNX) 仅一线程查 DB 重建 (强一致但微卡顿);逻辑过期在存 expire_at 字段,过期后异步后台更新 (高可用零卡顿)。
  • 口诀:互斥锁做重建,逻辑过期异步更新零卡顿。

Q20: RabbitMQ 消息绝对不丢失三重保障?

  • 背诵回答:生产者 Publisher Confirm + 备份交换机 AE ➔ Exchange/Queue/Message 三重持久化 ➔ 消费者 auto_ack=false 在 DB 事务 Commit 后发送 Manual ACK。
  • 口诀:发送 Confirm 存储持久,消费手动 ACK。

Q21: 消费端通用幂等防重表架构?

  • 背诵回答:MQ 物理只能做 At-Least-Once。消费端采用 Redis 60s 短锁防并发冲撞 + DB 事务内 consumed_message_log 唯一索引拦截重复 msg_id
  • 口诀:Redis 短锁防突发,DB 唯一索引保底杀。

Q22: MQ 消息积压 (Backlog) 100 万条紧急分流?

  • 背诵回答:紧急上线‘分流 Worker’(不跑业务,2ms 转发)将积压拆分投递至 30 个临时 Queue,部署 30 倍 Consumer 并行消费消灭积压,死信 DLX 自动存异常。
  • 口诀:百万积压拆队列,死信 DLX 存异常。

Q23: Kafka 百万吞吐三大物理因素?

  • 背诵回答:Partition 分区并发写 + Append-Only 顺序写磁盘 + Linux 零拷贝 sendfile() 绕过用户态直吐网卡。
  • 口诀:分区并行顺序写,零拷贝直吐网卡。

Q24: ES 倒排索引与 FST / FOR 原理?

  • 背诵回答:Term 映射 DocId 链。FST 前缀树将 Term 字典压缩进内存;Posting List 采用 FOR 与 Roaring Bitmap 做位图合并。
  • 口诀:FST 压缩 Term 字典,Posting List 做位图合并。

Q25: ES 8.x 原生 Hybrid Search 混合召回?

  • 背诵回答:单个 ES 查询中通过 knn 执行 Dense Vector 语义检索,通过 query 执行 BM25 关键词匹配,通过 rrf 参数在服务端合并打分。
  • 口诀:knn 结合 BM25,RRF 融合召回最精准。

Q26: 分布式事务 5 种方案选型?

  • 背诵回答:2PC (CP 强一致锁长) ➔ 3PC ➔ TCC (AP 预留 Try/Confirm/Cancel) ➔ Saga (补偿) ➔ 本地消息表 + MQ (生产推荐最终一致)。
  • 口诀:生产优先本地消息表,MQ 异步保最终一致。

Q27: 注册中心 CP 模式 vs AP 模式物理差异?

  • 背诵回答:ZK/Nacos CP 保证强一致,选主期间整个注册中心暂停服务;Eureka/Nacos AP 采用 Peer-to-Peer 异步复制,节点故障仍可响应拉取,保微服务不崩。
  • 口诀:ZK 选主 CP 暂停服务,Nacos AP 保可用。

Q28: Zookeeper ZAB 协议与分布式锁?

  • 背诵回答:ZAB 崩溃恢复对比 ZXID 选 Leader,原子广播过半 ACK 提交。分布式锁建 EPHEMERAL_SEQUENTIAL 节点,仅监听前一个节点消除羊群效应。
  • 口诀:ZXID 最大选 Leader,监听前一节点消羊群效应。

Q29: 百万级高并发秒杀系统架构?

  • 背诵回答:静态化 CDN + 动态 URL 加盐 + 网关限流 + Redis Lua 预扣减 (10万QPS) + MQ 削峰 + DB CAS 乐观锁 (num >= 1)。
  • 口诀:页面静态防冲榜,Redis Lua 预扣减,MQ 削峰 CAS 保底。

Q30: 数据库平滑不停服双写迁移五步法?

  • 背诵回答:开启代理层双写 ➔ 全量历史搬运 ➔ 增量数据对账补全 ➔ 灰度切读 ➔ 关闭旧写。
  • 口诀:双写开关先开启,历史搬运对账齐,切读停写旧表。

Q31: Self-Attention QKV 矩阵计算公式?

  • 背诵回答:$\text{Attention}(Q,K,V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V$。除以 $\sqrt{d_k}$ 是为了防止点积过大进入 Softmax 梯度饱和区。
  • 口诀:QK 点积除以根号 d_k,Softmax 加权 V。

Q32: Temperature 参数数学物理意义?

  • 背诵回答:$T$ 改变 Softmax 概率分布陡峭度。$T \to 0$ 极其确定(写代码设 0),$T$ 越大越平缓随机(适合创意)。
  • 口诀:温度低确定性强,写码提 JSON 设为零。

Q33: Context Window 中间遗忘 (Lost in the Middle) 现象?

  • 背诵回答:LLM 对开头 Head 和结尾 Tail 的注意力极高,对 Middle 中间段落信息召回率急剧下降呈 U 型曲线。
  • 口诀:两头注意力高中间遗忘,关键信息放两端。

Q34: LLM 降幻五重工程防御体系?

  • 背诵回答:RAG 强上下文约束 + Temperature=0 + Strict JSON Schema 校验 + 第二模型对抗审计 + 后置事实归因校验。
  • 口诀:RAG 约束温度零,Schema 校验双模审计。

Q35: Streaming / SSE 底层原理?

  • 背诵回答Content-Type: text/event-streamTransfer-Encoding: chunked。服务端不断推送 data: {...}\n\n 帧,降低 TTFT 感知延迟。
  • 口诀:text/event-stream 推 chunk,TTFT 降至 300 毫秒。

Q36: Function Calling 4 步闭环?

  • 背诵回答:传 Tools Schema ➔ LLM 返回 tool_calls ➔ 后端本地执行代码 ➔ 将 role=tool 结果追加回传 LLM 生成回答。
  • 口诀:传 Schema 返 tool_calls,后端执行追加结果。

Q37: Parent-Child 父子切块策略?

  • 背诵回答:150 字符 Child 块做高精度向量检索,命中后自动将包含完整前因后果的 800 字符 Parent 块注入 Prompt。
  • 口诀:小块做检索,大块做注入。

Q38: Reranker Cross-Encoder 为什么比 Bi-Encoder 精度高?

  • 背诵回答:Bi-Encoder 独立向量编码缺乏交叉注意力;Cross-Encoder 将 Query+Doc 拼接送入 Transformer 触发全量 Cross Self-Attention,精度极高。
  • 口诀:双塔编码做粗排,交叉塔全量 Attention 做精排。

Q39: ReAct 范式四步循环?

  • 背诵回答:Thought (思考) ➔ Action (决定调工具) ➔ Action Input (入参) ➔ Observation (观察工具返回),循环直到 Final Answer。
  • 口诀:Thought 思考 Action 调工具,Observation 观察返结果。

Q40: Agent Checkpointing 断点续传原理?

  • 背诵回答:在节点跳转前自动将全局 State 快照写入 Redis/DB(带 thread_id)。崩溃后读取最新 Checkpoint 原位恢复执行。
  • 口诀:节点跳转存快照,崩溃读取原位恢复。

Q41: MCP (Model Context Protocol) 核心价值?

  • 背诵回答:Anthropic 推出的 AI 领域 USB 接口协议。将工具与资源统一为 MCP Server,Client 即插即用,彻底解耦。
  • 口诀:AI 的 USB 接口, Server 包装 Client 即插即用。

Q42: MCP 三要素定义?

  • 背诵回答:Tools (可执行函数写操作)、Resources (只读上下文 URI)、Prompts (预置提示词模板)。
  • 口诀:Tools 写操作,Resources 只读 URI。

Q43: DAG 拓扑排序调度原理?

  • 背诵回答:计算节点入度 (Indegree)。找到入度为 0 的节点激活执行;执行完将其下游节点入度减 1,入度归零则推入执行队列。
  • 口诀:计算节点入度,入度归零推入队列。

Q44: Prompt Cache (提示词缓存) 降本原理?

  • 背诵回答:将不变的 System Prompt / 前缀的 GPU KV Cache 缓存在显存中。命中缓存免去 Prefill 计算,费用打 5 折,延迟降 80%。
  • 口诀:系统 Prompt 固前置,复用 KV 费用打折。

Q45: 双模型对抗代码审计机制?

  • 背诵回答:Claude 3.5 生成代码 Patch,DeepSeek-R1 担任黑客审计,输出分级 Audit Report,High 风险触发人工审批。
  • 口诀:单模自查有盲点,第二模型黑客审计出 Report。

Q46: AI Gateway 语义缓存 (Semantic Cache) 原理?

  • 背诵回答:将输入 Prompt 转向量,在 Redis/Milvus 中做 KNN 检索。余弦相似度 > 0.95 直接返回缓存答案,降本 35%+。
  • 口诀:向量比相似,大于零九五直接吐答案。

Q47: Dynamic Model Router 动态模型路由?

  • 背诵回答:基于 Task 复杂度打分。简单分类/总结路由给低价小模型 (Qwen-7B),复杂推理/代码路由给高价大模型 (Claude 3.5)。
  • 口诀:简单小模型算,复杂推理大模型干。

Q48: Docker 三大底层隔离技术?

  • 背诵回答:Namespace 实现视图隔离,Cgroups 实现 CPU/内存资源限制,OverlayFS2 实现分层联合挂载与写时复制 (COW)。
  • 口诀:Namespace 隔离,Cgroups 限资源,OverlayFS2 分层挂。

Q49: Nginx upstream keepalive 调优?

  • 背诵回答:配置 keepalive 128 并在 location 中设 proxy_http_version 1.1proxy_set_header Connection "",复用长连接池免去三次握手。
  • 口诀:keepalive 留长连,HTTP1.1 免三次握手。

Q50: AI Coding Agent 自动化自愈与 Git Rollback 闭环?

  • 背诵回答:沙箱应用 Patch ➔ 跑静态分析 (phpstan) + 单测 (phpunit) ➔ 失败反馈 LLM 重试 ➔ 重试 3 次仍然失败自动 git reset --hard HEAD 硬回滚保主干。
  • 口诀:单测失败反馈重试,三次不通 hard 强回滚。

🔍 本章 6 重自审计报告

  1. 【知识审计】:50 道必背题已全量重构!涵盖 Java/JVM, AQS, Go/GMP, Python/GIL, Linux, MySQL, Redis, MQ, ES, 分布式事务, 微服务, 系统设计, LLM, RAG, Agent, MCP!

Released under the MIT License.