01💻 操作系统
本质:OS 是资源管家,在有限资源下让多程序高效隔离地跑
看到"同时干好多事":→CPU 时间片切换→进程重(独立内存)线程轻(共享内存) →切换有代价(上下文切换)
看到"1 万连接":→不能一连接一线程→select 轮询(累)→epoll 通知(O(1))→Redis/Nginx 单线程扛几万靠它
进程/线程虚拟内存epoll零拷贝
02🌐 网络协议
本质:网络协议演进都为"更快更安全更实时"
看到"打开网页":查地址(DNS)→建通道(TCP)→加密(TLS)→请求(HTTP)→响应 → 打不开顺着链查
看到"跨域报错":同源策略拦了→CORS/代理绕开
DNS/TCP/TLSHTTP 演进同源策略WebSocket
03🏛️ 系统设计
本质:不是画图,是展示思考过程。没有完美方案,只有权衡
六步走:澄清需求→估算 QPS→数据建模→分层架构→核心难点+权衡→扩展容灾
秒杀三板斧:限流(挡)+ 缓存(预减)+ 异步(削峰)
短链发号秒杀Feed 推拉CAP
04🎨 前端代码 → 根因
本质:像侦探读代码,现象 → 为什么 → 机制 → 根因
内存涨:闭包持有引用→GC 可达不回收→定时器/监听没清
循环全打印 3:var 无块级作用域→闭包共享变量→改 let
页面卡:读写交替→强制同步布局→批量读写分离 + transform
ref 卡:Proxy 深度劫持大对象→shallowRef
闭包泄漏重排重绘this 丢失shallowRef
05🗄️ 数据库 SQL
本质:问题核心是"扫太多"(索引解决)或"并发干扰"(事务/锁解决)
SQL 慢:EXPLAIN 看 type/key→ALL=全表扫→查索引失效(运算/类型转换/左模糊/最左前缀)
死锁:相反顺序加锁循环等待→统一加锁顺序预防
EXPLAIN索引失效死锁MVCC
06☕ Java / JVM
本质:核心在"内存"(OOM/GC)和"并发"(共享与原子)
OOM:堆装不下→jmap+MAT 找大对象/泄漏→大对象(瞬时)/泄漏(慢涨)/堆小
GC 频繁:jstat 看 YGC/FGC→对象产生快/回收不掉/堆小
线程安全:共享+非原子=竞态→加锁/原子类/ThreadLocal
OOMGCThreadLocal@Transactional 失效
07🌐 分布式
本质:所有问题源于"网络不可靠+操作无法原子",解法是"最终一致+幂等+故障隔离"
锁失效:过期/删错/主从丢锁→看门狗+唯一标识+Redlock
雪崩:级联失败→超时+熔断+降级+限流(三板斧)
分布式锁幂等CAP熔断降级
08🤖 AI / LLM
本质:LLM 擅长推理不擅长记忆,所有应用都是"把事实外包,让模型做擅长的事"
幻觉:概率续写不是事实查询→RAG 塞事实+温度调低
流式崩:Markdown 块级未闭合→buffer 补全+rAF+DOMPurify
SSE 选型:单向流+fetch ReadableStream(带 token)
幻觉RAG流式渲染上下文溢出
09🏗️ 前端架构
本质:管理复杂度,衡量标准是"改一处影响多少处"
改一处崩一片:组件耦合→高内聚低耦合成/状态管理/provide-inject
状态混乱:能局部就局部,共享才进 store
复用不了:变化与不变没分离→props/slots 暴露变化
耦合状态管理性能组件复用
🔥CPU 高
本质:计算单元被持续占用
第一反应:单线程高(代码:死循环/正则)还是整体高(GC/锁) → 先 jstat 排 GC,再 top -H + jstack 排代码
💥OOM
本质:堆装不下了
第一反应:突然爆(大对象)还是慢涨(泄漏) → jmap + MAT 找大对象/引用链
🐌接口慢
本质:某段耗时长
第一反应:APM 定位瓶颈段 → DB 慢查 SQL/索引,应用慢查代码/GC/锁,下游慢加超时熔断
🔒死锁(卡死)
本质:互相等锁全卡住,特征是 CPU 不高
第一反应:卡住+CPU 不高=在"等"不是在"算" → jstack / SHOW ENGINE INNODB STATUS
💡 万能心法(面试时讲思路,别背命令)
第一步:看到现象,先想清楚它本质是什么(CPU 高=计算被占用、OOM=内存不够、慢=某段堵了)。
第二步:归类对了方向就对了 —— 是"忙死"(CPU 高)还是"等死"(死锁)?是"装不下"(OOM)还是"堵住了"(慢)?
第三步:剩下的就是用工具验证(jstat/jmap/EXPLAIN/APM)。
面试话术:"我看到 X 现象,第一反应是 Y(本质),因为 Z(机制),所以我用 A 工具去验证 B。"这样显得你有体系地思考,而不是死记硬背。