Skip to content
第 243 / 250 章架构⏱ 14 分钟阅读

第 243 章:架构总结与面试

学习目标

  • 系统化梳理全部知识
  • 应对架构师面试
  • 巩固核心概念
  • 展示实战能力

一、Java 后端技能图谱

二、面试分类汇总

2.1 Java 基础

题目答案要点
HashMap 原理数组+链表+红黑树,JDK8 后链 >8 转树,扩容 2x
ConcurrentHashMap 1.7 vs 1.81.7 段锁,1.8 Node+CAS+synchronized
synchronized vs ReentrantLocksynch 自动释放,jvm 优化;ReentrantLock 灵活,可中断
volatile 语义可见性、禁止重排序
ThreadLocal 内存泄漏不 remove 在线复用线程时仍持有
Java IO 模型BIO/NIO/AIO,Netty 是 NIO
类加载机制加载-验证-准备-解析-初始化,双亲委派

2.2 JVM

题目答案要点
内存分区堆(老/年轻/eden)+方法区+栈+PC+本地栈
GC 算法标记清除 / 复制 / 标记整理 / 分代
GC 收集器Serial/Parallel/CMS/G1/ZGC
4 个引用强/软/弱/虚,各自回收时机
GC Root栈帧、本地方法栈、类静态、运行时常量
Full GC 触发老年代满 / Perm 满 / System.gc / 担保失败
类加载双亲委派避免重复加载,核心保护

2.3 并发

题目答案要点
Java 并发包JUC:Lock/Atomic/Concurrent/Executor
AQS同步状态,CAS 改值
线程池参数core/max/queue/rejected/keepAlive
volatile vs synchronized1 个 vs 多变量可见
ThreadLocal线程隔离,内存泄漏风险
阻塞队列ArrayBQ/LBQ/DLQ/PBQ/SLQ
线程数设置CPU 密集:N+1,IO 密集:压测

2.4 数据库

题目答案要点
事务 ACID原子/一致/隔离/持久
隔离级别RU/RC/RR/Serializable
索引底层B+Tree(聚簇、非聚簇、覆盖)
索引失效函数、类型转换、前导 %
MVCC多版本并发控制
分库分表垂直按业务、水平按 hash/range
主从复制binlog + relay log
慢 SQLLIMIT、OR、SELECT *

2.5 Spring / Boot

题目答案要点
IoC 原理工厂反射 + 容器
AOP 原理JDK Proxy vs CGLIB
Bean 生命周期实例化-填充属性-init-使用-销毁
Spring 事务AOP,@Transactional 默认 REQUIRED
Spring Boot 启动spring.factories + 自动装配
Spring 设计模板 + 工厂 + 装饰
RestTemplate 拦截器ClientHttpRequestInterceptor

2.6 MyBatis

题目答案要点
一二级缓存1:SqlSession 内,2:SqlSessionFactory
延迟加载association/collection 配置
防 SQL 注入#{} 预编译
拦截器Plugin,改 SQL

2.7 Redis

题目答案要点
数据类型String/Hash/List/Set/ZSet/Stream/GEO/Hyperloglog/Bitmap
持久化RDB(快照)+ AOF(命令)
Cluster16384 槽位,gossip 协议
缓存三大问题雪崩/穿透/击穿
Redlock多 Redis 实例过半
内存淘汰LRU/LFU
大 key拆分(Redis-cli --bigkeys)

2.8 消息队列

题目答案要点
Kafka 架构broker/topic/partition/consumer group
消费语义至少一次(默认)/ 最多一次 / 正好一次
Kafka 顺序单 partition 有序,多 partition 整体无序
Kafka vs RocketMQKafka 吞吐,RocketMQ 事务消息
RabbitMQ 模式fanout/direct/topic/headers
DLQ死信队列 + 死信交换机
Rebalance分区重分配

2.9 微服务

题目答案要点
微服务特征9 大特征(Fowler)
服务拆分DDD + 业务边界
CAPCP / AP / CA
BASE基本可用 / 最终一致
Seata 模式AT/TCC/Saga/XA
Saga 协调编排 / 编舞
熔断Sentinel / Resilience4j
网关Spring Cloud Gateway / Kong
服务发现Nacos / Eureka / Consul
配置中心Nacos / Apollo / Config

