D
AI
学习工作台
后端面试题2026-05-221 分钟阅读

OOP、SOLID 与设计模式

面向对象原则、常见模式与面试答法

OOPSOLID设计模式后端面试记笔记标记疑惑

面向对象核心

封装:隐藏内部状态,通过方法暴露行为。继承:is-a 关系,复用但易紧耦合。多态:同一接口不同实现,运行时绑定。

面试避免空谈「三大特性」,应结合场景:支付渠道用多态、订单状态用封装 + 有限状态。

SOLID 简述

| 原则 | 要点 | 违反信号 | |---|---|---| | SRP | 一类一事 | 巨型 God Class | | OCP | 扩展开放修改关闭 | 改一处牵一串 if | | LSP | 子类可替换父类 | 子类抛新异常、缩前置条件 | | ISP | 接口小而专 | 实现类被迫空方法 | | DIP | 依赖抽象 | 业务层 new 具体 DB 驱动 |

依赖倒置:业务定义 PaymentGateway 接口,基础设施实现 StripeGateway;Spring 用 @Autowired 注入。

常见设计模式(后端)

创建型

  • 工厂 / 抽象工厂:按配置创建不同消息队列客户端。
  • 建造者:构造复杂 HttpRequest 或配置对象。
  • 单例:配置中心客户端(注意线程安全与测试替身)。
结构型
  • 适配器:旧 SDK 接口适配为新接口。
  • 装饰器:给 DataSource 加监控、慢查询日志(与代理相关)。
  • 门面:对子系统提供简化 API。
行为型
  • 策略:促销规则、路由算法。
  • 模板方法:抽象流程固定,子类实现步骤。
  • 观察者:领域事件发布订阅(Spring Event)。
  • 责任链:过滤器链、审批流。
// 策略示例:税费计算
public interface TaxStrategy {
    BigDecimal calc(Order order);
}

public class OrderService { private final TaxStrategy taxStrategy; public OrderService(TaxStrategy taxStrategy) { this.taxStrategy = taxStrategy; } public BigDecimal total(Order order) { return order.amount().add(taxStrategy.calc(order)); } }

面试答题结构

  • 场景与痛点(if 膨胀、测试难 mock)。
  • 选用模式与角色(谁依赖谁)。
  • SOLID 哪条被满足。
  • 代价(类变多、过度设计风险)。
  • 避免背 23 种全集;熟记 策略、工厂、单例、装饰、观察者、责任链 即可覆盖多数 Java/Go 后端题。结合项目一句「我们订单状态机用状态模式」比罗列定义更有说服力。

    知识卡片

    问题

    SOLID 五个字母分别指什么?

    点击翻转查看答案

    答案

    S 单一职责、O 开闭、L 里氏替换、I 接口隔离、D 依赖倒置;指导类与模块划分,降低耦合。

    问题

    策略模式解决什么问题?

    点击翻转查看答案

    答案

    把一族可互换算法封装成独立策略类,上下文持策略接口,避免大量 if-else,符合开闭原则。

    问题

    依赖倒置与依赖注入的区别?

    点击翻转查看答案

    答案

    倒置是高层不依赖低层实现而依赖抽象;注入是具体手段(构造器/Setter/容器)把实现传给高层。