美团前端 实习一面

  • HTML的doctype有什么用
  • script和link标签的加载顺序
  • iframe有了解过吗
  • 行内元素水平垂直居中
  • innerHTML,innertext区别
  • 修改dom耗时?为什么
  • 重绘 回流
  • promise意义(回调地狱)
  • 回调和闭包

算法:

实现promsie执行队列。传入一个promise数组,每次只能同时执行三个任务,如何实现

class Scheduler {
  constructor(limit) {
    this.limit = limit;
    this.queue = [];
    this.curr = 0;
  }
  add(creator) {
    return new Promise((reslover) => {
      const thisTask = () => {
        creator().then(()=>{
          reslover()
          this.curr--
          if(this.queue.length>0){
            this.queue.shift()()
          }
        });
      };
      if (this.curr == this.limit) {
        this.queue.push(thisTask);
      } else {
        this.curr++
        thisTask();
      }
    });
  }
}
const scheduler = new Scheduler(3);

const addTask = (time, order) => {
  scheduler
    .add(() => {
      return new Promise((resolve) => {
        setTimeout(resolve, time);
      });
    })
    .then(() => console.log(order));
};

addTask(1000, "1");
addTask(500, "2");
addTask(300, "3");
addTask(400, "4");
module.exports = Scheduler;
  • 创建一个执行Promise任务的函数
  • 如果条件允许就执行,执行完后执行中任务数减减,并开启下一个任务的执行
  • 不允许就放到队列里面
  • 维护一个待执行的任务队列
  • 维护一个数字,表示当前有多少任务正在执行

#软件开发笔面经#
全部评论

相关推荐

点赞 评论 收藏
分享
06-25 09:33
厦门大学 Java
程序员饺子:现在日常估计没啥hc了,等到八月多估计就慢慢有了。双九✌🏻不用焦虑的
投递快手等公司7个岗位
点赞 评论 收藏
分享
评论
2
10
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务