面灵AI→

帆软前端一面:项目拷打、BFS 手撕与 AI 代码质量

轮次
一面
时间
2026-09
来源
牛客网

《面试题目》

  1. 简单介绍个人背景(无标准自我介绍环节)。
  2. 项目拷打(程度较轻)。
  3. 少量八股。
  4. 你们怎么保证 AI 生成代码的质量与正确性?
  5. 手撕:BFS。
  6. 手撕:数组转树。
  7. 反问:业务方向是什么?面试流程是怎样的?AI token 会报销吗?

《参考解析》

AI 代码质量怎么答:不要只说”我会 review 一遍”。可以按四层讲:① 给 AI 的输入要收敛——明确目录结构、数据模型、既有代码风格和改动边界,别让它自由发挥;② 产出必须过确定性检查——编译、类型检查、lint、单元测试,能自动发现的问题不用人眼看;③ 关键路径人工 review,重点看边界条件、异常处理、并发与安全,而不是格式;④ 用测试反推正确性——先让它补测试再改代码,或者对修改前后的行为做对比。最后补一句”AI 提升的是产出速度,不改变正确性标准”,这句是加分项。

BFS 手撕注意点:用队列(JS 里用数组 + 头指针或 shift,注意 shift 是 O(n),数据量大时性能差)。模板是:起点入队并标记已访问 → 循环取队首 → 遍历邻居,未访问的标记后入队。易错点:入队时就标记 visited(出队时标记会导致同一节点被重复入队、复杂度和内存都恶化)、网格/树场景要判空、以及层序输出时要先记录当前层长度。

数组转树:常见做法是用一次遍历建 map(id -> node)再挂父子,复杂度 O(n)。要点:① 先建 map 避免 O(n²) 的嵌套查找;② 遍历时如果 parentId 在 map 里还没出现(乱序数据),要么两遍遍历(先全建节点再挂),要么在处理完后补挂孤儿节点;③ 根节点判定(parentId 为 null/0/不在集合里);④ 挂载时不要直接改原对象引用导致循环引用。如果输入是「扁平数组 + 每项带 parentId」,也可以用栈模拟,但 map 法最直观。

反问环节:面试官花了十多分钟讲业务(数据处理方向,官网可看)和流程(三面技术 + HR,三面据说更看智商类问题),还提到组里每月 150 的 AI 额度——这类信息值得记下来,因为它反映了团队对 AI 工具的真实投入程度。反问时优先问「这个岗位在前三个月最重要的产出是什么」「团队现在最缺的能力是什么」,比问流程细节更有信息量。