1、说一下项目打包,到被用户访问的过程
2、根据什么决定缓存位置在 memory or disk ?
对于大文件来说,大概率是不存储在内存中的,反之优先
当前系统内存使用率高的话,文件优先存储进硬盘
3、小程序架构?
4、常见的负载均衡策略
轮询策略、负载度策略、响应策略、哈希策略
5、浏览器GUI渲染线程与JS线程互斥原因
6、热更新原理
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;
}