字节一面-最恐怖的一集

114 阅读3分钟

1.互相自我介绍

2.项目是自己做的还是哪个公司的项目

(答没实习过自己做的)遂直接跳过我的项目问基础去了…..(好歹也让我说下我准备的难点亮点啊

3.你对前端的理解

(答gui,然后结合gui扯了一堆,后面反问的时候面试官说到前端不仅仅是gui,还涉及到浏览器,跨域等等,你要从vue出发,深探源码,再理解应用场景以及为什么要这么做,再去了解浏览器原理,如何渲染,这样才可以去理解为什么虚拟dom可以提升渲染速度,以此类推)

4.vue的双向绑定原理

能说多少说多少,追问和react的区别,为什么选vue不选react。网上很多很好的解析此处就省略了。

5.虚拟dom的理解,js操作dom有哪些方法,为什么虚拟dom可以加快渲染速度,从回流与重绘的角度谈谈,再谈谈浏览器是如何渲染dom的(总体来说面试官会从一个常规八股出发根据你的回答深挖)

等我下去再看一遍浏览器渲染逻辑再来补充这道题的答案。

6.为什么浏览器第二次请求页面会比第一次快。答应该是从缓存的角度去思考,再谈谈觉得缓存了什么。既然你提到http缓存那你谈一下整个http缓存过程。怎么才能知道协商缓存过没过期,从服务端的角度去思考一下如何通知用户缓存过期了(版本控制)。

主要是因为在第一次加载页面的时候缓存了一些数据,之后再加载就直接从缓存中获取而不用请求服务器,所以速度更快也减轻了服务器压力。这个过程主要是两方面:

  • 网络缓存:http缓存,DNS缓存,CDN缓存
  • 本地存储

详细参考这一篇文章

(写到这里有点心得,不是像一些面经说的要一直答,自己一个人疯狂输出,字节的开始官会打断你的技能施法,问她想问的点。所以对于某些面试官八股适可而止就行,背重点最好两句话答完,面试官更想互动。)

7.一道题,是变量提升和函数提升的。

主要记住几个点,var会变量提升,函数会有函数提升,let和const以及什么标记都没有的不会提升。

  fun()
  console.log(myString);
  let myString = 'spring'
  function fun(){
    console.log('summer');
  }
  //输出summer 报错
  fun()
  console.log(myString);
  // let myString = 'spring'
  myString = 'winter'
  function fun(){
    console.log('summer');
  }
//输出summer 报错

8.既然谈到了let那说一下是什么时候出来的,es6还有哪些新东西。map和对象除了key的类型不一样还有啥区别。

  • let是es6出来的
  • es6新的东西包括let,const,箭头函数,map,set,symbol,解构运算符,拓展运算符,模板字符串,proxy大概答到这里就行了。
  • map和object的区别看看这一篇比较详细【链接】。总结一下:1.object的key为整数字符串或者为symbol,map任意。2.map有Symbol.iterator属性可迭代,意味着可以for of遍历,对象只能用for in。3.map是纯哈希结构,Object有自己逻辑。

8.bfc说一下,例子举几个。

看看我之前写的这篇文章,面试够了。【链接

9.做题三道,一道扁平化,一道最长不重复子串升级版,一道异步输出题。异步题不仅要写对还要把每个输出你的理由说给她听。