字节国际电商前端面试

813 阅读3分钟

一面

这个面试没过,应该是我去年的面试了,这个文章一直放在草稿箱中,大家就看着玩吧

自我介绍

对你比较有成长的项目

setInterval

实际延时比设定值更久的原因

有很多因素会导致setTimeout的毁掉韩式执行比设定的预期更久。本文将讨论最常讲的原因

  1. 最小延迟时间 >= 4s。 在浏览器中setTimeou/setInterval的每调用一次定时器的最小间隔是4ms,这通常是由于函数嵌套导致的,或者由已经执行的setInterval的回调函数阻塞导致的。

  2. 未被激活的tabs的定时最小延迟 >= 1000ms 为了优化后台tab的加载损耗(以及降低耗电量),在未被激活的yab中定时器的最小延时限制为1s。1000ms的间隔值可以通过dom.min_background_time_value改变

  3. 超时延迟 出了最小延时之外,定时器仍然有肯呢个因为当前页面(或者操作系统/浏览器本身)被其他任务占用导致延时。需要注意的时候,知道调setTimeout的主线程执行完其他任务之后,回调函数和代码段会能被执行

function foo() {
    console.log('foo has been called');
}
setTimeout(foom, 0);
console.log('After setTimeout');

会在控制台输出

After setTimeout
foo has bee called

如何解决setInterval误差的问题

首先我们需要明确一个东西,setInterval在每次吧任务push到任务队列前,都要进行判断下(看上次任务是否在队列中),如果回调函数还在执行队列中,新的回调不会进入时间队列中。它有两个缺点:

  • 某些间隔会被跳过
  • 可能多个回调连续执行

方法一:setTimeout 模拟setInterval
保证回调之间的时间间隔

setTimeout(function() {
    setTimeout(arguments.callee, interval)
}, interval)

cookie

cookie怎么用,怎么操作,localStorage怎么操作

更多详细内容:cookie、localStorage、sessionStorage

vuex 和 直接放在把数据放在window 或者 Storage上的区别

【看到这个问题,脑袋一懵,不知道要问的是啥,我是觉得这个问题没啥意义】 说了一些数据双向绑定上的却不,vuex可以减少全局污染。

最后面试官说了一句,刷新的时候vuex中的数据还在吗,window和Storage,还在吗
【这答案简直了,我是很无语】

文件加载顺序的优先级

我们访问一个网址,首先拿到的肯定是一个html

prefetch 和 preload prefetch:提示浏览器提前加载连接的资源,因为他可能会被用户请求。浏览器空闲时这才开始加载文件,可加载当前或其他页面需要使用的
preload:标识用户十分有可能需要在当前浏览器中加载目标资源,所以浏览器必须预先获取和缓存对应资源。浏览器立即加载资源,只能加载当前页面需要使用的

继承的理解

继承的方法:类式继承、构造函数继承、原型继承、组合继承、寄生即成、寄生组合继承

面试中遗留了个问题:怎么让原型的属性可以修改,但是不影响其他实例化后的其他对象