pdd二面 自我复习版

// 原生js

// input输入框  onChange blur input

// 难处理的问题

// 框选 矩阵检测
// 防抖 节流 防止频繁调用
// 用数据计算的方式 防止卡顿

// 怎么做的矩阵检测 对角
// RAF


// async函数
// Function

async function fn(){
  return 1234;
}
async function test(){
  let result = await fn();
  console.log(result);
}

//pending

let p = new Promise((resolve, reject)=>{
  console.log(4);
  // ...
  if(Math.random()>0.5) resolve('success');
  reject('failed');
})

console.log(1);
test();
console.log(2);
p.then(() => {
  console.log(3);
})
/*
4
1
2
1234
3
*/


function requestPendingFunc(reqFn, timeout) {
  // let res_map = new Map();
  return function(){
    if(reqFn.called) return reqFn.p;
    reqFn.called = true;
    let start = new Date.getTime();
    const p = new Promise((resolve, reject)=>{
      let done = false;
      reqFn().then(data=>{
        resolve(data)
        done = true;
      }, err=>{
        // if((new Date.getTime() - start)/1000 > timeout) reject(err);
        if(done) {
          reject('over time!');
          return;
        }
        reqFn().then(data=>{
            resolve(data);
            done = true;
          },
          err=>{
            done = true;
            reject(err)
          }).finally(_=>done=true);
        reject(err)
      })
      setTimeout(()=>{
        if(done === false) done = !done; reject('over time!')
      }, timeout)
    })
    reqFn.p = p;
    return reqFn.p;
  }
}

const fn1= requestPendingFunc(() => {
  return new Promise((resolve, reject)=>{
    setTimeout(()=>{
      const res = Math.random();
      if(res>0.5) resolve(`success ${res}`);
      reject('failed');
      // ....异步逻辑 会消耗一定的时间
      // ...
    }, Math.random())
  })
}, 5000);
(async function () {
  fn1().then((res) => {
    console.log(1, res);
  })
  fn1().then((res) => {
    console.log(2, res);
  })
  fn1().then((res) => {
    console.log(3, res);
  })
  const res = await fn1();
  console.log(res);
})();
// 弹窗 屏幕垂直居中 如果要求你实现点击其他区域 关掉弹窗

全程项目问题+基础,面试官和我公用文本编辑器来交流。上面是面试结束时的编辑器内容。

  1. input的事件有哪些?
  2. 你的项目中有没有解决什么难以处理的问题?
  3. 矩阵相交如何检测?
  4. 节流、防抖?
  5. 了解过RAF吗?
  6. async函数和普通函数的区别?
  7. 写一个async函数(和它的调用)?
  8. 写一个promise的构造?
  9. promise和同步代码结合的输出?
  10. promise、同步代码、和async结合的输出?
  11. 完成一个函数requestPendingFunc,该函数可以传入两个参数:待执行的基本函数和时限。调用该函数返回一个新的函数(也就是下面代码的fn1),如果多次调用这个新的函数(fn1),只要其中一次的调用获得了结果,所有的调用获得同样结果。如果超时,返回失败结果('overtime')
  12. 在8的基础上,添加一个需求:允许失败后且未超时情况下,再尝试调用一次,其他规则一样。
  13. 如果有一个弹窗,如何实现点击弹窗外部后隐藏弹窗?
  14. 反问+聊天。
function requestPendingFunc(reqFn, timeout) {}

const fn1= requestPendingFunc(() => {
  return new Promise((resolve, reject)=>{
    setTimeout(()=>{
      const res = Math.random();
      if(res>0.5) resolve(`success ${res}`);
      reject('failed');
      // ....异步逻辑 会消耗一定的时间
      // ...
    }, Math.random())
  })
}, 5000);
(async function () {
  fn1().then((res) => {
    console.log(1, res);
  })
  fn1().then((res) => {
    console.log(2, res);
  })
  fn1().then((res) => {
    console.log(3, res);
  })
  const res = await fn1();
  console.log(res);
})();
//res应该输出同样的值

全部评论

相关推荐

评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务