面灵AI→

腾讯音乐软件开发后台一面凉经

轮次
一面
结果
凉经
时间
2026-05
来源
牛客网

《面试题目》

  1. 项目的整体流程?现在的大模型已经能做到你项目的这个功能,为什么还要做这个项目?
  2. 平常用的多的 AI 工具有哪些,是怎么使用的?
  3. 项目中 Redis 是怎么用的,为什么要用 Redis?(谈到 JVM 内存溢出)
  4. 是哪里的内存会溢出,为什么会溢出?了解新生代和老年代吗?
  5. JDK21 用的垃圾回收算法是什么?
  6. 项目中用到虚拟线程,虚拟线程和普通线程的区别是?怎么创建虚拟线程?传统线程怎么创建?
  7. 怎么实现一个本地缓存?过期时间怎么判断?本地缓存和 Redis 怎么实现数据同步?
  8. Redis 的主从同步怎么实现?Redis 集群主节点故障时怎么做故障转移?从节点数量怎么设置?
  9. 怎么设计一个秒杀系统?怎么防止重复请求/重复订单?幂等怎么实现?
  10. 高并发场景下先写 MQ 再入库,异步链路下如何保证用户体验(及时反馈成功/失败)?

《参考解析》

  1. 虚拟线程 vs 传统线程:虚拟线程(Virtual Thread,JDK21 正式特性)由 JVM 而非操作系统调度,创建和切换成本极低(可轻松创建百万级),阻塞时会自动”卸载”底层的操作系统载体线程去执行其他虚拟线程,特别适合高并发 IO 密集型场景;传统线程直接映射到操作系统线程,创建和上下文切换成本高,数量受系统资源限制。创建方式上,传统线程用 new Thread() 或线程池,虚拟线程用 Thread.startVirtualThread() 或 Executors.newVirtualThreadPerTaskExecutor()。
  2. Redis 集群故障转移:Redis Cluster 或哨兵模式下,主节点故障时,从节点会发起选举(基于 Raft 类似的投票机制),获得多数从节点认可的候选者晋升为新主节点,客户端感知拓扑变化后重新定位新主节点;从节点数量通常建议至少配置1-2个,兼顾故障转移的可用性与资源成本。
  3. 秒杀系统的幂等与用户体验保障:幂等常用方案是数据库唯一约束(用户ID+活动ID)或提交前生成唯一请求令牌(Token机制);异步下单场景下,为保证用户体验,通常采用”先做前置校验+库存预占(如Redis原子扣减)快速给用户初步反馈,再通过MQ异步完成订单创建和数据库持久化,最终通过消息推送/轮询查询让用户获知最终结果”的两阶段模式,而不是让用户一直等待数据库链路完成。