当前位置: 首页 > 面试经验 >

7.12百度提前批前端一面

优质
小牛编辑
82浏览
2023-07-12

7.12百度提前批前端一面

  1. 自我介绍
  2. 项目相关
  • 聊天室支持群聊吗
  • 实时通信实现方式 -夸路由组件的应用场景
  • 保存状态其他方式也能做,为什么要这么做
  1. 前端框架脚手架
  2. monorepo
  3. Vite 和 Webpack区别, 知道多少说多少
  4. Vite首次加载如何优化 (懒加载?)
  5. 子依赖中依赖了父依赖已经安装过的依赖怎么避免重复安装
  6. React useMemo useCallBack 区别,应用场景
  7. useState setState 是异步还是同步 这样做的原因
  • 还有的可能忘了
  1. 实习相关
  2. 写题
// JS实现一个带并发限制的异步调度器Scheduler,
// 保证同时运行的任务最多有两个。
// 完善代码中Scheduler类,
// 使得以下程序能正确输出

class Scheduler {
  constructor() {
   this.count = 2
   this.queue = []
   this.run = []
  }


  add(task) {
    
  }
 }
 
 
 const timeout = (time) => new Promise(resolve => {
  setTimeout(resolve, time)
 })
 
 const scheduler = new Scheduler()
 const addTask = (time, order) => {
  scheduler.add(() => timeout(time)).then(() => console.log(order))
 }
 
 addTask(1000, '1')
 addTask(500, '2')
 addTask(300, '3')
 addTask(400, '4')
 // output: 2 3 1 4
 
 // 一开始,1、2两个任务进入队列
 // 500ms时,2完成,输出2,任务3进队
 // 800ms时,3完成,输出3,任务4进队
 // 1000ms时,1完成,输出1
 // 1200ms时,4完成,输出4
//答案
class Scheduler {
 constructor() {
   this.count = 2
   this.queue = []
   this.run = []
 }

 excute(task) {
   this.run.push(task)
   Promise.resolve(task()).then(() => {
     task.resolve()
     this.run.splice(this.run.findIndex(task), 1)
     if (this.queue.length) {
       this.excute(this.queue.shift())
     }
   })
 }

 add(task) {
   return new Promise((resolve, reject) => {
     task.resolve = resolve
     if (this.run.length < this.count) {
       this.excute(task)
     } else this.queue.push(task)
   })
 }
}

const timeout = (time) =>
 new Promise((resolve) => {
   setTimeout(resolve, time)
 })

const scheduler = new Scheduler()
const addTask = (time, order) => {
 scheduler.add(() => timeout(time)).then(() => console.log(order))
}
addTask(1000, '1')
addTask(500, '2')
addTask(300, '3')
addTask(400, '4')

12.反问 业务: 办公工具 AI接入软件

#提前批##百度#
 类似资料: