拼多多暑期前端实习三面

拼多多暑期前端实习三面

  1. 有可能前两轮面试问的太猛了,第三轮面试比较轻松,大部分时间都在聊学习前端的经历,校园经历和项目经历,还问了问怎么带学弟学妹学前端,哈哈哈哈哈

  2. 最后做了一道题

  3. /**
     *
     * @param time 延迟改变promise状态的时间,模拟网络请求
     * @returns {Promise<unknown>}
     */
    function getPromise(time) {
      return new Promise((resolve, reject) => {
        setTimeout(Math.random() > 0.5 ? resolve : reject, time, time);
      });
    }
    
    /**
     *
     * @param urls urls数组,这里传入的是一个时间数组,通过getPromise函数模拟网络请求
     */
    function request(urls) {
      // 用于收集promise结果的数组
      let arr = new Array(urls.length).fill(-1),
        end = 0;
      for (let i = 0; i < urls.length; i++) {
        getPromise(urls[i])
          .then((res) => {
            // 收集promise结果
            arr[i] = res;
          })
          .catch((err) => {
            arr[i] = err;
          })
          .finally(() => {
            // 查找结果数组中第一项为-1的元素下标,表示第一个没有结果的promise实例在数组中对应的下标,
            // 从0到该下标遍历结果数组,判断遍历过的每一个下标所对应的promise实例是否有结果
            // 如果元素值是-1,表示当前下标对应的promise实例还没有结果
            // 如果元素值是undefined,说明该下标对应的promise实例结果已经被输出
            end = arr.findIndex((item) => item === -1);
            // 如果结果数组中没有值为-1的元素,说明整个promise数组中的promise实例都有了结果
            // 需要从头到尾依次遍历输出
            end = end === -1 ? urls.length : end;
            for (let j = 0; j < end; j++) {
              // 打印已经有结果的promise实例的值,并且该值还未被输出过
              if (arr[j] !== void 0 && arr[j] !== -1) {
                console.log(j, arr[j]);
                // 打印后将该下标对应的promise结果标记为undefined,表示已经输出
                arr[j] = void 0;
              }
              // 如果当前下标对应的值为-1,表示当前下标对应的promise实例还没有结果,
              // 需要跳出循环,等待下一轮执行
              if (arr[j] === -1) break;
            }
          });
      }
    }
    
    let urls = [2000, 1000, 5000, 4000];
    let urls2 = [1000, 2000, 3000, 4000];
    let urls3 = [4000, 3000, 2000, 1000, 2000, 1000, 5000, 4000, 1000, 0];
    /*
    实现一个能够尽可能快的串行执行promise的函数
    实现一个request函数,按照数组顺序打印promise结果,包括成功和失败的情况
    promise一有结果立即输出,不能等到所有promise实例都有结果后,一次性输出
    比如输出参数为urls3的时候
    经过4s,打印,4000 3000 2000 1000 2000 1000
    再经过1s后,打印 5000 4000 1000 0
    */
    request(urls3);
    


#春招##实习##面经##前端##拼多多#
全部评论
想问问楼主二面之后大概多久接到的三面邀请呀~
点赞 回复 分享
发布于 2022-04-06 20:58
大佬拿了几个offer了
点赞 回复 分享
发布于 2022-04-12 09:53
请问楼主三面之后hr面了吗?
点赞 回复 分享
发布于 2022-04-14 17:05
想问下一二三面的面试官都是同一个人嘛
点赞 回复 分享
发布于 2022-04-24 17:15
第三面的题现场写出来的吗?有点牛啊
点赞 回复 分享
发布于 2022-04-27 14:33

相关推荐

评论
3
25
分享
牛客网
牛客企业服务