二进制与函数式编程

共 48 题
#

1. TextDecoderStream/TextEncoderStream 在 Streams 中文本转换的工程取舍

A TextDecoderStream 是流式解码器,自动处理多字节字符跨 chunk 边界,支持边下边解析 ✓ 正确答案
B TextDecoderStream 只能一次性解码整个流
C 流式解码无法处理 UTF-8 多字节字符
D TextDecoderStream 不是 TransformStream
#

2. Blob 与 File 的 MIME 类型与字节级切片的应用

A Blob 的 type 属性是可靠的安全依据
B Blob.slice 会复制全部底层数据
C File 与 Blob 没有继承关系
D Blob.slice 返回引用原数据的不可变字节视图,可用于分片上传与类型嗅探,但 type 字段不可信 ✓ 正确答案
#

3. Immer 不可变更新(produce + draft + patches)

A patches 只能记录最终状态
B Immer 每次 produce 深拷贝全部状态
C Immer 通过写时复制产出结构共享的新状态,patches 记录增量变更支持撤销重做 ✓ 正确答案
D draft 可以在异步回调中继续修改
#

4. Array.from/Array.of 在类数组与可迭代对象转换的边界

A Array.from 保留稀疏数组空洞
B Array.from 支持类数组与可迭代双通道且 mapFn 会填充空洞,Array.of 消除 new Array 的数字参数歧义 ✓ 正确答案
C Array.of(1) 等价于 new Array(1)
D Array.from 无法处理 Set
#

5. flatMap 在链式异步操作与 Promise 串联的工程价值

A then 回调返回 Promise 时会嵌套等待
B flatMap 只展开深度为 0 的结果
C 数组 flatMap 自动展开映射结果一层,Promise 的 then 扁平化吸收嵌套,二者都简化链式处理 ✓ 正确答案
D flatMap 会产生中间嵌套数组
#

6. map/filter/reduce 与惰性迭代的取舍

A 惰性管道可以任意多次消费
B 惰性迭代每次消费都会重新遍历全部数据
C map/filter 链不会产生中间数组
D 数组方法多次遍历并产生中间数组,惰性迭代一次遍历按需计算,大数据集下更优 ✓ 正确答案
#

7. 高阶函数、柯里化、偏函数与函数组合

A 组合不需要单参函数
B 柯里化与偏函数完全相同
C pipe 从右向左执行
D 柯里化每次固定一个参数、偏函数可固定任意位置参数,组合把单参函数串成管道 ✓ 正确答案
#

8. 纯函数、不可变更新与组合的副作用隔离

A 不可变更新必须深拷贝全部数据
B 纯函数可以修改传入对象
C 纯函数保证确定性,不可变更新提供数据基础,副作用集中在边界执行提升可预测性 ✓ 正确答案
D 副作用应该分散在业务逻辑中
#

9. structuredClone 与深拷贝在函数式状态更新的取舍

A structuredClone 原生支持循环引用等但无法克隆函数/DOM,函数式更新应优先浅拷贝加结构共享 ✓ 正确答案
B structuredClone 可以克隆函数
C 深拷贝是函数式更新的默认做法
D structuredClone 不支持循环引用
#

10. Object.freeze 在 React/Vue 不可变数据优化的语义价值

A Vue 会对冻结对象正常建立响应式代理
B Object.freeze 会自动深冻结嵌套对象
C 冻结对象可安全共享且会被 Vue 响应式跳过,作为静态只读数据能减少代理与更新开销 ✓ 正确答案
D freeze 后的对象仍可被任意修改
#

11. Web Streams API(ReadableStream/TransformStream/WritableStream)

A Web Streams 是 push-based 模型,不消费也会产生数据
B Readable/Transform/Writable 三类流经 pipeThrough/pipeTo 组成管道,背压沿管道反向传播控制内存 ✓ 正确答案
C TransformStream 只有可读端
D 流没有背压概念
#

12. 函数组合(compose/pipe)的执行顺序与调试栈可读性

A pipe 与 compose 执行顺序相同
B pipe 按数据方向从左到右执行,compose 从右到左,具名函数与观测点可提升调试栈可读性 ✓ 正确答案
C 匿名函数组合的栈信息最清晰
D 组合管道无法插入调试点
#

13. 结构共享的不可变数据(Immer 风格)的更新性能

