2020腾讯前端校招题目自己的理解

1. JS有哪些基本数据类型

基本数据类型:number string null undefined boolean  

除此之外JS还有引用基本类型:Object  Arr Function

这是JS的两种数据类型

2.setTimeout与setInterval的区别

这两个都是定时器,间隔一段事件后执行传入的函数

区别在于setTimeout只执行一次,setInterval间隔一定时间重复执行,需要clearInterval才能清除定时器

setTimeout(function(){
  console.log("123");},1000);

setInterval(function(){

  console.log("123");},1000);

3.setTimeout设置一个时间,那么一定是这个时间之后执行吗?

答案是否定的,不是

原因先不讲,我觉得再说这个之前应该要先讲一下JS的代码执行机制才能更好理解这个问题

4. JS的执行机制

JS是单线程执行任务,那么这里还有一个问题就是为什么JS是单线程执行,众所周知,多线程效率更高不是吗?

JS单线程执行,所有的任务如果放在主线程执行会造成任务阻塞,必须要等到上一个任务完成才能去执行后面的任务,所以采用了一个统一的标准,将一些费时的任务放到子线程去执行,于是就衍生出了两种任务,一种是同步任务一种是异步任务

同步任务就放到主线程执行,异步任务就不妨到主线程而放到子线程也就是任务队列(task queue),等待主线程执行完毕才去执行异步任务

于是就有了下面的执行机制:

()所有同步任务放到主线程

()主线程之外存在一个子线程受主线程控制,只要异步任务有了结果就在任务队列中放置一个事件

()主线程任务执行完毕就去自动读取任务队列中的事件,对应的异步任务结束等待状态进入执行栈开始执行

()不断重复上面过程,形成事件循环机制

5.那么JS为什么是单线程的呢?

举一个例子,如果JS是双线程工作,没错,效率肯定更高,但是如果对一个DOM节点进行操作

一个线程将DOM节点删除,一个线程将DOM节点添加进来,那么到底听谁的?

所以JavaScript本身就是一门浏览器脚本语言,是进行用户交互的,多线程会造成一些同步的复杂问题,所以使用主线程控制子线程的这种机制是最好的选择

6.宏任务和微任务

任务队列中又分为宏队列和微队列

宏队列:定时器都是,setTimeout setInterval,ajax回调,dom事件回调

微队列:promise回调函数

在主线程执行完毕之后,去执行任务队列中的任务,但是任务队列又分为宏队列和微队列,那么先执行哪个呢?

先执行宏队列但是每次执行宏队列都会去先检查微队列中的任务,如果有等待任务就先执行微队列的任务在执行宏队列的任务,

所以也可以说是先执行微队列的任务,所以promise的then()中回调函数总是先于setTimeout()执行

转到第3题

setTimeout不会再设定时间后执行的原因应该也很清晰了把,就是因为要等到主线程执行完毕才执行这个函数,所以并一定会再设定时间之后立即执行

7.pomise的几种状态

promise是有三种状态

pending:初始化状态

resolved也是fuliled状态:成功状态

rejected:失败状态

8.列举常用的数据结构

9.栈、队列、堆栈、堆是什么

10.promise实现原理

只是看到了一些同学的面经分享,添加一些自己的理解,持续更新

11.使用什么布局?position的relative和absolute

布局会用float  position  100%  flex布局
absolute:绝对定位,定位是相对于带有定位的离自己最近的父级元素进行定位,定位后不占有原来的位置
relative:相对定位,定位是相对自己的原来位置进行定位,定位后还会占有原来的位置

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值