Skip to content

快手秋招二面

  1. 自我介绍。

  2. NodeJS 里的事件循环。

  3. 讲一讲 Node 中的 stream 概念。

    📌 回答

    stream 是处理大数据的核心概念,允许以分块的方式逐步处理数据,而不必等到一次性将整个数据全部加载到内存中,从而大幅度提升性能并降低内存占用。

    • stream 的核心特点包括分块处理、非阻塞、管道化。
    • stream 的基本类型包括 Readable、Writable、Duplex、Transform。分别用来分块读取、分批写入、双工通信、数据转换。
    • 应用场景包括大文件读写、网络数据传输、数据转换、日志处理等。
  4. 介绍 V8 引擎。

    📌 回答

    V8 是 Goolge 开发的开源 JS 引擎,主要用于 Chrome 和 Node 环境,负责将 JS 代码编译为机器码执行。它以高性能著称,是现代前端和 Node 开发的核心基础设施之一。

    • 核心特点包括 JIT、高效内存管理、单线程执行模型。
    • 核心组件包括解析器、解释器、编译器、垃圾回收器。其中,解析器将 JS 源代码转换为 AST,现代 V8 采用惰性解析策略,对于未立即执行的的代码制作部分解析;解释器将 AST 转换为字节码,并记录代码执行信息,为后续优化编译提供数据;编译器针对热点代码,基于解释器收集的类型信息,将字节码编译为高度优化的机器码,显著提升执行速度。期间如果类型变化,会触发优化并回退到上一阶段。
    • V8 对 JS 生态的影响包括推动 ES 新特性发展、赋能 Node 开发、启示开发人员优化性能。
  5. 讲一下 Webpack 的构建流程。

  6. Loader 和 plugin 的区别。

  7. 怎么样判断一个元素是否在可视区域内?

  8. 如何减少首屏加载时间?

  9. useCallback 和 useMemo 的区别。

  10. Flex 和 Grid 的区别。

  11. 研究过 GPU 加速吗?

  12. AI 开发你参与了哪些工作?采用什么大模型?编写过 Agent 吗?

  13. 知道哪些鉴权方式,谈一谈你对鉴权机制的理解。

  14. 对工程化建设的了解,各自解决了什么问题?

  15. 什么是中间件?什么是 AOP?具体各自如何使用?

  16. 数组拍平去重并排序。

🔍 展开代码
1.js
js
const arr = [6, 7, [3], [[4, 5], 2], [[[1]]]];

function deal1(arr, depth = 1) {
  const flatten = arr.flat(depth);
  const unique = [...new Set(flatten)];
  const sorted = unique.sort((a, b) => a - b);
  return sorted;
}

function deal2(arr, depth = 1) {
  return [...new Set(arr.flat(depth))].sort((a, b) => a - b);
}

function deal3(arr, depth = 1) {
  const result = [];

  function insert(val) {
    // 二分查找插入位置
    let left = 0,
      right = result.length;
    while (left < right) {
      const mid = Math.floor((left + right) / 2);
      if (result[mid] < val) left = mid + 1;
      else right = mid;
    }
    if (result[left] !== val) result.splice(left, 0, val); // 去重
  }

  function dfs(a, d) {
    for (const item of a) {
      if (Array.isArray(item) && d > 0)
        dfs(item, d - 1); // 控制深度
      else insert(item);
    }
  }

  dfs(arr, depth);
  return result;
}

console.log(deal1(arr, 1));
console.log(deal2(arr, 2));
console.log(deal3(arr, Infinity));
  1. 手写红绿灯效果。
🔍 展开代码
2.js
js
const red = () => console.log("red");
const green = () => console.log("green");
const yellow = () => console.log("yellow");

function light(type) {
  const map = {
    red: [red, 2],
    green: [green, 3],
    yellow: [yellow, 1],
  };
  const fn = map[type][0];
  const wait = map[type][1] * 1000;
  return new Promise((resolve) => {
    setTimeout(() => {
      fn();
      resolve();
    }, wait);
  });
}

async function start() {
  Promise.resolve()
    .then(() => light("red"))
    .then(() => light("green"))
    .then(() => light("yellow"))
    .finally(() => start());
}

console.log("light starting...");
start();
  1. 有没有用一些新技术解决过一些技术挑战?
  2. 「反问」业务重心是否在动画等移动端开发?
  3. 「反问」对于校招看重的个人因素?
  4. 「反问」全栈业务的发展方向?