> ### 概述:某不知名211大三,字节三面挂,阿里二面挂……
字节一面
用时共一小时
- 提了一嘴项目,解释了一下
- css 实现一个长方形,宽度挤满页面,长度是宽度两倍。
- 浏览器事件循环机制(event-loop),然后给了个还挺复杂promise和setTimeout,问输出值
- 知道捕获和冒泡吗?
- 知道http状态码吗?302指的什么意思?
- http tcp udp
- 进程和线程分别是什么,有什么区别
- 浏览器是单线程的吗?它的其他线程可以说出来几个吗?
- (写代码)实现判断二叉树中是否有从根节点到叶子节点value累加为n
- (写代码)一个单链表,拿倒数第K个的指针引用
- (写代码)两个版本号比较返回大的那个(格式:xxx.xxx.xxx),如果是数字怎么判断,如果是字母呢?
字节二面
用时共五十分钟
- 听说上次面试你缓存答的不是很好,下来有看嘛……我……?一面有问?😭
- http2有了解嘛
- (写代码)实现一个body下的所有tagName统计并记录出现次数,然后再从中拿到出现次数第k大的元素的tagName和times(次数)
- 聊聊你的项目吧,介绍一下出现的背景,即大概实现机制
- 后端的egg有深入了解嘛 (不过说了下个计划深入node)
- 班级一年班长经历能聊聊嘛
- 平时怎么学习的呀……
- 为什么选择从事前端这个行业……
字节三面
用时共五十分钟
- 实现一个效果,扒拉扒拉扒拉…… absolute和fix有什么区别?
- addEventListener 除了click,hover 还有什么?
- 啥时候接触前端的呀
- 实现便利递归到父元素
- 两个栈实现一个队列
- 对 js 什么了解最深
- 职业规划
- 发送请求流程有了解嘛
- (因为网不好,他说快点聊算了😭)巴拉巴拉吧啦
阿里一面
用时共一个小时
笔试(答案是当时面试系统直接发邮件发回来的,不保证能直接运行,大体思路没错)
用时共三十分钟
/**
* 1. 查找落单的数字
* 描述:给定一个非空的数字数组,数组有且只有一个非重复项,实现一个方法获取落单项
* 示例:
* getSingleNumber([1, 2, 1, 2, 0]); // 0
* getSingleNumber([0, 1, 0, 0]); // 1
* getSingleNumber([1, 2, 3, 1, 2]); // 3
*/
//评论区来的,这个应该考的是异或
const getSingleNumber = (numbers) => {
return numbers.reduce((acc,cur)=>acc^cur)
}
function getSingleNumber(numbers) {
const map = new Map();
numbers.forEach((item) => {
map.has(item)?
map.set(item, map.get(item)+1):
map.set(item, 1);
})
const vec = [...map];
for(let i = 0,len = vec.length;i<len;i++) {
if(vec[i][1] === 1) {
return vec[i][0];
}
}
return false;
}
/**
* 2. 找出数组中第k大和第m大的数字相加之和
* 说明:实现一个方法,找出数组中第k大的和第m大的数字相加之和
* 示例:
* let arr = [1,2,4,4,3,5], k = 2, m = 4
* findTopSum(arr, k, m); // 第2大的数是4,出现2次,第4大的是2,出现1次,所以结果为10
*/
function findTopSum(arr, k, m) {
//[5,4,4,3,2,1]
const map = new Map();
arr.forEach((item) => {
map.has(item)?
map.set(item, map.get(item)+1):
map.set(item, 1);
})
//排序,需要写快排的话,后期加上
const vec = [...new Set(arr)];
vec.sort((a, b) => b-a)
let [numK,numM] = [vec[k-1], vec[m-1]];
return numK*map.get(numK) + numM*map.get(numM)
}
/**
* 3. 获取嵌套数组深度
* 说明:给定一个带嵌套的数组,实现一个方法可获取嵌套数组的最大深度,
* 数组无嵌套子数组,则返回0,有一层嵌套子数组则1,依此类推。
* 示例:
* getArrayDeep([1, 2, [3, [1, [0]]]]); // 返回 3
* getArrayDeep([]); // 返回 0
* getArrayDeep([[[[]]]]); // 返回 3
* getArrayDeep([0, [2], [2, [3]]]); // 返回 2
*/
function getArrayDeep(arr) {
let res = 0;
const dfs = (vec, cur) => {
res = Math.max(res, cur);
vec.forEach((item) => {
if(item instanceof Array) {
dfs(item, cur+1);
}
})
}
dfs(arr, 0);
return res;
}
/**
* 4. 设计一个简单的红绿灯策略,红灯亮为console.log(“red”),黄灯亮为console.log("yellow"), 绿灯亮为console.log("green"),
* 要求按照红3s-黄1s-绿3s顺序不断循环展示
*/
const sleep = (time) => {
return new Promise((resolve, reject) => {
setTimeout(resolve, time)
})
}
function main = () => {
red();
}
function red() {
console.log(“red”);
sleep(3000).then(()=>{
yellow();
})
}
function yellow() {
console.log(“yellow”);
sleep(1000).then(()=>{
green();
})
}
function green() {
console.log(“green”);
sleep(3000).then(()=>{
red();
})
}
电话面试:
用时共三十分钟
- 项目
- 一年班长经历
- apply, call, bind
- vue react 区别,有了react为什么还要有vue
- react hooks ,react hooks 好在哪
- node 单线程
- js 继承, es6和es5继承有什么区别
- js 委托
阿里二面
用时共三十分钟
- 描述一下你的项目(要能讲懂的那种,真的费劲)
- 说说react好在哪
- 讲讲闭包是什么
- 闭包的用处和问题
- 闭包为什么会引起内存泄漏
- 。。。其他的忘了