面试流程
- 自我介绍
- 考察算法题的测试(2道题)
- 考察前端相关知识
面试题目
- 了解HTTP版本嘛?说一下HTTP1.0被优化掉哪些缺点。
- 说一下SSL的作用?
- 说一下浏览器缓存?
- 说一下localStorage和sessionStorage?
- 说一下cookie和session?
- let、var的区别,什么是块级作用域。
- 说一下闭包吧。
- 说一下内存泄漏。
- 说一下防抖和节流。
- 了解Promise吗?回调地狱
- 安全专业,为什么选择前端这个方向?
- 是哪里人?
- 面试官介绍项目(面试官非常专业和认真👍)
算法代码题目
- 阶乘:实现阶乘
//接受值,n return 阶乘的和
function fun(n) {
let sum = 0;
let temp = 1;
for (let i = 1; i <= n; i++) {
temp *= i;
sum += temp;
}
return sum;
}
- 动态规划:一个数组里有一堆数,算出能否从其中取出两组数,两组的和相等,这两组数不用数组中的每个元素都参与,这两组的个数不定顺序不定。即,判断能否从给定的一个数组中,取出两个不相交的子集,并且这两个子集和相等,但是数组中的可能存在一些并没有被这两个子集所选取的元素。
dp[i][j] = dp[i - 1][j] || dp[i - 1][j - nums[i - 1]];
function canPartition(nums) {
let sum = 0;
for (let num of nums) {
sum += num;
}
if (sum % 2 !== 0) {
return false;
}
let target = sum / 2;
let n = nums.length;
let dp = new Array(n + 1).fill(0).map(() => new Array(target + 1).fill(false));
dp[0][0] = true;
for (let i = 1; i <= n; i++) {
for (let j = 0; j <= target; j++) {
dp[i][j] = dp[i - 1][j];
if (j >= nums[i - 1]) {
dp[i][j] |= dp[i - 1][j - nums[i - 1]];
}
}
}
return dp[n][target];
}