A 结构共享无法复用未修改子树
B 结构共享每次更新都复制全部节点
C 深拷贝在更新性能上永远优于结构共享
D 结构共享更新只克隆变化路径节点,大状态小修改时远优于深拷贝,但变化面大时优势减弱 ✓ 正确答案
#

14. 记忆化(Memoization)的缓存键与容量控制

A 记忆化可以无限缓存无需淘汰
B 记忆化需设计稳定的缓存键并控制容量(LRU/TTL),纯函数是记忆化的前提 ✓ 正确答案
C 依赖时间/随机数的函数可以安全记忆化
D 缓存键设计不影响正确性
#

15. SharedArrayBuffer + Atomics 在跨 Worker 高吞吐并行计算的应用边界

A 共享内存访问无需原子操作
B SAB 不需要任何安全头配置
C SAB 提供零拷贝共享内存,需 Atomics 保证同步且要求跨源隔离(COOP/COEP) ✓ 正确答案
D postMessage 比 SAB 更适合高频共享内存场景
#

16. structuredClone 与 postMessage 的 Transferable 在跨 Worker 通信的边界

A Transferable 转移所有权实现零拷贝,转移后原缓冲区被 detach,结构化克隆则复制数据 ✓ 正确答案
B Transferable 也会复制数据
C 所有对象类型都可以被 transfer
D 转移后原端仍可继续读写
#

17. SharedArrayBuffer 在多 Worker 共享数据时的同步原语(Atomics.wait/notify)

A notify 只能唤醒一个等待者
B wait 会无条件挂起直到超时
C 主线程可以同步调用 Atomics.wait
D Atomics.wait 在条件满足预期值时才挂起并可由 notify 唤醒,配合条件复查实现条件变量同步 ✓ 正确答案
#

18. ArrayBuffer.transfer/ArrayBuffer.transferToFixedLength 在所有权转移与 GC 协作

A ArrayBuffer.transfer 把数据移入新缓冲并使旧缓冲 detach,可配合可调整大小缓冲做内存重组 ✓ 正确答案
B transfer 后原缓冲仍然可用
C transferToFixedLength 产生可调整大小的缓冲
D transfer 会立即把内存归还操作系统
#

19. 堆快照定位闭包、Detached DOM 与监听器泄漏

A 监听器泄漏在快照中不可见
B 堆快照无法显示引用关系
C Detached DOM 没有保留链
D 堆快照对比基线可发现增量对象,Retainer Path 能展示 Detached DOM、监听器与闭包的保留链 ✓ 正确答案
#

20. 结构化克隆与 Transferable Objects 的性能差异

A 克隆后原数据不可用
B 转移也会复制全部数据
C 结构化克隆开销随数据规模线性增长,Transferable 零拷贝转移开销近似与大小无关 ✓ 正确答案
D 转移适合任意类型的小消息
#

21. ArrayBuffer、TypedArray、DataView 的字节序与视图

A TypedArray 按平台字节序解释定长类型数据,DataView 可显式指定大小端读写 ✓ 正确答案
B TypedArray 可以自由混合多种元素类型
C ArrayBuffer 可以直接读写数值
D DataView 没有字节序参数
#

22. Blob/File/FormData/URL.createObjectURL 在文件数据流的现代取舍

A dataURL 比 objectURL 更节省内存
B objectURL 是内存引用式预览 URL,需 revokeObjectURL 释放,上传用 FormData 组装 multipart ✓ 正确答案
C objectURL 无需手动释放
D FormData 只能传输文本字段
#

23. TextEncoder/TextDecoder 在多字节字符编码的跨语言边界处理

A 流式解码无法处理 UTF-8
B TextDecoder 总是丢弃块末尾字节
C TextEncoder 支持任意编码
D TextDecoder 的 stream 模式会在块边界缓存不完整的多字节序列,fatal 模式对非法字节抛错 ✓ 正确答案
#

24. WeakRef 与 FinalizationRegistry 的能力边界(不可作为可靠缓存失效)

A FinalizationRegistry 回调保证及时执行
B WeakRef 可以保证对象不会被回收
C GC 时机不确定使 WeakRef 缓存命中不可保证、清理回调不可依赖,应使用显式容量控制缓存 ✓ 正确答案
D 弱引用缓存适合作为唯一缓存方案
#

25. performance.measureUserAgentSpecificMemory() 与跨域隔离前提