2.10 架构

题目答案要点
DDD限界上下文 + 聚合 + 实体 + 值对象
微服务陷阱分布式事务 / 链路追踪 / 服务依赖
一致性强一致 vs 最终一致
高可用主从 + 多活 + 灾备
监控Prometheus + Grafana + ELK + SkyWalking
限流固定窗口 / 滑动 / 令牌桶 / 漏桶
雪崩熔断 / 隔离 / 超时 / 重试
安全OAuth2 + JWT + RBAC

2.11 运维

题目答案要点
Docker 镜像层只读层叠加,CoW
Dockerfile 优化多阶段 + 缓存层 + alpine
K8s 核心Pod/Deployment/Service/Ingress
Sidecar与主容器共享网络/卷
HPACPU/memory/自定义指标
网络127.0.0.1/0 / DNS / Service IP
监控指标 + 日志 + 追踪

三、场景题

3.1 设计短链服务

要求:

  • URL → 短码
  • 短码 → 原 URL
  • 1 亿条
  • 1000 万 QPS

方案:

  • 生成:Hash(URL)+ 自增 Seq,长度 6-8 字符
  • 存储:MySQL + Redis
  • 缓存:热短码全在 Redis
  • 跳转:301 永久 / 302 临时(统计)

3.2 设计秒杀系统

详见第 233 章。

3.3 设计朋友圈

  • 拉与推结合
  • 按时间线读
  • 写入广播
  • 关注关系存图 DB

3.4 设计分布式 ID

  • Snowflake(41 bit 时间 + 10 机器 + 12 序列)
  • 美团 Leaf(号段/Snowflake)
  • UUID(不推荐)

3.5 IM 系统设计

  • 长连接(Netty)
  • 消息存储(分表 + 归档)
  • 离线推送(WebSocket)
  • 消息顺序(单会话有序)

四、面试技巧

4.1 STAR 法

yaml
Situation: 业务背景
Task: 任务目标
Action: 具体方案 + 技术
Result: 数据化结果

4.2 系统题回答套路

4.3 技术深度与广度

yaml
深度: 项目用过的技术,详谈到原理
广度: 面试官涉及的其他,知道概念

套路:
  - 项目: 1-2 个有亮点的项目
  - 技术栈: 项目中用过 + 自己深度研究
  - 亮点: 性能优化 / 故障处理 / 复杂业务

4.4 反问面试官

yaml
好问题:
  - 团队技术栈是什么?
  - 当前在做哪些业务?
  - 团队对某技术栈的态度?
  - 业务发展阶段?

避免:
  - 薪资(初面)
  - 加班强度
  - 八卦问题

五、简历与项目

5.1 项目写法

yaml
【项目】电商订单中心
技术栈: Spring Boot / Spring Cloud / Seata / Sentinel / Kafka
- 重构订单状态机:从过程式改为 DDD 聚合,18 个月无重大事故
- 引入 Seata AT 替代手工补偿,代码量减少 40%
- 优化下单链路:Redis 缓存+JVM Cache,P99 从 800ms 降到 200ms
- 设计并实现灰度发布框架,支持权重/cookie/header 灰度

5.2 量化指标

yaml
✅ 数据化:
  - QPS 提升 5 倍
  - P99 降低 75%
  - 错误率从 0.5% 降到 0.01%
  - 节省人力 X 人日

❌ 模糊:
  - 提升了性能
  - 优化了体验

六、Java 学习路径

6.1 1-3 年(初级 → 中级)

yaml
核心:
  - Java 基础扎实
  - MySQL/Redis/MQ 熟练
  - Spring 全家桶熟练
  - 简单业务能做

推荐:
  - 《Java 编程思想》
  - 《Java 核心技术》
  - 《MySQL 必知必会》
  - 《Spring 实战》

项目:
  - 完整的 CRUD 项目
  - 上手过 Bug 处理

6.2 3-5 年(中级 → 高级)

