10 道架构师 / 高级开发面试题・逐题完整版高分答案风格:面试官最爱、逻辑严谨、可直接背诵、自带亮点
1. 微服务架构核心设计原则、服务拆分标准、难点
考察点:架构认知、DDD、边界设计、分布式治理
高分回答:
自治独立:独立部署、独立数据库、独立技术栈,不强依赖其他服务。
轻量级通信:HTTP/REST 或 gRPC,避免重型 RPC。
去中心化:去中心化数据、去中心化治理,避免中心化单点。
按业务域拆分(DDD 领域驱动):用户域、订单域、支付域、商品域。
按团队组织拆分:康威定律,组织沟通结构 = 系统架构。
总结:拆分遵循「高内聚低耦合」,优先 DDD 领域边界,不追求绝对细,追求业务清晰、可独立演进。
2. CAP 定理与 BASE 理论,业务如何取舍?
考察点:分布式理论根基、架构取舍能力
高分回答:
P(分区容错):网络分区仍可运行。结论:分布式下 P 必须保证,只能在 CP 或 AP 之间选。
Basically Available(基本可用):允许部分降级、流量削峰。
Soft state(软状态):允许中间状态、异步同步。
Eventual consistency(最终一致性):数据最终一致,不要求强一致。
CP 场景:支付、交易、金融、库存扣减。需要强一致,宁可短暂不可用。
AP 场景:首页、商品列表、评论、点赞。追求高可用,允许短暂不一致。
总结:互联网绝大多数业务选 AP + 最终一致性,核心链路用 CP 或分布式事务保证。
3. 缓存穿透、击穿、雪崩,完整解决方案
考察点:高并发、缓存设计、实战方案
高分回答:
现象:查询不存在的数据,缓存不命中,直接查 DB,流量打垮库。
现象:热点 Key 过期,大量并发同时击穿到 DB。
互斥锁(Redisson lock):只允许一个线程重建缓存。
现象:大量 Key 同一时间过期 / Redis 宕机,全部请求到 DB。
多级缓存:本地缓存 (Caffeine) + Redis。
4. 分布式事务方案:2PC、TCC、SAGA、可靠消息
考察点:一致性方案、场景选型、架构权衡
高分回答:
适用:短事务、低并发、数据库级(Seata AT 模式)
适用:长流程、跨多系统、异步(物流、审批、分销)。
可靠消息最终一致性(RocketMQ / 本地消息表)
选型总结:
5. MySQL 索引(B + 树)、最左匹配、索引失效、分库分表
考察点:数据库底层、性能优化、海量数据架构
高分回答:
!=、not in、is null /not null(有时失效)。
水平分表:按 userId、orderId 哈希取模 / 范围。
问题:跨库分页、排序、join、分布式 ID、事务。
6. 高可用:熔断、降级、限流、重试、幂等
考察点:系统容错、稳定性设计、Sentinel 落地
高分回答:
框架:Sentinel、Hystrix、Resilience4j。
总结:限流防流量激增、熔断防级联失败、降级保核心、重试提高可用、幂等保证安全。
7. MQ 消息丢失、重复、顺序、积压解决方案
考察点:异步架构、可靠性、生产实战
高分回答:
解决:消费端幂等(唯一 ID、分布式锁、状态判断)。
保证:相同 key(如 orderId)hash 到同一个队列。
8. 常用设计模式 + 架构场景
考察点:代码抽象、可扩展性、架构思维
高分回答:
单例模式:工具类、配置类、线程池、连接池。保证全局唯一。
工厂模式:屏蔽对象创建复杂逻辑,如支付渠道工厂(微信 / 支付宝 / 云闪付)。
策略模式:替换 if-else,如不同优惠、不同校验规则、不同序列化方式。
模板方法:固定流程骨架,子类实现细节(如订单创建通用流程)。
装饰器模式:动态增强功能,如缓存、日志、限流增强。
亮点回答: 我在项目中大量用 策略 + 工厂 + 模板 消灭臃肿 if-else,让系统易扩展、符合开闭原则。
9. 单体 → 微服务 常见坑与规避
考察点:架构演进、实战踩坑、决策能力
高分回答:
规避:SkyWalking/Pinpoint,全链路压测。
- 规避:Mock、文档、网关统一入口、CI/CD、容器化。
- 解决方案:JWT、Redis Session 共享。
总结:微服务不是银弹,业务稳定、团队能力、基础设施 到位再拆。
10. 线上性能瓶颈定位(CPU、内存、IO、锁、GC)
考察点:线上排查、JVM、Linux、真实架构能力
高分回答:标准排查流程:监控 → 定位进程 → 定位线程 → 看栈 / GC / 堆 / 磁盘
jstack 打印线程栈,找到死循环、频繁 GC、大量计算。
MAT/JVisualVM 分析:大对象、集合未释放、静态缓存。
检查:线程池、连接池、本地缓存、Bean 生命周期。
大量 BLOCKED 线程:锁竞争激烈,改用分段锁、无锁、Redisson 锁优化。
jstat -gc 查看 YGC/FullGC 频率。
原因:堆太小、大对象、内存泄漏、新生代比例不合理。
调整:Eden 区、晋升阈值、CMS/G1 调优。
工具总结:
Linux:top、iostat、netstat、dstat
JVM:jps、jstack、jmap、jstat
诊断:Arthas(最常用)、SkyWalking、Prometheus + Grafana