# 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 支持继承
# 13. 标识接口(marker interface)vs 注解(annotation)的取舍(Serializable) A 两者完全等价 B 注解是类型系统的一部分 C 标识接口可携带参数 D 标识接口让类型获得类型系统支持,注解用于携带元数据 ✓ 正确答案
# 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 依赖方向无所谓