这份整理完全按照笔试简答题的标准进行了优化:去表格化、去口语化、关键词加粗。
你可以直接背诵黑体字部分,考试时根据印象扩充非黑体字部分即可。
(1)软件设计模式分类及特点
-
按目的分类(关注做什么):
-
创建型:关注对象的创建过程,解耦对象的创建与使用。
-
结构型:关注类或对象的组合,通过继承或组合形成更大的结构。
-
行为型:关注对象间的交互,划分职责与协作方式。
-
-
按范围分类(关注处理谁):
-
类模式:处理类与子类关系(静态,通过继承)。
-
对象模式:处理对象间关系(动态,通过组合)。
-
(2)软件设计模式定义及要素
-
定义:在特定环境下,针对重复出现的软件问题的一种经过充分验证的通用解决方案。
-
基本要素:
-
模式名称:助记词。
-
问题:应用环境与设计痛点。
-
解决方案:组成成分、职责划分及协作关系。
-
效果:应用的优缺点及权衡。
-
(3)面向对象设计原则 (7大原则)
-
单一职责原则 (SRP):一个类只负责一个职能(防杂乱)。
-
开闭原则 (OCP):对扩展开放,对修改关闭(防修改)。
-
里氏代换原则 (LSP):子类必须能替换父类(保继承)。
-
依赖倒转原则 (DIP):依赖抽象,不依赖具体实现(降耦合)。
-
接口隔离原则 (ISP):使用多个专门的接口,优于单一的大接口(防臃肿)。
-
合成复用原则 (CRP):优先使用组合/聚合,少用继承(保封装)。
-
迪米特法则 (LoD):最少知识原则,只与直接朋友通信(降关联)。
(4)软件架构与设计模式的区别与共性
-
共性:均为解决重复问题的方案,旨在提升重用性、维护性与扩展性。
-
区别:
-
层次:架构是系统级(宏观);模式是构件级(微观)。
-
范围:架构决定系统骨架;模式解决局部设计问题。
-
(5)单例模式的三个实现要点
-
私有构造函数:禁止外部通过
new创建实例。 -
私有静态成员变量:存储类中唯一的实例。
-
公有静态工厂方法:提供全局唯一的访问点。
(6)软件架构的概念及组成
-
概念:软件系统的高层结构。
-
组成:
-
构件:计算或存储单元(如数据库、对象)。
-
连接件:构件间交互的抽象(如管道、RPC)。
-
约束:必须遵守的规则或性能限制。
-
(7)Kruchten “4+1” 视图模型
-
逻辑视图:描述功能需求(对应类图)。
-
开发视图:描述静态组织结构(对应组件图)。
-
过程视图:关注并发与性能。
-
物理视图:描述硬件映射(对应部署图)。
-
场景视图(+1):即用例视图,用于验证架构完整性。
(8)深克隆与浅克隆
-
浅克隆:仅复制对象本身及值类型成员,引用类型成员仍指向原对象。
-
深克隆:递归复制所有引用类型成员,克隆对象与原对象内存完全独立。
(9)代理模式定义及常见类型
-
定义:为对象提供占位符以控制对原对象的访问。
-
类型:
-
远程代理:代表不同地址空间的对象。
-
虚拟代理:延迟加载开销大的对象(如预加载)。
-
保护代理:控制访问权限。
-
智能引用:访问时执行额外操作(如计数)。
-
(10)饿汉式 vs 懒汉式单例
-
饿汉式:类加载时立即创建。优点是天生线程安全;缺点是若不使用则浪费资源。
-
懒汉式:调用时才创建(延迟加载)。优点是资源利用率高;缺点是需处理多线程同步(如双重检查锁)。
(11)依赖倒置原则 (DIP) 详述
-
定义:高层不应依赖低层,二者都应依赖抽象。
-
核心:针对接口编程,而非针对实现编程。旨在实现模块间的松耦合。
(12)组合模式定义与角色
-
定义:将对象组合成树形结构以表示“部分-整体”,使用户对单个对象和组合对象的使用具有一致性。
-
角色:
-
Component:抽象构件,定义统一接口。
-
Leaf:叶子构件,无子节点。
-
Composite:容器构件,存储并管理子节点。
-
(13)接口隔离原则 (ISP) 及应用
-
定义:客户端不应依赖不需要的接口;类间的依赖应建立在最小的接口上。
-
应用:将臃肿的“胖接口”拆分为职责单一的特定接口,实现角色隔离。