作为一个去年刚毕业的前端小白,跟大家分享一下字节跳动的面试过程,毕业后在电信设计院里面任职前端开发工程师,一直都有离职的打算,也有陆续看机会投递简历,有一天就接到了字节跳动人事的电话,邀约面试,选择的时间是在晚上8点,后因为面试官开会延迟到8.30分面试,面试到9.30几分,用的是飞书,首先跟面试官打招呼,进行自我介绍,介绍完毕后,面试官直接让我共享屏幕,打开vscode,直接撸算法题。
算法题
1、JS 实现两个大数相加?
let a = "9007199254740991";
let b = "1234567899999999999";
function add(a ,b){
//...
}
解法:
let a = "9007199254740991";
let b = "1234567899999999999";
function add(a ,b){
//取两个数字的最大长度
let maxLength = Math.max(a.length, b.length);
//用0去补齐长度
a = a.padStart(maxLength , 0);//"0009007199254740991"
b = b.padStart(maxLength , 0);//"1234567899999999999"
//定义加法过程中需要用到的变量
let t = 0;
let f = 0; //"进位"
let sum = "";
for(let i=maxLength-1 ; i>=0 ; i--){
t = parseInt(a[i]) + parseInt(b[i]) + f;
f = Math.floor(t/10);
sum = t%10 + sum;
}
if(f == 1){
sum = "1" + sum;
}
return sum;
}
2、.斐波拉数列:0 1 1 2 3 5 8 13 21…
用动态规划去解,递归的话性能太低,可以看看这篇文章
function fn(n){
if(n<3){
return n-1;
}
var left = 0; // 左边的数据
var right = 1; // 右边的数据
var sum = 0;
for(var i = 3 ; i <= n ; i++){ // 循环从第3项开始(临界条件)
sum = left + right; // 计算前一次左右数据的和
left = right; // 把前一次的right赋值给下一次的left
right = sum; // 把前一次的和赋值给下一次的right
}
return sum;
}
接下来问请求相关的
1、http发请求过程
2、请求方式以及一些区别
3、状态码
4、问请求头响应头有哪一些属性,content-type之类的
前面三点还好,第四点实在能力有限,迷迷糊糊答了几个,深度也就到这了
Vue相关
因为现在主要是使用Vue的,所以面试管就开始问Vue的原理,果然是大厂,挖深度,从浅到深。
我按我的理解讲了一遍Vue的原理,从中面试官提出了一些问题
1、mvvm模式,view、modal哪个是被监听和监听者
2、definedproperty这个方法,除了get\set还有什么属性(。。。。没有然后了)
css\js动画的了解
css动画工作中没怎么用过。还有js动画这块能力超纲了啊,说到什么帧数之类的
canvas、echarts
canvas画布原理、对echarts源码的了解,这块一时语塞,会用但是没去看过源码,Vue源码都还没看透呢。。。。。
点赞一下字节跳动的面试官,人还是很好的,最后问有什么想问的,然后面试官给我分享了他的职业心得,跟我说要多沉淀技术。