Java相关八股学习记录1

某互联网公司 · 软件开发工程师 · 广东 · 2026-05

《面试题目》

深分页如何优化?

导致性能瓶颈原因:

  1. MySQL 使用 limit offset, size 做深分页时(如 limit 100000, 20),会先扫描并丢弃前 100000 条数据,只取最后 20 条,数据量越大、offset 越大,性能越差,IO 和 CPU 都会被打爆。
  2. 优化优先用主键 ID 范围查询,记录上一页最后一条 ID,直接 where id > 上一页最后一条id 避免深分页,充分利用聚簇索引;(缺点:不适合跳多页,适合上下页切换)
  3. 如果需要实现跳页可以用延迟关联,先用子查询查主键再关联回表;
  4. 合理使用覆盖索引避免回表;
  5. 超大数据量直接用 ElasticSearch 替代 MySQL 做分页。

《参考解析》

  1. MySQL深度:MySQL InnoDB使用B+树索引,支持ACID事务。关键知识点:聚簇索引(主键索引)叶节点存完整行数据;辅助索引叶节点存主键值(需回表);MVCC通过undo log版本链+ReadView实现多版本并发控制,解决脏读/不可重复读;事务隔离级别从低到高:读未提交→读已提交→可重复读(默认)→串行化。

  2. 算法题解析:常用算法思路:动态规划(状态转移方程,自底向上);BFS/DFS(图遍历,BFS找最短路,DFS回溯);双指针(有序数组去重/两数之和);滑动窗口(子串/子数组问题);二分查找(有序或单调性)。时间复杂度分析:关注最坏情况和平均情况。