玄武科技笔试题

本文回顾了面试常考的题目,包括new操作符的工作原理、Promise和setTimeout的执行顺序、Vue的key概念、Page和Component生命周期、浏览器缓存机制,以及数组去重技巧和并发控制策略。
摘要由CSDN通过智能技术生成

Mark 一下之前玄武科技面试时做的笔试题~ 虽然不知道是不是每一个人都是一样的试题


1. new操作符到底做了什么

  • 创建一个空的对象 var obj=new Object();
  • 让空对象的原型属性指向原型链,设置原型链obj._proto_=Func.prototype;
  • 让构造函数的this指向obj,并执行函数体 var result=Func.call(obj);
  • 判断返回类型,如果是值就返回这个obj,如果是引用类型,返回这个引用对象。

答案转自:https://www.cnblogs.com/theworldofbeisong/p/9582665.html

2. Promise 和 setTimeout 执行先后的区别

首先要了解一下Event Loop(事件循环)
js 是单线程语言,浏览器只分配给js 一个主线程用来执行任务(函数)【形成执行栈】,每次只能执行一个任务。这些任务就形成了任务队列排队等候执行。
某些任务很耗时(如网络请求、定时器和事件监听)浏览器会开辟另外的线程,这些任务是异步。
Event Loop
执行的先后顺序:

  1. 首先执行栈里的任务;(就是同步任务)
  2. 执行栈清空后,检查微任务队列,将可执行的微任务全部执行;
  3. 取出宏任务队列中的第一项执行;
  4. 回到第二步再次检查。
    异步任务又分宏任务和微任务。
  • 宏任务:事件队列中的每一个事件都是一个宏任务
    (优先级:主代码块 > setImmediate > MessageChannel > setTimeout / setInterval
  • 微任务:
    优先级:process.nextTick > Promise > MutationObserver
    主程序和和settimeout都是宏任务,两个promise是微任务

答案详解参考:https://www.cnblogs.com/sunmarvell/p/9564815.html

3. vue 中的 key 主要是解决哪一类问题,为什么不建议用索引 index

  1. key的作用主要是为了高效的更新虚拟DOM
  2. 当以indexkey值时,如果数组长度发生变化,会导致key的变化,比如删除其中某一项,那么index会相应变化。
    所以用index作为key和不加index没有什么区别,都不能提升性能。
    一般用每项数据的唯一值来作为key,就算数组长度变化,也不会影响到这个key

答案转自:https://www.cnblogs.com/liandudu/p/14276826.html

4. 详细说一下小程序Page 和 Component的生命周期钩子函数,以及工作内容?

  1. Page 生命周期:
  • onLoad:页面创建时执行
  • onShow:页面出现在前台时执行
  • onReady:页面首次渲染完毕时执行
  • onHide:页面从前台变为后台时执行
  • onUnload:页面销毁时执行
  1. Component 生命周期:Component 生命周期

5. 浏览器缓存有哪些?通常缓存哪几种?

  • http缓存是基于HTTP协议的浏览器文件级缓存机制。
  • websql这种方式只有较新的chrome浏览器支持,并以一个独立规范形式出现
  • indexDB 是一个为了能够在客户端存储可观数量的结构化数据,并且在这些数据上使用索引进行高性能检索的 API
  • Cookie一般网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)
  • Localstoragehtml5的一种新的本地缓存方案,目前用的比较多,一般用来存储ajax返回的数据,加快下次页面打开时的渲染速度
  • Sessionstorage和localstorage类似,但是浏览器关闭则会全部删除,api和localstorage相同,实际项目中使用较少。
  • application cache 是将大部分图片资源、js、css等静态资源放在manifest文件配置中
  • cacheStorage是在ServiceWorker的规范中定义的,可以保存每个serverWorker申明的cache对象
  • flash缓存 这种方式基本不用,这一方法主要基于flash有读写浏览器端本地目录的功能

答案转自:高先生_前端题库https://www.kancloud.cn/z591102/interview/945466
里面有很多前端题可以看看~

6. 如何给数组去重

let arr = [1,2,3,4,4,1]
let newArr = arr.reduce((pre,cur)=>{
    if(!pre.includes(cur)){
      return pre.concat(cur)
    }else{
      return pre
    }
},[])
console.log(newArr);// [1, 2, 3, 4]

答案来源以及关于reduce详细讲解:https://www.jianshu.com/p/e375ba1cfc47

7.如果有10个以上的请求,需确保所有请求都通过才能继续运行其他的逻辑,可以使用什么方法?假设还需要保证所有请求的先后顺序?可以使用什么方法?

想到了async 和 await 搭配使用【欢迎评论补充详解(/ω\)】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值