美团前端暑期实习一二面(坐等三面/OC!!)
5月6日15:00 美团一面
- JS 有哪些类型,分别存储在哪里(堆区/栈区),使用上有什么区别
- 深拷贝、浅拷贝、
=
赋值有何区别?描述一下深拷贝写法?有哪些坑(循环引用) - V8 垃圾回收机制(深挖,不会)
- 闭包
- 作用域链
- 原型链
- 输入 URL 到看到页面有哪些过程?
- Follow up:浏览器回流和重绘,如何减少回流(原生 / React 等框架)
- Node 事件循环
- 和浏览器的有什么不一样?
- Node 微任务和宏任务都有哪些?(只会说 Promise 和 timeout……其实还有很多)
null
和undefined
区别:如何区分?除了用===
还有什么方法?- TCP 三次握手
- HTTP 常用状态码
- 深挖
304 Not Modified
:返回 304 实际上发生了什么过程?浏览器缓存机制? - 有哪两种缓存:强缓存、协商缓存
- 深挖
- 前端构建工具:Webpack 和 Vite
- Babel 是什么?原理(不会)
- React Fiber 有了解吗?(深挖原理)
- React 闭包陷阱
- 使用过哪些 AI 工具?平时如何使用 AI?
- 算法题:编辑距离
5月8日19:00 美团二面
二面一开始,面试官就说有三部分:简历内容了解;基础知识;代码考察
简历
- 深挖实习,尤其注重里面大模型应用相关的内容
- 深挖项目:产出是什么,学到了什么,为什么做(动机)
- 看我项目的一部分关键代码
- 问:大模型流式输出是什么原理?
- 盲猜 server push - 错啦!是
Transfer-Encoding: chunked
然后按 chunk 返回,知道\r\n
结束!!
- 遇到最大的挑战是什么?
基础知识
- 浏览器缓存(估计是看我一面没答上来,又来了一次):返回
200
的缓存和304
的缓存机制有什么不同? - Webpack 会多少说多少(我说用 Vite 多,他没问 Vite)
- Webpack Tree-shaking
- 写过 plugin/loader 吗?(没有)
- 用过 JWT 吗?(用来实现登录态保持)如果别人劫持到了这串 token,能不能在别的浏览器伪造登录态?有什么方法解决?(完全不会!盲猜了几个)
- React Hooks 为什么不能写到 if/for 等控制结构里?
代码题
仔细观察一个树形结构:
// 输出1 3 7 8
const tree = {
value: 1,
left: {
value: 2,
left: {
value: 4,
left: {
value: 8,
}
},
right: {
value: 5,
}
},
right: {
value: 3,
left: {
value: 6,
},
right: {
value: 7,
}
}
}
问为什么输出1 3 7 8,找规律——发现是输出每一层的最后一个节点!
于是开始写:
interface TreeNode {
value: number;
left?: TreeNode;
right?: TreeNode;
}
function findLastNodeValues(tree: TreeNode): number[] {
const queue: [TreeNode, number][] = [[tree, 0]];
const lastNodeValues: number[] = [];
while (queue.length > 0) {
const [node, depth] = queue.pop()!;
lastNodeValues[depth] = node.value;
if (node.left) {
queue.unshift([node.left, depth + 1]); // 提了一嘴这是O(n)
}
if (node.right) {
queue.unshift([node.right, depth + 1]);
}
}
return lastNodeValues;
}
console.log(findLastNodeValues(tree));
JavaScipt没有像样的队列结构,本来想双栈模拟一个,面试官说用unshift
就好,于是就这么写了
坐等OC!!!
最后请教一下牛油们:美团到底有几面啊!二面反问的时候他们说还有一轮,我不知道他说的是 HR 面还是技术三面……慌慌的 QAQ
#美团##美团求职进展汇总##前端##美团面经##前端实习#