Path2D 适合缓存什么,为什么复杂图形重绘和命中检测会受益?
围绕“Path2D 适合缓存什么,为什么复杂图形重绘和命中检测会受益”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明路径对象可复用并交给 fill/stroke/isPointInPath。
程序员面试题库第 19 页,收录第 901–950 题,共 5000 道完整解析,覆盖前端、JavaScript、React、Vue、Node.js、AI Agent、网络、数据库与系统设计。
按稳定语义路径排序
围绕“Path2D 适合缓存什么,为什么复杂图形重绘和命中检测会受益”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明路径对象可复用并交给 fill/stroke/isPointInPath。
围绕“CanvasRenderingContext2D.save/restore 滥用为什么会让绘制变慢,应如何界定栈边界”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断时要说明保存的是裁剪、变换、样式等大状态且配对成本随嵌套放大。
围绕“为什么跨域图片画进 Canvas 后 getImageData 会抛错,如何合法解除污染”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断时要说明 origin-clean flag 与 crossOrigin 匿名凭证模式。
围绕“Canvas 文本排版为什么必须依赖 measureText 而不是按字符数估算换行”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确字体度量、字距、方向与 maxWidth 对宽度的影响。
本题解析HTMLCanvasElement导出的两种API机制差异:二进制Blob与Base64字符串、同步与异步、编码质量参数作用范围,以及大图工程选型与边界。
围绕“getContext('2d', { willReadFrequently:true }) 应该在什么读回模式下开启”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断时要说明该提示偏向 CPU 画布以降低重复读回成本。
围绕“navigator.clipboard.readText 读取剪贴板前应如何提示并处理空内容、权限拒绝与格式不符”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确异步拒绝分支与隐私提示。
围绕“navigator.clipboard.writeText 为什么常在非用户激活或权限被拒时失败”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断时要说明安全上下文、权限与瞬时激活要求。
围绕“用 ClipboardItem 写入 text/html 与 text/plain 时,为什么要同时提供纯文本并清洗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断时要说明富文本消费者差异与 XSS/样式污染风险。
围绕“copy/cut/paste 事件里的 event.clipboardData 与 Clipboard API 读写”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分事件内同步改本次剪贴板与异步权限 API。
围绕“拖放自定义数据用 setData 自定义 MIME 时,什么信息不该放,跨窗口读取边界是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断时要说明拖放数据受同源/会话与粘贴板语义限制且敏感信息可见。
围绕“DataTransfer.items、files、types 在读取拖入内容时分别解决什么判断”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分 kind/type 探测、文件物化与字符串数据。
围绕“HTML 拖放中为什么必须阻止 dragover 默认行为,drop 才大概率触发”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 drop 目标有效性由 dragover/dragenter 默认允许决定。
围绕“拖放交互里 effectAllowed 与 dropEffect 不一致会造成什么视觉与结果错配”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明源端声明能力与目标端实际操作的握手关系。
围绕“drop 事件拿到 FileList 后,前端应先做哪些尺寸、类型、数量校验再进入解析”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出 fail-fast 队列与可读错误反馈边界。
围绕“enumerateDevices 为什么在授权前 label 为空,拿到流后应如何刷新设备列表”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须把标签可见性与活动轨道权限绑定。
本文解释为何 File.name 与 File.lastModified 不能用于唯一键或新鲜度判断,通过同名校验和时钟修改场景说明其不可信边界,并给出基于内容哈希和服务器元数据的替代方案。
本文解释 File 与 Blob 的本质区别:File 是带文件元数据的 Blob 子类。同时说明哪些场景不能只按 Blob 处理——例如需要文件名、最后修改时间或目录相对路径时——并给出判断方法和边界。
围绕“FileReader 的 readAsText、readAsArrayBuffer、readAsDataURL 应如”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要按目标格式、编码与内存代价选型。
围绕“视频全屏应该请求 video 元素还是容器元素,iOS 行为差异为什么要单列”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断时要说明元素级全屏 API 与移动端原生控件回退。
围绕“getDisplayMedia 请求屏幕共享时,audio、surfaceSwitching、preferCurre”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明屏幕/标签页/窗口音频支持差异与选择器不可完全脚本控制。
围绕“getUserMedia 的 ideal/exact/deviceId 约束怎样设计降级,Overconstrain”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确软硬约束优先级与失败后放松约束策略。
本文解释 input accept 属性的本质是选择提示而非安全边界,给出其可被绕过的情况。说明如何在前端通过 File.type 和扩展名进行辅助校验,并强调服务端校验的必要性,以及失败时的用户提示和体验兜底。
围绕“在选清晰度前用 MediaCapabilities.decodingInfo 判断什么,不能拿它保证什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 supported/smooth/powerEfficient 是估计而非独占资源承诺。
围绕“HTMLMediaElement 的 readyState、canplay、loadeddata、canplayth”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须把元数据、首帧可播、连续播放估计映射到 UI 门槛。
围绕“<video> 的 preload=none/metadata/auto 在移动网络下应如何选择,不能假设什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 preload 是提示且浏览器可忽略。
围绕“拖动 HTMLMediaElement.currentTime 时如何用 buffered 与 seeking/se”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 TimeRanges 查询与 seeking 状态机。
围绕“MediaRecorder 选型时如何校验 MIME 支持,start(timeslice) 对 ondataava”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断时要说明容器/编码协商与分片触发时机。
围绕“MediaRecorder.stop 后为什么不能立刻用已收 Blob,还要等最后一次 dataavailable”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明异步冲刷尾部数据与 onstop 次序。
围绕“Media Source Extensions 中向 SourceBuffer appendBuffer 为什么要等”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断时要说明 updating 队列、时间轴连续性与 abort/remove 边界。
围绕“Safari 原生可播 HLS 而其他桌面浏览器常走 MSE 时,播放器封装应如何分流”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须用 canPlayType 与 MediaSource.isTypeSupported 双判定。
本文讲解 object URL 为何会占住 Blob 内存,通过大图预览实例展示未撤销时的累积过程,说明不同页面生命周期下的影响程度,并给出统一的撤销时机与判断方法。
围绕“OffscreenCanvas 什么时候该转移到 Worker,转移所有权后主线程还能做什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确长任务渲染移出主线程与 canvas 控制权一次性转移。
围绕“Permissions API query 摄像头/麦克风状态时,name 支持与 change 事件边界是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断时要说明权限名支持差异与状态只反映许可不代表设备可用。
围绕“setDragImage 自定义拖拽预览图时,图像来源和 offset 设置有哪些坑”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确图片需已加载/可见约束与热点坐标语义。
围绕“结束摄像头采集时为什么必须 stop 所有 MediaStreamTrack 而不是只移除 video.srcObj”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断时要说明轨道停止才释放硬件并触发 ended/inactive 状态。
围绕“Web Audio 中 decodeAudioData 得到 AudioBuffer 后,播放采样率与 AudioC”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确解码重采样到上下文采样率及 buffer 长度映射。
围绕“AbortController 取消一个进行中的 fetch 后,Promise 和底层网络连接分别发生什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 Promise 以 AbortError 拒绝、浏览器中止连接停止接收数据。
围绕“一个 AbortController 可以控制多个 fetch 吗,这样做有什么实际用途和注意事项”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出同一 signal 传给多个请求可批量取消(如路由切换时取消整页请求)、abort 是一次性的。
围绕“一个请求同时受用户手动取消和全局超时控制时,如何用 AbortSignal.any() 合并多个信号”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出任一信号触发即中止且 reason 可溯源。
围绕“AbortSignal.timeout() 相比手写 setTimeout 加 AbortController 有什”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出一句代码获得自动超时信号且无需手动清理定时器。
围绕“什么样的跨域 fetch 请求会触发 CORS 预检(OPTIONS)请求,如何避免不必要的预检”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出非简单方法、非 safelist 头(如 Content-Type: application/json)触发预检及简化为简单请求。
围绕“在 fetch 的 catch 中如何区分请求是被 AbortController 取消还是真的网络失败,为什么要区”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出检查 error.name === 'AbortError' 且两类错误应采取不同提示与重试策略。
围绕“fetch 的 mode 选项 cors、no-cors、same-origin 分别产生什么行为”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 no-cors 得到 opaque 响应无法读取内容这一关键陷阱。
解释 fetch credentials 的三个值 omit、same-origin、include 的行为,重点回答为什么跨域默认不带 Cookie,并说明 include 与 CORS 响应头的配合要求及常见出错点。
解释 fetch 为什么对 404、500 不 reject:Promise 只在网络层失败时拒绝,HTTP 错误状态会正常 resolve。给出检查 response.ok 或 status 并手动抛错的标准处理方式与边界。
围绕“fetch 调用 response.json() 时报错通常有哪些原因,如何健壮处理”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出响应非 JSON、空 body、body 已被消费三类原因与防御性写法。
围绕“页面即将卸载时 fetch 请求容易中断,keepalive 选项如何解决这类上报丢失问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 keepalive 让请求在页面卸载后继续发送及其 64KB 体积限制。
本题对比 fetch POST 请求中 FormData 与 JSON body 的 Content-Type 差异,强调 FormData 无需手动设置头,JSON 必须声明 application/json,并说明服务端解析依据。
围绕“fetch 遇到 3xx 重定向时 redirect 选项的 follow、error、manual 各有什么效果”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 manual 在浏览器中得到 opaqueredirect 类型的响应及其限制。