【2024春】Moka 实习面经

219 阅读2分钟

一面

上来两道手撕题:

Moka 手撕题

/**
 * @param {{start: number, end: number}} first - 第一个区间
 * @param {{start: number, end: number}} second - 第二个区间
 * start end 是number 且需要考虑 小数情况
 * @return {boolean} 是否有交集
 */

function isOverlapped(first, second) {
  // TODO
}

// test case
const a = { start: 3, end: 5 };
const b = { start: 9, end: 10 };
const c = { start: 4, end: 6 };
const d = { start: 5, end: 8 };
const e = { start: 1, end: 6 };
const f = { start: 5, end: 7 };
const g = { start: 1, end: 3 };

const r1 = isOverlapped(a, b);
const r2 = isOverlapped(c, d);
const r3 = isOverlapped(d, e);
const r4 = isOverlapped(f, g);
console.log(r1, r2, r3, r4); // false true true false
/**
 * @param {Range[]} intervals - 若干个区间
 * @return {Range[]} 合并后的区间
 */

function merge(interval) {
  // TODO
}

// test case
const f = [
  { start: 3, end: 5 },
  { start: 9, end: 10 },
  { start: 4, end: 6 },
  { start: 5, end: 8 },
  { start: 10, end: 12 },
  { start: 11, end: 14 },
];

const g = [
  { start: 4, end: 7 },
  { start: 6, end: 9 },
  { start: 1, end: 3 },
  { start: 8, end: 10 },
];
const h = [
  { start: 4, end: 7 },
  { start: 9, end: 10 },
  { start: 7, end: 9 },
];

console.log(merge(f)); // [{start: 3, end: 8}, {start: 9, end: 14}]
console.log(merge(g)); // [{start: 1, end: 3}, {start: 4, end: 10}]
console.log(merge(h)); // [{start: 4, end: 10}]

提问

  1. JS 的事件循环机制
  2. let const var 区别
  3. 普通函数和箭头函数有什么区别
  4. 怎样改变 this 指向
  5. box-sizing 控制什么的
  6. 回流和重绘的区别
  7. React Fiber 的原理
  8. hooks 写法的优势和缺点
  9. React Router 怎么控制路由(path)(介绍 hash 和 history)
  10. hooks 和 函数式组件怎么做渲染上的优化
  11. 前端如何控制 http 缓存
  12. webpack 有做过配置吗(我说没有,我只用过 Vite)
  13. Vite 为什么要比 Webpack 快(Vite 的热更新怎么做的)
  14. ts 泛型用在什么情况
  15. 介绍一下重载
  16. unknown 和 never 的区别
  17. 后面让我介绍了一下 Electron 里面用到了 Node 哪些东西

二面

整体上都是在围绕你的项目展开的一些问题:

  1. vue 和 react 的区别
  2. 了解过微前端吗
  3. 什么是 CI/CD
  4. 知道 monorepo 吗
  5. ts 的 infer 了解过吗

差不多好像是这些,剩下的都是问项目中如何解决问题之类的

二面过完晚上 hr 打电话约我 hr 面了,第二天 oc。