美团前端 实习一面
- 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任务的函数
- 如果条件允许就执行,执行完后执行中任务数减减,并开启下一个任务的执行
- 不允许就放到队列里面
- 维护一个待执行的任务队列
- 维护一个数字,表示当前有多少任务正在执行