字节跳动前端技术面试分享

作为一个去年刚毕业的前端小白,跟大家分享一下字节跳动的面试过程,毕业后在电信设计院里面任职前端开发工程师,一直都有离职的打算,也有陆续看机会投递简历,有一天就接到了字节跳动人事的电话,邀约面试,选择的时间是在晚上8点,后因为面试官开会延迟到8.30分面试,面试到9.30几分,用的是飞书,首先跟面试官打招呼,进行自我介绍,介绍完毕后,面试官直接让我共享屏幕,打开vscode,直接撸算法题。
字节跳动前端技术面试分享_第1张图片

算法题

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源码都还没看透呢。。。。。

点赞一下字节跳动的面试官,人还是很好的,最后问有什么想问的,然后面试官给我分享了他的职业心得,跟我说要多沉淀技术。

你可能感兴趣的:(vue.js,javascript,css,es6,reactjs)