拼多多27届秋招服务端研发一面面经
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 项目里的 SQL 性能优化是怎么做的?为什么要加索引?怎么判断哪些字段需要加索引?
- 索引除了提高查询速度,还有什么代价?索引越多越好吗?
- MySQL 为什么常用 B+ 树?MyISAM 和 InnoDB 有什么区别?
- 事务 ACID 如何由底层机制保证?Undo Log、版本链、隐藏字段和 ReadView 分别是什么?RC 与 RR 有什么区别?
- Java 注解底层如何工作?项目中的自定义数据权限注解如何实现?
- Spring AOP 如何实现增强逻辑?
- RPC 的基本原理是什么?注册中心和 Nacos 起什么作用?
- HashMap 的 put 流程是什么?什么时候链表树化?数组长度不足 64 时为什么先扩容?
- ConcurrentHashMap 在 JDK 7、JDK 8 中有什么区别?为什么 JDK 8 取消 Segment?
- Java 类加载器有哪些?什么是双亲委派?什么情况下会破坏它?
- 如何实现一个 LRUCache?
《参考解析》
- 优先用慢查询和执行计划定位瓶颈,再根据过滤、排序、连接字段建立合适的联合或覆盖索引;索引会增加写放大、存储和维护成本,并非越多越好。
- B+树非叶节点只存键,叶节点按序链接,树高低且范围扫描连续,能减少磁盘 I/O。InnoDB 支持事务和行锁,主键索引聚簇;MyISAM 不支持事务,索引与数据分离。
- Undo 记录旧版本,隐藏字段串起版本链,ReadView 决定可见版本;RC 每次语句生成 ReadView,RR 通常在事务首次一致性读时生成。
- 运行时注解由反射读取,Spring 可通过代理和切点拦截方法实现 AOP;自定义权限注解通常在切面中解析用户、资源和数据范围。
- RPC 通过序列化、网络传输和反序列化完成远程调用;注册中心维护服务地址和健康状态,Nacos 还提供配置管理。
- HashMap 先算扰动哈希并定位桶,冲突时链表或红黑树查找;桶数小于 64 时优先扩容以降低树化成本。JDK 8 用 CAS 与 synchronized 锁桶,取消分段锁以减少结构复杂度。
- LRU 可用哈希表保存节点、双向链表维护新旧顺序,访问或更新时移到表头,容量超限删除表尾,读写均为 O(1)。