快手前端|24秋招|面试合集

一面:70min

  • 自我介绍
  • 性能优化的两个问题,度量的手段?性能优化的方法中提升最大的方法是什么?
  • 实习遇到的最大的挑战是什么,给你带来最深印象的是什么
  • 平时用到的git操作
  • 对懒加载的原理有了解吗
  • 选课系统项目体积优化的方法
  • Electron的应用场景?现在给你一个场景,你要怎么用electron去设计他们之间的交互
  • 给一个小白讲明白electron是什么,你会怎么讲
  • Electron有代表性的feature
  • JS事件循环的过程

手撕题1:用htmlcss写这个面试界面的结构和样式

    // 手撕题2 统计一个复杂对象value中的英文字符a-z以及A-Z的个数
    let object = {
      name:'code',
      obj : {
        name: 'CODE',
        age: [12,45,20],
        info : {
          nick: 'haha!'
        }
      },
      hooby: ['a','B']
    }
    let res = 0;
    const countLetter = (obj) => {
      for(let key in obj) {
        if(obj[key] instanceof Array){
          obj[key].forEach(val => {
            if(val >= 'a' && val <= 'z' || val >= 'A' && val <= 'Z'){
              res++;
            }
          });
        } else if(obj[key] instanceof Object) {
          countLetter(obj[key]);
        } else if(typeof obj[key] === 'string') {
          let arr = obj[key].split('');
          arr.forEach(val => {
            if(val >= 'a' && val <= 'z' || val >= 'A' && val <= 'Z'){
                res++;
              }
            }
          )
        }
      }
    }
    countLetter(object);
    console.log(res);

二面:40min

想看此处的段子可移步前面的动态

  • 优化bundle体积怎么优化的
  • 是否了解过版本升级是怎么部署的
  • Ts的类型和接口有什么区别
//问答题1:
{} == {}
{} === {}
// 回答这俩的结果:都是错的
// 因为,对象使用 = 进行比较的时候是比较两个对象的引用
// 由于这两个对象是独立创建的,无论是全等比较还是内容相等的比较都不成立

// 问答题2
const a = 1;
function a() {}

// 这样的代码执行之后会出现什么情况?
// 答案:const a = 1 会报错,因为函数先进行声明
// 使用了a作为函数名,之后再声明常量a浏览器会提示重复定义

//手撕1:请你编写一个异步函数 promisePool
//它接收一个异步函数款组functions 和 池限制 n,
//它应该返回一个 promise 对象,当所有输入函数都执行完毕后,promise 对象就执行完毕
function delay(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}

async function promisePool(functions, n) {
  const results = [];
  let index = 0;

  async function executeNext() {
    const currentIndex = index;
    index++;

    if (currentIndex >= functions.length) {
      return; // 所有函数都已执行完毕
    }

    const currentFunction = functions[currentIndex];
    const result = await currentFunction();
    results[currentIndex] = result;

    await delay(0); // 让事件循环得以执行

    // 递归执行下一个函数
    await executeNext();
  }

  // 开始执行初始函数,不超过并发限制
  const initialPromises = [];
  for (let i = 0; i < Math.min(n, functions.length); i++) {
    initialPromises.push(executeNext());
  }

  // 等待所有初始 promises 完成
  await Promise.all(initialPromises);

  return results;
}

// 示例用法
async function asyncFunction1() {
  await delay(1000);
  return '函数 1 已完成';
}

async function asyncFunction2() {
  await delay(1500);
  return '函数 2 已完成';
}

async function asyncFunction3() {
  await delay(500);
  return '函数 3 已完成';
}

const functions = [asyncFunction1, asyncFunction2, asyncFunction3];
const concurrencyLimit = 2;

promisePool(functions, concurrencyLimit)
  .then(results => {
    console.log('所有函数已执行完毕:', results);
  })
  .catch(error => {
    console.error('出现错误:', error);
  });

// 手撕2
// 请你编写一个函数,它接收一个其他的函数,并返回该图教的 柯里化 后的形式
function curry(fn, ...args) {
  if (args.length >= fn.length) {
    return fn(...args);
  } else {
    return (...newArgs) => curry(fn, ...args, ...newArgs);
  }
}

