2026/9/2大约 6 分钟
高性能系统面试通常从一个具体症状开始:接口变慢、数据库 CPU 升高、消息开始积压,或者大促流量超过了现有容量。回答时先确认 QPS、P99、数据量和读写比例,再沿着请求链查入口、应用、缓存、数据库和消息队列,直接报出“加缓存、上 MQ、分库分表”很容易被继续追问。
2026/9/2大约 9 分钟
面试里有个很常见的套路:先问你“Kafka 为什么快”“RocketMQ 为什么扛得住堆积”,等你答出顺序写、Page Cache、零拷贝之后,面试官顺势往下挖:“零拷贝具体省掉了哪几次拷贝?”“mmap 和 sendfile 有什么区别?”“splice 又是干嘛的?”
到这一步,很多人就开始打太极了。能背出“零拷贝就是不经过用户态”的不少,能把四次拷贝、两次 DMA、几次上下文切换的账算清楚的不多。
这篇文章就从一次文件发送说起:传统 I/O 会拷几次,零拷贝的“零”到底省在哪,mmap、sendfile、splice 三条路线分别省了什么,又各自要付出什么代价。
2026/9/2大约 20 分钟
消息队列面试通常从“为什么使用 MQ”开始,随后沿着一条消息的生命周期继续追问:生产者发送超时后能不能重试?Broker 返回成功是否代表消息不会丢?消费者处理成功但确认失败会发生什么?重复消费、顺序错乱和消息积压又该怎样处理?
这篇文章是 JavaGuide 消息队列专题的复习入口,按使用场景、消息可靠性、主流中间件和技术选型四部分整理。每部分只列复习时需要抓住的问题,完整答案和实现细节放在对应专题文章中。
时间比较紧的话,可以先看面试突击版的消息队列常见面试题总结,把讲不清楚的问题标出来,再回到本文补原理和工程细节。
2026/9/2大约 10 分钟

