面灵AI

OPPO 后端线下面试:索引、线程池与分库分表

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

《面试题目》

  1. 能否介绍自己以及实习中负责的工作?
  2. 数据库索引如何工作,常见索引类型有哪些?
  3. 遇到执行慢的 SQL,如何优化?
  4. 熟悉哪些 JVM 垃圾回收器?
  5. 并发标记为什么可能出现漏标,如何处理?
  6. 向线程池提交任务后,任务如何被调度?
  7. 消息队列有哪些特性?
  8. 分库分表有哪些方式,如何根据业务场景选择?
  9. 联合索引树是什么结构,能否画图解释?
  10. 如何理解 AI 应用中的记忆,应用开发有哪些步骤?

《参考解析》

联合索引有字段顺序

索引 (a,b,c) 可以理解为先按 a 排序,a 相同时再比较 b,随后比较 c。分析查询时,把等值条件、范围条件、排序需求分别放进这个顺序里看,再用执行计划确认实际扫描范围。不能把“没用到所有字段”直接等同于“索引完全失效”。

线程池先创建核心线程,再排队

以正常运行中的 ThreadPoolExecutor 为例,线程数低于核心数时尝试创建线程处理任务;否则尝试放入队列。队列放不下时才继续增加线程到最大值,仍不能接收则执行拒绝策略。使用无界队列时,任务通常会持续排队,设置很大的最大线程数并不能解决积压。

分片键决定哪些查询容易做

按用户 ID 分片,用户维度查询容易定位;按时间分片,时间范围查询与归档更直接。选择前应看高频查询、数据倾斜、扩容和跨分片事务。原帖只说考察了场景题,没有留下完整业务条件,无法还原指定的分片方案。

作者记录的一面约三十分钟、二面约四十分钟,之后进入约三十分钟的 HR 面;HR 的具体问题未披露。