字节(飞书)暑期实习面试记录

字节一面(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
还有没有四面

等三面结果中。。。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值