首页 > 字节跳动前端(一二三面+HR)
头像
牛客475057040号
编辑于 2020-11-05 19:51
+ 关注

字节跳动前端(一二三面+HR)

一面(10.28,1小时)

上来先问了问成绩、平时看哪些博客

口头提问

  1. HTTP请求的类型有哪些?
  2. HTTP报文组成部分
  3. HTTP常见header
  4. 前后端如何交互
  5. 登录逻辑(用户身份验证)
  6. cookie常用字段
  7. cookie、sessionstorage、localstorage
  8. 什么是跨域?如何解决跨域问题(提到CORS,CORS过程,简单请求和复杂请求,浏览器发送请求)
  9. 原型链(先手撕一道继承代码题,然后问了一些原型链的问题)

手撕代码

【手撕代码部分】
题目一:css用flex水平垂直居中
题目二:判断数组
题目三api.get()是一个异步函数,会从服务端异步请求数据(number),返回一个Promise
function fetchData() {
let data = -1;
api.get('/api/data')
.then((i) => {
data = i;
})
.catch((e) => {
console.log(e);
});
return data;
}
题目四:把setTimeout改造成Promise的sleep函数

// 函数签名
function sleep(second);

// 实现10秒之后打印“10”
sleep(5).then(i => { console.log(i)});

题目五:原型链的继承,实现构造函数B继承于A,
构造函数A
- 函数签名:const a = new A(name);
- 实例属性name  // 字符串
- 原型对象属性有一个run方法
- function () { console.log(`${this.name} run`); }

构造函数B
- 函数签名:const b = new B(name, email);
- 实例对象拥有A的所有实例属性
- 实例对象自定义一个email属性  // 字符串
- 原型对象继承于A
- 原型对象上自定义一个swim方法

题目六:数组扁平+数组去重+排序
var arr = [ [ 2, 1, 2], [3, 4, 5, 5], [ 7, 8,6,9, [11, 12, [12, 13, [14] ] ] ], 10];

编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组

二面(10.29,1小时)

二面先聊项目,然后面试官提了几个问题,让我手撕代码
  1. 介绍项目难点,提到用户权限控制,用到动态路由加载以及如何改进
  2. vue2.0和3.0双向数据绑定,怎样为data添加数据
  3. 知道的排序算法,稳定性,时间复杂度

手撕代码

题目一:给定一个二叉树,返回所有从根结点到叶子结点的路径
function allPath(root){
var res = [];
if(!root) return res;

function getPath(root, arr){
var a = [...arr];
if(root){
a.push(root.val);
if(!root.left && !root.right){
res.push(a);
}else if(root.left){
getPath(root.left, a);
}else if(root.right){
getPath(root.right, a);
}
}
}
getPath(root, []);
return res;
}


算法二:找到数组中第K大的元素,我用了一个快速排序,leetcode215:https://leetcode-cn.com/problems/kth-largest-element-in-an-array/
function sortQuick(arr, left, right){
var cur = arr[left];
while(left < right){
while(left < right && arr[right]<=cur){right--;}
arr[left] = arr[right];
while(left < right && arr[left]>=cur){left++;}
arr[right] = arr[left];
}
arr[left] = cur;
return left;
}
function sort(arr, low, high, k){
if(low<high){
var index = sortQuick(arr, low, high);
if(index-low+1 == k){
return index;
}else if(index-low+1 > k){
sort(arr, index+1, high, k);
}else{
sort(arr, low, index-1, k);
}
}
}

算法三:实现一个树形导航栏组件

三面(10.29,1小时)

  1. 进程与线程区别
  2. MySQL单例模式
  3. 平时怎么学前端
  4. 实习时做的项目里的数据走向
  5. 算法题:javascript 实现一个带并发限制的异步调度器,保证同时最多运行2个任务(写了半天没写完,面试官说算了)
class Scheduler {
add(promiseCreator) { ... }
// ...
}
const timeout = (time) => new Promise(resolve => {
setTimeout(resolve, time)
})

const scheduler = new Scheduler()

const addTask = (time, order) => {
scheduler.add(() => timeout(time))
.then(() => console.log(order))
}

addTask(1000, '1')
addTask(500, '2')
addTask(300, '3')
addTask(400, '4') // output: 2 3 1 4
// 一开始,1、2两个任务进入队列
// 500ms时,2完成,输出2,任务3进队
// 800ms时,3完成,输出3,任务4进队
// 1000ms时,1完成,输出1
// 1200ms时,4完成,输出4

HR面(10.30,半小时)

  1. 前面三面的面试感受
  2. 实习主要做了什么,有哪些收获?
  3. 实习时候除了导师和leader给的任务,会做其他事情吗?
  4. 职业规划
  5. 为什么选择做前端
  6. 通过哪些手段纵向提高技术能力
  7. 提前批面试失败了,这次有什么提高吗?
  8. 收到哪些offer或者还有什么流程内的公司
  9. 为什么投了xxx公司(拿了offer的公司)
  10. 选择岗位的标准
  11. 介绍了加班情况,能不能接受
能想起来的题目是这些,没想起来的后面慢慢补充,许愿offer

OC(11.5)

更多模拟面试

全部评论

(11) 回帖
加载中...
话题 回帖

相关热帖

近期热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