在支持流式请求体的浏览器中用 fetch 上传 ReadableStream,为什么必须设置 duplex: 'half'(Chrome 105+)?
围绕“在支持流式请求体的浏览器中用 fetch 上传 ReadableStream,为什么必须设置 duplex: 'ha”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出流式上传要求 HTTP/2 或 HTTP/3 且需显式声明 duplex 的兼容性约束。
程序员面试题库第 20 页,收录第 951–1000 题,共 5000 道完整解析,覆盖前端、JavaScript、React、Vue、Node.js、AI Agent、网络、数据库与系统设计。
按稳定语义路径排序
围绕“在支持流式请求体的浏览器中用 fetch 上传 ReadableStream,为什么必须设置 duplex: 'ha”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出流式上传要求 HTTP/2 或 HTTP/3 且需显式声明 duplex 的兼容性约束。
解释 Response body 的流式单次消费特性,说明 bodyUsed 的判定与克隆的时机限制。通过实际场景展示如何用 clone 并行处理同一响应,并指出克隆前必须未读取,且克隆后每个对象只能读一次。
fetch没有timeout接口,超时需要借助AbortController加setTimeout实现。本文讲解signal如何生效、定时器清理的必要性、AbortError的判别,并用慢接口场景说明使用方式。
本文说明 fetch 无上传进度事件的原因,对比 XHR upload.progress 和流式字节统计的适用边界,指导进度条实现技术选型。
对比 fetch 与 XMLHttpRequest 的四个实质差异:Promise 化、HTTP 错误不 reject、上传进度支持、取消机制,并给出按上传进度、错误处理、取消需求选型的可操作判断。
围绕“HTTP/1.1 下浏览器对同一域名的并发连接数限制如何影响 SSE 和轮询,HTTP/2 如何缓解”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出每域约 6 连接、长连接占满会阻塞普通请求、HTTP/2 多路复用可共用一个连接。
围绕“后端以 NDJSON(逐行 JSON)流式返回数据时,前端如何边接收边解析而不是等全部完成”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出缓冲未完整行、按换行切分、最后一块收尾的解析逻辑。
围绕“如何用 fetch 的 response.body.getReader() 逐块读取大文件下载内容并显示进度”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 reader.read() 循环、done 标志与用 Content-Length 计算进度。
围绕“前端不再需要 SSE 推送时为什么要显式调用 EventSource.close(),服务端如何感知断开”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 close 停止自动重连并释放连接、服务端通过连接关闭事件清理订阅资源。
围绕“SSE 的 text/event-stream 数据格式长什么样,EventSource 如何接收消息”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 data: 行、空行分隔消息的格式与 onmessage 接收。
围绕“EventSource 有哪些硬性限制,为什么自定义请求头或 POST 请求做不到”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出只支持 GET、无法自定义请求头、可用 fetch 流读取替代的边界。
围绕“提前终止 fetch 的流读取时,reader.cancel() 和直接丢弃 reader 有什么区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 cancel 会向源头发出取消信号并释放网络资源、仅丢弃 reader 连接仍挂着。
围绕“分块读取流时直接拼接 Uint8Array 转字符串为什么会乱码,TextDecoder 流式解码如何解决”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出多字节字符可能跨块被截断、TextDecoder 的 stream 选项保留不完整字节。
围绕“TransformStream 与 pipeThrough 在 fetch 响应处理中适合解决什么问题,举一个具体场”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出在流经过时增量转换数据(如解压、解密、解析)而避免整段缓存的价值。
围绕“高频发送 WebSocket 消息时为什么需要关注 bufferedAmount,如何处理发送背压”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 bufferedAmount 反映未发送字节数、超过阈值应暂停或降频发送避免内存膨胀。
围绕“WebSocket 收发二进制数据时 binaryType 选 blob 还是 arraybuffer,依据是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 arraybuffer 适合立即处理、blob 适合大文件与流式存储的取舍。
围绕“WebSocket 关闭连接时 close(code, reason) 的状态码怎么选,1000 与 1006 有什”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 1000 正常关闭、1006 异常断开无法手动触发这一诊断价值。
围绕“为什么 WebSocket 的 error 事件几乎不携带具体错误信息,实际诊断应该看什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出出于安全规范 error 是通用事件、应结合 close 事件码与 wasClean 及网络面板诊断。
围绕“WebSocket 建立连接时的 HTTP 升级握手过程是怎样的,101 状态码代表什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 Upgrade 头、Sec-WebSocket-Key/Accept 校验与 101 Switching Protocols 。
围绕“WebSocket 的 open、message、error、close 事件与 readyState 在连接生命周”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出四个 readyState 值与事件触发顺序、必须在 open 后才能 send 的判断。
围绕“WebSocket 消息本身没有送达确认和重传机制,需要可靠投递时应用层应怎么设计”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出序号加 ACK、超时重发、断线后增量拉取的典型设计。
围绕“设计 WebSocket 客户端的重连与心跳机制时需要考虑哪些要点”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出指数退避重连、心跳检测半开连接、区分主动关闭不重建三个要点。
围绕“WebSocket 构造函数的第二个参数(子协议)起什么作用,协商失败会怎样”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出客户端列出支持的子协议、服务端选一个返回、不匹配时行为取决于服务端实现。
围绕“实时推送场景下 WebSocket 与 SSE 如何选型,各自的决定性优势是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出双向通信需求选 WebSocket、纯服务端推送且要自动重连与 HTTP 友好选 SSE 的决策依据。
围绕“调用 XMLHttpRequest 的 abort() 后,readyState、事件和该对象还能复用吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 abort 后 readyState 归零、触发 abort 事件、对象可重新 open 复用。
围绕“XMLHttpRequest 的 readyState 从 0 到 4 各代表什么阶段,onreadystatech”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出五个状态含义及 onload 只在完整成功时触发而 readyState 4 可能对应 HTTP 错误。
围绕“XMLHttpRequest 的 responseType 有哪些取值,下载二进制文件时应该选什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 arraybuffer 与 blob 在二进制下载中的取舍及 text/json 默认行为。
围绕“为什么主线程上的同步 XMLHttpRequest 被废弃并应避免使用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出同步请求冻结主线程 UI 与事件循环、浏览器已计划移除支持。
围绕“XMLHttpRequest 的 timeout 属性与 ontimeout 事件如何工作,与手动 setTimeo”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出原生 timeout 从 send 起计时并自动中止触发 ontimeout,无需手动清理定时器。
围绕“XMLHttpRequest 如何分别监听上传进度和下载进度,两个 progress 事件挂在哪个对象上”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出上传进度挂在 xhr.upload、下载进度挂在 xhr 本身及 e.lengthComputable 判断。
围绕“什么情况下页面能进入往返缓存(bfcache),pageshow 事件的 persisted 属性如何帮助处理恢复逻”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 bfcache 让页面整体冻结恢复而非重新加载、监听 unload 等会使其失效,并用 persisted 区分是否从缓存恢复。
围绕“Element.checkVisibility 与用 offsetParent 或 getClientRects 判”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明它统一检查 display、visibility、content-visibility 等多种不可见来源及 opacity 等选。
围绕“clientWidth、offsetWidth、scrollWidth 三者分别包含哪些部分,判断元素是否出现溢出该”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须用边框、内边距、滚动内容三个维度区分三者构成,并给出溢出判断的组合。
围绕“content-visibility:auto 如何跳过屏外内容的布局与绘制,它对滚动条和锚点跳转有什么副作用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明浏览器用临时标记尺寸延迟渲染屏外子树的机制与 contain-intrinsic-size 的配合。
围绕“浏览器从收到 HTML 字节到首屏像素的关键渲染路径包含哪些阶段,每个阶段的输入输出是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要按顺序说明解析、样式计算、布局、分层、绘制、栅格化、合成各阶段的产物与依赖。
围绕“为什么外部样式表会阻塞首次渲染,而内联脚本必须等待之前的 CSSOM 构建完成”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释渲染树依赖完整 CSSOM、脚本可能读取计算样式故须等待样式表这两条阻塞链。
围绕“CSS contain 属性的 layout、paint、size 等取值如何让浏览器缩小一次样式变更的重算范围”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 containment 告诉浏览器子树与外部互不影响从而限制回流/重绘边界,且 size 需给定尺寸的前提。
围绕“display:none、visibility:hidden、opacity:0 三种隐藏方式在布局、绘制、命中测试”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须逐维度对比是否占布局空间、是否参与绘制、是否响应事件、过渡动画可用性。
本题解析 document.readyState 的三种值与页面加载阶段的关系:loading 对应当前 HTML 解析未完成,interactive 对应 HTML 解析完成但子资源未完成,complete 对应所有子资源加载完成。并说明利用 readystatechange 替代 DOMContentLoaded 或 load 的用法。
本文解释 DOMContentLoaded 与 window.load 事件等待资源的区别,指出 DOMContentLoaded 不等待图片等子资源,load 事件才代表全部资源完成,并提供具体场景和边界。
围绕“@font-face 的 font-display 各取值如何控制字体加载期间的文本渲染,swap 与 option”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要按阻塞期/交换期模型解释 auto、block、swap、fallback、optional 的行为差异。
围绕“什么是强制同步布局,在循环里交替写样式和读 offsetHeight 会造成什么后果、如何定位这类问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释循环读写使浏览器每轮被迫提前布局的开销特征,以及用 Performance 面板识别长 Layout 的思路。
围绕“以 60Hz 刷新为例,一次渲染帧的预算大约是多少,rAF 回调里的长任务为什么直接表现为掉帧”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须把刷新周期、回调耗时、后续布局绘制时间放进同一预算分析,并说明超出预算的表现。
围绕“getBoundingClientRect 与 offsetTop/offsetWidth 在参考系、小数精度和 t”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须对比视口坐标系与 offsetParent 坐标系、返回值是否含缩放变换、是否为整数。
围绕“页面里的 iframe 会怎样影响父页面 window load 事件的触发,嵌入慢第三方页面时有哪些隔离手段”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 iframe 子资源计入父页面 load 等待,并给出动态注入、lazy 属性等隔离思路。
围绕“img 标签的 loading=lazy 与 decoding=async 分别推迟什么工作,两者对首屏大图是否都合”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分网络加载延迟与解码移出主线程两件事,并指出首屏关键图不应 lazy 的边界。
围绕“IntersectionObserver 的 root、rootMargin、threshold 各控制什么,thr”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须讲清观察区域由 root 加 rootMargin 定义、回调按可见比例跨越阈值档位触发。
围绕“做元素可见性检测时,IntersectionObserver 相比 scroll 事件里调 getBoundingC”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须指出观测在浏览器合成/空闲侧异步回调、避免主线程每帧强制布局读取,且能跨 iframe 视口判定。
围绕“页面合成层过多会导致什么问题,排查层数量异常时应该看哪些信号”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明层数与纹理内存、栅格化耗时、层间合成开销的关系,并给出减少无意义提升的思路。
围绕“如何用 PerformanceLongTaskTiming 监测页面长任务,50ms 阈值是怎么来的、attribu”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出 PerformanceObserver 监听 longtask 的接入方式、阈值来源及归因只能到任务容器级别的限制。