# 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 类型系统强制调用方处理缺失/失败分支,错误无法被忽略 ✓ 正确答案