凉经-腾讯音乐软件开发(后台开发)一面:项目、Redis、JVM、秒杀都被追着问
这是一场腾讯音乐软件开发(后台开发)一面,问题看起来分散:项目、AI 工具、Redis、JVM、虚拟线程、本地缓存、主从同步、秒杀系统、幂等、MQ 异步体验。但真正难点不在“题多”,而在面试官会沿着你的回答连续追问,尤其是你项目里提到的技术点,很容易被一路挖到底。
面经速览
公司:腾讯岗位方向:后端开发轮次:一面发布时间:2026-05-26T23:00:02整体感受:偏项目深挖 + 后端基础 + 场景设计,追问密度比较高。
这类面试对“背八股”的同学不算友好。你只要在项目里提到 Redis、JVM 内存、虚拟线程、过期时间、MQ、幂等,面试官马上会问:为什么这么做?怎么实现?异常场景怎么办?
一、项目开场:不是问你做了什么,而是问你为什么还要做
原题包括:自我介绍、项目整体流程、现在的大模型已经能做到你项目的功能,为什么还要做这个项目、平常用哪些 AI 工具、如何用 AI 工具辅助完成任务需求。
考点是什么
面试官在判断两件事:你是不是项目真正参与者,以及你是否理解项目存在的业务价值。
这里有一个很典型的追问:“现在的大模型已经能做到你项目的这个功能,为什么还要做这个项目?”这不是在否定项目,而是在看你能不能讲清楚项目边界。
该怎么答
不建议只说“为了学习”或者“为了落地”。更稳的表达是:
大模型能做通用能力,但项目可能解决的是特定场景、流程、数据、权限、成本或稳定性问题。
项目不是简单调用模型,而是把输入、处理、缓存、结果返回、异常兜底串成完整链路。
如果涉及工程实现,要讲清楚为什么需要后端系统承接,而不是只依赖一个 AI 工具。
复习提醒
项目介绍不要只背“技术栈”。准备一版 1 分钟流程说明,再准备一版 3 分钟细节说明,重点覆盖:输入是什么、核心处理链路是什么、用了哪些中间件、异常情况怎么处理、为什么这么设计。
二、Redis 追问:从“为什么用”一路到集群故障转移
原题包括:项目中 Redis 怎么用、为什么用 Redis、Redis 主从同步怎么实现、Redis 集群主节点故障时怎么故障转移、从节点数量怎么设置。
考点是什么
这组问题不是单纯问 Redis 命令,而是在确认你是否知道 Redis 放在系统里的角色:缓存、削峰、热点数据承载、分布式协作,还是只是项目里写了个“使用 Redis”。
该怎么答
如果项目里使用 Redis,可以按照这条线讲:
- 用在哪里:缓存什么数据,key 如何设计,value 大概是什么结构。
- 为什么用:降低数据库压力、减少重复计算、提升读取速度,或者控制并发入口。
- 怎么保证可用:主从复制、哨兵或集群模式,节点故障时如何切换。
- 有什么风险:缓存穿透、击穿、雪崩、数据一致性、热点 key。
主从同步可以讲清楚复制的大致过程:从节点连接主节点,进行全量或增量同步;主节点把写命令传播给从节点;网络抖动或断线后,根据复制偏移量尽量做增量补齐。
集群故障转移可以围绕“主节点不可用后,从节点被选举为新的主节点,集群更新槽位映射,客户端后续请求转到新主节点”来回答。不要一句“会自动切换”带过。
复习提醒
Redis 复习不要只看数据结构。面试里更常见的是:为什么用、用错会怎样、挂了怎么办、数据不一致怎么办。项目里只要写了 Redis,就要准备这四个问题。
三、JVM 内存:你提到 OOM,面试官会追问哪里溢出
原题包括:回答 Redis 时谈到 JVM 内存溢出,面试官立刻追问是哪里的内存会溢出、为什么会溢出、了解新生代和老年代吗、JDK21 用的垃圾回收算法是什么。
考点是什么
这是非常典型的“顺着你的话抓细节”。如果你说“不用 Redis 会导致 JVM 内存溢出”,那就必须能解释对象存在哪里、为什么释放不掉、是哪类 OOM。
该怎么答
可以先把 JVM 内存区域讲清楚:堆、栈、方法区或元空间、直接内存等。然后结合项目回答。
如果是大量对象缓存到本地,通常要关注堆内存压力。
如果对象生命周期很长,可能从新生代晋升到老年代,老年代空间不足时触发更重的 GC,严重时 OOM。
如果是线程数量过多,也可能带来栈内存、上下文切换和调度压力。
JDK21 默认垃圾收集器相关问题,建议复习时不要只记名字,还要能讲出分代、并发标记、停顿控制这些关键词。面试中如果不确定版本默认配置,可以说明“默认配置可能与运行参数和发行版有关”,再讲自己熟悉的收集器机制,避免硬编。
复习提醒
JVM 这一块至少准备三类题:内存区域、对象晋升过程、常见 OOM 排查。项目里不要轻易抛出“内存溢出”这种词,除非你能把原因和定位方式说清楚。
四、虚拟线程:新特性不是加分项
原题包括:项目里用到虚拟线程,虚拟线程和普通线程的区别是什么、怎么创建虚拟线程、传统线程怎么创建。
考点是什么
面试官不是单纯考 Java 语法,而是在看你是否真正理解 JDK 新特性的适用场景。虚拟线程适合大量并发、阻塞式 I/O 场景,但不是所有并发问题的万能答案。
该怎么答
- 普通线程:通常映射到操作系统线程,创建和切换成本相对更高。
- 虚拟线程:由 JVM 调度,轻量,适合创建大量并发任务,尤其是 I/O 阻塞多的场景。
- 创建方式:Thread.ofVirtual() 或 Executors.newVirtualThreadPerTaskExecutor() 这类方式。
- 传统线程:可以继承 Thread、实现 Runnable,或通过线程池提交任务。
复习提醒
如果简历项目写了虚拟线程,建议准备一个很具体的使用场景:并发调用外部服务、批量 I/O 请求、异步任务处理等。只会说“性能更好”很危险,面试官很可能继续问为什么。
五、本地缓存:过期时间、同步策略都会被细问
原题包括:怎么实现一个本地缓存、提到过期时间后被追问过期时间怎么判断、本地缓存和 Redis 怎么实现数据同步。
考点是什么
本地缓存看起来简单,实际会牵出不少工程问题:容量、过期、淘汰、并发安全、数据一致性。
该怎么答
一个最小可用的本地缓存,至少要包括:
数据容器:比如 Map 结构保存 key、value。
过期信息:value 外面包一层对象,记录写入时间或过期时间戳。
读取判断:get 时判断当前时间是否超过 expireTime,过期则删除并返回空。
清理策略:可以惰性删除,也可以定时扫描。
并发安全:多线程访问时要考虑 ConcurrentHashMap 或锁。
本地缓存和 Redis 同步,不建议轻飘飘说“更新时一起更新”。更稳的回答是讲清楚策略:更新数据库后删除缓存、通过消息通知本地缓存失效、设置较短 TTL 降低不一致窗口,或者对一致性要求高的数据不放本地缓存。
复习提醒
本地缓存是面试常见“手写设计题”。复习时可以自己写一个简化版:put、get、expire、remove,再想想多线程访问时会出什么问题。
六、秒杀系统:重点不是画架构图,而是处理重复请求和异步体验
原题包括:怎么设计一个秒杀系统、如何防止重复请求或重复下单、幂等怎么实现、数据库唯一索引、数据库唯一约束下主键是否必须自增、先写 MQ 再异步入库时如何给用户正常提示。
考点是什么
秒杀题不是让你堆一串名词。面试官关心的是:高并发下怎么挡流量、怎么扣库存、怎么防重复、怎么保证结果可感知。
该怎么答
可以按链路讲,不要一上来就画大而全架构:
- 入口限流:限制无效流量进入核心链路。
- 库存预扣:可以用 Redis 承接热点库存扣减,避免数据库直接被打满。
- 防重复:用户维度加请求幂等标识,或者使用用户 ID + 商品 ID 的唯一约束防重复下单。
- 异步入库:核心请求快速返回排队中、成功受理或失败提示,后续通过 MQ 落库。
- 结果查询:前端轮询订单状态,或给用户明确的处理中状态,避免长时间卡在请求里。
关于“数据库唯一约束的话,主键必须自增吗?”这个问题,重点是区分主键和唯一索引。唯一约束可以建立在业务字段组合上,例如用户 ID + 商品 ID,并不要求主键必须自增。
关于“先写 MQ 再入库,用户怎么知道成功还是失败”,回答时要把同步和异步边界讲清楚:同步阶段可以告诉用户请求已受理、库存初步校验通过或失败;异步阶段完成订单落库后,用户通过订单状态查询最终结果。体验上不能只返回一个空泛的“排队中”,要有可查询、可重试、可兜底的状态。
复习提醒
秒杀系统不要只背“Redis + MQ + MySQL”。至少准备三条追问:重复下单怎么防、库存超卖怎么防、异步下单怎么给用户结果。
七、一个小问题:电子信息专业与计算机课程
面试最后还问到:“你电子信息专业会不会涉及到计算机相关课程?”这类问题通常不是技术深挖,而是在确认候选人的课程背景和计算机基础来源。
如果你不是纯计算机专业,回答时不用回避。可以直接说学过哪些相关课程,例如数据结构、操作系统、计算机网络、数据库、程序设计等;如果课程覆盖不完整,就补一句自己通过项目和自学补了哪些能力。重点是诚实,不要把没学过的课程硬说成很熟。
面试官真正想看什么
这场一面有三个明显信号:
项目里出现的技术点,会被当成追问入口。
后端基础不是孤立考,常常和项目场景绑在一起。
场景设计题更看重边界和异常,而不是名词堆砌。
这场面试覆盖面很广,但主线很清楚:候选人能不能把一个后端项目讲成“可运行、可扩展、能兜底”的系统,而不是只讲自己用了哪些技术。
这场一面最大的提醒是:简历里每一个技术词都可能变成追问入口。写 Redis,就要能讲一致性;写 JVM,就要能讲内存区域;写虚拟线程,就要能讲使用场景;写秒杀,就要能讲重复请求和异步结果。
如果你也在准备后端开发面试,可以先把这篇收藏起来,按上面的清单逐项自测。你觉得这场面试里最容易翻车的是 Redis、JVM,还是秒杀系统?欢迎在评论区聊聊你的判断。
夜雨聆风