面向对象核心
封装:隐藏内部状态,通过方法暴露行为。继承: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));
}
}
面试答题结构
避免背 23 种全集;熟记 策略、工厂、单例、装饰、观察者、责任链 即可覆盖多数 Java/Go 后端题。结合项目一句「我们订单状态机用状态模式」比罗列定义更有说服力。