/solutions

Primary LanguageJavaScript

开发

# 安装依赖
npm install

# 执行测试
npm run test

ts 测试用例

1. 实现一个 Promise.race

2. XHR 请求缓存与合并

对于一个复杂的 web 应用来说,把多条同类型的异步请求合并成一条异步请求,是一个常见的提高性能的方式。 假设有接口 getUserById , getUserByIds ,在系统各处被使用。

  • getUserById 接受 用户 id 作为参数,发起 XHR 按 用户 id 查询对应的用户详情
  • getUserByIds 接受 用户 id 数组 作为参数,发起 XHR 按 用户 id 数组 查询对应的用户组详情
function getUserById(userId) {
  return fetch(`/api/user/${userId}`).then(resp => resp.json());
}
function getUserByIds(ids) {
  return fetch(`/api/users/${ids.join(',')}`).then(resp => resp.json());
}

这时候我们希望能做如下优化:

  • 当同时调用多个 getUserById 函数时,自动把它们合并成一个新的请求 getUserByIds ,合并处理。一次返回所有结果。
  • 设计一个缓存,当再次调用之前调用过的 getUserById(1) 时,从缓存中取之前查到的结果。(不考虑服务端的数据更新问题)
  • 考虑请求失败时的情形。

3. 将一个 html 字符串变成树的形式

<div id="main" data-x="hello">Hello<span id="sub" /></div>

这样的一串字符串变成如下的一棵树,考虑尽可能多的形式,比如自闭合标签等。

     {
      tag: "div",
      selfClose: false,
      attributes: {
        "id": "main",
        "data-x": "hello"
      },
      text: "Hello",
      children: [
        {
          tag: "span",
          selfClose: true,
          attributes: {
            "id": "sub"
          }
        }
      ]
    }

4

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。

如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。

注意你不能在买入股票前卖出股票。

示例

输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
     注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。

5

给定两个二叉树,编写一个函数来检验它们是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例 1:

输入:       1         1
          / \       / \
         2   3     2   3

        [1,2,3],   [1,2,3]

输出: true

示例 2:

输入:      1          1
          /           \
         2             2

        [1,2],     [1,null,2]

输出: false

示例 3:

输入:       1         1
          / \       / \
         2   1     1   2

        [1,2,1],   [1,1,2]

输出: false