Skip to content

场次:8.31

  1. 编写一个函数 get(object, path, defaultValue),该函数可以根据一个字符串路径 path,安全地获取嵌套在 object 对象内任意层级的值。 path 是一个由点 . 分隔的字符串,例如 'a.b.c'。 如果路径存在,则返回对应的值。 如果路径中的任何一个层级不存在,应返回 undefined 或指定的 defaultValue,而不是抛出错误。 进阶要求: 支持数组路径的访问,例如 'a[0].b'。

  2. 编写一个 SearchBox 类或函数,模拟搜索框的业务逻辑。 初始化:包含一个固定的推荐列表 ['apple', 'banana', 'orange']。 输入处理:提供一个 handleInput(text) 方法来处理输入。 当输入为单个字符时,立即从固定推荐列表中进行模糊匹配并返回结果。 当输入为多个字符时,执行**防抖(debounce)**处理。等待用户停止输入 500ms 后,模拟调用一个异步搜索接口 searchAPI(text),并返回接口结果。 当输入被清空(text 为空字符串)时,应立即取消任何等待中的搜索请求,并返回提示字符串 "请输入内容"。

  3. 编写一个名为 executeTasksInSeries 的异步函数,它接收两个参数: tasks:一个函数数组,其中每个函数都会返回一个 Promise。 retries:一个数字,表示每个任务在失败时允许的最大重试次数。 该函数需要实现以下效果: 串行执行:tasks 数组中的任务必须按顺序执行,即前一个任务的 Promise 成功 resolve 后,才能开始执行下一个任务。 失败重试:如果某个任务执行失败(其返回的 Promise 被 reject),函数应自动重试该任务,直到成功或达到最大重试次数 retries。 最终失败:如果一个任务在尝试了 retries + 1 次(1次初次尝试 + retries 次重试)后仍然失败,则 executeTasksInSeries 函数返回的 Promise 应该立即 reject,并将最后一次的错误作为原因。 最终成功:如果所有任务都成功执行,则 executeTasksInSeries 函数返回的 Promise 应该 resolve 一个数组,该数组包含了每个任务成功后的结果,且顺序与 tasks 数组保持一致。

考察重点 async/await 的熟练运用,尤其是它如何将异步代码写成同步的逻辑。 Promise 的错误处理机制(try...catch 搭配 await)。 异步流程控制:如何实现串行和重试。

场次:9.14

第一题:任务依赖执行(DAG异步调度)

题目要求:

实现一个异步函数 "executeDependencyTree(tree: object)",该函数接收一个表示任务依赖关系的树形结构,按照正确的依赖顺序执行所有任务,并在所有任务执行完毕后返回一个包含每个任务执行结果的对象。

输入参数结构:

"tree":普通JavaScript对象

  • 键:任务名称(string类型)
  • 值:包含以下属性的对象:

"task: () => Promise<any>":返回Promise的异步任务函数

"dependencies: string[]":可选的字符串数组,表示该任务依赖的其他任务名称

功能要求:

  1. 根据任务的依赖关系确定执行顺序(依赖关系可抽象为有向无环图DAG)
  2. 必须在前置依赖任务全部完成后才能执行当前任务
  3. 返回结果对象应包含每个任务名称对应的执行结果

测试代码提示:

包含模拟的随机延时异步任务(可能成功或失败),测试时请勿修改测试代码部分。

第二题:前端路由系统实现

题目要求:

实现一个前端路由系统,包含以下两个核心方法:

"addRoute(path: string, name: string): void"

  • 添加路由规则

"path" 为唯一标识,支持动态参数(如 ":id")

  • 不允许重复添加相同path的路由

"match(currentPath: string): {name: string, params: object} | null"

  • 匹配当前路径
  • 返回包含路由名称和参数的对象
  • 静态路径优先于动态路径匹配
  • 未匹配时返回null

路由匹配规则:

  • 静态路径精确匹配(如 "/users/new")
  • 动态路径参数解析(如 "/users/:id"匹配 "/users/123",返回 "{name: '路由名', params: {id: '123'}}")
  • 静态路径优先级高于动态路径

以上均为AI补全的版本

本站访客数 人次 本站总访问量