📌 覆盖 90% 大厂面试真题 | 附详细解析【拼多多集团-PDD校园招聘】内推链接:https://careers.pddglobalhr.com/campus/grad/detail?t=DBh7T7ZBAy,内推码:DBh7T7ZBAy。服务端研发工程师 期待你的加入!我们一起,无拼不青春!(通过此链接投递计入内推,内推简历优先筛选~)📚 一、索引与优化(必问!)1. B+树 vs B树 vs 哈希索引✅ 答:对比项B+树B树哈希索引结构非叶子节点只存索引所有节点存数据数组+链表查询范围查询高效(O(logN))随机查询快(O(logN))等值查询O(1)适用InnoDB默认MongoDBMemory引擎👉 为什么MySQL用B+树?叶子节点链表结构适合范围查询(如WHERE id > 100)非叶子节点不存数据,单页能存更多索引,减少磁盘IO2. 最左前缀原则✅ 答:联合索引 (a,b,c),必须从最左列开始匹配:✅ 走索引:WHERE a=1 AND b=2、WHERE a=1❌ 不走索引:WHERE b=2、WHERE c=3优化建议:高频查询字段放左侧3. Explain 关键字段解读✅ 答:字段含义优化方向type访问类型(ALL→index→range→ref→const)尽量避免ALLkey实际使用的索引未走索引时检查SQL条件rows预估扫描行数过大需优化索引或SQL💡 二、事务与锁(高频!)1. 事务四大特性(ACID)✅ 答:A原子性:事务要么全执行,要么全回滚(Undo Log)C一致性:数据符合业务规则(如余额≥0)I隔离性:事务间互不干扰(通过锁/MVCC实现)D持久性:提交后数据不丢失(Redo Log)2. 隔离级别与问题✅ 答:隔离级别脏读不可重复读幻读实现方式读未提交❌❌❌无锁读已提交(RC)✅❌❌快照读(MVCC)可重复读(RR)✅✅❌快照读+间隙锁串行化✅✅✅全表锁👉 MySQL默认RR级别如何解决幻读?快照读:MVCC版本控制当前读:SELECT FOR UPDATE 加间隙锁3. 乐观锁 vs 悲观锁✅ 答:对比项乐观锁悲观锁实现版本号/CAS(如UPDATE SET version=version+1)SELECT FOR UPDATE场景读多写少写多读少🛠️ 三、性能优化(实战向)1. 慢查询优化步骤✅ 答:定位:slow_query_log 开启慢查询日志分析:EXPLAIN 查看执行计划优化:加索引(覆盖索引优化)重构SQL(避免SELECT *、子查询改JOIN)分库分表(数据量过大时)2. 分库分表方案✅ 答:垂直分表:按字段拆分(如用户表拆为基础信息表+扩展表)水平分库:按数据分片(如user_id % 3分到3个库)中间件:ShardingSphere、MyCat3. 主从同步原理✅ 答:主库:写Binlog从库:IO线程拉取Binlog,SQL线程重放延迟问题:原因:从库单线程回放解决:GTID并行复制🎯 四、场景题(大厂必考)1. “库存超卖”如何解决?✅ 答:悲观锁:SELECT FOR UPDATE乐观锁:UPDATE stock SET count=count-1 WHERE count>=1Redis+Lua:原子操作扣减库存2. 订单表数据量过大,如何优化?✅ 答:冷热分离:3个月内的订单存主表,历史数据归档分表:按用户ID哈希分表(如order_uid%10)ES辅助查询:非核心字段存Elasticsearch📌 五、学习建议八股文:死磕《MySQL45讲》《高性能MySQL》实战:用sysbench压测,模拟高并发场景算法:LeetCode数据库题型(如185部门工资前三)🚀 秋招加油!你的Offer正在派送中!(需要内推可私信,字节/腾讯/拼多多简历直达HR~)