手写和输出题:按这个顺序练

把相关知识和复习方法放在一起,随时回看。

以下所有手写题的回答要点、完整代码、示例、复杂度与边界说明已放在 手写题参考答案。代码以明确支持范围的面试实现为目标,不冒充完整原生规范实现。

优先级 题型 重点边界
P0 防抖、节流 this、参数、连续调用、取消、首尾触发
P0 Promise / async 输出题 执行器同步、微任务、await、异常传播
P0 数组去重、分组、扁平化 相等规则、输入不修改、空数组、嵌套深度
P0 列表转树 / 树遍历 根节点、孤儿节点、重复 ID、环、复杂度
P0 简化 Promise.all 空输入、普通值、拒绝、结果顺序、同步异常
P0 并发限制调度器 真正限制任务启动、结果顺序、失败策略、补位
P0 基础算法 Map / Set、双指针、栈、二分、树的 DFS / BFS
P1 深拷贝 支持范围、循环引用、共享引用、特殊对象
P1 发布订阅 取消监听、once、触发期间增删、回调异常策略
P1 简化 call / bind / new this、返回值、构造调用;说明简化实现的边界
P1 带过期时间的缓存 / LRU 过期、容量、刷新访问顺序、边界参数
P2 简化响应式 / Promise 原理演示与规范完整实现要区分

事件循环自测:

js
console.log('A')

setTimeout(() => console.log('B'), 0)

Promise.resolve().then(() => {
  console.log('C')
  Promise.resolve().then(() => console.log('D'))
})

async function run() {
  console.log('E')
  await Promise.resolve()
  console.log('F')
}

run()
console.log('G')

答案:A E G C F D B。同步部分先结束;C 和 await 的继续执行 F 按入队顺序处理,C 执行时追加 D;本例中的定时器回调最后执行。要会解释队列过程,不能只记顺序。