深入JavaScript

深入JavaScript Day24 - 进程与线程、事件循环、

2022-02-08  本文已影响0人  望穿秋水小作坊

一、进程与线程

1、如何一句话描述操作系统在【硬件】与【软件】之间的作用?

2、分别用一句话描述进程和线程?

3、说一说单核操作系统是如何做到同时让多个进程(边听歌、边写代码、边查资料)同时工作呢?

4、打开Chrome浏览器,每开一个tab,就可以从【活动监视器】里面观察到新开了一个【进程】。为什么Chrome要这么设计呢?

二、事件循环、微任务、宏任务

1、我们经常会说JavaScript是单线程的,那为什么JavaScript处理定时器、网络请求这样的操作不会卡死呢?

image.png image.png

2、事件循环中维护着哪两个队列?

3、两个队列中分别对应放代码中的哪些API任务?

4、事件循环对两个对象的优先级是怎么样的?

三、面试题

1、面试题一【掌握】

image.png
setTimeout(() => {
  console.log("setTimeout1");
  new Promise(function (resolve) {
    resolve();
  }).then(function () {
    new Promise(function (resolve) {
      resolve();
    }).then(function () {
      console.log("then4");
    });
    console.log("then2");
  });
});

new Promise(function (resolve) {
  console.log("promise1");
  resolve();
}).then(function () {
  console.log("then1");
});

setTimeout(function () {
  console.log("setTimeout2");
});

console.log(2);

queueMicrotask(() => {
  console.log("queueMicrotask1");
});

new Promise(function (resolve) {
  resolve();
}).then(function () {
  console.log("then3");
});

2、面试题二【掌握】

image.png
async function async1() {
  console.log("async1 start");
  await async2();
  console.log("async1 end");
}

async function async2() {
  console.log("async2");
}

console.log("script start");

setTimeout(() => {
  console.log("setTimeout");
}, 0);

async1();

new Promise(function (resolve) {
  console.log("promise1");
  resolve();
}).then(function () {
  console.log("promise2");
});

console.log("script end");

3、面试题三【太难,忽略】

image.png

4、node的事件循环【暂时跳过吧,用到再说】

image.png image.png
上一篇 下一篇

猜你喜欢

热点阅读