首页 > 字节跳动前端实习面经-4(一二三面)
头像
Kevin_233
编辑于 2021-03-25 15:56
+ 关注

字节跳动前端实习面经-4(一二三面)

抱歉各位这次还是凉了。本来以为这次能够走到三面,三面也没有太大的漏洞,是可以过的,没想到最后还是凉了。在这之前,已经面了三次字节跳动,每次都是在第二面凉了。
前三次的面经附在文章末尾给大家。

部门:杭州-教育

一面(2月24日)
label标签怎么用,它的for属性对应表单元素的哪个属性
DOMContentLoaded 和 window.onload 区别
实现一个简单的三栏布局,左右各100px,中间自适应。
事件循环 看输出
浏览器事件机制,事件冒泡、事件捕获,如何阻止事件冒泡
浏览器缓存机制
给一段HTML,写出它的VDOM;写一个函数去解析这个VDOM,把元素添加到DOM上。

二面(2月24日)
position 有哪些取值
absolute 基于最后一个定位的父元素定位,最后一个定位的父元素指什么
absolute 在找不到最后一个父定位的元素,相对于浏览器窗口(viewport)定位的时候,和 fixed 有什么区别
跨域有哪些方法,CORS在处理复杂请求的时候有什么需要注意的
手写数组拍平
手写并发控制

position absolute 这道题问得还是有点细的,这里查了资料,稍微和大家分享下:
先看MDN官方解释:元素会被移出正常文档流,并不为元素预留空间,通过指定元素相对于最近的非 static 定位祖先元素的偏移,来确定元素位置。绝对定位的元素可以设置外边距(margins),且不会与其他边距合并。
可以看到,「最后一个定位的父元素」指最后一个 position 不是 static 的父元素。
另外,absolute 定位还有一些小细节:
如果没有指定 left / top / right / bottom ,这个 absolute 定位元素的左上角定位点同正常流(static)的定位点。
只指定 left / right 时,top 值同正常流中的 top 值;只指定 top / bottom 时,left 值同正常流中的 left 值。
相对于浏览器窗口(viewport)定位的时候,和 fixed 的区别:
没有滚动条的时候没有差异;
有滚动条时,absolute 始终在页面的固定位置(更准确地说是相对于 body),而 fixed 始终在窗口的固定位置。(比如:向下滚动时,absolute 定位的元素会跑上去,而 fix 定位的元素位置相对于用户可见的部分(viewport)是没有变化的。

手写数组拍平写了三个方法,不过面试官表示直接 return arr.flatten(Infinity) 是不可以的,因为本来就要去实现它。上一次写数组拍平有些时日了,以为自己已经了然于心,实则不然,最后写出来还是不太优雅,这里给大家分享一个优雅的:
Array.prototype.flatten = function() {
  return this.reduce((a, b) => {
    return a.concat(Array.isArray(b) ? b.flatten() : b);
  }, []);
}

最后一题并发控制算是字节跳动的经典题了,之前刷面经的时候看到过多次,建议看到这里的同学一定去掌握下,说不定就被考到了。写的时候有点懵,连之前 Promise.all 怎么写的都记不太清了。最后感觉自己是没写出来,没想到面试官说等一下三面面试官进来。属实有点惊讶加开心,毕竟是第一次走到了三面。后来三面面试官没来,HR说三面面试官这几天都有事,最早得约到下周一了。可能是部门 leader 的 leader 吧,有点忙的样子。后来又回头看了看并发控制那题,虽然马马虎虎但是居然是写对了,有点不敢相信自己。

三面(3月1日)
项目怎么找到的,遇到的困难,小程序里面有没有什么比较奇怪的问题
提到 requestAnimationFrame,requestAnimationFrame 的执行时机
实现一个延时执行队列,要求分别在 1,3,4 秒后打印出 "1", "2", 3"
new Queue()
    .task(1000, () => { 
        console.log(1) 
    }) 
    .task(2000, () => { 
        console.log(2) 
    }) 
    .task(1000, () => { 
        console.log(3) 
    }) 
    .start()
手写判断对象中的循环引用
var a = {
    b: null,
    c: null
};
a.b = a;
a.c = a.c;
bind的作用
ES6箭头函数有了解吗,可以被bind吗
上次被问到position有哪些取值,现在那个问题搞清楚了吗
flex有哪些属性,flex是哪些属性的缩写,flex: 1 代表什么,align-self 的作用
现在在做的项目用了Vue,是怎么选型的
为什么选前端
怎么学习前端
实现斐波那契函数,并分析时间复杂度

判断循环引用那道题没有完全做出来,面试官提示可以用递归。最后一题斐波那契用递归做了,时间复杂度是O(n)。问用迭代做的话时间复杂度是多少,没有分析对。面试官说类似于二叉查找树,所以是O(lgn)。问有没有办法优化到O(n),没答上来。面试官说可以把中间的值缓存起来,不用重复计算前面的值。
以为没有太大问题,以为这回总算是可以了,没想到两天后(3月3日)邮箱里多了一封感谢信。

经历了前面三次,每次两轮,加上这次的三轮,一共九次面试,我觉得面试这件事情还是挺看缘分的。找内推人问了没过的原因,但是不太方便透露。就,缘分没到吧。要让三个面试官都看对眼,也是不容易的。也不必气馁,就继续投吧,字节跳动可以一直投的。

虽然最后三面没过,但是还是可以和大家分享一下,和一面面试官交流的过程中,请教到的他在面试实习生的时候,比较看中的点。他的答案是:基础和学习能力。还算比较容易理解吧,毕竟对于实习生不是像社招那样,招来直接干活的。对于项目经历,有的话可以锦上添花,但也不是特别重要。所以重点还是基础,基础。这次能挂掉可能还是自己差点火候,就继续努力吧。

附:前三次面经

更多模拟面试

全部评论

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

推荐话题

近期热帖

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

热门推荐