腾讯CSIG一二三+HR面经验+timeline(已OC)
4/29 技术一面(90min)
- 为什么选择前端(答:注重用户表达和体验;所见即所得,反馈感强)
- 实习相关:哪个部门,什么技术栈
- 框架理解(例如
nest.js
为什么要基于express/fastify
等层层封装 - 答:类似于装饰器模式,不断往上面加功能) - 除了装饰器模式还知道哪些设计模式?(订阅-发布,工厂模式)
- 框架理解(例如
- 个人项目介绍-最具有挑战性的项目-why-技术选型
- 使用 AI 工具了吗?如何使用的?
- 知道闭包吗?为什么出现闭包?
- 闭包会产生什么问题?(内存泄露)那怎么解决内存泄露?
Promise
解决什么问题(回调地狱),简述如何把回调改成Promise
- 浏览器事件循环
- 回流和重绘,什么时候触发,如何减少(答:我只知道 React 用 Virtual DOM 来合并多次 DOM 操作一起 commit,只回流一次)
- 那讲讲 React 的虚拟 DOM 和 Fiber 吧
useLayoutEffect
和useEffect
有何区别?如何模拟生命周期?- HTTP 1/2/3 的主要区别
- “Git 会吗?哦,我看你 GitHub 有一堆项目,咱不用问了(面试官好可爱哈哈哈哈)”
- 手写题:实现一个
throttle
- 手写题:在二叉搜索树(BST)里找到第 K 大的值
- 我先写了一个记忆化搜索+贪心,过了用例。面试官提示:知道树的遍历吗?
- 我(醍醐灌顶版):“Oh!!中序遍历!!我3min写出来!!”
- 面试官:“好,知道你会,不用写了(开始反问环节)”
5/1 技术二面(80min)
- 实习深深深深深挖(25min)
- (接着实习的 Node 项目问)中间件知道是做什么的吗?用过哪些?
- 对大模型的理解和应用
- 用 Webpack 还是 Vite?(都用)讲讲你的理解,它们的区别
- 为什么个人项目用 Vite,实习的时候的脚手架都是 Webpack?
- Vite 开发环境、生产环境有何不同?(开发环境不会全部打包)
- Webpack 和 Vite 的 Tree shaking
- React Fiber(梅开二度……)
- React Hooks 是做什么的?常用哪些 hooks?
useMemo
,useCallback
和useRef
都是性能优化 / 缓存类 Hook,有什么区别?- TCP 和 UDP 区别,TCP 三次握手,SYN 攻击
- 跨域,同源策略
- 前端优化,使用过哪些优化方式(我说没怎么接触过……)
- TS 用过吗?type 和 interface 有何区别?
- 手写题(这次是 share screen 在本地写):
对算术表达式求值:给定一个字符串,输出对应的计算结果,包括加减乘除,小括号,只考虑正整数,例如"2+3*2" => 输出8
例如:1+2*(5-2)+4 => 1+2*3+4 => 1+6+4 => 11
(代码见下一页,最优解是逆波兰表达式,但我不会,写了个同样是
O(n)
的多轮迭代
- 手写题2: 有一种花,两种鸟,花定时开放,鸟看到花开会叫,鸟的叫声不一样,用代码来实现这样一种场景(我:?????不明所以……写了两个类,类似于发布订阅)
- 评价:代码能力挺好的……(秒过,面试官说“如果有三面,要安排到五一回来”)
// 对算术表达式求值:给定一个字符串,输出对应的计算结果,包括加减乘除,小括号,只考虑正整数
// 1+2*(5-2)+4 => 1+2*3+4 => 1+6+4 => 11
function calculate(str: string): number {
let stack: number[] = []; // 下标
let result = 0;
// 处理括号,如果没有 () 则不用递归
for (let i = 0; i < str.length; i ++) {
let c = str[i];
if (c === '(') {
stack.push(i);
} else if (c === ')') {
let startIdx = stack.pop() as number; // 最后一个元素,也就是括号开始
if (stack.length === 0) {
const inner = str.substring(startIdx + 1, i);
const res = calculate(inner);
// 替换原来括号部分的东西
return calculate(str.substring(0, startIdx) + res + str.substring(i + 1));
}
}
};
// 解析
let components: (number | string)[] = [];
let currentNumber = 0;
for (let c of str) {
if (["+", "-", "*", "/"].includes(c)) {
components.push(currentNumber);
currentNumber = 0;
components.push(c);
} else {
currentNumber = currentNumber * 10 + Number(c);
}
}
components.push(currentNumber);
// Tested
// 乘除 2*3*3 -> [--, --, 6, *, 3]
for (let i = 0; i < components.length; i ++) {
if (components[i] === "*" || components[i] === "/") {
// 计算 i-1 和 i+1
let temp: number;
if (components[i] === "*") {
temp = (components[i - 1] as number) * (components[i + 1] as number);
} else {
temp = Math.floor((components[i - 1] as number) / (components[i + 1] as number));
}
// 替换
components[i + 1] = temp;
components[i] = components[i - 1] = "--"; // 无用占位符
}
}
// 加减 [2, +, 3, -, 5]
components = components.filter((c) => c !== "--");
let isAdd = true;
for (let i = 0; i < components.length; i ++) {
if (components[i] === "+" || components[i] === "-") {
isAdd = (components[i] === "+");
} else {
result += (isAdd ? components[i] as number : -components[i]);
}
}
// console.log(result)
return result;
}
console.log(calculate("(1+2*(5-2))*4"));
console.log(calculate("20*11+80/4"))
console.log(calculate("((1+2)*(5-2))*(((4+3)*2)+6)"));
5/7 技术三面(30min)
- 聊聊你做过的项目
- 有没有上线,有没有用户(没有,只是demo)
- 看一下部署的 URL(我发了3个,简历上没写的都发了,但只有一个是完成度高的)
- 选择其中一个展示。难点是什么?
- 为什么要封装很多个 hooks(答:视图和数据分离,方便维护)
- 聊聊实习
- (画风突变)聊聊基础问题:
- 平时使用哪些协议?(HTTP最多,有写过 TCP/UDP socket 的 C++ 项目)
- HTTP 状态码有哪些?
- 深挖
304 Not Modified
:缓存在哪里?浏览器发请求了吗?
- JS 原型链知道吧(知道)最终指向哪里(null)然后就没细问
- 留学学到了什么?研究方向(无,授课型)?有没有投其他岗位?
5/7 HR面(30min)
- 为什么选前端?确定搞前端吗?
- 周围人对你什么评价?(是好盆友)
- 周围人对你有过负面评价吗?(有,说我话太多)
- 实习的时候被批评过吗?(有,还是话太多,太爱分享)
- 三个词语形容优点(每一个都细问了,聊了很久)
- 三个词语形容缺点
- 被批评什么感受?分享得不到反馈会难过吗?(不会)
- 有过一段长时间投入没有回报的事情吗?
- 为什么留学?什么时候决定的(大二就决定了,强调了一下不是大四一拍屁股决定的、不是保不上研才决定的)
- 为什么放弃保研?
- 今后什么打算,回国去哪个城市有倾向吗(那必然是大深圳!!)
5/7 云证,录用评估中
坐等OC坐等OC坐等OC!!求求了鹅!!让我做一次鹅孝子吧!!
咏鹅一首:
有鹅选鹅,无鹅延毕,明年再鹅,延毕还无,建议读硕,毕业再鹅,无鹅延毕,明年再鹅,若再无鹅,建议读博,毕业再鹅,无鹅延毕,明年再鹅,延毕还无,博后可读,出站再鹅,若再无鹅,入校拼搏,评上教授,还能再鹅
5/8 私聊问了HR,说“这两天”审批完,继续许愿!!盼鹅!!!
5/9 HR直接说offer发到邮箱了,1秒接收!!!孩纸来还愿了!!!
让我再次咏鹅:
#面试##前端技术面试##腾讯求职进展汇总##腾讯前端面试#有鹅选鹅,无鹅延毕,明年再鹅,延毕还无,建议读硕,毕业再鹅,无鹅延毕,明年再鹅,若再无鹅,建议读博,毕业再鹅,无鹅延毕,明年再鹅,延毕还无,博后可读,出站再鹅,若再无鹅,入校拼搏,评上教授,还能再鹅