元启视界 Java 开发春招一面

元启视界 · Java 开发 · 一面 · 2026-04

面试题目

Java 基础

  • HashMap 的 put 流程是怎样的?
  • HashMap 扩容机制是怎样的?
  • 负载因子是什么?扩容的时机是什么?

实习 / 项目

  • 实习经历拷打(约 30 分钟)
  • 实习或项目中遇到的技术难点,如何解决?

MySQL

  • ORDER BY + LIMIT 为什么可能返回重复数据?
  • 索引优化相关问题

其他

  • AI 工具使用情况
  • 反问环节

参考解析

HashMap 的 put 流程

  1. 计算 key 的 hash 值,定位桶位置((n-1) & hash)。
  2. 若桶为空,直接插入;若存在哈希冲突,遍历链表/红黑树,key 相同则覆盖,否则尾插。
  3. 链表长度 ≥ 8 且数组长度 ≥ 64 时,链表转红黑树。
  4. 插入后判断是否超过阈值(capacity × loadFactor),超过则扩容。

HashMap 扩容机制

  • 扩容时容量翻倍(newCap = oldCap << 1),重新分配桶数组。
  • JDK 8 优化:元素要么留在原位,要么移动到 原索引 + oldCap 处,避免重新计算 hash。
  • 扩容是 O(n) 操作,高并发下多线程扩容会有线程安全问题(建议用 ConcurrentHashMap)。

负载因子与扩容时机

  • 默认负载因子为 0.75,是时间与空间的折中值。
  • 扩容阈值 threshold = capacity × loadFactor,元素数量超过 threshold 时触发扩容。
  • 负载因子越小,冲突少但空间浪费;越大,空间利用率高但冲突增多、性能下降。

ORDER BY + LIMIT 返回重复数据

  • 原因:当 ORDER BY 的排序字段存在相同值时,数据库排序结果不稳定(MySQL 优化器可能每次选择不同的执行计划或行顺序)。
  • 分页时不同页可能拿到同一行,也可能漏掉某行。
  • 解决方案:在 ORDER BY 中追加唯一字段(如主键 id)作为次级排序条件,保证排序稳定性,例如 ORDER BY create_time, id LIMIT 10

索引优化常见考点

  • 遵循最左前缀原则,联合索引需按顺序使用。
  • 避免在索引列上使用函数、隐式类型转换,否则索引失效。
  • 区分度低的列(如性别)不适合单独建索引。
  • 使用 EXPLAIN 分析执行计划,关注 type(最好达到 refrange)、keyrows 等字段。
  • 覆盖索引可避免回表,提升查询性能。