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

全部评论
哥你是暑期实习吗
点赞 回复 分享
发布于 04-25 14:53 重庆

相关推荐

04-07 12:17
已编辑
哈尔滨工业大学 Web前端
#腾讯音乐26届实习# 想问问各位佬们,美团外卖发offer了,TME约HR面,这两个应该怎么选啊#TME##美团#码一下面经吧美团一面1.自我介绍2.深聊项目,中间穿插八股3.vue生命周期,这里我讲的很细,能扩展迁移的都说了4.如何理解深拷贝和浅拷贝5.如何理解虚拟DOM,对如渲染来说有什么好处6.http和https7.如何解决跨域8.手撕最长公共前缀,说一下时间复杂度和空间复杂度反问:部门业务学习建议美团二面1.面试官介绍部门情况2.希望在实习中有什么收获3.项目介绍、难点亮点4.用了vue什么组件5.学校里学过什么语言6.聊ai对于现在的趋势,对于前后端的影响7.react了解多少8.webpack有什么了解,原理、机制,优化、产物9.nodejs有什么了解10.网络11.学习新技术新内容通过什么方式(建议体系化)一些建议反问:结果时间TME一面(忘记录音了)项目+八股手撕:文件上传、并发请求控制TME二面自我介绍1.学前端多久2.为什么想学前端3.项目为什么用vue框架4.讲一下vue双向绑定,具体怎么实现的5.网络安全,XSS,CSRF,怎么拿到cookie的6.浏览器的重排和重绘7.自己还擅长什么8.http缓存9.手撕事件总线10.手撕大文件上传、断点续传(说的思路没让写代码)TME三面(电话形式二十分钟,也忘记录音了)一些基础、性能指标没答上来、问github提交量怎么这么少、个人博客是自己写的吗等等整体就是通过面试官的问题自己去扩展,去关联其他知识点。
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客企业服务