2022面试回忆录 — 小荷健康

165 阅读1分钟

1、说一下项目打包,到被用户访问的过程

segmentfault.com/a/119000000…

2、根据什么决定缓存位置在 memory or disk ?

对于大文件来说,大概率是不存储在内存中的,反之优先
当前系统内存使用率高的话,文件优先存储进硬盘

3、小程序架构?

juejin.cn/post/699965…

4、常见的负载均衡策略

轮询策略、负载度策略、响应策略、哈希策略

5、浏览器GUI渲染线程与JS线程互斥原因

6、热更新原理

juejin.cn/post/684490…

7、mock数据是怎么处理的?

算法题

1、合并两个有序数组,输出结果也是有序数组,要求算法时间复杂度不能太高
思路:双指针

function mergeArr (arr1, arr2) {
  let index1 = 0;
  let index2 = 0;
  const result = [];
  while (index1 < arr1.length || index2 < arr2.length) {
    const num1 = arr1[index1];
    const num2 = arr2[index2];
    if (num1 > num2 || (num1 === undefined && num2 !== undefined)) {
      result.push(num2);
      index2++;
    } else {
      result.push(num1);
      index1++;
    }
  }
  return result;
}

2、合并二维数组中的子数组 示例:

/*
  * 参数 [
    [1,2,7], [2,5], [3,8,9], [4,7]
  ]
 两个数组有相同项则进行合并,[1,2,7] 和 [2,5] 合并生成 [1,2,5,7]
 [1,2,5,7] 和 [4,7] 合并生成 [1,2,4,5,7]
 返回合并后的结果
 [
  [1,2,4,5,7], [3,8,9]
 ]
 */
function mergeArr (arr) {
  const result = [];
  result.push(arr.shift());
  while (arr.length) {
    const current = arr.shift();
    const len = result.length;
    for (let j = 0; j < len; j++) {
      const arr = result[j];
      // 如果有交集
      if (current.some(item => arr.includes(item))) {
        result[j] = [...new Set(arr.concat(current))];
        break;
      }
      // 当前项跟已有结果没有交集
      if (j === len - 1) {
        result.push(current);
      }
    }
  }
  return result;
}