考察技术能力
了解了项目情况,又有了架构图,接下来我会围绕整个架构方案,结合我们的面试地图一块一块深入挖掘了解候选人的技术能力
先从 OSI 模型的应用层开始
通过负载均衡方案考查他对 CDN、DNS、VIP、HTTP、LVS、HAProxy、Keepalived、Apache、Nginx 的理解和熟练程度
中间也可以穿插问几个技术细节来考查他的理解深度
比如 Nginx 高并发的技术原理
Nginx 和 LVS 分别工作在 TCP/IP 协议栈的第几层
考察Java基础技术
接下来可以根据各功能模块展开考查 Java 基础技术
不可能面面俱到,但一些关键技术点必须考查
比如容器、JVM、数据结构、序列化、异常处理、Socket、多线程 / 并发、NIO
在 Java 体系中
JVM 是最基础也是最重要的考查点
我们的系统最常出现的 OOM 异常都跟 JVM 有关
架构师必须深入了解 JVM 的内存模型、字节码、垃圾回收(GC)策略等原理
才能去优化 JVM 相关的性能问题,才能快速定位 OOM 类异常
常用框架和相关概念
比如 Spring、SpringMVC、Mybatis、ORM、IOC/DI、AOP
设计思想
接下来要结合候选人提到的某个功能模块,考查他在面向对象上的设计能力和建模能力
面向对象设计主要考查的是设计思想
例如
如果他对这些概念都很清楚
我会追问聚合和组合的区别
聚合和组合是都是特殊的关联关系,二者都是整体和部分的关系,最主要的区别有2点:一是整体和部分的这种关联关系,组合更强一些,聚合要弱一些;二是生命周期,对于组合,部分的生命周期不能超越整体,也就说部分不能脱离整体而存在,部分随着整体的创建而被创建,消亡而被消亡。对于聚合,部分的生命周期可以超越整体,整体消亡了,部分还可以继续独立存在。
一般能答上来的都是对面向对象理解比较深入的
面向对象的理解程度和领域建模能力
有了面向对象的概念和思想,还可以结合候选人的项目,让他详细说说某个功能模块的设计,画画 UML 设计图
领域建模能力对于架构师而言至关重要
业务域抽象得是否合理,是否高内聚,领域边界是否清晰
这些都是影响系统可扩展能力的关键要素
除了这些,我也会结合项目考查几个比较常用的设计模式
单例模式
工厂模式
策略模式
模板模式
存储层
考查存储架构、数据库选型、数据库调优
存储架构
要看候选人是否能根据系统的并发量和数据量的需求设计适当的存储架构
是否需要做数据库分片
分片的原则和技术方案
是否需要引入 KV 引擎
是否需要做读写分离
是否需要做缓存
缓存需要做几层
数据库选型
也是和具体的数据量和并发量有关
是用关系型数据库还是用 KV 引擎,还是要二者结合
考虑到我们的系统大多还需要强依赖关系型数据库,所以一般都会考查一些关系型数据库的基础技术点
比如 MySQL 的架构
存储引擎
索引的数据结构
事务隔离级别
索引最左前缀原则
数据库端的性能优化技巧
Explain 的用法
索引优化
SQL 语法优化
参数配置优化
数据模型优化
数据模型优化指的是领域模型优化,比如表结构是否合理,表和表之间的关系是否合理,各业务域是否高内聚,低耦合等
缓存优化