面灵AI

小米 Java 二面:并发初始化、线程协作与最长子串

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

《面试题目》

  1. 项目中用了哪些设计模式,分别解决什么业务问题?
  2. 线程池怎样做到并发安全且按需初始化?
  3. 从 Java 内存模型看,线程之间怎样安全通信?
  4. 怎样让多个线程按固定顺序交替打印?
  5. 使用过哪些消息队列,对 Kafka 有什么了解?
  6. Spring Boot 的循环依赖如何分析和解决?
  7. 实习项目和 Agent 项目的难点是什么?
  8. 代理 IP 在项目中有什么作用,MCP 工具调用链如何工作?
  9. 怎样求字符串中不含重复字符的最长连续子串?
  10. 目前实习、求职流程和工作城市有什么安排?

《参考解析》

按需初始化

可以使用类初始化机制,或者在需要生命周期管理时使用显式同步。双重检查写法需要正确的可见性与发布语义,不能只判断字段是否为空。线程池初始化之外,还要说明由谁关闭、何时停止接收任务。

顺序打印

用共享状态表示轮到哪个线程,各线程在循环里检查条件,不符合就等待,完成输出后改变状态并唤醒后继。等待条件要用 while 重新检查,以处理虚假唤醒;异常退出也不能让其他线程无限等待。

最长不重复子串

滑动窗口保存最近出现位置。右边加入字符时,若重复位置在当前窗口内,把左边界移到它后面;左边界不能向回移动。每次更新窗口长度,整体时间 O(n)。