如果手写最小 Vue 响应式,activeEffect、targetMap、dep 三个结构分别解决什么问题?
围绕“如果手写最小 Vue 响应式,activeEffect、targetMap、dep 三个结构分别解决什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须定位当前执行者、对象到键到依赖集合的索引、依赖集合去重;不实现 scheduler、computed 或 ref。
程序员面试题库第 96 页,收录第 4751–4800 题,共 5000 道完整解析,覆盖前端、JavaScript、React、Vue、Node.js、AI Agent、网络、数据库与系统设计。
按稳定语义路径排序
围绕“如果手写最小 Vue 响应式,activeEffect、targetMap、dep 三个结构分别解决什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须定位当前执行者、对象到键到依赖集合的索引、依赖集合去重;不实现 scheduler、computed 或 ref。
围绕“多个 Vue 组合式函数共享同一个 effectScope 时,dispose 一次会怎样影响其中 computed”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断时要说明作用域统一回收其内 effects/computed 的依赖与缓存,适合插件/商店边界。
围绕“Vue 触发更新前如何判断值真的变了,NaN 与 +0/-0 这类边界为什么需要 hasChanged 语义”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确基于 Object.is 的变化检测避免 NaN 恒不等和零值符号误判。
围绕“对 Vue 的 reactive 对象执行 JSON.stringify 得到的是实时视图还是快照,为什么不能用它替”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确序列化在当次读取求值并生成普通字符串快照,不会维持依赖。
围绕“Vue 3 中给已创建的 reactive 对象 later 添加新键为什么会触发更新,而同类代码在 Vue 2 常”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 Proxy 可拦截未知键 set/defineProperty,Vue 2 需预先观测已有键。
围绕“Vue 3 的 reactive 包 Map/Set 时,读取 size、遍历和增删元素分别会建立或触发哪些依赖”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须区分键依赖、迭代依赖与 size 依赖在 add/delete/clear 下的触发。
围绕“什么时候应把第三方实例、DOM 节点或不可变配置放进 Vue 的 markRaw,而不是 reactive”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确跳过代理可避免内部槽位/循环引用/性能问题且失去响应式。
围绕“Vue 组合式函数要同时接受 3、ref(3)、() => 3 时,unref/toValue 的归一化边界怎么设计”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断时要说明值、ref、getter 的统一读取与是否建立依赖差异。
围绕“为什么在 Vue 的渲染或 effect 追踪期间同步修改刚读取的响应式状态容易形成循环触发”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明同一次同步执行中 get 收集后 set 立即 trigger 会重复调度。
围绕“访问 Vue reactive 的深层对象 state.a.b 时才创建内层代理,这种惰性代理对首次读取和内存有什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明未访问的子树不提前代理,访问后被缓存。
围绕“Vue computed 内部读取了普通模块级变量后,为什么该变量变化不会让 computed 自动失效”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断时要说明只有经 track 的响应式读取才登记依赖,模块常量需改 ref/reactive 或参数化。
围绕“定位“这个 Vue computed 为什么重算”时,onTrack/onTrigger 能提供哪两类证据,使用时机”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确开发调试下记录哪个依赖被读、哪个变更触发失效,生产不宜依赖。
Vue 3.5 的 script setup 解构 props 为什么可以保持响应式?区分编译器转换、普通 reactive 解构、watch 数据源和向组合式函数传参,并明确 Vue 3.4 及更早版本的默认行为差异。
围绕“通过 Vue reactive 代理调用对象方法时,方法里的 this 指向代理还是原对象,为什么这会暴露内部字段问”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断时要说明默认 receiver 多为 proxy 使方法内读写也被追踪,但依赖原始身份/私有槽位的对象要 markRaw。
Vue 3 为什么用 Proxy 实现 reactive?从新增属性、删除、数组索引和原始对象绕过代理等场景解释拦截能力,区分 JavaScript 代理机制与 Vue 的依赖收集调度。
说明同一原始对象的代理复用、代理与 raw 不相等、嵌套对象及不同响应式边界的区别,并讨论 Set、Map、业务 ID 和绕过代理修改的影响。
围绕“把 readonly(reactive) 的对象传给 computed,computed 还能追踪源字段变化吗,试图”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确读取仍建立依赖、源变化可失效,但经只读视图写入被拦截。
围绕“把 Vue 的 readonly 状态传给子组件后被原地修改,开发期警告能说明什么,不能说明什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确只读代理在开发期拦截 set 并告警,但不等于深冻结或运行时安全边界。
围绕“const box = ref({ a: { b: 1 } }) 时,box.value.a.b 的深改为什么默认仍”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 ref 对对象值会转成 reactive,使 box.value 的深层可追踪。
按深层对象属性、数组元素、Map 值与浅层对象区分 ref 解包,说明普通值赋值和新 ref 替换的不同效果,并提醒模板解包与 JavaScript 读取不能混为一谈。
围绕“Vue 响应式状态更新选“整对象替换”还是“原地 patch”,对 ref、reactive、shallowRef ”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答要按包装形态判断替换必然触发、reactive 深层 patch 可触发、shallowRef 深层 patch 不触发。
围绕“面对只替换顶层字段的大型配置树,Vue 的 shallowReactive 比 reactive 更合适时必须接受什”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确只代理第一层可减少嵌套成本,但深层变更不被追踪。
围绕“Vue 的 shallowRef 搭配 triggerRef 适合什么数据形态,为什么不能指望深层对象变更自动刷新”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断时要说明 .value 整体替换自动触发、深层原地修改需手动 triggerRef 且要谨慎。
围绕“为什么 const next = { ...state } 得到的多半不是 Vue 响应式状态,getter 属性在”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确展开读取当前值并丢失代理与描述符语义,新对象需重新 reactive。
围绕“把 Vue 的 reactive proxy 直接交给 structuredClone 或 postMessage ”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖判断时要说明代理函数/内部不可克隆,先 toRaw 或显式深拷贝为普通对象。
围绕“Vue reactive 使用 Symbol 作为键时,依赖追踪仍按 target-key 工作吗,序列化和模板可读”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 Symbol 键可被 track/trigger,但 JSON/枚举/模板展示与普通字符串键不同。
围绕“Vue 中调用 toRaw 解决对象相等或序列化前,需要评估哪些绕过响应式的风险”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确拿到原始对象可比较或传输,但后续读写不 track/trigger 且可能泄露可变源。
从单个字段、多个可枚举字段和可选属性说明 toRef 与 toRefs 的输入边界,补充 Vue 3.3 getter 规范化、只读 props 与直接复制字段值的区别。
围绕“用 track/trigger 描述 Vue 3 响应式时,getter 和 setter 各自必须记录或通知什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 get 时按 target-key 收集当前 effect,set 时按变化派发。
围绕“在通用工具函数里收到未知值,Vue 的 isRef/isReactive/isReadonly/isProxy 应如”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 isProxy 覆盖 reactive/readonly 系、isRef 看盒模型、isReadonly 区分只读变体。
围绕“Vue 依赖追踪用 WeakMap 管 targetMap,为什么这有助于响应式对象被垃圾回收”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要明确 target 作弱键避免依赖表强引用对象,键仍随对象生命周期。
从 JavaScript 值传递与属性拦截解释 ref 的作用,说明原始值、对象整体替换、组合函数参数和模板解包的边界,避免把 ref 误认为只能保存基本类型。
用摄氏温度与华氏温度映射说明可写 computed 的来源、转换和归一化规则,区分 setter 写回源状态与派生缓存,并解释异步保存、只读 props 和 getter 副作用的边界。
围绕“小程序 App 的 onLaunch、onShow、onHide 分别在什么时机触发,onLaunch 里要注意什么”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明冷启动与热启动切换场景下各钩子的行为。
围绕“小程序逻辑层执行耗时任务会卡住什么,为什么渲染层动画仍可运行但事件响应变慢”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须基于双线程分工说明事件派发受阻而 WXML 已渲染页面不卡的成因。
围绕“小程序 wx.authorize 与 scope 列表如何使用,用户拒绝授权后如何再次引导”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明提前授权与调起时授权两种模式及 openSetting 引导方案。
围绕“小程序自定义组件的抽象节点(抽象组件)是什么,selectComponent 有哪些使用限制”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明抽象节点按组件 generic 临时标记渲染的概念与实例获取方式的注意点。
围绕“小程序 behaviors 与组件的逻辑复用是什么关系,多个 behavior 同名属性冲突怎么处理”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 behavior 混入机制及同名字段的覆盖优先级。
围绕“小程序组件的 created、attached、ready、detached 各在什么时机触发,数据请求该放哪个”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出组件生命周期顺序并结合节点树插入时机说明用途。
围绕“小程序组件的 pageLifetimes(show/hide/resize)解决什么问题,和组件自身生命周期有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明组件感知所在页面显隐的需求场景。
围绕“小程序组件 properties 的 observer 在什么时候触发,使用时要避免什么坑”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 observer 触发条件与在 observer 里再 setData 导致循环的风险。
围绕“小程序组件间 relations 定义解决什么问题,典型用在什么组件组合上”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须以类似 tabs/tab-item 场景说明双向关联注册机制。
围绕“小程序组件的 slot 如何定义和使用,多 slot 需要做什么额外配置”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明匿名/具名 slot 用法及 options.multipleSlots 配置。
围绕“小程序组件样式隔离 styleIsolation 的几种取值有什么区别,外部样式如何影响组件”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须比较 isolated、apply-shared、shared 三种取值的作用方向。
围绕“小程序子组件如何向父组件传递事件和数据,triggerEvent 怎么用”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明 triggerEvent 与 bind 自定义事件的配对用法。
围绕“小程序自定义组件和页面在配置与能力上有哪些异同,何时该抽成组件”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须比较构造器、生命周期与路由能力的差异并给出抽象标准。
围绕“小程序页面中哪些数据应该放 data 里,哪些应挂在 this 上或模块作用域”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出是否需要驱动视图这一判断标准。
围绕“小程序为什么采用逻辑层与渲染层分离的双线程模型,这一架构带来哪些限制”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明双线程的通信方式与不能直接操作 DOM 的根本原因。
围绕“小程序如何用 wx.getSetting 检测授权状态并据此决定是否展示引导按钮”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出先查询再决定是否弹授权的决策链。
围绕“小程序获取用户信息为什么从 wx.getUserInfo 弹窗改为 button open-type 再到 getU”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明接口变迁原因及 getUserProfile 需用户手势触发的限制。