字节一面(2022-05-07,20:00-21:20)
前导:面试官简单介绍字节和面试注意点
1、自我介绍(问实习能多久)
2、项目介绍部分:
问:实习了多久
介绍项目
项目收获
项目难点
怎样轮询日志的(因为我项目介绍时候有提到)
3、正片开始
网络部分:
七层网络模型
TCP,UDP
三次握手,为什么要发三次而不是两次,如果只是两次握手服务器发送数据会怎么样?
前端缓存的方式有哪些(不是缓存策略强缓存,协商缓存)
Etag和Last-Modified优先级谁高,localstorage存储的长度
css部分:
父子元素宽高未知,要求元素垂直水平居中(要求手写css,不能光说,写了四种)
ES6部分:
一段promise和setTimeout结合的代码说输出并解释为何是这个顺序
宏任务和微任务有哪些
Promise在js中的作用
说说promise.all,promise.any,promise.race的区别使用场景
算法题:
给[‘2020-03’,‘2022-01’]这样的数组,第一个元素是起始年月,第二个元素是终止年月,输出一个数组,数组里是所有在这个时间段的年月,例如[‘2020-03’,‘2020-04’,…,‘2020-12’,…,‘2022-01’]
//一次循环
function getAllYear(startDate, endDate) {
let startYear = new Date(startDate).getFullYear(), endYear = new Date(endDate).getFullYear()
let startMonth = new Date(startDate).getMonth() + 1, endMonth = new Date(endDate).getMonth() + 1
let len = endYear * 12 + endMonth - (startYear * 12 + startMonth) + 1, res = [], tempYear = 0, tempMonth = 0, p = ''
for (let i = 0; i < len; i++) {
tempYear = parseInt((startMonth + i) / 12)
tempMonth = (startMonth + i) % 12
if (tempMonth < 10) {
if (tempMonth !== 0) {
p = startYear + tempYear + '-0' + tempMonth
res.push(p)
} else {
p = startYear + tempYear - 1 + '-12'
res.push(p)
}
} else {
p = startYear + tempYear + '-' + tempMonth
res.push(p)
}
}
console.log('res----', res)
}
getAllYear('2020-03', '2022-07')
4、反问
实习生会招多少个
算法在面试中比重大吗
算法题别人的解题思路
字节二面(2022-05-11,15:00-16:00)
1、自我介绍
2、项目难点重点介绍,如果让你优化,你觉得还有什么需要改进的地方
3、正片
3、1说输出,并解释注释部分的问题,说说对变量提升和函数提 升的理解(输出蒙对了,但是我的解释不太对,我说的是堆栈的区别)
function Foo() {
getName = function () {
alert(1)
return this
}
}
var getName//解释变量提升和函数提升
function getName() {//函数提升和变量提升谁的优先级高
alert(5)
}
Foo.getName = function () {
alert(2)
}
Foo.prototype.getName = function () {
alert(3)
}
getName = function () {
alert(4)
}
getName()
3、2 说说js的数据类型,手写深拷贝
我的答案:
function getDataType(data) {
var getType = Object.prototype.toString;
var myType = getType.call(data);//调用call方法判断类型,结果返回形如[object Function]
var typeName = myType.slice(8, -1);//[object Function],即取除了“[object ”的字符串。
var copyData = '';//复制后的数据
//console.log(data+" is "+myType);
switch (typeName) {
case 'Number':
case 'String':
case 'Function':
case 'Null':
case 'Boolean':
case 'Undefined': copyData = data
break;
case 'Array':
copyData = [];//先将copyData变为空数组
for (var i = 0; i < data.length; i++) {
copyData[i] = getDataType(data[i]);//将data数组数据逐个写入copyData
}
break;
case 'Object':
copyData = {};//先将copyData变为空对象
for (var x in data) {
copyData[x] = getDataType(data[x]);
}
break;
default: copyData = data;
break;
}
return copyData;
}
增加难度,如果拷贝的对象里面有循环呢,比如:
let a={
b:a
}
我回答的在拷贝的循环里面增加判断条件是否等于对象本身,如果等于那直接把本身赋值给当前对象
3、3 说说promise.all,promise.race,promise.allSettled的区别,并手写promise.all
3、4 算法:两字符串求和( 415. 字符串相加)
3、5 说说什么是BFC,怎么开启,解决什么问题
3、6 说说flex布局,有哪些常用的属性
4、反问
部门业务
学习方法
面试官有事,所以准备问的一着急忘记了
字节三面 (2022-05-13 15:00-16:15)
1、一分钟自我介绍
2、项目(问了很久:包括收获,挑战,优化,详细问了具体实现的功能,遇到问题是怎么解决的)
3、react的hooks有哪些
4、react的diff算法
5、react的setstate是异步还是同步,说说使用场景
6、说说对umi的了解
7、说说什么是dva
8、算法题1,返回所给嵌套数组的最深层数
9、算法题2,返回字符串最长的相同前缀并讲思路
反问:
用react还是用vue
还有没有四面
等三面结果中。。。