面试场景:互联网大厂 Java 求职者面试
面试官神情严肃,翻开简历,抬头看向对面的候选人。
候选人:燕双非,外号“水货程序员”,自我介绍时总能把“熟练掌握”说得像“略知一二”。
本场面试围绕在线教育平台的核心业务展开:课程购买、直播通知、学习行为分析、消息推送、权限控制和 AI 助教问答。
第一轮:基础能力与业务落地
面试官:你们平台用的是 Java 11 和 Spring Boot,说说 Java 11 相比 Java 8 在业务系统里最实用的几个点。
燕双非:嗯……最常用的就是var、新的 HttpClient,还有一些 JVM 优化吧。var写起来更短,代码看着比较高级。HttpClient 比以前方便,做课程服务调用第三方接口时更顺手。
面试官:还不错,至少没把var当成动态语言。那你再说说,Spring Boot 在课程下单服务里为什么适合快速交付?
燕双非:因为它自动配置多,少写很多 XML,starter 一引就能跑。像 MyBatis、Redis、Kafka 这些组件,接入成本低,适合快速迭代。
面试官:对,能把“少写配置、多做业务”说清楚就行。那你们支付后发消息通知,为什么用 Kafka 而不是直接同步调用短信服务?
燕双非:这个……同步调用会拖慢主流程,万一短信挂了,下单接口就跟着失败。Kafka 可以异步解耦,下单成功先落库,再发事件通知,保证用户体验和系统稳定性。
面试官:这个方向是对的。那如果 Kafka 消息重复消费,你们怎么处理?
燕双非:重复消费的话……我一般在消费端做个去重表,按业务单号幂等处理。比如订单号、用户 ID、消息类型一起做唯一索引,处理过就直接跳过。
第二轮:中间件、缓存与安全
面试官:现在说 Redis。课程详情页和首页推荐都很热,你们怎么设计缓存?
燕双非:详情页可以做缓存,热点课程设较短 TTL,防止脏数据太久。首页推荐列表可以按用户维度缓存,配合主动失效和异步刷新。还有穿透、击穿、雪崩问题,要分别用布隆过滤器、互斥锁、随机过期时间处理。
面试官:说得像是做过。那 Spring Cache 和你直接操作 Redis,有什么取舍?
燕双非:Spring Cache 适合统一抽象,注解简单,适合规范化场景;直接操作 Redis 更灵活,适合复杂结构和精细控制,比如排行榜、分布式锁、延迟队列。
面试官:权限系统用了 Spring Security 和 JWT,对吧?如果是前后端分离,登录态怎么设计?
燕双非:登录后服务端签发 JWT,前端存储后每次请求带上 token。网关或资源服务器校验签名和过期时间,必要时结合 Refresh Token 做续期。角色权限可以放在 token claims 里,但别放太多,避免 token 过大。
面试官:那如果要做“讲师、学员、运营、管理员”多角色权限,你如何避免权限判断散落各处?
燕双非:可以在 Spring Security 里统一做方法级权限控制,比如@PreAuthorize。再配合自定义权限表达式,把角色、资源、动作统一建模,避免到处 if else。
面试官:还行,终于像个正常人了。那你说说 MyBatis 和 JPA 在这种平台里分别适合什么场景?
燕双非:MyBatis 适合复杂 SQL、报表和批量查询,比如统计完课率、课程转化率;JPA 更适合简单 CRUD、领域对象关系清晰的模块。核心是团队习惯和复杂度,不是“哪个更高级”。
第三轮:云原生、AI 与架构演进
面试官:平台现在要做 AI 助教,用 Spring AI 接入大模型。你会怎么设计“课程文档问答”?
燕双非:我会先把课程讲义、FAQ、作业解析做文档加载,然后切分、向量化,存到向量数据库里。用户提问时先做语义检索,再把召回内容拼进提示词,最后让大模型生成答案。这样能减少幻觉,提高回答贴合业务。
面试官:不错,至少知道 RAG 不是“拉个接口就完了”。那如果要支持复杂工作流,比如“先检索课程资料,再查订单,再根据用户等级决定是否推送优惠”,你怎么做?
燕双非:可以引入 Agent 和工具调用标准化,把检索、订单查询、优惠计算都封装成工具。Agent 根据用户意图决定调用顺序,必要时结合会话内存保存上下文。这样就不是一次性问答,而是可执行的业务助手。
面试官:如果工具调用失败、或者模型胡说八道怎么办?
燕双非:失败就做重试、降级和兜底,比如工具超时返回明确提示。模型输出要做结构化约束和结果校验,关键字段不能直接信模型,业务动作还是得由后端规则把关。
面试官:最后一个问题,微服务部署到 Kubernetes 后,如何保证服务弹性和可观测性?
燕双非:可以用健康检查、资源限制、水平扩容。监控方面接入 Micrometer 暴露指标,再配 Prometheus 和 Grafana 看 QPS、延迟、错误率。链路追踪可以用 Zipkin 或 Jaeger,方便定位课程下单、消息通知和 AI 推理链路问题。
面试官:嗯,今天聊得差不多了。你先回去等通知吧。
问题详细解析
1. Java 11 在业务系统中的价值
Java 11 是长期支持版本,在互联网大厂中非常常见。相比 Java 8,它带来的价值不只是语法层面的“更短”,而是运行时、标准库和工程化能力的增强。
- HttpClient 标准化:适合替代老旧的第三方 HTTP 工具,统一连接管理与异步请求能力。
- var 局部变量推断:适合减少样板代码,但不要滥用,复杂表达式仍建议显式类型。
- JVM 与 GC 优化:对延迟敏感系统更友好,尤其是高并发 Web 服务