yaml
核心:
  - 高并发、高可用方案
  - 中间件原理
  - 性能调优
  - 微服务实战

推荐:
  - 《深入理解 Java 虚拟机》
  - 《Java 并发实战》
  - 《数据密集型应用系统设计》
  - 《高性能 MySQL》

项目:
  - 主导过性能优化
  - 经历过生产故障处理

6.3 5-8 年(高级 → 架构师)

yaml
核心:
  - 业务抽象
  - 复杂系统设计
  - 团队协作
  - 技术决策

推荐:
  - 《系统架构设计》
  - 《企业应用架构模式》
  - 《架构整洁之道》
  - 《凤凰架构》

能力:
  - 带项目(2-5 人)
  - 抽象能力(从业务到模型)
  - 跨团队协作

6.4 8+(架构师 → 技术专家/Leader)

yaml
核心:
  - 战略眼光
  - 业务驱动技术
  - 团队建设
  - 技术影响力

能力:
  - 大规模系统设计
  - 复杂场景方案
  - 培养新人
  - 行业洞察

七、面试高频问题

7.1 项目难点

yaml
: 你最有成就感的项目?
:
  - 项目背景 + 复杂度
  - 你的核心贡献
  - 量化成果
  - 学到的

: 遇到最棘手的问题?
:
  - 问题:具体描述 + 数据
  - 排查:思路
  - 解决:方案 + 代码
  - 反思:学到什么

7.2 性能题

yaml
: 系统慢,你怎么定位?
:
  - 监控看指标(应用/DB)
  - GC 日志
  - 慢 SQL
  - 火焰图
  - 全链路 trace

7.3 设计题

yaml
: 设计一个 10 万 QPS 的系统
:
  - 客户端: CDN + 限流 + 缓存
  - 网关: 鉴权 + 路由 + 限流
  - 服务: 多实例 + 无状态 + 异步
  - 数据: 多级缓存 + 读写分离
  - 兜底: 降级 + 熔断

7.4 软题

yaml
: 怎么推动技术方案?
  - 现状评估 + 痛点
  - 方案 + 收益(对比)
  - 沟通 + 评审
  - 灰度 + 度量

: 团队协作?
  - 避免对抗式沟通
  - 数据 + 案例
  - 双向反馈

八、面试总结

8.1 流程

8.2 各阶段考察

阶段重点
一面基础 + 项目
二面架构 + 解决能力
交叉面其他团队考察
CTO 面高度 + 价值观
HR 面稳定性 + 期望

8.3 拿 Offer 心态

yaml
1. 真实简历
2. 充足准备
3. 清晰表达
4. 双向评估(你也面试公司)
5. 不卑不亢

九、书单

9.1 Java 基础

  • 《Java 编程思想》(Thinking in Java)
  • 《Java 核心技术》Cay Horstmann
  • 《On Java 8》Bruce Eckel

9.2 并发与 JVM

  • 《Java 并发实战》(Java Concurrency in Practice)
  • 《深入理解 Java 虚拟机》周志明

9.3 Spring

  • 《Spring 实战》
  • 《Spring 揭秘》
  • 《Spring 源码解析》

9.4 数据库

  • 《MySQL 必知必会》
  • 《高性能 MySQL》
  • 《MySQL 实战 45 讲》丁奇

9.5 架构

  • 《数据密集型应用系统设计》(DDIA)
  • 《大型网站技术架构》李智慧
  • 《凤凰架构》周志明
  • 《企业应用架构模式》Fowler
  • 《系统架构设计》

9.6 中间件

  • 《Redis 设计与实现》
  • 《Kafka 权威指南》
  • 《深入理解 Nginx》

9.7 运维

  • 《Docker 实战》
  • 《Kubernetes 权威指南》
  • 《SRE: Google 运维解密》

十、职业发展路径

十一、本章小结

yaml
✅ 知识系统化
✅ 重点知识熟记
✅ 项目经验量化
✅ 系统设计套路
✅ 软技能锻炼

结束

到这里,Java 企业级教程 250 章已结束。祝学习顺利!


下一章:第 244 章:综合项目实战

本站基于 VitePress 构建 · 由 Codebook 团队维护