2025年Java后端金九银十面试的高频场景题
Nginx限流 → Redis预减库存(Lua脚本保证原子性)→ 消息队列(Kafka/RocketMQ)异步下单。:GitHub Copilot + 代码安全扫描(如SonarQube):独立Redis集群处理秒杀商品,本地缓存(Caffeine)兜底。:MySQL Binlog + Kafka(跨机房专线):数据库乐观锁(version字段)+ 定时任务对账。:RDB(定时快照)+ AOF(每
一、高并发与秒杀系统
-
设计一个百万QPS的秒杀系统
-
分层削峰:Nginx限流 → Redis预减库存(Lua脚本保证原子性)→ 消息队列(Kafka/RocketMQ)异步下单
-
热点隔离:独立Redis集群处理秒杀商品,本地缓存(Caffeine)兜底
-
防刷:IP限流+用户行为分析+验证码
-
-
如何解决Redis库存超卖问题?
-
Lua脚本示例:
-
-
-
兜底方案:数据库乐观锁(version字段)+ 定时任务对账
-
-
订单30分钟未支付自动取消的实现方案
-
RocketMQ延迟消息(支持精准时间粒度)
-
Redis过期监听(
keyspace notifications
)+ 补偿任务
-
-
如何设计一个高可用的优惠券系统?
-
防重领:Redis原子计数器(
INCR
)+ 数据库唯一索引 -
过期处理:定时任务+状态机(避免大量无效数据)
-
-
热点Key导致Redis集群负载不均如何解决?
-
本地缓存:Guava Cache缓存热点数据
-
Key分片:对热点Key增加随机后缀(如
item_1001_{0..9}
)
-
-
如何设计实时库存预警系统?
-
技术栈:Flink消费库存变更Binlog → 计算阈值 → 触发企业微信/短信报警
-
二、分布式与事务
-
跨境支付如何保证数据一致性?
-
TCC事务:Try阶段冻结资金,Confirm阶段实际扣款,Cancel阶段解冻
-
对账机制:每日核对交易流水与账户余额
-
-
分库分表后如何实现跨库查询?
-
基因法分片:将关联ID(如用户ID)嵌入分片键
-
ES异构索引:将多表数据聚合到Elasticsearch
-
-
如何设计一个可靠的分布式ID生成器?
-
Snowflake优化:解决时钟回拨(本地时钟+ZK协调)
-
Leaf-Segment:DB号段缓冲(适合金融场景)
-
-
RPC调用超时可能的原因及排查方法
-
原因:网络抖动、线程池堵塞、下游服务GC
-
工具:SkyWalking全链路追踪 + Arthas线程分析
-
-
如何实现跨机房数据同步?
-
方案:MySQL Binlog + Kafka(跨机房专线)
-
冲突解决:时间戳优先/人工干预通道
-
三、数据库与缓存
-
十亿级订单表如何优化分页查询?
-
ES方案:
search_after
深度分页 -
MySQL方案:覆盖索引+游标(
WHERE id > ? LIMIT 100
)
-
-
MySQL主从延迟导致脏读如何解决?
-
读写分离:强制关键查询走主库(
/*FORCE_MASTER*/
) -
半同步复制:至少一个从库ACK才返回
-
-
Redis持久化策略如何选择?
-
高可用:RDB(定时快照)+ AOF(每秒同步)
-
恢复速度:RDB > AOF
-
-
如何解决缓存与数据库不一致?
-
延迟双删:先删缓存 → 更新DB → 延迟500ms再删缓存
-
Canal监听:订阅Binlog自动更新缓存
-
-
大促期间MySQL CPU 100%如何紧急处理?
-
止血:Kill慢查询(
SHOW PROCESSLIST
) -
降级:非核心业务切到只读从库
-
-
Elasticsearch集群写入变慢如何优化?
-
调整参数:
refresh_interval=30s
-
分片策略:按时间范围分片(如每月一个索引)
-
四、微服务与架构
-
如何实现全链路灰度发布?
-
流量标记:通过Header传递(如
x-env: gray
) -
路由策略:Istio动态路由到灰度Pod
-
-
服务熔断与降级策略如何配置?
-
Sentinel规则:慢调用比例 >50%时触发熔断
-
降级预案:返回缓存数据或默认值
-
-
如何设计一个高可用API网关?
-
限流:令牌桶算法(Redis+Lua)
-
容灾:多机房部署+DNS故障切换
-
-
Spring Cloud微服务如何划分边界?
-
原则:按业务能力划分(如订单服务独立于支付服务)
-
陷阱:避免分布式事务(尽量最终一致性)
-
-
Service Mesh落地有哪些性能损耗?
-
Sidecar:增加约10%延迟(需压测调整线程池)
-
五、故障排查与优化
-
JVM FullGC频繁如何定位?
-
步骤:
jmap -histo
查大对象 →MAT
分析内存泄漏 → 调整G1 Region大小
-
-
Kafka消息堆积如何解决?
-
扩容:增加Consumer实例
-
跳过:重置Offset到最新(非关键业务)
-
-
线程池任务拒绝如何处理?
-
策略:记录日志+异步重试(MQ)
-
监控:Prometheus报警线程池活跃度
-
-
如何优化Java应用启动速度?
-
Spring Boot:AOT编译(GraalVM)
-
懒加载:非核心Bean延迟初始化
-
六、前沿技术
-
如何将大模型(如GPT)集成到客服系统?
-
架构:LangChain4J封装API + 本地知识库向量检索
-
-
Serverless在电商中的应用场景?
-
案例:定时秒杀预热任务(事件驱动)
-
-
K8s中如何实现自动扩缩容?
-
HPA配置:基于CPU/内存阈值或自定义指标(如QPS)
-
-
如何用AI辅助生成CRUD代码?
-
工具:GitHub Copilot + 代码安全扫描(如SonarQube)
-
更多推荐
所有评论(0)