睿联前端秋招一面:Vue 选项式/组合式与 React Fiber
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 实习相关的经历。
- Vue2 与 Vue3 有什么区别?
- Vue2 的选项式 API 与 Vue3 的组合式 API 区别是什么?
- Vue3 能用选项式吗?Vue2 能用组合式吗?
- 选项式、组合式、两者混用各自的使用场景是什么?
- watch 的参数都有哪些?
- React Fiber 是什么?
- React16 之前是什么数据结构?与 Fiber 有什么区别?
- 有关注什么 agent 的最新技术吗?
《参考解析》
Vue2 与 Vue3 的核心差异
响应式是最大的分水岭:Vue2 用 Object.defineProperty 递归地把 data 上的属性改写成 getter/setter,因此有三个天生短板——新增与删除属性检测不到(要靠 $set/$delete)、数组下标赋值与直接改 length 检测不到、初始化时就得递归遍历完整个对象;Vue3 换 Proxy 代理整个对象,get/set/deleteProperty/has 都能拦截,属性增删和数组操作天然可响应,而且递归是惰性的,访问到才代理深层对象。
编译与渲染层面,Vue3 的模板编译会做静态提升、补丁标记(patchFlag)和事件缓存,diff 时能跳过静态节点只比对动态部分,还引入了 Fragment、Teleport、Suspense 与 Block Tree。工程侧则包括 TypeScript 重写、支持多根节点、Tree-shaking 后体积更小、用 createApp 替代全局 API 以便同页多实例与测试。一句话总结:Vue2 的痛点很多是 API 层面的限制,Vue3 是响应式和渲染器都换了实现。
选项式 / 组合式,以及能不能互相替代
选项式按「类型」组织代码(data、methods、computed、watch 各占一块),组合式按「逻辑关注点」组织(同一个 setup 里把某功能的状态、副作用、计算属性放一起,再抽成 composable)。规模小、逻辑线性时选项式更好读;逻辑跨多个功能域、需要在组件间复用状态逻辑时组合式优势明显——Vue2 时代只能靠 mixin,命名冲突和来源不清是硬伤,组合式还更容易做类型推导。
互操作要分清楚:Vue3 完全支持选项式写法,所以「Vue3 能用选项式」成立;反过来「Vue2 用组合式」不成立,Vue2 没有 setup,只能靠 @vue/composition-api 插件(Vue2.7 已内置)拿到 setup/ref/reactive,属于补丁而非原生。混用是允许的:同一组件里可以既写 setup 又写选项式属性,返回值会被合并(重名要避免),实践中常见于渐进迁移——新功能用组合式写、老代码维持选项式。把「框架原生支持」和「插件补丁」区分开,是这道题最容易得分的地方。
watch 的参数
签名是 watch(source, callback, options)。source 可以是 ref、getter 函数、响应式对象或它们的数组;callback 收到 (newValue, oldValue, onCleanup),onCleanup 用来清理上一次的异步副作用,比如取消上一次发出的请求。
options 里常用四项:immediate(创建时立刻执行一次)、deep(深度侦听;侦听 reactive 对象本身默认就是深度的,只有 getter 返回对象时才需要显式开)、flush('pre' 默认、'post'、'sync',决定回调相对组件更新的时机)、once(只触发一次)。还要能对比 watchEffect:它自动收集依赖、立即执行一次、拿不到旧值;watch 是显式指定源、默认懒执行、能拿新旧值。需要在回调里读 DOM 或注册副作用时,flush: 'post' 是关键细节。
React Fiber 与 React16 之前的数据结构
React16 之前是 Stack Reconciler:整棵树用递归遍历,一旦开始渲染就必须跑完,无法中断;树一深或列表一长,主线程被占满就会出现掉帧和输入卡顿。Fiber 把渲染从递归改成可中断的链表遍历:每个 Fiber 节点持有 child/sibling/return 三个指针,遍历顺序是自己、子、兄弟、父,于是可以在任意节点保存进度、让出主线程,再由调度器按优先级决定何时继续。
配套机制也要能说出来:渲染拆成 render(可中断、可丢弃)与 commit(同步、不可中断)两个阶段;用 current 与 workInProgress 两棵树做双缓冲;高优先级更新打断低优先级时会作废重做。所以「Fiber 是什么」的准确答案是「一种数据结构加一套调度机制」,而不只是新的 diff 算法——同层比较加 key 的启发式规则在 Stack 时代就已经存在了。
开放题:怎么答「有关注什么 agent 的最新技术」
这类问题不考标准答案,考的是你有没有真的在跟踪、有没有自己的判断。稳妥的答法是给出一条具体、自己能讲深的线索,而不是罗列名词:讲一个你实际用过或复现过的东西(某个工具调用或多智能体编排方案、上下文与缓存方面的改进、评测方式的变化),说清它解决什么问题、比上一代好在哪、你试过之后觉得哪里还不 work。
前端岗位可以从「怎么把模型接进产品」切入——流式响应与中途打断、工具调用的状态机、历史与上下文的压缩、失败重试与降级、成本与延迟的可观测性,这些都是前端能做出差异的地方。要避开的坑:只报模型名字和版本号、把宣传稿里的结论当成自己的判断、答不上自己刚提到的细节——面试官追问一句就会露馅。