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应该输出同样的值

全部评论

相关推荐

HTTP头是HTTP协议中的一部分,用于在请求和响应中传递附加的信息。 HTTP头由字段名和字段值组成,用冒号分隔,每个字段占据一行。以下是几个常见的HTTP头字段及其作用:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=b48bebe08e474db8b80b853b12bafd48User-Agent:指明发送请求的客户端应用程序的类型和版本。服务器可以根据这个头字段来判断用户的设备或浏览器类型,以提供适合的内容。例:User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3Content-Type:指定请求或响应中传输的数据的MIME类型。对于请求,它告诉服务器请求正文的内容类型;对于响应,它告诉浏览器响应正文的内容类型。例:Content-Type: application/jsonContent-Length:指定请求或响应正文的字节数。服务器可以使用此字段来确定正文的长度,从而正确解析请求或响应。例:Content-Length: 348Accept:指定客户端能够处理的响应内容类型。浏览器在发送请求时使用此字段,以告诉服务器它可以接受哪些类型的响应。例:Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8Authorization:用于在请求中传递身份验证信息,通常用于保护需要授权访问的资源。例:Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==Cookie:用于在请求中传递保存在客户端的会话信息。服务器可以使用此字段来识别和验证用户。例:Cookie: sessionId=ABC123这些是HTTP头字段中的一些常见例子。HTTP头字段的作用是在请求和响应之间传递额外的信息,以便客户端和服务器可以根据需要进行适当的处理。不同的HTTP头字段有不同的作用,可以用于传递身份验证信息、内容类型、缓存控制等。
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务