// 示例函数
function sum(a, b, c) {
  return a + b + c;
}

const curriedSum = curry(sum);

console.log(curriedSum(1)(2)(3)); // 输出:6
console.log(curriedSum(1, 2)(3)); // 输出:6
console.log(curriedSum(1)(2, 3)); // 输出:6
console.log(curriedSum(1, 2, 3)); // 输出:6

三面:技术终面(50min)

  • 问的更多是个人情况,技术视野相关的东西
  • 比如为什么选前端,最让你眼前一亮的技术,javaelectron有什么区别等等问题,参考价值不大,就不细说了
  • 两个手撕,一个低代码相关,一个是把vue组件转化成react组件,也都挺抽象

总结

  • 一面面的挺烂,手撕很简单但没写出来,面试官还给我过了,后来问二面面试官一面的面评,他竟然说面试官评价还可以???
  • 二面就面的更烂了,问啥都不会,然后稀里糊涂地过了...
  • 三面技术 ld 问技术视野,我就没有技术视野,又是xjb说,想到啥说啥,但是面试官给我的面试体验还不错,甚至让我回去等电话和邮件,让我抱着不切实际的幻想,最后果然收到了感谢信真不如当场就让我知道要挂,反差太大让人怪难受的

#23届找工作求助阵地##晒一晒我的offer##你的秋招进行到哪一步了##快手##秋招#
全部评论
await delay(0); // 让事件循环得以执行 老哥,这段代码没理解什么意思,请教一下
点赞 回复 分享
发布于 2024-03-22 11:47 北京
我二面八股答得还行,两道题都写出来了,一个小时就感谢信了
点赞 回复 分享
发布于 2023-09-19 20:31 广东
想询问下时间线是怎样的,都三面了因为啥挂掉的呀
点赞 回复 分享
发布于 2023-09-13 15:00 安徽
楼主简历上写了electron吗?怎么问了这么多
点赞 回复 分享
发布于 2023-09-11 21:16 湖北

相关推荐

01-28 16:12
中南大学 Java
几年前还没有chatgpt的时候,刷题真的是很痛苦。刷不出来只能看题解,题解有几个问题:第一个是每次看的写题解的人都不一样,很难有一个统一的思路;第二个也是最重要的是,题解只提供了作者自己的思路,但是没有办法告诉你你的思路哪里错了。其实很少有错误的思路,我只是需要被引导到正确的思路上面去。所以传统题解学习起来非常困难,每次做不出来难受,找题解更难受。但是现在chatgpt能做很多!它可以这样帮助你&nbsp;-1.&nbsp;可以直接按照你喜欢的语言生成各种解法的题解和分析复杂度。2.&nbsp;把题和你写的代码都发给它,它可以告诉你&nbsp;你的思路到底哪里有问题。有时候我发现我和题解非常接近,只是有一点点🤏想错了。只要改这一点点就是最优解。信心倍增。3.&nbsp;如果遇到不懂的题解可以一行一行询问为什么要这样写,chatgpt不会嫌你烦。有时候我觉得自己的range写错了,其实那样写也没错,只是chat老师的题解有一点优化,这个它都会讲清楚。4.&nbsp;它可以帮你找可以用同类型解法来做的题。然后它可以保持解法思路不变,用一个思路爽刷一个类型的题。如果题目之间思路又有变化,它会告诉你只有哪里变了,其他的地方还是老思路。5.&nbsp;它也可以直接帮你总结模板,易错点。经过chat老师的指导,我最大的改变是敢刷题了。之前刷题需要先找某一个人写的算法题repo,然后跟着某一个人他的思路刷他给的几个题。如果想写别的题,套用思路失败了,没有他的题解,也不知道到底哪里错了;看别人的题解,思路又乱了。这个问题在二分查找和dp类型的题里面特别常见。但是现在有chat老师,他会针对我的代码告诉我我哪里想错了,应该怎么做;还按照我写代码的习惯帮我总结了一套属于我的刷题模板。每天写题全是正反馈!
牛客981:不刷才是爽
AI时代的工作 VS 传...
点赞 评论 收藏
分享
评论
9
29
分享

创作者周榜

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