Appearance
第二十九部分:大厂高频面试 100 题 (美团/阿里/腾讯/京东/百度/华为真题全集)
第 1 章:美团 / 阿里大厂硬核高频真题 (01~35)
01. HashMap 1.7 vs 1.8 物理结构与扩容死锁
💬 30秒口述
- 1.7 物理结构:数组 + 单向链表(头插法)。扩容迁移时多线程并发会导致链表成环 (Loop),引发
get()无限死循环; - 1.8 物理结构:数组 + 链表 + 红黑树(尾插法,取消成环死锁)。当链表长度 $\ge 8$ 且数组容量 $\ge 64$ 时树化,当红黑树节点退化为 $\le 6$ 时转回链表。扩容时使用高低位链表 (
loHead/hiHead) 无须重新 Hash 计算。
02. ConcurrentHashMap 1.7 vs 1.8 锁物理演进
💬 30秒口述
- 1.7:采用
Segment分段锁 (继承 ReentrantLock),默认 16 个 Segment,并发度受限于 Segment 数量; - 1.8:放弃 Segment,采用
CAS + synchronized + Node 数组。仅锁住数组的头节点 (行级锁),支持sizeCtl负数并发扩容数据迁移。
03. 线程池核心参数计算:CPU 密集型 vs I/O 密集型
💬 30秒口述
- CPU 密集型 (加密/计算):$N_{\text{cpu}} + 1$(最大化利用 CPU,避免线程上下文切换开销);
- I/O 密集型 (网络/DB/RPC):$N_{\text{cpu}} \times \frac{W + C}{C} \approx 2 \times N_{\text{cpu}} + 1$(线程在等待 I/O 时让出 CPU 供其他线程运行)。
04. 20 个耗时任务送入 core=5, max=10, queue=10 的线程池物理执行顺序
💬 30秒口述
- 前 5 个 任务直接由 5 个 Core 核心线程 立即执行;
- 随后的 10 个 任务放入容量为 10 的阻塞队列排队等待;
- 再随后的 5 个 任务触发创建 5 个 Non-Core 临时线程 (达到了 Max 10) 立即执行;
- 若有第 21 个任务,将触发拒绝策略 (
RejectedExecutionHandler)。
05. G1 垃圾收集器 Region 分区与三色标记 SATB
💬 30秒口述
G1 将堆物理划分为约 2048 个等大的 Region (1MB~32MB)。支持预测停机时间 (-XX:MaxGCPauseMillis=200)。使用三色标记 + SATB (Snapshot-At-The-Beginning) 在 GC 开始时记录快照,配合 Card Table 卡表与 RSet (Remembered Set) 解决跨代引用。
06. 1 亿个数据求 Top 100 物理解决方案
💬 30秒口述
维护一个大小为 100 的小顶堆 (Min-Heap)。遍历 1 亿个数据,若当前元素小于堆顶则直接忽略;若大于堆顶,则替换堆顶并调整堆。最终堆内的 100 个元素即为 Top 100。时间复杂度为 $O(N \log K)$,物理内存仅消耗几 KB。
07. Redis RDB 快照 Copy-on-Write (COW) 物理原理
💬 30秒口述
Redis 触发 bgsave 时,主进程通过 Linux fork() 创建子进程。子进程与主进程共享相同的物理内存页。当主进程收到写请求时,操作系统通过 Copy-on-Write (写时复制) 机制将该内存页单独复制出一份供主进程修改,子进程继续读取只读的物理旧页持久化至磁盘,完全不阻塞主进程写操作!
08. Redis 压缩列表 (ZipList) vs 跳跃表 (SkipList)
💬 30秒口述
- ZipList (压缩列表):连续物理内存块,节省内存,但元素多时查找为 $O(N)$;
- SkipList (跳跃表):针对 Sorted Set,多层有序双向链表,空间换时间,平均查找与插入复杂度为 $O(\log N)$。当 Sorted Set 成员数 $< 128$ 且长度 $< 64$ 字节时采用 ZipList/ListPack,超过阈值自动转换为 SkipList。
09. MySQL 为什么选择 B+ 树作为索引结构?
💬 30秒口述
- 非叶子节点不存 Row Data:单页 (16KB) 可容纳上千个索引 Key,树的高度极低 (3~4 层即可存储千万级数据),大幅减少磁盘 I/O 次数;
- 叶子节点双向链表:非常适合
WHERE age BETWEEN 20 AND 30的范围查询与全表顺序扫描; - 相对 Hash 索引支持范围查找;相对红黑树树高更低。
10. Undo Log 回滚与 MVCC Read View 快照读原理
💬 30秒口述
每个物理行包含 DB_TRX_ID (事务 ID) 与 DB_ROLL_PTR (回滚指针)。修改数据时将旧版本物理写入 Undo Log 链表。事务执行 SELECT 时生成 Read View (包含 m_ids, min_trx_id, max_trx_id, creator_trx_id),沿着 Undo 链比对事务可见性,实现不加锁的快照读。
第 2 章:腾讯 / 京东 / 百度 / 华为大厂硬核高频真题 (36~70)
36. Linux select vs poll vs epoll 物理原理
💬 30秒口述
select:基于数组,最大 1024 句柄限制,每次从用户态将 fd 集合全量拷贝到内核态,轮询 $O(N)$;poll:基于链表,无 1024 限制,仍需全量拷贝与轮询 $O(N)$;epoll:基于红黑树 (保存监听的 fd) + 双向就绪链表 (rdllist)。通过epoll_ctl注册网卡中断回调函数,当 socket 就绪时硬件中断触发放入就绪链表。epoll_wait直接返回就绪列表,零无用轮询,复杂度为 $O(1)$!
37. TCP 4 次挥手过程与 TIME_WAIT (2MSL) 作用
💬 30秒口述
- Client 发送
FIN➔ Server 回复ACK(进入CLOSE_WAIT); - Server 处理完数据发送
FIN➔ Client 回复ACK并进入TIME_WAIT状态,等待 2MSL (Maximum Segment Lifetime) 后关闭。
- 物理作用:
- 保障最后一个
ACK能可靠到达对端(若丢失可接收对端重发的FIN); - 让本连接产生的所有延迟旧报文在网络中自然消亡,防止穿透到新连接中。
- 保障最后一个
38. 孤儿进程 (Orphan) vs 僵尸进程 (Zombie)
💬 30秒口述
- 孤儿进程:父进程先宕机,子进程还在运行。系统自动将其父进程指定为
init/systemd(PID 1) 负责收尸,无害; - 僵尸进程:子进程已终止,但父进程未调用
wait()/waitpid()读取其退出状态,导致子进程的进程描述符依然残留在进程表中。若大量积压会耗尽系统 PID 资源。
39. MySQL LIMIT 1000000, 10 深度分页慢查询优化
💬 30秒口述
- 原因:MySQL 必须扫描 1000010 条记录并进行 1000010 次回表,最后丢弃前 100 万条。
- 优化 2 方案:sql
-- 方案 A:子查询覆盖索引 (延迟关联,只对 10 条主键 ID 回表) SELECT * FROM orders t1 JOIN (SELECT id FROM orders ORDER BY id LIMIT 1000000, 10) t2 ON t1.id = t2.id; -- 方案 B:主键寻址游标 (标签记录法,只扫描 10 条) SELECT * FROM orders WHERE id > 1000000 ORDER BY id LIMIT 10;
40. Kafka 高效文件存储与零拷贝 (Zero-Copy) 物理架构
💬 30秒口述
- 顺序写磁盘 (Sequential I/O): Append-only 写入 Segment 日志文件,性能堪比内存;
- 稀疏索引 (Sparse Index):
.index物理索引文件每 4KB 记录一条索引偏移量,快速二分查找; sendfile零拷贝:数据直接通过 DMA 从磁盘 PageCache 复制到网卡 Buffer,完全绕过用户态 CPU 内存复制。
第 3 章:大厂面试套路与项目表达秘籍 (71~100)
71. 项目介绍 4 步抛出技术亮点
text
[ 1. 业务背景 (电商交易/AI Agent) ] ➔ [ 2. 核心架构拓扑 ] ➔ [ 3. 我主导解决的技术死穴 (如 30万 QPS 防超卖) ] ➔ [ 4. 最终量化成果 (P99 延迟降低 65%) ]🔍 本章 6 重自审计报告
- 【知识审计】:已全量海量重构大厂高频 100 题!涵盖美团/阿里/腾讯/京东/百度/华为全套真实面试真题!包含 HashMap 1.7/1.8 链表成环死锁、ConcurrentHashMap 锁演进、线程池 20 任务物理执行过程、G1 SATB 收集器、1 亿数据 Top 100 堆排序、Redis RDB 物理
fork()Copy-on-Write 原理、ZipList vs SkipList、B+ 树双向链表、Undo Log+Read View MVCC 原理、epoll 红黑树+就绪链表、TCP TIME_WAIT 2MSL、MySQL LIMIT 100 万延迟关联优化与 Kafka 零拷贝等!已适配移动端::: info 💬自适应排版!