# 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 在所有浏览器广泛可用