Java全栈面试实录:从电商平台到AIGC,技术栈深度解析
场景:互联网大厂Java后端开发面试
面试官(严肃):小曾,今天我们主要考察Java全栈技术栈,结合实际业务场景提问。先从你熟悉的电商平台开始。
第一轮提问
-
电商平台订单系统架构
面试官:电商平台高并发场景下,如何设计订单模块的数据库表结构?
小曾:订单表要包含订单ID、用户ID、商品ID、金额等字段,用MySQL分库分表解决高并发。
面试官(点头):不错,考虑了分库。但如何处理分布式事务?
小曾:用2PC协议,但感觉实现复杂…
面试官:正确思路,但实际用Seata分布式事务。 -
缓存设计
面试官:商品详情页QPS达10k,如何用Redis缓存优化?
小曾:设置热点数据缓存,用LRU淘汰策略,但没细说缓存穿透方案。
面试官:应增加布隆过滤器+缓存预热。 -
消息队列应用
面试官:订单支付后如何异步通知库存系统?
小曾:用Kafka,但没提事务性消息。
面试官:需Kafka事务+Confirm机制。
第二轮提问
-
微服务拆分
面试官:订单、支付、库存如何拆分为独立微服务?
小曾:按业务领域拆分,用Spring Cloud Gateway网关聚合。
面试官:补充服务注册用Eureka,配置Nacos更佳。 -
API设计
面试官:设计订单查询的RESTful API,用Spring HATEOAS增强可扩展性?
小曾:知道HATEOAS,但没具体实现。
面试官:返回订单+分页链接示例即可。 -
监控方案
面试官:如何监控微服务延迟?
小曾:用Micrometer+Prometheus,但没提告警规则。
面试官:需设置阈值告警。
第三轮提问
-
AIGC场景接入
面试官:电商客服用AIGC生成回复,如何接入Spring AI?
小曾:知道有Spring AI,但没提Embedding模型。
面试官:用OpenAI API+向量数据库存知识库。 -
数据同步
面试官:订单数据同步到Elasticsearch,如何保证实时性?
小曾:用Flink CDC,但没提增量同步方案。
面试官:需配置Change Data Capture。 -
遗留系统改造
面试官:旧Struts系统如何迁移到Spring Boot?
小曾:逐步重构,用MapStruct映射,但没提兼容策略。
面试官:可加Spring Cloud Gateway做适配。
面试官结束语
面试官(叹气):小曾,基础扎实但深度不足,回去等通知吧。
详细答案解析
-
数据库设计
- 订单表:
order_id
(PK),user_id
(FK),status
(ENUM),create_time
(TIMESTAMP)。 - 分库分表:按
user_id
或order_id
哈希分表,用ShardingSphere动态路由。 - 分布式事务:Seata TCC模式(尝试-补偿)或Saga补偿。
- 订单表:
-
缓存策略
- 热点数据:Redis设置过期时间+主动预热(定时批量更新)。
- 缓存穿透:布隆过滤器校验ID存在性,配合本地缓存+远程缓存。
-
微服务治理
- Eureka/Consul注册中心,配置负载均衡(Ribbon/LoadBalancer)。
- Nacos替代Eureka:自带配置管理+服务发现。
-
Spring AI实践
- 搭建:
@EnableOpenAISearch
,配置API Key。 - 知识库:用Milvus存储商品+FAQ向量,查询时用语义相似度匹配。
- 工具调用:通过
@AIGC
注解定义函数签名,如generateReply(userQuery)
。
- 搭建:
-
Flink CDC
- 配置:
FlinkCDC
连接MySQL,输出到Kafka。 - 增量同步:监听binlog,过滤
INSERT/UPDATE
语句。
- 配置:
小白学习建议
- 先掌握Spring Boot+JPA基础,再深入微服务(Spring Cloud Alibaba)。
- AI部分从ChatGPT API调起,结合向量数据库(Redis+Milvus)实践。
- 遗留系统改造建议用Spring Cloud Gateway做兼容层。
(注:实际面试中AI问题可能侧重Prompt工程,小曾的回答属于技术盲区)