MutationObserver 的回调是按每次 DOM 变更同步触发还是批量触发,这决定了它适合和不适合什么场景?
围绕“MutationObserver 的回调是按每次 DOM 变更同步触发还是批量触发,这决定了它适合和不适合什么场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明变更记录以微任务批量投递、回调里能拿到 mutation 列表,从而得出不适合做逐次同步拦截的结论。
程序员面试题库第 21 页,收录第 1001–1050 题,共 5000 道完整解析,覆盖前端、JavaScript、React、Vue、Node.js、AI Agent、网络、数据库与系统设计。
按稳定语义路径排序
围绕“MutationObserver 的回调是按每次 DOM 变更同步触发还是批量触发,这决定了它适合和不适合什么场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明变更记录以微任务批量投递、回调里能拿到 mutation 列表,从而得出不适合做逐次同步拦截的结论。
围绕“用 PerformanceNavigationTiming 能拆解出页面加载的哪些阶段,TTFB 偏长应看其中哪几个”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要按时间轴解释 redirect、DNS、TCP、request/response、domInteractive 等字段并能定位 T。
围绕“OffscreenCanvas 解决了什么渲染瓶颈,把 canvas 绘制移进 Worker 需要满足什么前提”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明主线程渲染被 JS 阻塞时离屏 canvas 可独立绘制,以及 transferControlToOffscreen 后原 ca。
围绕“document.visibilityState 有哪几种取值,页面最小化与切到后台标签页分别进入哪个状态”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须准确列出 visible、hidden(及 prerender 的历史取值)并说明两者均触发 hidden。
围绕“beforeunload、unload、pagehide 三个事件在触发时机与可靠性上有什么区别,移动端为什么应优先”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分可取消的离开确认、卸载执行不可靠、页面隐藏含进入 bfcache 三种语义,并指出移动端常跳过 unload。
围绕“PerformancePaintTiming 提供的 first-paint 与 first-contentful-”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分任意像素首绘与首个内容(文本、图片、canvas)绘制,并能把 FCP 偏晚归因到渲染阻塞资源链上。
围绕“给 touchstart、wheel 监听加 passive:true 为什么能改善滚动流畅度,加上之后代码里不能再”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释浏览器无需等待监听器决定是否取消默认滚动即可立即合成滚动帧,以及 passive 下 preventDefault 无效。
解释浏览器预加载扫描器为何能在主解析器被同步脚本阻塞时提前请求 CSS、JS、图片:它是独立的推测扫描,只识别资源标签、不执行脚本,并说明其失效边界。
围绕“哪些 DOM 读写操作会触发回流,为什么把多次几何读取集中到写入之前能减少回流次数”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分触发布局的读取类 API 与样式写入,并给出读-写分离的批处理模式。
围绕“重绘和回流的触发条件与开销有何不同,为什么修改 color 通常比修改 width 便宜”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要按流水线位置说明回流必经布局而重绘可跳过布局、合成类变更还可跳过绘制。
围绕“requestAnimationFrame 的回调相对一次渲染更新的布局、绘制步骤在什么时候执行,为什么适合在里面读”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须定位回调发生在样式与布局计算之前、与浏览器刷新率对齐,并解释同帧内读写不会丢中间帧。
围绕“requestIdleCallback 的回调在什么时机执行,deadline.timeRemaining 与 ti”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明浏览器在帧空闲期调度、回调须按剩余时间主动让出、timeout 保证兜底执行。
围绕“监听单个元素尺寸变化为什么要用 ResizeObserver 而不是 window 的 resize 事件,它的回调”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明元素尺寸可因布局变化而非窗口变化而改变、观察粒度到元素,并注意回调在布局后绘制前可能引发循环告警。
围绕“preload、prefetch、preconnect、dns-prefetch 四种资源提示分别影响加载流程的哪个”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要按当前导航必需、未来导航可能需要、提前建连、仅 DNS 预解析区分四者,并说明 as 决定请求优先级与缓存匹配。
围绕“把一个大任务拆成多个小任务时,scheduler.yield 相比 setTimeout(0) 在恢复优先级上有什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 yield 后任务继续以接近原优先级排队的语义及其对长任务拆分响应性的意义。
本文深入解析普通、async、defer 三种 script 在下载时机、执行顺序及 DOMContentLoaded 触发上的差异,并通过具体场景和边界条件帮助判断选型。
围绕“setTimeout 嵌套调用超过一定层数后为什么最小延迟会变成 4ms,后台标签页中定时器还会被怎样节流”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明规范中嵌套层级的最小延迟钳制与后台页定时器降频(最低约 1 秒一次)两条独立规则。
围绕“为什么用 transform 和 opacity 做动画通常比修改 top/left 或 width 更流畅”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须落到三类属性分别触发布局、绘制、仅合成的流水线差异上。
围绕“View Transitions API 在 DOM 更新前后分别做了什么,为什么它能让状态切换变成平滑动画而不手写”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明浏览器捕获新旧状态快照、在回调内同步完成 DOM 更新、对两层快照做交叉过渡的机制。
围绕“实现十万条数据的虚拟列表,核心渲染策略是什么,固定行高与不定行高在实现难度上差在哪”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明只渲染可视区加缓冲项、用临时标记撑出滚动高度的核心机制,并对比不定高带来的测量与滚动定位问题。
围绕“基于 visibilitychange 事件,哪些类型的页面任务应该在页面隐藏时暂停或降级,为什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出暂停视频/动画、停止轮询、保存草稿等具体决策及对应资源理由,并说明 hidden 时 rAF 与定时器本就被节流。
围绕“VisualViewport API 与 window.innerWidth 衡量的视口有何不同,移动端弹出软键盘后”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分布局视口与 pinch 缩放/键盘遮挡后的可视视口,并说明用 resize/scroll 事件跟随可视区。
围绕“哪类计算适合移入 Web Worker,Worker 与主线程通信的 postMessage 结构化克隆会带来什么成”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出适用判定(CPU 密集、无需 DOM)并量化大数据拷贝成本、提到 Transferable 转移方案。
围绕“CSS will-change 应该什么时候声明、为什么长期挂在大量元素上反而会拖慢页面”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明它是给浏览器的优化提示、应在使用前临时添加用完移除,以及每层占用纹理内存的代价。
围绕“Cookie 的 Expires 和 Max-Age 如何决定其是会话级还是持久级”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须比较两者优先级和缺省行为。
本题说明 Cookie 三个安全属性各自的防御目标:HttpOnly 防脚本窃取、Secure 防明文传输窃听、SameSite 防跨站伪造请求,并给出真实配置场景与失效边界。
围绕“Cookie 的 Path 和 Domain 属性如何联合限定其作用域”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明子路径和子域发送规则及重复 Cookie 冲突。
围绕“Cookie 名字中的 __Host- 前缀有哪些约束”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明名称前缀覆盖 Secure/Path/Domain 条件。
围绕“SameSite=Lax 和 Strict 在实际导航中有什么不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分顶级导航与 iframe/子资源发送条件。
围绕“为什么 SameSite=None 必须配合 Secure 属性”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释现代浏览器强制要求。
围绕“Secure 属性在 localhost 或 HTTP 环境下如何使用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释现代浏览器将 localhost 视为可信源。
围绕“Cookie 大小和数量的上限是多少”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答浏览器常见限制(4096 字节、约 20 个)。
围绕“Cookie 中 Domain= 属性是否包含点号前缀对子域访问有什么影响”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释遗漏 Domain 则仅为宿主域。
围绕“Cookie、localStorage 和 IndexedDB 分别适合存储什么类型的数据”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须基于数据大小、同步/异步、结构化程度给出选择决策。
围绕“Web Locks API 如何避免多个标签页同时修改 IndexedDB”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明通过锁获取协调,而不是简单使用 transaction。
围绕“如何用 BroadcastChannel 实现 localStorage 的跨标签页同步”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出监听 storage 事件之外的另一方案,并对比。
围绕“IndexedDB 中存储 Blob 和 ArrayBuffer 有什么不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确序列化复制与内存表现。
围绕“IndexedDB 事务成功的标志是 oncomplete、onsuccess 还是 onerror”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分事务级事件和请求级事件。
围绕“IndexedDB 如何创建复合索引并用其查询”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须使用索引数组作为 keyPath 并说明查询顺序。
围绕“什么时候应该用 IndexedDB 游标而不是直接用 get 或 index”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出范围扫描和分页场景。
围绕“IndexedDB 删除数据库时无法删除会触发什么错误”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出可能因连接未关闭而触发 blocked。
围绕“IndexedDB 中 getAll 和 getAllKeys 有什么区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确返回值包含值还是键。
围绕“IndexedDB 在某些隐私浏览模式下不可用,如何优雅降级”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出检测和备选内存存储方案。
围绕“IDBKeyRange 可以在哪些查询场景下使用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出 between/only/outside 等边界查询,不覆盖游标方向。
围绕“IndexedDB 的主键和索引有什么区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确两者在查询和约束上的差别。
围绕“IndexedDB 中 autoIncrement 和 keyPath 能同时使用吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出可生成 key 但不作为 keyPath 的用法。
围绕“如何用 IndexedDB 实现对对象存储的增删改查”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分 add 和 put 的不同。
围绕“IndexedDB 中如何按条件批量删除旧数据”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须使用游标遍历并调用 delete。
围绕“如何将 IndexedDB 的请求式 API 封装成 Promise 形式”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须描述转换 IDBRequest 事件为 resolve/reject 的方法,不实现完整库。
围绕“IndexedDB 支持存储哪些类型的数据”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须列出 structured clone 支持范围(Blob、ArrayBuffer、对象等)及不支持的(函数、Symbol),不深入。