面灵AI

拼多多27届秋招服务端研发一面面经

轮次
一面
时间
2026-09
来源
牛客网

《面试题目》

  1. 项目里的 SQL 性能优化是怎么做的?为什么要加索引?怎么判断哪些字段需要加索引?
  2. 索引除了提高查询速度,还有什么代价?索引越多越好吗?
  3. MySQL 为什么常用 B+ 树?MyISAM 和 InnoDB 有什么区别?
  4. 事务 ACID 如何由底层机制保证?Undo Log、版本链、隐藏字段和 ReadView 分别是什么?RC 与 RR 有什么区别?
  5. Java 注解底层如何工作?项目中的自定义数据权限注解如何实现?
  6. Spring AOP 如何实现增强逻辑?
  7. RPC 的基本原理是什么?注册中心和 Nacos 起什么作用?
  8. HashMap 的 put 流程是什么?什么时候链表树化?数组长度不足 64 时为什么先扩容?
  9. ConcurrentHashMap 在 JDK 7、JDK 8 中有什么区别?为什么 JDK 8 取消 Segment?
  10. Java 类加载器有哪些?什么是双亲委派?什么情况下会破坏它?
  11. 如何实现一个 LRUCache?

《参考解析》

  1. 优先用慢查询和执行计划定位瓶颈,再根据过滤、排序、连接字段建立合适的联合或覆盖索引;索引会增加写放大、存储和维护成本,并非越多越好。
  2. B+树非叶节点只存键,叶节点按序链接,树高低且范围扫描连续,能减少磁盘 I/O。InnoDB 支持事务和行锁,主键索引聚簇;MyISAM 不支持事务,索引与数据分离。
  3. Undo 记录旧版本,隐藏字段串起版本链,ReadView 决定可见版本;RC 每次语句生成 ReadView,RR 通常在事务首次一致性读时生成。
  4. 运行时注解由反射读取,Spring 可通过代理和切点拦截方法实现 AOP;自定义权限注解通常在切面中解析用户、资源和数据范围。
  5. RPC 通过序列化、网络传输和反序列化完成远程调用;注册中心维护服务地址和健康状态,Nacos 还提供配置管理。
  6. HashMap 先算扰动哈希并定位桶,冲突时链表或红黑树查找;桶数小于 64 时优先扩容以降低树化成本。JDK 8 用 CAS 与 synchronized 锁桶,取消分段锁以减少结构复杂度。
  7. LRU 可用哈希表保存节点、双向链表维护新旧顺序,访问或更新时移到表头,容量超限删除表尾,读写均为 O(1)。