dd

如果你能在“如何设计系统架构”上回答得有条理、体现自己的思考,很容易得到认可,甚至掩盖个别技术问题上回答的不足。

01 研发工程师想提升面试竞争力,该具备这三个技术认知

对架构设计的认知

我曾面试过一名研发工程师,他在介绍过往经历时,称自己在重构一个负责交易流程的系统时,将其拆分成报价系统、促销系统,以及订单系统,而当时他们只有两个人负责交易系统的开发工作。

针对他的经历,我的问题是:你们只有两个人负责这个交易系统,为什么还要做系统架构拆分?而且拆分之后会带来其他的复杂度,你是怎么考虑的?

系统拆分的架构设计问题,在面试中很常见,候选人给出了四个层面的回答。

从订单系统层面来看,由于交易流程中的订单系统相对来说业务稳定,不存在很多的迭代需求,如果耦合到整个交易系统中,在其他功能发布上线的时候会影响订单系统,比如订单中心的稳定性。基于这样的考虑,需要拆分出一个独立的子系统。

从促销系统层面来看,由于促销系统是交易流程中的非核心系统,出于保障交易流程稳定性的考虑,将促销系统单独拆分出来,在发生异常的时候能让促销系统具有可降级的能力。

从报价系统层面来看,报价是业务交易流程中最为复杂和灵活的系统,出于专业化和快速迭代的考虑,拆分出一个独立的报价系统,目的就是为了快速响应需求的变化。

从复杂度评估层面来看,系统拆分虽然会导致系统交互更加复杂,但在规范了 API 的格式定义和调用方式后,系统的复杂度可以维持在可控的范围内。

这样的回答很好地表达了应聘者对系统设计的思考与理解。因为他说出了原有系统中关于订单、促销和报价功能耦合在一起带来的实际问题,这是立足于点,又从交易流程的角度做系统设计串联起三个系统的拆分逻辑,这是连接成线,最后从复杂度和成本考量的方向夯实了设计的原则,这是扩展成面。

很多研发同学一提到架构设计就说要做拆分,将一个系统拆分成两个系统,将一个服务拆分成两个服务,甚至觉得架构就是做系统拆分,但其实并不理解拆分背后的深层原因。

架构拆分其实是管理在技术上提效的一种手段。

对分析问题的认知