函数式设计模式(FP 与类型驱动设计)

共 17 题
#

1. 组合(compose)与管道(pipe)如何实现无副作用的数据流

A compose 从右到左、pipe 从左到右组合纯函数,实现无副作用数据流 ✓ 正确答案
B compose 与 pipe 都从左到右
C 组合函数会修改外部状态
D 组合与管道与纯函数无关
#

2. 为何"快速失败"优于返回含混的默认值或吞掉错误

A 返回默认值比暴露错误更安全
B 吞掉错误能让系统更稳定
C 快速失败在错误发生时立即暴露,优于吞错或返回含混默认值 ✓ 正确答案
D 快速失败会掩盖错误
#

3. 不可变数据结构(持久化)在并发下的天然安全

A 持久化结构更新总是整体拷贝
B 不可变数据更新会破坏旧版本
C 不可变数据并发访问需要加锁
D 不可变数据天然并发安全,持久化结构用结构共享高效更新 ✓ 正确答案
#

4. 为什么函数式偏好"小而纯"的函数利于测试与并行

A 纯函数无副作用、输入输出确定,利于测试与并行 ✓ 正确答案
B 纯函数依赖外部状态,测试需 mock
C 纯函数并行需要加锁
D 纯函数无法组合
#

5. 如何用 enum 表达状态机以让非法状态"无法被构造"

A enum 无法表达状态机
B enum 状态可以被任意字符串表示
C enum 把状态建模为有限类型集合,非法状态无法被构造 ✓ 正确答案
D 非法状态可通过 enum 构造
#

6. 类型驱动设计如何用编译器证明非法状态不可表示

A 非法状态只能运行时检测
B 用类型建模让非法状态不可表示,编译器在编译期拒绝 ✓ 正确答案
C 类型系统无法约束状态
D 类型驱动设计不减少运行时错误
#

7. 解析-校验-构造三段式(parse-don't-validate)为何更稳健

A 校验与类型系统无关
B 每次使用都重新校验原始数据
C 在入口解析校验并构造强类型,此后类型保证合法,避免重复校验 ✓ 正确答案
D 解析后数据仍需到处校验
#

8. 迭代器(Iterator)惰性求值如何写出零成本抽象的高阶操作

A 惰性求值延迟执行,避免中间集合,单次遍历,实现零成本抽象 ✓ 正确答案
B 每次 map 都创建中间集合
C 惰性求值立即执行所有操作
D 链式操作性能远差于手写循环
#

9. Either/Result 类型如何以类型系统表达失败而非异常

A Result 用类型表达失败,失败作为返回值被强制处理 ✓ 正确答案
B Result 失败是隐式的,可被忽略
C 异常比 Result 更显式
D Result 无法组合错误传播
#

10. Option/Maybe 模式如何消除空指针(null)歧义

A Option 让人忽略缺失
B Option 与 null 等价
C Option 无法链式处理缺失
D Option 用类型表达可能缺失,缺失显式且强制处理,消除 NPE ✓ 正确答案
#

11. 代数效应(algebraic effects)如何分离副作用与逻辑

A 代数效应与副作用无关
B 代数效应把副作用写死在逻辑里
C 代数效应无法替换 handler
D 代数效应让逻辑声明效果,handler 实现副作用,实现逻辑与副作用分离 ✓ 正确答案
#

12. 代数数据类型(ADT)如何用 sum type 精确建模状态

A ADT 无法建模状态
B sum type 表达同时包含多个字段
C sum type 用互斥枚举精确建模状态,穷尽匹配保证所有 case 被处理 ✓ 正确答案
D sum type 的 case 不能携带数据
#

13. 函子(Functor)、单子(Monad)的 map/flatMap 抽象本质

A Functor 不能组合
B map 与 flatMap 完全相同
C flatMap 的函数返回普通值
D Functor 的 map 在上下文中应用函数,Monad 的 flatMap 组合并扁平化返回上下文的操作 ✓ 正确答案
#

14. 命令式设计模式(如 Strategy)在函数式中等价于高阶函数

A 高阶函数无法替代策略
B Strategy 在函数式中等价于高阶函数(函数作参数),无需策略类 ✓ 正确答案
C 策略必须用对象实现
D 函数式无法表达算法替换
#

15. 在动态语言项目里借鉴类型驱动思想的轻量做法

A 动态语言无法表达类型约束
B 动态语言无需任何校验
C 用类型标注、入口运行时校验、枚举/类建模等轻量做法弥补静态类型不足 ✓ 正确答案
D 动态语言只能靠习惯约定
#

16. 在静态类型语言中如何用 newtype 防止单位/语义混淆

A newtype 与类型别名完全相同
B newtype 让同底层类型的不同语义成为不同类型,编译器禁止混淆 ✓ 正确答案
C newtype 无法防止单位混淆
D newtype 只在运行时生效
#

17. 如何用 Option/Result 让调用方无法忽略错误分支

A Result 无法穷尽匹配
B 调用方可以忽视 Result 的错误分支
C 异常与 Result 一样强制处理
D 类型系统强制调用方处理缺失/失败分支,错误无法被忽略 ✓ 正确答案