Service Worker 的 install 事件中预缓存失败会发生什么,如何保证安装原子性?
围绕“Service Worker 的 install 事件中预缓存失败会发生什么,如何保证安装原子性”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释 waitUntil 失败导致安装中止的机制与降级方案。
缓存专题面试题第 5 页,显示第 201–250 题,共找到 355 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“Service Worker 的 install 事件中预缓存失败会发生什么,如何保证安装原子性”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释 waitUntil 失败导致安装中止的机制与降级方案。
围绕“同一站点不同 scope 注册多个 Service Worker 会怎样,如何避免互相覆盖缓存”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释 scope 匹配优先级与缓存命名隔离的必要性,不讲生命周期。
围绕“Network First 策略在什么业务场景下优于 Cache First,网络超时时应如何兜底”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明网络优先的时效性收益与超时回退设计。
围绕“离线状态下 API 数据请求应该如何设计回退,返回缓存数据和返回错误提示如何取舍”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕权衡陈旧数据展示与明确离线提示的产品决策。
围绕“navigator.onLine 和 online/offline 事件为什么不足以判断真实连通性,离线功能应如何兜”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖指出该 API 只反映网络接口状态及以请求失败为准的兜底设计,不讲 SW 缓存。
围绕“跨域 no-cors 请求缓存得到的 opaque response 有什么问题,如何影响存储配额统计”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明不透明响应无法校验状态与配额放大的风险,不讲 CORS 细节。
围绕“预缓存(precaching)和运行时缓存(runtime caching)的区别是什么,各自适合缓存什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖按安装时机划分两类缓存的资源归属。
围绕“渐进增强视角下,浏览器不支持 Service Worker 时站点应如何保证功能可用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明特性检测与核心功能不依赖 SW 的分层设计,不讲具体缓存实现。
围绕“为什么建议对 Service Worker 脚本本身设置很短的 HTTP 缓存或使用 no-cache”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释脚本被长缓存导致更新延迟的机制,不讲 SW 内部资源缓存。
围绕“Stale-While-Revalidate 策略如何实现,为什么它适合列表页这类场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明先返缓存再后台更新的流程与一致性代价。
围绕“PWA 如何用 StorageManager.estimate() 监控缓存占用,浏览器在什么情况下会主动清除站点存”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明配额查询与 LRU 驱逐策略及 persistent 申请,不讲缓存清理代码。
围绕“什么时候应该注销 Service Worker,unregister() 之后缓存会一起清除吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明注销的适用场景及缓存需手动清除的事实,不讲注册流程。
围绕“部署了新代码但用户仍看到旧页面,从 Service Worker 角度列出最可能的原因清单”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕系统性列举缓存名未变、waiting 未激活、HTTP 缓存脚本等原因,不深入单点。
围绕“PWA 缓存如何设计版本化命名,保证发布新版本时旧缓存被安全替换”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖给出命名约定与 activate 清理配合的发布流程,不讲具体策略选择。
围绕“文档删除后,答案缓存、查询日志、微调数据集中残留的该文档内容如何处理”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须列出缓存失效、日志脱敏、派生数据集再生成三类派生数据的清理责任。
围绕“知识库增量更新时,如何用最少成本判断一个源文档自上次同步后是否真的变了”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须比较 mtime、ETag、内容哈希三级检测的可靠性递进关系。
围绕“员工离职或调岗后,其在知识库中可见文档的权限变更多快必须生效,技术上如何保证”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明元数据即时过滤优于重建索引的原因及缓存失效处理。
围绕“React 官方为什么把「在 useEffect 里获取服务器数据并存入 state」列为需要框架或路由层介入的场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出缺少缓存去重、瀑布、竞态与生命周期耦合这些固有缺陷,不展开竞态修复代码。
围绕“React 中切换筛选条件快速触发多次 effect 请求时,旧响应后到导致界面显示过期数据,官方推荐的解法是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 cleanup 中置 ignore 标志使过期响应被丢弃的机制,以及为何不能依赖请求顺序假设,不展开缓存方案。
围绕“为什么说把接口返回的数据直接塞进 React Context 并不等于拥有了服务器数据缓存”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 Context 只是传值通道、没有失效、去重、重取与 staleness 管理,所以缓存职责应交给专门层,不展开具体库对比。
围绕“React 面试中如何区分「服务器状态」与「客户端状态」,这一分类为什么影响状态管理选型”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出服务器状态有远端权威源、需要缓存失效与重取、不属于组件私有这一分类依据,不展开某个缓存库 API。
围绕“为什么 React 的 useSyncExternalStore 要求 getSnapshot 多次调用必须返回缓存”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出返回新对象会被判定为数据已变而触发无限重渲染循环,不展开 subscribe 的触发时机。
解释内联对象怎样造成 Context value 身份变化,用完整 JSX 示例区分无关计数更新与真实主题更新,并说明 useMemo 依赖、函数缓存和 React Compiler 的适用边界。
解释 Object.is 与组件内对象、函数引用的关系,按配置构造位置、真正的响应式字段和缓存边界整理减少无关重同步的方法,避免删依赖或滥用 JSON.stringify。
区分渲染阶段的可变引用读写与可预测初始化,用点击缓存示例说明事件读写、state 展示和跨渲染容器,并解释资源创建的限制。
围绕“React 的 useMemo 能解决哪两类问题,为什么不能把它当作结果一定会被缓存的语义保证”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确跳过昂贵计算与保持引用稳定配合 memo 两类用途、以及 React 可能丢弃缓存需按性能优化而非正确性依赖使用。
围绕“为什么 useSyncExternalStore 的 getSnapshot 必须返回缓存的值,而不能每次新建一个对”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须诊断每次返回新引用会被判定为 store 已变化从而触发无限重渲染。
围绕“useCallback 解决了什么问题,它的返回值在渲染之间如何保持”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出按依赖缓存函数实例保持引用稳定。
围绕“useCallback 的依赖数组写错为什么会产生读取到旧 state 的过期回调”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出缓存函数闭包捕获了旧值这一机制与修复方式。
围绕“React 实验性 API useEffectEvent 相比 useCallback 解决稳定回调问题有什么不同思”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须对比『非响应式事件函数读取最新值』与『依赖数组缓存引用』两种思路,并注明实验性版本状态。
围绕“useMemo 依赖数组漏写或多写会有什么症状,如何保证依赖正确”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分漏依赖导致陈旧值与多依赖导致缓存失效两类症状。
解释 useMemo 在开发编辑、初次挂载挂起等情况下可能丢弃缓存,用房间连接示例说明如何把资源创建与清理放在 Effect,并区分缓存、state、ref 和重新挂载后的生命周期。
用按标签筛选条目的示例解释 useMemo 何时计算、如何按 Object.is 比较依赖,说明同引用突变、新数组重算、A 到 B 再到 A,以及纯计算与开发严格模式的边界。
通过报价与确认按钮解释 useMemo 缓存计算结果、useCallback 缓存函数引用的区别,展示完整依赖和旧闭包边界,并说明函数创建、函数调用、请求去重与异步缓存并不是同一件事。
围绕“React Router v7 中,如何实现 loader 的数据缓存以减少重复请求”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明通过自定义 cache key + Context API 手动管理,不能依赖框架内置缓存。
围绕“React 的 cache() 函数在服务端组件渲染中起什么作用,为什么组件树里多处 fetch 同一数据不会重复请”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 cache 按单次渲染对相同参数的调用去重且跨组件生效。
从公开内容、个性化数据、缓存命中和客户端交互比较 SSR 的适用边界,解释服务端计算、首字节等待、双环境约束和 hydration 成本,并给出按页面选择静态生成与客户端渲染的思路。
围绕“Redis 的 APPEND 和 GETRANGE 能实现什么字符串操作,有什么实际用途”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明追加与按区间读取的能力及日志式追加场景。
围绕“给 Redis Key 设了过期时间,为什么到期后立刻 GET 偶尔还能拿到或内存没立刻降”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明惰性删除与定期删除导致删除时机不保证精确。
围绕“Redis 对已设过期时间的 Key 再次 SET 或 EXPIRE,过期时间会怎么处理”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 SET 覆盖会清除原 TTL 而再次 EXPIRE 是替换式刷新。
围绕“Redis 的 EXPIRE 和 EXPIREAT 分别适合什么过期语义场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分相对存活时长与绝对时间点,例如会话续期与整点失效。
围绕“Redis 的 GETSET 命令适合什么场景,和先 GET 再 SET 有什么区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 GETSET 原子返回旧值并写入新值、避免竞态。
围绕“Redis 哈希能只给某个字段设过期时间吗,需要什么版本或替代方案”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 Redis 7.4 前只能整 Key 过期、7.4 起有 HEXPIRE,或改用多个字符串 Key。
围绕“Redis 哈希底层什么情况下用 listpack,什么时候转成 hashtable”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出字段数与单字段长度阈值触发转换且转换不可逆。
围绕“Redis 哈希字段数到几十万后,HGETALL 和单字段操作的开销有什么变化”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明编码转换后单字段仍 O(1) 但 HGETALL 是 O(N) 阻塞风险,应改 HSCAN。
围绕“大量小对象用 Redis 哈希聚合存比每个对象一个字符串 Key 省内存吗,为什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释小哈希走紧凑编码省去每 Key 元数据开销。
围绕“Redis 的 HINCRBY 和 HINCRBYFLOAT 在哈希字段上做计数各有什么边界”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 HINCRBY 限 64 位整数、浮点版有精度限制。
围绕“只需要 Redis 哈希中几个字段时,为什么优先 HMGET 而不是 HGETALL”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明按字段取回减少传输量且大哈希下 HGETALL 有阻塞风险。
围绕“Redis 的 HSETNX 和 HSET 在字段已存在时行为有何不同,各适合什么场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分 HSET 覆盖与 HSETNX 仅初始化,用于初始化默认值防覆盖。
围绕“Redis 用 GET 再 SET 实现计数器为什么不可靠,INCR 解决了什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明读改写两步在并发下丢失更新、INCR 服务端原子完成。