面试题答案
一键面试设计思路
- 定义任务优先级:
- 可以通过给每个任务分配一个数字优先级值来定义优先级,值越大表示优先级越高。例如,高优先级任务可以设置优先级为 3,中等优先级为 2,低优先级为 1。
- 调度算法选择:
- 采用优先队列(Priority Queue)的思想。优先队列是一种数据结构,其中每个元素都有一个优先级,在出队操作时,具有最高优先级的元素最先出队。
- 在 JavaScript 中,可以使用数组来模拟优先队列,通过排序操作来确保高优先级任务在队列头部。每次添加新任务时,重新排序队列以维护优先级顺序。
- 实现:
- 创建一个任务类
Task
,用于封装任务函数及其优先级。 - 创建一个任务调度器类
TaskScheduler
,负责管理任务队列并按优先级调度任务执行。
- 创建一个任务类
代码示例
class Task {
constructor(func, priority) {
this.func = func;
this.priority = priority;
}
}
class TaskScheduler {
constructor() {
this.taskQueue = [];
}
addTask(task) {
this.taskQueue.push(task);
this.taskQueue.sort((a, b) => b.priority - a.priority);
}
executeTasks() {
while (this.taskQueue.length > 0) {
const task = this.taskQueue.shift();
task.func();
}
}
}
// 使用示例
const scheduler = new TaskScheduler();
// 定义不同优先级的任务
const highPriorityTask = new Task(() => {
console.log('高优先级任务执行');
}, 3);
const mediumPriorityTask = new Task(() => {
console.log('中等优先级任务执行');
}, 2);
const lowPriorityTask = new Task(() => {
console.log('低优先级任务执行');
}, 1);
// 添加任务到调度器
scheduler.addTask(highPriorityTask);
scheduler.addTask(mediumPriorityTask);
scheduler.addTask(lowPriorityTask);
// 执行任务
scheduler.executeTasks();
上述代码中:
Task
类用于创建任务实例,包含任务函数和优先级。TaskScheduler
类负责管理任务队列,addTask
方法添加任务并重新排序队列以保持优先级顺序,executeTasks
方法按优先级顺序依次执行任务。- 在使用示例中,创建了不同优先级的任务并添加到调度器中执行,输出结果将按照高、中、低优先级的顺序打印。