什么是深度分页?怎么导致的?
查询偏移量过大的场景我们称为深度分页,这会导致查询性能较低,例如:
# MySQL 在无法利用索引的情况下跳过1000000条记录后,再获取10条记录
SELECT * FROM t_order ORDER BY id LIMIT 1000000, 10
查询偏移量过大的场景我们称为深度分页,这会导致查询性能较低,例如:
# MySQL 在无法利用索引的情况下跳过1000000条记录后,再获取10条记录
SELECT * FROM t_order ORDER BY id LIMIT 1000000, 10
数据冷热分离是指根据数据的访问频率和业务重要性,将数据划分为冷数据和热数据,并分别存储在不同性能和成本的存储介质中的架构策略。
这种架构的核心目标有三个:
消息队列是高性能和高可用系统里都非常常见的中间件,主要用于异步处理、应用解耦、削峰填谷和流量缓冲。学习消息队列时,不能只背 Kafka、RocketMQ、RabbitMQ 的特性,更要理解消息可靠性、顺序性、幂等性、积压处理和技术选型。
如果你准备面试,建议先看 消息队列面试题总结,把 MQ 问题放进生产、存储、消费、确认和补偿链路中复习,再根据项目使用的中间件深入对应专题文章。
消息队列面试通常从“为什么使用 MQ”开始,随后沿着一条消息的生命周期继续追问:生产者发送超时后能不能重试?Broker 返回成功是否代表消息不会丢?消费者处理成功但确认失败会发生什么?重复消费、顺序错乱和消息积压又该怎样处理?
这篇文章是 JavaGuide 消息队列专题的复习入口,按使用场景、消息可靠性、主流中间件和技术选型四部分整理。每部分只列复习时需要抓住的问题,完整答案和实现细节放在对应专题文章中。
时间比较紧的话,可以先看面试突击版的消息队列常见面试题总结,把讲不清楚的问题标出来,再回到本文补原理和工程细节。
高性能系统面试通常从一个具体症状开始:接口变慢、数据库 CPU 升高、消息开始积压,或者大促流量超过了现有容量。回答时先确认 QPS、P99、数据量和读写比例,再沿着请求链查入口、应用、缓存、数据库和消息队列,直接报出“加缓存、上 MQ、分库分表”很容易被继续追问。
Disruptor 是一个相对冷门一些的知识点,不过,如果你的项目经历中用到了 Disruptor 的话,那面试中就很可能会被问到。
一位球友之前投稿的面经(社招)中就涉及一些 Disruptor 的问题,文章传送门:圆梦!顺利拿到字节、淘宝、拼多多等大厂 offer! 。

CDN 全称是 Content Delivery Network/Content Distribution Network,翻译过的意思是 内容分发网络 。
我们可以将内容分发网络拆开来看:
RabbitMQ 现在不能只按“Exchange + Queue”那套老答案准备。RabbitMQ 4.0 已经移除镜像队列;需要复制和高可用时,主要看 Quorum Queue;需要日志型存储、历史回放或大量堆积时,再评估 Streams。
这篇文章按 RabbitMQ 4.x 最新版本为核心介绍,同时保留 3.x 老集群里还会遇到的镜像队列问题。重点看四件事:AMQP 模型怎么工作,Exchange 怎么路由,消息可靠性怎么保证,以及 Classic Queue、Quorum Queue、Streams 该怎么选。
SQL 慢了,不要一上来就套“加索引”“不要 SELECT *”这类规则。先把慢 SQL 找出来,看它慢在扫描行数、排序、回表、锁等待,还是调用频次太高。执行计划和业务访问方式对上之后,再决定是改索引、改 SQL、改表结构,还是把查询挪到缓存、搜索引擎或离线报表里。
排查时可以按这个顺序来:
type、key、rows、filtered、Extra,确认有没有全表扫描、回表过多、临时表或文件排序。