Java相关八股学习记录1
《面试题目》
深分页如何优化?
导致性能瓶颈原因:
- MySQL 使用 limit offset, size 做深分页时(如 limit 100000, 20),会先扫描并丢弃前 100000 条数据,只取最后 20 条,数据量越大、offset 越大,性能越差,IO 和 CPU 都会被打爆。
- 优化优先用主键 ID 范围查询,记录上一页最后一条 ID,直接 where id > 上一页最后一条id 避免深分页,充分利用聚簇索引;(缺点:不适合跳多页,适合上下页切换)
- 如果需要实现跳页可以用延迟关联,先用子查询查主键再关联回表;
- 合理使用覆盖索引避免回表;
- 超大数据量直接用 ElasticSearch 替代 MySQL 做分页。
《参考解析》
-
MySQL深度:MySQL InnoDB使用B+树索引,支持ACID事务。关键知识点:聚簇索引(主键索引)叶节点存完整行数据;辅助索引叶节点存主键值(需回表);MVCC通过undo log版本链+ReadView实现多版本并发控制,解决脏读/不可重复读;事务隔离级别从低到高:读未提交→读已提交→可重复读(默认)→串行化。
-
算法题解析:常用算法思路:动态规划(状态转移方程,自底向上);BFS/DFS(图遍历,BFS找最短路,DFS回溯);双指针(有序数组去重/两数之和);滑动窗口(子串/子数组问题);二分查找(有序或单调性)。时间复杂度分析:关注最坏情况和平均情况。