接口隔离原则(ISP)与依赖倒置原则(DIP)

共 17 题
#

1. Interface Segregation Principle(ISP)——客户端不应被迫依赖其不使用的方法;胖接口拆分案例

A 客户端不应被迫依赖它不使用的方法,胖接口应拆分 ✓ 正确答案
B 客户端应依赖它不使用的方法
C 接口越大越好
D 胖接口有助于避免空实现
#

2. ISP vs SRP 的差异中 SRP 是类的职责、ISP 是接口的职责

A SRP 关注接口粒度
B 两者完全相同
C ISP 关注类的变化原因
D SRP 是类的职责,ISP 是接口的职责 ✓ 正确答案
#

3. Dependency Inversion Principle(DIP)——高层模块不依赖低层模块,都依赖抽象

A 高层模块应依赖低层模块的具体实现
B 高层与低层都应依赖抽象,细节依赖抽象 ✓ 正确答案
C 抽象应依赖细节
D DIP 与依赖注入无关
#

4. Role Interface(角色接口)vs Header Interface(头文件接口)的对比

A Header Interface 一个类对应一个接口,必然最灵活
B Role Interface 按客户端角色切接口,更符合 ISP ✓ 正确答案
C 两者完全相同
D Role Interface 是胖接口
#

5. 依赖注入(DI)的三种方式(构造注入、Setter 注入、接口注入)的优劣对比

A 三种方式完全等价
B Setter 注入保证依赖不可变
C 接口注入是当前主流
D 构造注入保证依赖不可变、构造即完整,是主流推荐 ✓ 正确答案
#

6. IoC 容器的 Service Locator 反模式(隐藏依赖、运行时错误)vs DI 容器的透明性

A DI 容器隐藏依赖,运行时解析
B Service Locator 隐藏依赖、运行时才解析,是可读性差的反模式 ✓ 正确答案
C 两者在可测试性上完全一样
D Service Locator 依赖更可见
#

7. "胖接口"(fat interface)的识别中方法过多、未分组、面向实现而非调用方

A 方法越多越好
B 接口面向实现而非调用方、方法过多未分组,是胖接口信号 ✓ 正确答案
C 胖接口是 ISP 的体现
D 胖接口无需拆分
#

8. Go 的小接口哲学(io.Reader 只有 Read 一个方法)的工程价值

A 小接口与测试无关
B 接口越大越好
C 接口必须有多个方法
D 小接口依赖少、便于组合,是 ISP 的极致体现 ✓ 正确答案
#

9. Rust 的 trait 与 Go interface 的隐式实现差异

A Rust trait 不允许默认方法
B 两者都是隐式实现
C Go 接口隐式实现,Rust trait 显式实现(impl Trait for Type) ✓ 正确答案
D Go 接口是显式实现
#

10. SOLID 原则的优先级与权衡中何时违反某个原则以换取其他质量属性

A 违反原则永远是错误
B 所有原则必须同时严格遵守
C 原则之间可能冲突,应按实际需求权衡,非教条式应用 ✓ 正确答案
D 原则无成本
#

11. SOLID 原则在不同语言中的实现差异中 Java/Go/Python/Rust

A Go 用隐式接口 + 组合,Rust 用 trait + 组合,与 Java 的继承机制不同 ✓ 正确答案
B 所有语言实现 SOLID 的方式完全一样
C Python 有强制编译期类型检查
D Rust 支持继承
#

12. ISP 的实践中细粒度接口 vs 胖接口?

A 按客户端需求差异决定粒度,避免机械拆分或堆砌 ✓ 正确答案
B 接口越大越好
C 接口永远应极小
D 细粒度接口没有成本
#

13. 标识接口(marker interface)vs 注解(annotation)的取舍(Serializable)

A 两者完全等价
B 注解是类型系统的一部分
C 标识接口可携带参数
D 标识接口让类型获得类型系统支持,注解用于携带元数据 ✓ 正确答案
#

14. DIP 的核心中依赖抽象而非具体实现?

A 依赖具体实现更灵活
B 依赖抽象可隔离实现变化,实现可替换、可测试 ✓ 正确答案
C 抽象是易变的
D DIP 与 OCP 无关
#

15. DIP 与依赖注入中 IoC 容器的作用?

A DI 是实现 DIP 的手段,IoC 容器自动组装依赖 ✓ 正确答案
B IoC 容器是 DIP 本身
C DI 与 DIP 无关
D 容器必须手动实现所有依赖
#

16. ISP 与适配器中如何隔离外部依赖?

A 适配器与隔离无关
B 客户端应直接依赖第三方 API
C 为外部依赖定义最小接口,适配器封装外部调用,隔离外部变化 ✓ 正确答案
D 外部依赖变化需改所有调用方
#

17. DIP 的边界中基础设施层的依赖方向?

A 核心依赖具体的数据库驱动
B 基础设施应实现核心定义的接口,依赖核心抽象,而非反向 ✓ 正确答案
C 基础设施定义接口,核心实现
D 依赖方向无所谓