模块一:架构设计能力
1. 请讲一下你主导的架构设计 / 重构项目,整体思路是什么?
参考答案:
曾主导过核心业务系统从单体架构向微服务架构演进的项目,整体遵循 4 步设计思路:
业务域拆分:基于 DDD 领域驱动思想,按业务边界拆分成独立微服务,明确服务职责,解决耦合问题;
技术选型:选用 SpringCloud Alibaba 生态,Nacos 做注册配置中心、Gateway 网关统一入口、Sentinel 限流熔断,保证高可用;
数据层设计:核心大表采用分库分表 + 读写分离,搭配 Redis 多级缓存,提升数据读写性能;
治理体系搭建:完善全链路监控、日志追踪、服务容错、权限安全体系,保证系统稳定、数据安全合规。
整个架构设计以高可用、可扩展、易维护、数据安全为核心,完全适配 To G 和教育类系统的严苛要求。
踩分点:DDD 拆分、微服务治理、数据架构、安全合规、落地效果。
2. 微服务拆分的原则是什么?如何避免过度拆分?
参考答案:
拆分原则:高内聚、低耦合,按业务领域边界拆分,保证单一职责;优先拆分核心高频、变更频繁模块;兼顾团队组织架构(康威定律)。
避免过度拆分:
不盲目追求粒度细,优先保证服务自治、依赖简单;
避免分布式事务过多、调用链路过长;
结合运维成本、硬件资源综合评估,小业务模块可先合并维护。
3. 如何做技术方案评审?如何把控技术风险?
参考答案:
技术方案评审我会从 4 个维度把关:
业务匹配度:方案是否满足业务需求、数据一致性、安全合规要求;
技术可行性:架构、中间件、存储方案是否合理,有无明显技术短板;
性能与容量:接口性能、并发支撑、数据量级是否提前评估;
风险与预案:预判故障点,制定降级、熔断、回滚方案。
风险把控:提前识别技术债务、第三方依赖风险、分布式一致性风险,关键节点做方案验证与压测,降低上线风险。
模块二:分布式 & 高可用(高频深度提问)
1. 分布式事务有哪些方案?教育 / 政务类核心数据你怎么选?
参考答案:
常用方案:2PC、TCC、SATA、Seata AT 模式、消息最终一致性。
针对教育、政务类核心数据(成绩、档案、上报数据),优先选用Seata AT 模式,开发成本低、一致性强;对性能要求高、非强一致场景,采用可靠消息最终一致性,保证数据不丢不重,兼顾性能与一致性。
2. 接口幂等性如何设计?常见实现方式有哪些?
参考答案:
幂等性保证同一请求多次执行结果一致,常用方案:
唯一索引:数据库层防重;
token 机制:请求前获取 token,请求后校验销毁;
分布式锁:Redis 锁控制同一请求重复执行;
状态机判断:根据业务状态过滤重复操作。
在教育数据上报、支付类场景必做幂等设计。
3. 缓存雪崩、击穿、穿透分别是什么?怎么解决?
参考答案:
缓存雪崩:大量缓存同时失效,请求打垮 DB。
解决:过期时间随机、集群高可用、降级熔断、多级缓存。
缓存击穿:热点 key 过期,大量并发请求 DB。
解决:互斥锁、热点 key 永不过期、预加载。
缓存穿透:查询不存在的数据,绕过缓存直接查 DB。
解决:缓存空值、布隆过滤器、参数校验拦截。
4. 分布式锁用 Redis 还是 ZooKeeper?选型依据是什么?
参考答案:
Redis 分布式锁:性能高、实现简单,适合高并发场景,借助 Redlock 保证可靠性;
ZooKeeper 分布式锁:一致性强、可靠性更高,性能略低。
选型:高并发业务选 Redis 锁,对一致性、可靠性要求极高的核心业务选用 ZooKeeper 锁。
模块三:微服务 & 服务治理(必问)
1. SpringCloud Gateway 网关的核心作用是什么?
参考答案:
统一入口:聚合所有微服务接口,简化客户端调用;
路由转发:根据规则路由到对应服务;
统一鉴权:登录、权限、黑名单统一拦截;
限流熔断:Sentinel 整合实现限流、降级、熔断;
日志与监控:统一记录请求日志,便于全链路追踪。
2. 服务雪崩怎么解决?限流、熔断、降级区别是什么?
参考答案:
服务雪崩通过限流 + 熔断 + 降级组合解决:
限流:控制请求流量,超过阈值直接拒绝,保护系统;
熔断:服务异常达到阈值,暂时切断调用,快速失败;
降级:非核心功能暂时关闭或返回默认数据,保障核心可用。
3. 微服务下的全链路监控如何实现?
参考答案:
采用SkyWalking/Pinpoint等链路追踪系统,通过 traceId 贯穿整个调用链,实现:请求链路可视化、接口耗时分析、异常定位、服务依赖拓扑,快速排查分布式系统故障。
模块四:数据库 & 存储架构(高频实战问)
1. MySQL 索引失效场景有哪些?如何优化?
参考答案:
索引失效常见场景:违反最左前缀原则、索引列运算 / 函数操作、隐式类型转换、like % 前缀、or 导致索引失效等。
优化思路:遵循最左前缀、避免索引列计算、合理设计联合索引、避免隐式转换、用覆盖索引减少回表。
2. 分库分表的场景、方案、难点是什么?
参考答案:
场景:单表数据量过大(千万级以上)、查询性能瓶颈。
方案:垂直分库分表(按业务 / 字段拆分)、水平分库分表(按分片键拆分),常用 Sharding-JDBC。
难点:分片键设计、分布式事务、跨分片查询、扩容数据迁移。
3. MySQL 事务隔离级别及锁机制?
参考答案:
隔离级别:读未提交、读已提交、可重复读(MySQL 默认)、串行化。
锁机制:表锁、行锁、间隙锁(解决幻读),InnoDB 行锁加锁索引,无索引会退化为表锁。
模块五:线上问题排查 & 性能优化(架构师核心能力)
1. CPU 飙高如何排查?
参考答案:
top 定位 CPU 高的 Java 进程 PID;
top -Hp PID 定位高耗 CPU 线程 tid;
jstack 打印线程栈,找到对应代码;
分析死循环、频繁 GC、复杂计算等问题点并优化。
2. 内存泄漏排查思路?
参考答案:
jmap 导出堆 dump 文件;
MAT/JVisualVM 分析 dump,定位泄漏对象;
查看对象引用链,找到未释放资源的代码;
优化线程池、连接池、缓存、静态集合等使用方式。
3. 接口响应慢,如何全链路优化?
参考答案:
监控定位慢接口,区分是代码逻辑、DB、缓存还是第三方调用问题;
优化 SQL 索引、减少联表查询,引入缓存;
异步化非核心流程,并行执行逻辑;
扩容服务节点、优化 JVM 参数、升级硬件配置。
模块六:教育 / To G 特色场景题
1. 教育系统多级数据权限(管理员 / 教师 / 学生)如何设计?
参考答案:
采用RBAC 权限模型 + 数据权限隔离:
角色绑定菜单接口权限(功能权限);
通过数据范围字段(机构 ID、班级 ID)控制数据可见范围;
网关层统一鉴权,业务层拦截数据权限,保证不同角色只能看到自身权限内数据,满足教育系统合规要求。
2. 学生成绩 / 档案数据,如何保证不篡改、可追溯?
参考答案:
数据操作留痕,记录操作人、时间、行为日志;
核心数据新增后不可修改,采用状态流转控制,错误数据用冲正方式处理;
敏感数据加密存储,操作权限严格管控,关键操作二次校验。
3. 大批量学生数据导入 / 导出,性能如何优化?
参考答案:
采用分批处理,避免一次性加载大量数据到内存;
导出用异步线程 + 文件生成,前端轮询 / 通知结果;
数据库层面关闭自动提交、批量插入,减少 IO 开销;
超大文件使用 OSS 存储,生成下载链接。
模块七:技术管理 & 职业认知(终面问)
1. 你如何平衡业务迭代速度与技术债务?
参考答案:
核心链路、高风险模块优先重构,避免技术债务堆积;
非核心模块适度容忍技术债务,保证业务进度;
预留固定时间做技术优化与重构,建立技术治理机制。