一面
这个面试没过,应该是我去年的面试了,这个文章一直放在草稿箱中,大家就看着玩吧
自我介绍
对你比较有成长的项目
setInterval
实际延时比设定值更久的原因
有很多因素会导致setTimeout的毁掉韩式执行比设定的预期更久。本文将讨论最常讲的原因
-
最小延迟时间 >= 4s。 在浏览器中
setTimeou/setInterval
的每调用一次定时器的最小间隔是4ms,这通常是由于函数嵌套导致的,或者由已经执行的setInterval的回调函数阻塞导致的。 -
未被激活的tabs的定时最小延迟 >= 1000ms 为了优化后台tab的加载损耗(以及降低耗电量),在未被激活的yab中定时器的最小延时限制为1s。1000ms的间隔值可以通过
dom.min_background_time_value
改变 -
超时延迟 出了最小延时之外,定时器仍然有肯呢个因为当前页面(或者操作系统/浏览器本身)被其他任务占用导致延时。需要注意的时候,知道调
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:标识用户十分有可能需要在当前浏览器中加载目标资源,所以浏览器必须预先获取和缓存对应资源。浏览器立即加载资源,只能加载当前页面需要使用的
继承的理解
继承的方法:类式继承、构造函数继承、原型继承、组合继承、寄生即成、寄生组合继承
面试中遗留了个问题:怎么让原型的属性可以修改,但是不影响其他实例化后的其他对象