Loading...
Loading...
时间:2026/06/16
时长:50min
11号下午投的简历,没想到12号hr就打电话过来了,加了微信后十分钟就过简历评估了,流程最快的一集。
自我介绍
你说中学开始自学前端,那是什么样的一个契机让你开始学习呢?为什么要学前端呢?
那我看到你的专业其实是工业工程,我对这个其实没什么概念,你能给我讲一下主要是做什么的吗?
介绍一下你做的协同白板
它是网页应用,还是什么桌面端软件之类的?
我们俩现在都在同一个画布上,那我现在在这里画一笔,它在系统里是怎么样的一个形态?
你刚刚进入到这个房间后,它加载出来的这些绘画数据是存在本地还是存在服务器的?
讲一讲从你刚刚输入url后,到我们现在看到这个Canvas的页面,它中间发生了什么?(八股)
那我们其实能看到,你在这个白板上画一笔,它是有粗细度的变化的,这个是怎么实现的呢?
好,那我还注意到其实你这些笔迹的边缘它是有一些锯齿状的,这个是什么原因呢?
如果我现在要加一个功能:给画笔加一个渐变色,你要怎么设计?
插值是对的,但具体要怎么算,比如起点是蓝色,终点是红色,中间50%的地方应该是什么颜色,怎么算?
我看到你这里其实做了一套碰撞检测的算法,如果我想做一个能自动换行的文本框,那你会怎么在Canvas里设计这个换行边界的检测?
看你简历说读过《Attention is all you need》,能给我说说这篇论文讲了什么吗?
讲讲Transformer
那Attention机制是什么呢?
一点题外话
简单聊了一下之前用JS手搓的一个Transformer Encoder玩具,实现了完整的Encoder模块和Backward机制,并训练了几万轮,分析了一下loss降不下来的原因(loss一开始是六点几,最后也只是降到了5.2左右,分析可能是数据集质量差或者训练效率太低的原因)。
LeetCode 200岛屿数量
有一张灰阶图片,通过一个二维数组来表示,其中的值代表当前像素灰度,仅有0、1两个值。1表示白色,0表示黑色。
Photoshop中有魔棒功能:在用户点击图像之后,可以获得用户点击坐标ⅹ和y。如果用户点击的位置是一个白色的像素,那么所有与该像素连通的白色像素都将被认为是同一区域(黑色同理)。编写一个函数,实现photoshop魔棒功能,计算该位置所在的白色像素区域的面积。
注意:连通指的是上下左右四个方向相邻的像素。
/**
*@param {number} image-二维数组表示的图像,值为0或1
*@param {number} x - 点击的x坐标(行)
*@param {number} y - 点击的y坐标(列)
*@return {number} 连通域的面积
**/
function getArea(image, X, y {
// todo
}
//测试用例
const image1 = [
反问
总的来说,这场面试给我的体验还是很好的,面试官没有特别压力,而是循序渐进、由浅入深的一层层往下挖,语气比较温和和开朗,很大程度上缓解了我的紧张和焦虑。
面试的内容还是让我感到比较意外的,一方面,他基本没有问八股(就简单问了一道很经典的从url到渲染),但问了很多场景思考题,十分考验临场思维能力,也让我收获颇丰;另一方面,岗位名称是AI全栈,JD写的也是“参与 AI 创新方向的产品孵化,从 idea brainstorm 到 MVP 上线全链路 owner”,但全程没有考我简历上的另一个AI Agent项目,反而是一直在追问协同白板,不知道是想留着二面问,还是面试官认为这个全栈项目跟具体业务更相似。
面试之前准备了好几天的 AI 项目拷打应对策略,全程没问倒是差点给我打了个措手不及,好在之前就对这个协同白板项目的理解比较深,也持续迭代了很长一段时间,勉强算是接住了这番拷打。
整场面试的氛围也比较轻松,感觉面试官很看重思维水平,最后的反问也是对每一个问题很耐心的给出了很详细的回复,看来真要面试还是得要面大厂啊,这才是真正有帮助的面试。
时间:2026/06/24
时间:< 30min
自我介绍
讲一讲你最开始为什么要做协同白板
为什么会选择CRDT,有没有了解过市面上的同类产品是怎么实现的
你说最开始是从学长那里了解到了相关知识,那如果是你独立面对一个陌生的领域,你会如何处理?
那如果现在要让你对这个产品做一套测试机制,测一下性能表现,你会怎么设计
如果要让协同白板支持离线编辑,这个你要怎么实现呢?
那如果说我们现在同时有很多人都在操作这个白板,你会怎么处理?
反问
主要反问了一下实习生工作、部门结构、对AI时代前后端的看法、组内想要拥有什么样的能力的人,但是面试官应该是有其它别的什么事,所以反问给出的答复都比较简略,加上这场面试的时间太短了,想不到有什么问题要问的,于是就很快结束了。
整体的节奏很紧凑,面试官没开摄像头,基本都是问我项目怎么设计、怎么实现的,还有几个比较经典的场景问题,问完之后直接就让我反问了,反问阶段更奇怪,我询问实习生要负责什么业务以及部门结构时,面试官直接说这个产品在内部还属于保密阶段,不方便告知,但一面面试官反而说了更多东西(至少说了一下大概业务是做什么的),我也没问二面面试官具体是什么职级,不知道这是什么原因。
反正总体面下来,感觉远不如一面那么愉快和热情,面试官的反应也比较平淡,并且由于没开摄像头,我也不知道他对我的回答有什么反应,反正我自我感觉后面几个场景题回答的比较凑合,不能说很好,但是后续反思的时候也感觉到还是有些没考虑到的地方。
后续:挂了,说是个人经历与岗位不太匹配。
之前刚好复习到了这题,而且还允许用代码补全,直接十分钟秒了:
function getArea(image, x, y) {
const rows = image.length;
const cols = image[0].length;
let s = 0;
while (x >= 0 && x < cols && y >= 0 && y < rows && image[y][x] === 1) {
s++;
image[y][x] = 0;
s += getArea(image, x + 1, y);
s += getArea(image, x - 1, y);
s += getArea(image, x, y + 1);
s += getArea(image, x, y - 1);
}
return s;
}
const image = [
[1, 1, 0, 0, 0],
[1, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 1, 1],
];
console.log(getArea(image, 0, 0));
console.log(getArea(image, 4, 3));后面还进一步讨论了一下优化方案。