A 该 API 无需任何隔离条件
B measureUserAgentSpecificMemory 返回细分内存明细并支持按 iframe 归因,但要求跨域隔离环境 ✓ 正确答案
C performance.memory 是标准化的精确 API
D 该 API 只能测量总内存
#

26. BigInt 在 64 位整数与 WASM 交互的工程价值

A WASM i64 只能拆成两个 32 位处理
B Number 可以精确表示任意 64 位整数
C BigInt 可以与 Number 直接混算
D BigInt 精确表示 64 位整数并与 WASM i64 无损互操作,但 JSON.stringify 不支持 BigInt ✓ 正确答案
#

27. URLSearchParams 在表单序列化与查询字符串解析的边界

A URLSearchParams 不会编码特殊字符
B URLSearchParams 自动按表单规则编码(空格转 +、中文百分号编码),支持同名多值与顺序遍历 ✓ 正确答案
C getAll 只能返回单个值
D URLSearchParams 可以处理 fragment
#

28. Atomics.waitAsync 的异步等待

A waitAsync 与 wait 完全等价
B waitAsync 会阻塞调用线程
C 主线程可以调用 Atomics.wait
D Atomics.wait 同步阻塞且仅限 Worker,Atomics.waitAsync 非阻塞返回 Promise,主线程也能用 ✓ 正确答案
#

29. JSON 序列化限制(undefined、函数、Symbol、循环引用)

A JSON.stringify 可以序列化函数
B undefined/函数/Symbol 作为对象属性被跳过、数组元素转 null,循环引用则抛 TypeError ✓ 正确答案
C 循环引用会被自动截断
D Symbol 作为对象键会被序列化
#

30. ArrayBuffer 与 TypedArray 在二进制数据处理(如 WebAssembly、图片解码)

A DataView 无法指定字节序
B WASM 内存无法与 JS 共享
C 像素处理不需要 TypedArray
D WASM 线性内存可与 JS ArrayBuffer 零拷贝共享,图片像素用 Uint8ClampedArray 处理 ✓ 正确答案
#

31. structuredClone 的循环引用与不可克隆对象的错误处理

A structuredClone 支持循环引用,但对函数/DOM 节点等抛 DataCloneError,需预处理或降级 ✓ 正确答案
B structuredClone 不支持循环引用
C 克隆 DOM 节点会静默成功
D 所有 Error 类型都能被克隆
#

32. JSON.stringify 的 replacer 与 reviver 在自定义序列化与日期对象的应用

A Date 序列化后解析回来仍是 Date 对象
B reviver 在序列化阶段执行
C replacer 控制输出(脱敏/改写),reviver 在解析时重建类型(如还原 Date),二者应对称设计 ✓ 正确答案
D replacer 数组形式可以包含任意字段
#

33. FileReader.readAsArrayBuffer 一次性读取与 File.stream() 流式读取在大文件场景的内存与体验取舍

A 大文件一次性读取不会造成内存压力
B File.stream() 也会一次性读入全部数据
C FileReader 一次性读入整块内存,File.stream() 分块读取内存恒定,大文件应优先流式 ✓ 正确答案
D 流式读取无法处理大文件
#

34. atob/btoa 处理非 Latin1 字符(中文/emoji)的陷阱与 Uint8Array.prototype.fromBase64/toBase64(Base64 方法提案)的现代方案

A 现代 Base64 API 与字节无关
B btoa 可以正确处理中文
C atob 解码中文不会乱码
D btoa 只接受 Latin1 范围字符,中文/emoji 需先转 UTF-8 字节再编码,Uint8Array 的 toBase64 原生支持 ✓ 正确答案
#

35. MessagePack、Protobuf、CBOR 相比 JSON 在前端序列化体积与性能的取舍

A 二进制格式体积一定比 JSON 大
B 二进制格式省去键名与文本冗余体积更小,但 Protobuf 需 schema 治理、JSON 引擎原生解析更快 ✓ 正确答案
C JSON.parse 比任何二进制解码都慢
D gzip 后二进制格式优势一定会扩大
#

36. Web Streams 在大文件分片读取与上传(Fetch + ReadableStream)

A 流式上传必须把整个文件读入内存
B 流式请求体不需要 duplex 设置
C 分片上传无法支持重试
D File.stream() 可作 fetch 请求体(需 duplex:"half"),配合 slice 分片并发与 AbortController 取消 ✓ 正确答案
#

