手写模板字符串解析深度解析
把含 ${} 的模板字符串编译成可执行函数,本质是微型编译器:词法分析拆 token、语法分析建 AST、代码生成转 JS。 面试考状态机如何处理 $ 与 { 既是分隔符又是字面量的歧义。
把含 ${} 的模板字符串编译成可执行函数,本质是微型编译器:词法分析拆 token、语法分析建 AST、代码生成转 JS。 面试考状态机如何处理 $ 与 { 既是分隔符又是字面量的歧义。
手写一个极简状态管理库(类似 Redux/Pinia 的 createStore),理解订阅发布、dispatch、reducer 与不可变更新。 面试能复述单向数据流与中间件思想即可体现深度。
Vue3 响应式核心只有 reactive(Proxy 拦截)、track(收集 effect)、trigger(通知 effect)三模块,再加 WeakMap 三层数据结构。 手写一遍能彻底理解依赖收集与触发更新的闭环,面试中能现场推导出最小可用响应式系统即为加分项。
面试高频手写题:从零实现虚拟列表(Virtual List),讲清可视区渲染、滚动偏移与 startIndex/endIndex 计算思路。 掌握后能现场写出定高/不定高两种方案,应对万级数据长列表性能优化的追问。
并发调度器管请求并发数、LRU 管缓存容量,共享'有限资源最优分配'母题,都要处理空状态、满状态与临界区竞争。 面试考用双向链表或 Map 实现 O(1) 的 LRU 淘汰。
手写 map/filter/reduce/flat 重点在稀疏数组的 i in arr 检查、reduce 无初始值取首元素、flat 用栈替递归防爆栈。 面试考细节而非背代码。
发布订阅经中心化事件通道让双方解耦,观察者模式主体直接持有观察者列表——区别在于解耦程度。 面试常考 EventEmitter 的 5 个暗坑:off 遍历安全、once 自毁、错误冒泡等。
深拷贝难点在循环引用(WeakMap 记忆化)、20 多种内置类型兼容、迭代栈防爆栈;浅比较核心是 Object.is 语义。 面试考类型边界:NaN 与 Object.is(NaN,NaN) 为 true 这类细节。
手写 Promise 核心是状态机不可逆、then 链的值穿透与 thenable 展开,以及 all/race/allSettled/any 四类组合器的语义差异。 面试要一次到位写出并通过边界测试。
防抖节流控制高频事件,call/apply/bind 是手动操控 this 的三兄弟。 面试官想看的不只是代码能跑,更是对 new 优先级、Symbol 临时属性、箭头函数不可改 this 等暗坑的理解。