为什么按行遍历二维数组比按列遍历快,缓存局部性如何影响程序性能?
围绕“为什么按行遍历二维数组比按列遍历快,缓存局部性如何影响程序性能”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 cache line 预取与空间局部性原理。
性能优化专题面试题第 4 页,显示第 151–200 题,共找到 340 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“为什么按行遍历二维数组比按列遍历快,缓存局部性如何影响程序性能”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 cache line 预取与空间局部性原理。
围绕“为什么 fork 一个大内存进程通常很快,什么情况下 fork 会变慢”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确复制页表而非页帧的成本模型及大页表场景。
围绕“大页(Huge Page)为什么能提升数据库等应用的性能”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确减少页表项与 TLB miss 的机制及适用负载。
围绕“次缺页和主缺页有什么区别,如何用 minflt/majflt 判断程序瓶颈”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确是否需要磁盘 I/O 这一判定标准及排查含义。
围绕“为什么频繁上下文切换会降低性能,如何在压测中观测”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出 TLB/缓存失效与内核开销两类成本及观测工具。
围绕“CPU 亲和性是什么,绑核在什么场景能提升性能”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明缓存局部性收益与负载不均风险。
围绕“select、poll、epoll 在 fd 数量增长时性能差异的根源是什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要聚焦 O(n) 拷贝遍历与就绪事件回调模型的差异。
围绕“本机通信选 Unix domain socket 还是 TCP loopback,性能与功能差在哪”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须比较协议栈开销、文件描述符传递与权限控制。
围绕“PostgreSQL 中 DEFERRABLE 约束在什么场景下需要,推迟到提交时检查有什么代价”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确环形外键与批量插入乱序场景的用法及延迟检查对性能与触发时机的影响。
围绕“PostgreSQL 外键的 ON DELETE CASCADE 与 ON DELETE SET NULL 该如何选”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须基于父子数据生命周期归属给出选择标准并提到级联对大表删除的锁与性能影响。
围绕“PostgreSQL 中更新 jsonb 大文档的一个小字段为什么可能很慢,如何缓解”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释 jsonb 不可原地更新导致整行重写与 TOAST 影响,并给出拆列、拆表或控制文档大小的对策。
围绕“PostgreSQL 中 json 与 jsonb 两种类型的存储和处理差异是什么,为什么生产上通常选 jsonb”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确文本原样存储与二进制分解存储的差异及其对键顺序、重复键、索引支持和查询性能的影响。
围绕“PostgreSQL 分区表能否挂载外部表作为分区,这种混合分区适合什么场景”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 FDW 外部表可作分区的可行性及查询性能与约束保证的损失。
围绕“Lighthouse 的 PWA 审计检查哪些离线相关项,常见不通过的原因有哪些”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕列举离线 200 响应、manifest、SW 注册等检查点与失败原因,不讲性能指标。
围绕“多租户知识库中,权限过滤应该放在向量检索之前、之中还是之后”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须对比预过滤、索引内过滤、后过滤三方案在召回数量正确性与性能上的差异。
从当前值的权威来源比较受控与非受控表单,说明实时联动、提交读取、外部重置和性能取舍,避免把非受控误解为没有状态,或认为受控模式一定更慢。
围绕“React 表单的校验应该在输入时、失焦时还是提交时触发,如何为不同字段选择时机”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要按错误打扰程度与性能给出分字段的时机策略。
围绕“React 状态提升过度会带来什么问题,如何判断状态应该就近放置”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明过度提升导致无关组件重渲染和 props 臃肿,并给出就近放置的判据。
围绕“用 useReducer 加 Context 复用状态逻辑时,为什么常把 state 和 dispatch 拆成两个”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确只消费 dispatch 的组件可跳过 state 变化引起的重渲染这一优化动机。
围绕“React 的 useMemo 能解决哪两类问题,为什么不能把它当作结果一定会被缓存的语义保证”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确跳过昂贵计算与保持引用稳定配合 memo 两类用途、以及 React 可能丢弃缓存需按性能优化而非正确性依赖使用。
围绕“React 并发渲染中『渲染可中断』具体指什么,中断后工作会被浪费吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出渲染可在浏览器空闲分片执行、可丢弃重来。
围绕“用 React DevTools Profiler 的火焰图和排序图如何定位最耗时的组件”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出按提交录制、按渲染耗时排序定位的流程。
围绕“如何诊断一个组件发生了本不该发生的重渲染,根因通常有哪些”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出 props 引用变化、父级重渲染、context 变化三类根因的排查思路。
通过候选人列表说明 React.memo 自定义比较器需要覆盖全部输出与事件行为,解释函数 prop 导致旧闭包的风险、不可变数据前提,以及有界逐项比较和深比较的成本取舍。
解释内联对象与箭头函数每轮产生新引用的原因,用筛选工具栏示例展示 useMemo 和 useCallback 的完整依赖,并讨论减少 props、移动对象创建位置和避免空依赖闭包错误。
用父组件计数与子组件成绩卡的示例解释 React.memo 如何逐项比较 props,区分父级更新、本地状态、Context 和重新挂载,并说明渲染次数为什么不能成为业务正确性的条件。
对照函数组件与类组件解释 memo 和 PureComponent 的比较范围,使用独立展开状态演示自身更新,说明 shouldComponentUpdate 与 arePropsEqual 返回值方向,以及迁移时的 state 合并差异。
从频繁变化的输入、便宜的子树、深比较和宽 Context 订阅分析 React.memo 无收益的原因,给出可复现的性能对照步骤,区分渲染次数减少与用户交互真正变快。
围绕“React 如何决定多个待处理更新的先后顺序,车道优先级模型解决什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出按更新来源分优先级、高优可抢占低优的调度思路。
围绕“React Profiler 组件如何包裹子树,onRender 回调能拿到哪些指标”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 id/phase/actualDuration 等回调字段含义。
围绕“Profiler 报告的 actualDuration 与 baseDuration 差异说明什么优化机会”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出实际耗时与无 memo 全量耗时对比反映 memo 收益。
围绕“为什么生产环境默认拿不到 React Profiler 数据, profiling 构建有什么开销”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出生产构建移除 profiling 能力及其原因与按需开启的代价。
围绕“为什么并发渲染要求组件渲染必须是纯函数,副作用应该放在哪里”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出渲染可能被中断重放导致副作用重复执行。
围绕“React 的 render 阶段和 commit 阶段分别做什么,对性能优化有什么意义”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分纯计算与 DOM 提交两个阶段及其对中断和副作用放置的影响。
围绕“startTransition 标记的非紧急更新在调度上有什么不同的行为”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出被标记的更新可被打断、让位给紧急更新。
围绕“并发渲染下直接订阅外部 store 为什么会出现 tearing,useSyncExternalStore 如何解决”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出中断期间外部值变化导致同次渲染读到不一致值的问题及 API 的一致快照保证。
围绕“React 19 中 startTransition 接受 async 函数(Action)后与 React 18 ”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须对比 React 19 异步 Action 自动管理 pending/错误与 React 18 只接受同步作用域的差异。
围绕“为什么不能把受控输入框的 value 更新包在 startTransition 里”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出输入是受控同步渲染、延迟会导致打字卡顿/丢字符。
围绕“为什么 transition 不能减少渲染的总工作量,什么场景用它没有收益”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 transition 只改变优先级和可中断性,并给出真正耗时在计算本身时的无效场景。
围绕“transition 与 Suspense 配合时如何避免已显示内容被 fallback 骨架屏替换”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 transition 让已有内容停留直到新数据就绪这一行为。
围绕“用 transition 优化搜索输入与用防抖优化有什么本质区别”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出 transition 不延迟更新而是降低优先级、仍每次响应。
围绕“优化慢列表渲染时,useTransition 和 useDeferredValue 应该如何选择”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出能控制 setState 入口用 transition、只能拿到值用 deferredValue 的判断标准。
围绕“把每次渲染都新建的内联函数放进 useEffect 依赖数组会导致什么问题,如何修复”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出函数引用变化触发 effect 反复执行的症状及 useCallback/移入 effect 两种修法。
围绕“为什么只用 useCallback 而子组件没有 memo,仍然阻止不了子组件重渲染”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出父组件重渲染本身就会重渲染子组件这一前提。
围绕“useCallback 解决了什么问题,它的返回值在渲染之间如何保持”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出按依赖缓存函数实例保持引用稳定。
围绕“useCallback 的依赖数组写错为什么会产生读取到旧 state 的过期回调”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出缓存函数闭包捕获了旧值这一机制与修复方式。
围绕“useDeferredValue 在组件首次渲染时是否会产生延迟效果”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出初始渲染 deferredValue 等于原值、无延迟行为这一边界。
围绕“为什么 useDeferredValue 通常要和 React.memo 配合才能真正看到性能收益”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出延迟重渲染需要子树在紧急渲染中可被跳过的前提。
围绕“useDeferredValue 返回的滞后值在渲染过程中经历哪两个阶段”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出先以旧值渲染、后台再以新值重渲染的过程。
围绕“使用 useDeferredValue 时如何判断并提示用户当前展示的是过期内容”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出比较原值与 deferredValue 判断过期并做视觉降级。