)
Spring Boot Kafka Redis Elasticsearch互联网大厂 Java 面试实战音视频内容社区场景以下内容以“互联网大厂 Java 求职面试”为背景场景设定为音视频内容社区与 UGC面试官严肃专业候选人是有点水但嘴很硬的程序员燕双非。第一轮基础架构与 Web 服务面试官先说一下你们音视频内容社区首页流量很大Spring Boot 里你会怎么做接口分层为什么不是所有逻辑都堆在 Controller燕双非Controller 负责接收参数、返回结果Service 放业务逻辑Repository 处理数据访问。堆在 Controller 里会很乱不利于测试和维护。面试官回答得还行至少知道分层。那 Spring MVC 的拦截器和过滤器有什么区别你会把鉴权放哪一层燕双非过滤器更底层属于 Servlet 规范拦截器更靠近 Spring MVC可以拿到 Handler。鉴权如果是统一入口校验过滤器或网关都行如果要结合具体方法信息拦截器更方便。面试官不错能区分出边界。那你们的内容社区如果要对外提供视频详情接口想接入 OpenAPI/Swagger你会怎么保证接口文档和代码一致燕双非用注解描述接口参数和返回值配合统一的响应对象。代码变了文档也会跟着生成避免人工维护不一致。面试官可以至少不是手写 README 那种“玄学文档”。那如果前端需要实时看到评论和弹幕WebSocket 怎么设计燕双非建立长连接后服务端推送消息给客户端。可以按视频房间分组进入房间就订阅对应 channel弹幕和评论就能实时广播。第二轮数据、缓存与消息链路面试官视频详情页有点赞数、评论数、热度榜单这些热点数据你怎么用 Redis 设计燕双非点赞数可以做成 Redis 计数器评论数也可以先缓存在 Redis再异步落库。热榜可以用 Sorted Set 按热度分值排序。面试官很好至少知道 ZSet。那如果热点视频突然爆发Redis 和数据库怎么避免被打穿燕双非可以加本地缓存比如 Caffeine再加限流、降级、热点 Key 保护。数据库层面通过异步化和批量写入缓冲压力。面试官说得还算完整。那你们评论、点赞、举报这些行为如果要做异步解耦Kafka 你会怎么用燕双非业务请求先写消息队列消费者异步处理。比如点赞后发 Kafka 消息统计服务、推荐服务、风控服务各自订阅对应 topic避免同步调用拖慢主链路。面试官嗯方向对。那消息堆积了怎么办你怎么处理重复消费和顺序性燕双非重复消费就做幂等比如用业务唯一 ID 去重。顺序性的话按视频 ID 或用户 ID 分区保证同一业务键进入同一分区。面试官不错能说到分区键。最后一个数据问题如果你要做搜索视频标题、标签、作者昵称都要检索Elasticsearch 你会怎么建索引燕双非字段要区分 text 和 keyword标题和标签做分词检索作者昵称可以做精确和模糊搜索。高频查询字段可以加合适的映射和分词器提升召回和排序效果。第三轮性能治理与云原生落地面试官我们服务要上 KubernetesSpring Boot 容器化之后健康检查和优雅停机你怎么做燕双非加 readiness 和 liveness 探针避免流量打到没准备好的实例。优雅停机时先拒绝新请求等待线程池里的任务处理完成再关闭应用。面试官这回还行。那如果订单式的投递任务很多比如视频上传后要做转码、封面生成、审核分发你怎么设计微服务链路燕双非可以拆成上传服务、转码服务、审核服务、分发服务。通过 Kafka 或者 Spring Cloud 事件流串起来服务之间尽量异步避免一个环节阻塞整体流程。面试官那如果转码服务偶发超时你怎么做容错燕双非可以用 Resilience4j 做超时、熔断、限流和重试。失败后进入补偿队列后面人工或定时任务处理。面试官最后一个问题系统发布后怎么观测你会看哪些指标燕双非我会看 Prometheus 和 Grafana 的 QPS、延迟、错误率、JVM GC、线程池、Kafka 堆积、Redis 命中率链路追踪可以看 Jaeger 或 Zipkin排查慢接口和跨服务耗时。面试官行了今天先到这儿吧。你回去等通知。问题详解1. Spring Boot 分层与 Controller/Service/Repository 职责在音视频内容社区中首页、详情页、点赞、评论、弹幕等接口非常多。如果把参数校验、业务编排、数据访问都写在 Controller 中代码会迅速膨胀导致复用差、测试难、维护成本高。通常 Controller 只负责请求接入、参数接收、返回封装Service 负责业务规则、事务控制、跨资源编排Repository/Mapper 负责数据库交互。这样在处理视频详情接口时可以复用“查询基础信息”“查询统计信息”“查询作者信息”等能力。2. Spring MVC 过滤器与拦截器过滤器是 Servlet 规范的一部分作用范围更广通常用于编码处理、日志、统一鉴权、请求包装等拦截器是 Spring MVC 提供的机制能拿到 Handler 和方法信息更适合做基于接口级别的权限控制、审计日志、幂等校验。在内容社区里如果要判断“是否登录”“是否有发布权限”过滤器可以做通用 Token 校验如果要判断“是否允许访问某个视频管理接口”拦截器更适合结合 Controller 方法注解来处理。3. Swagger/OpenAPI 与接口一致性UGC 平台通常有 App、H5、运营后台、合作方 API 等多端接入接口文档必须和代码保持一致。使用 Swagger/OpenAPI 注解可以在代码层描述接口路径、参数、返回结构、错误码配合统一响应对象和版本管理能减少沟通成本。建议将公共 DTO、枚举、错误码集中管理并通过 CI/CD 自动生成或校验文档。4. WebSocket 的实时互动设计音视频社区的弹幕和评论流是典型实时场景。WebSocket 建立双向长连接后服务器可以主动把新评论、新弹幕推送给当前观看用户。通常按视频房间、直播间或话题频道做分组管理结合 Redis Pub/Sub、Kafka 或消息中间件把消息分发到各节点再由在线连接统一广播。这样既能支持高并发也能保证多实例部署下的消息一致性。5. Redis 计数、热榜与本地缓存点赞数、评论数适合放到 Redis 中做计数器或 Hash 结构减少数据库写压力。热榜可使用 Sorted Set 存放热度分值按时间衰减和互动权重动态调整。热点 Key 可能导致 Redis 压力过大因此可以叠加 Caffeine 本地缓存、限流、降级和热点 Key 拆分策略。对于强一致要求不高的统计型字段可以先写缓存再异步落库。6. Kafka 异步解耦与幂等、顺序性点赞、评论、举报等行为常常不是核心交易链路适合异步化。主流程只负责记录消息并返回成功后续由推荐、统计、风控、审核等服务消费 Kafka 消息。为了避免重复消费消费者必须做幂等控制例如通过业务 ID、用户 ID 内容 ID 行为类型做去重。顺序性方面如果希望同一视频的相关事件按顺序处理可以按视频 ID 作为分区键使同一业务键落到同一分区。7. Elasticsearch 搜索建模内容社区的搜索往往包含标题、标签、作者、话题、描述等字段。适合检索的字段使用 text 类型并配置分词器需要精确筛选或聚合的字段使用 keyword 类型。可以将标题、正文、标签等纳入全文检索作者昵称、视频 ID、状态字段用于过滤和排序。搜索体验通常要结合高亮、热词、同义词、联想词等能力提升召回率和相关性。8. Kubernetes 健康检查与优雅停机容器化部署时readiness probe 用于判断服务是否准备好接流量liveness probe 用于判断进程是否存活。优雅停机则是在接收到终止信号后先拒绝新请求再等待正在处理的请求完成最后释放资源。对于音视频转码、评论异步处理这类后台任务还需要配合消息消费暂停、任务超时和重试机制避免实例退出时丢失处理中间状态。9. 微服务链路拆分与异步编排视频上传后的处理链路通常很长包括上传、转码、抽帧、封面生成、审核、内容分发、推荐更新等。将它们拆为多个微服务有利于独立扩缩容和故障隔离。服务间优先采用事件驱动和异步消息而不是层层同步调用否则任一环节慢都会拖垮整体吞吐。对于需要最终一致性的流程可以配合状态机、补偿任务和重试队列完成闭环。10. Resilience4j 容错治理当转码、审核或第三方服务偶发超时时可用 Resilience4j 实现超时控制、限流、熔断和重试。超时避免请求长期占用资源熔断防止下游故障扩散限流保护系统整体稳定重试适合短暂抖动但要控制次数和退避策略。对不能立即完成的任务可以转入补偿队列由定时任务或人工介入处理。11. Prometheus、Grafana 与链路追踪上线后最重要的是“能看见系统”。Prometheus 负责采集指标如 QPS、RT、错误率、Kafka 积压、Redis 命中率、JVM GC、线程池队列长度等Grafana 负责展示与告警。Jaeger 或 Zipkin 用于分布式链路追踪能定位一次视频发布请求在上传、审核、消息投递、推荐更新中的耗时分布。对于互联网大厂面试候选人最好能结合业务说清楚“为什么这个指标重要、超过阈值会怎样、如何排障”。感谢阅读希望这篇围绕音视频内容社区与 UGC 场景的 Java 面试实战能帮助你在大厂面试中更从容地表达思路、拆解问题并展示技术深度。