CVTE3.24前端二面

直入主题,问我项目做了啥
目前做的毕业设计有啥难点,扯了小程序相关的
然后就开始手撕了,这个手撕搞了几十分钟,写对了,但是因为实例代码有点问题,结果总是不对,并且因为我写的答案面试官说没见过有人这么写,然后他在那看我这个到底为什么总能运行对:

/**
* 请实现一个队列处理程序,当传入任务队列时,能够串行地处理完任务,
* 如果传入的任务包含异步执行,那么必须确保异步执行完毕之后才会执行后面的任务。
**/

function queue(list){

}

function task1(next){
  setTimeout(function(){
    console.log(1);
    next();
  }, 1000)
}

function task2(next){
  console.log(2)
  next();
}

function task3(next){
  setTimeout(function(){
    console.log(3);
    next();
  }, 200)
}

queue([task1, task2, task3])
// queue([task1, task2, task3]); // 下面多了一行这个,导致打印结果一直不对
// 按顺序输出 1, 2, 3

标准答案应该是用递归的:

function queue(list){
  let i = 0;

  function next() {
    if(i < list.length) {
        list[i](next);
        i ++;
    }
  }
  next();
}

但因为我最近看了promise的串行执行,我就用起了promise:

function queue(list){
  list.reduce((p, f) => {
      return p.then(() => {
          return new Promise(next => {
              f(next);
          })
      })
  }, Promise.resolve());
}

然后因为实例代码多了一行queue([task1, task2, task3]);,搞得打印结果总是会奇奇怪怪,后来面试官让我用递归,然后我写出了参考答案的那种,打印结果还是奇奇怪怪,后来两个人就在那看为什么,结果发现最底下居然多了点东西,删掉之后两个都对了

面试官觉得我写的那个可能会有漏洞,就让我调调每个任务的延迟时间,但是每次都没有问题,然后就出这道题的变体给我,让我接着用我的写法完成:

// 加多一个参数 count ,表示任务最大并行数
function queue(list, count){

}
queue([task1, task2, task3], count);

然后参考的答案是这种的:

function queue(list){
  let i = 0;

  function next() {
    if(i < list.length) {
        list[i](next);
        i ++;
    }
  }

  for(let j = 0; j < count; j ++) {
      next();
  }
}

我的是这种的:

function queue(list, count){
    let i = 0;
    // 相当于开启 count 个执行线路,那么就可以用 reduce 创建 count 条 promise 执行链
    const path = [];
    for(let j = 0; j < count; j ++) {
        path[j] = 
            list.reduce((p, f) => {
                return p.then(() => {
                    if(i >= list.length) return;
                    return new Promise(next => {
                        list[i ++](next);
                    })
                })
            }, Promise.resolve());
    }
    Promise.all(path);
}

结果也是执行对的,然后由于时间关系,面试官就没有给我看第三种变体了,就下一题了

如果班上50个人,至少两个人同一天生日的可能性是多少(刚开始想着用全排列算概率,然后其实想考察的是大数定律)

然后面试官说要问的问题就这么多了,我没有什么问题想反问,就结束了

#cvte##广州视源电子科技股份有限公司##面经#
全部评论
两道算法题 我遇到直接死了
点赞 回复 分享
发布于 2022-03-24 22:03

相关推荐

来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹&nbsp;是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹&nbsp;待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹&nbsp;能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥&nbsp;内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
评论
点赞
13
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务