OPPO 后端线下面试:索引、线程池与分库分表
- 轮次
- 一面、二面、HR面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 能否介绍自己以及实习中负责的工作?
- 数据库索引如何工作,常见索引类型有哪些?
- 遇到执行慢的 SQL,如何优化?
- 熟悉哪些 JVM 垃圾回收器?
- 并发标记为什么可能出现漏标,如何处理?
- 向线程池提交任务后,任务如何被调度?
- 消息队列有哪些特性?
- 分库分表有哪些方式,如何根据业务场景选择?
- 联合索引树是什么结构,能否画图解释?
- 如何理解 AI 应用中的记忆,应用开发有哪些步骤?
《参考解析》
联合索引有字段顺序
索引 (a,b,c) 可以理解为先按 a 排序,a 相同时再比较 b,随后比较 c。分析查询时,把等值条件、范围条件、排序需求分别放进这个顺序里看,再用执行计划确认实际扫描范围。不能把“没用到所有字段”直接等同于“索引完全失效”。
线程池先创建核心线程,再排队
以正常运行中的 ThreadPoolExecutor 为例,线程数低于核心数时尝试创建线程处理任务;否则尝试放入队列。队列放不下时才继续增加线程到最大值,仍不能接收则执行拒绝策略。使用无界队列时,任务通常会持续排队,设置很大的最大线程数并不能解决积压。
分片键决定哪些查询容易做
按用户 ID 分片,用户维度查询容易定位;按时间分片,时间范围查询与归档更直接。选择前应看高频查询、数据倾斜、扩容和跨分片事务。原帖只说考察了场景题,没有留下完整业务条件,无法还原指定的分片方案。
作者记录的一面约三十分钟、二面约四十分钟,之后进入约三十分钟的 HR 面;HR 的具体问题未披露。