回馈牛客 字节跳动前端面经(已签~)
随着秋招接近尾声,渣渣楼主回馈牛客网,分享一波字节前端面经
一面:
1、自我介绍
2、自我介绍中说自己看了源码,讲讲看了哪些源码(React、Redux、Koa2)
3、React Fiber架构、调度原理(自己讲了下Fiber树中节点的具体数据结构、任务优先级、代码如何断开和重连)
4、Koa2的洋葱模型实现(这里只讲了下compose和dispatch的实现方式,其实可以再结合Redux中柯里化形式的中间件对比分析)
5、一道宏任务与微任务的题
console.log(1) setTimeout(() => { console.log(2); Promise.resolve().then(() => { console.log(3) }); }, 0); new Promise((resolve) => { console.log(4); resolve(); }).then(() => { console.log(5); setTimeout(() => console.log(6), 0) }); console.log(7); // 1-4-7-5-2-3-6
6、题目比较简单,自己说出结果后,讲了下浏览器和Node事件循环的区别,面试官问了下setImmediate的概念
7、HTTP2.0、HTTPS握手过程
8、关于实习项目的一些问题(一些功能的具体实现方式吧,都是自己做过的讲清楚就行)
9、实习中写了个cli工具,有哪些功能,具体是如何实现的(commander.js && inquirer.js)
10、一道算法题
给一个正整数数组和一个数字 n,返回告知该数组中是否有连续序列,和为 n in: 2,1,3,4,5,6 10 out: true in: 1,2,4,5,6 10 out: false
自己算法渣渣,写了一个 两个for循环时间复杂度爆炸的答案,面试官给了两个他自己的思路:从后往前计算 以及 dp;这里做完觉得自己要挂了,就简单的问了面试官两个问题,没想到面试官让我等五到十分钟继续二面
二面:
由于楼主之前暑期在鹅厂实习,恰好二面面试官也是从鹅厂跳槽过来的,所以这里问了很多项目的问题
1、部门自研框架核心功能以及源码实现(得亏实习看源码的时候做了点笔记==)
2、项目中页面的移动端适配、拉伸比例以及高度缩放等问题
3、项目中的组件定义规范(大家这里可忽略)
4、js中有哪些类数组、es5和es6中有哪些方法将其转化为数组(前端基础,比较简单)
5、实现一个函数,第i次执行输出i
var getNum = (function () { let i = 0; return function() { ++i console.log(i); } })();
6、一面面试官说你看过源码,那React setState为什么以及何时是"异步"的
(首先讲了下setState并不是异步的,是为了性能优化进行的批量更新,具体讲了下源码中Object.assign进行的合并,同时讲了下什么时候是同步的,最后讲了下什么是合成事件--事件委托)
7、浏览器的缓存机制以及对应的请求响应头(前端基础,比较简单)
8、算法题:两个有序链表的去重合并,要求时间复杂度和空间复杂度最优且不改变输入数据(剑指offer上有原题,自己在面试官引导下写出来了)
三面:
一面二面都是一个上午完成的,面完差不多中午一点了,所以没有直接面三面。重新和HR约了三面时间--两天之后下午14:00
1、三面面试官说前面JS问得比较多,所以一上来考察我的CSS:实现一个左右布局,左边固定100PX,右边可伸缩,高度沾满整个屏幕。右侧正中间有个长方形,长方形长宽比4:3,长是父元素的50%(这里我直接使用flex布局进行实现,倒是在长宽比这里没写出来,大家可以去掘金上搜搜有相关的解法)
2、css3动画熟不熟(这里实习中遇到过一个动画卡顿的bug,所以结合这个bug顺便讲了下GPU加速,面试官觉得ok,就不再问css问题了)
3、前端自动化工具webpack用过吧,讲一讲工作流程
4、用过哪些loader和plugin(实习写过一个plugin,这里讲了下原理--在特定钩子处写相应逻辑)
5、CommonJS与ES6模块化区别(比较简单,这里讲ES6模块化时想起来实习中用过的Tree shaking,顺便讲了讲)
6、首页白屏优化(讲完后面试官一眼看出只是看过相关文章,没有动手实践过,尴尬)
7、上一个问题讲到了SSR,介绍下具体如何做,浏览器拿到数据后还要做什么吗(缺少实践,答得不好,讲了讲自己的想法)
6、如何学习前端的、你觉得前端有边界吗(讲讲自己对前端的理解吧)
7、介绍了下头条这边的业务,你感兴趣哪块、为什么
8、手头offer情况,能否提前实习
总结
总体感觉自己比较幸运,都不是很难的问题,可能也是看楼主非计算机专业出身吧(本硕985 但都是冷门工科)。
介绍下楼主个人情况,上半年春节在家时对自己未来充满迷茫吧,本硕专业虽不是生环化材,但也不是很好的工科专业,所以决定找工作时转方向。考虑到本科有过一些前端知识,所以三月开始系统学习前端。
当然对于我这种转行的渣渣,前期肯定是备受打击啦,好在自己一步步调整了过来,秋招已拿美团、小米和海康offer,已放弃鹅厂(面到三面,但感觉部门比较边缘,且技术栈不是很匹配,故放弃)、滴滴和pdd(字节真香)。这里不得不说字节效率真高,面完没两天就发offer并有HR谈薪,渣渣楼主目前已签,开始享受最后的学生时光啦:)
最后希望大家都能顺利结束秋招,早日登上人生巅峰~~