37. 二进制帧(Binary Frame)在 WebSocket 传输高性能数据的应用

A 二进制帧适合音视频等非文本数据,需自定义帧结构(类型/长度/校验)并监测 bufferedAmount 防内存膨胀 ✓ 正确答案
B 二进制帧与文本帧没有区别
C 粘包问题只存在于 TCP,WebSocket 不会遇到
D bufferedAmount 无需关注
#

38. Set/Map 的迭代顺序与对象键枚举顺序在不可变更新的一致性工程价值

A 对象整数键按字符串插入序排列
B 对象键枚举顺序完全随机
C Map 的迭代顺序与插入无关
D Map/Set 按插入序迭代,对象整数键升序在前其余按插入序,保证序列化与渲染顺序稳定 ✓ 正确答案
#

39. Array.prototype.toSorted/toReversed/toSpliced(ES2023)的非破坏性更新

A 非破坏性方法不产生拷贝开销
B toSorted 会原地修改原数组
C with 方法可以替换多个索引
D toSorted/toReversed/toSpliced 返回新数组且不修改原数组,适合函数式更新与响应式状态 ✓ 正确答案
#

40. findLast/findLastIndex 在反向查找的工程价值

A findLast 返回 undefined 时一定表示无匹配
B findLast 总是从开头查找
C findLast/findLastIndex 从末尾向前查找,表达"最近一次"语义,避免反转数组的开销与副作用 ✓ 正确答案
D findLastIndex 无匹配时返回 0
#

41. pipe 数据链的中间值可读性治理

A 用具名函数、tap 观测点、拆分子管道与类型标注可系统性治理长 pipe 链的可读性 ✓ 正确答案
B 匿名箭头函数组合的管道最易调试
C 长管道无法插入观测
D 管道拆分会破坏数据流
#

42. 引用透明与时间/随机数破坏纯函数的关系

A 引用透明要求表达式可被结果替换,时间/随机数输出不可预测会破坏它,可通过依赖注入隔离 ✓ 正确答案
B Date.now 是确定性的纯函数
C Math.random 不破坏引用透明
D 纯函数可以依赖全局时钟
#

43. WebAssembly Memory 与 JavaScript ArrayBuffer 的互操作工程实践

A WASM 内存只能通过函数参数传递数据
B WASM 内存的 buffer 可直接用 TypedArray 视图零拷贝读写,但 grow 后旧 buffer 被 detach 需重建视图 ✓ 正确答案
C memory.grow 后旧 buffer 仍然有效
D 视图可以长期缓存不失效
#

44. CompressionStream/DecompressionStream 在请求体与响应的压缩应用

A 解压错误不会影响管道
B 浏览器自动压缩所有请求体
C 压缩级别可以任意配置
D Compression/DecompressionStream 可接入 fetch 管道做流式压缩与解压,用于 HTTP 协商压缩之外的场景 ✓ 正确答案
#

45. JSON.parse 的 reviver 在日期与自定义类型的反序列化工程实践

A 日期解析后自动变为 Date 对象
B reviver 在序列化阶段执行
C reviver 无法删除字段
D reviver 自底向上逐字段回调,配合类型标记可还原 Date/自定义类型,需与 replacer 对称设计 ✓ 正确答案
#

46. BigInt 在高精度计算(金融、ID)的序列化(JSON.stringify)边界

A 大整数用 Number 传输不会丢精度
B JSON.stringify 会把 BigInt 自动转为数字
C JSON.parse 支持 1n 语法
D JSON.stringify 遇 BigInt 抛 TypeError,工程上统一用字符串协议配合 replacer/reviver 还原 ✓ 正确答案
#

47. ReadableStreamDefaultController 在背压(backpressure)处理的工程取舍

A 流取消时无需清理源资源
B 背压由消费者主动 push 实现
C 队列可以无限增长无需治理
D desiredSize 反映队列水位,pull 按需补充数据形成背压,消费者慢时源暂停生产 ✓ 正确答案
#

48. 二进制协议在 WebTransport(HTTP/3)相较 WebSocket 的工程性能优势

A 数据报保证按序送达
B WebTransport 与 WebSocket 通道模型相同
C WebTransport 支持多路复用流与无序数据报,消除 WebSocket 的队头阻塞并降低实时延迟 ✓ 正确答案
D WebTransport 在所有浏览器广泛可用