面灵AI→

袋鼠云前端开发实习面经:闭包陷阱、事件循环与文件上传流程

时间
2026-10
来源
牛客网

《面试题目》

  1. 请做一下自我介绍。
  2. 每段实习为什么离职?
  3. 介绍一下你的实习经历。
  4. 实习中你觉得最有挑战的事情是什么?
  5. 什么是闭包陷阱?
  6. interface 和 type 有什么区别?
  7. 讲一下事件循环。
  8. 什么是静态请求?
  9. 介绍一下你的项目亮点。
  10. 文件上传的流程是怎样的?
  11. 手写题:给定一个用户对象数组,怎样去掉重复出现的用户 id,只保留后出现的那一条?
  12. 最近在关注哪些 AI 技术?
  13. 怎么确保 AI 生成的内容是正确的、没有问题?
  14. 你还有什么想问我的吗?(反问环节)

《参考解析》

实习经历类问题:讲的不是经历,是判断力。 「每段实习为什么离职」是稳定性与职业成熟度的探针,回答要中性、简短、指向成长方向,不评价上一家公司、不吐槽团队,也不要出现自相矛盾的时间线。真要讲清楚就按「客观变化(业务收缩/方向调整/想换技术栈)+ 我的收获 + 为什么这家更合适」三段说。「最有挑战的事」考的是你能不能把一件事讲完整——背景、你的角色、卡点、方案对比、量化结果、复盘,缺哪一段面试官就会追问哪一段;不要挑「加班最多」这种辛苦当挑战,要挑有技术取舍的。项目亮点同理,一个亮点讲深比罗列五个功能强:说清为什么这么设计、替代方案是什么、代价是什么。

前端基础:闭包陷阱、事件循环与 TypeScript 类型。 闭包陷阱的本质是闭包捕获的是变量本身而不是「执行那一刻的值」:用 var 在循环里注册定时器或事件回调时,全部回调共享同一个函数作用域绑定,真正执行时读到的已经是循环结束后的最终值。let 之所以能修,是因为它每次迭代都新建一个绑定;把值当参数传给工厂函数或 IIFE 是等价的另一条路。React 里的 stale closure 是同一件事的另一个面——回调闭包住的是某次渲染的 props/state 快照,异步回来时读到的仍是旧值,常见解法是用 ref 保存最新值或把依赖补全。事件循环则按「同步代码先进调用栈 → 一个宏任务执行完 → 清空微任务队列直到为空 → 浏览器可能渲染 → 取下一个宏任务」循环;微任务包括 Promise.then、queueMicrotask,await 之后的代码等价于 .then 回调,所以 Promise 的回调永远排在 setTimeout 前面。interface 和 type 都能描述对象,但 interface 支持声明合并、extends 继承、可被 implements,适合对外暴露的对象与公共 API;type 是类型别名,能表达联合、交叉、元组、条件类型、映射类型这些 interface 写不出来的东西。给结论再补一句「选型惯例 + 报错信息友好度」,比背差异表更像用过。

工程题:从后往前去重、静态请求的口径、文件上传全流程。 手写题的关键是先对齐语义:「只保留后出现的」意味着从尾部往前扫,第一次遇到某个 id 就收下;正向遍历加 Set 去重留下的恰好是第一条,方向反了就丢分。实现上用 Set 记已见 id、结果 unshift 或先 push 再 reverse,时间 O(n)、空间 O(n);也可以正向写进 Map<id, user> 让后者覆盖前值,最后取 values()。时间复杂度说完再补一句哈希查找是均摊 O(1)、保持原数组顺序是额外约束,说明白你意识到了题目里的坑。「静态请求」这个词本身有歧义,稳妥的做法是先跟面试官确认口径:一种是指不依赖服务端动态渲染的静态资源请求(HTML/CSS/JS/图片,通常走 CDN、可长缓存、命中率高),另一种是指数据在构建期就落成静态 JSON 再取。确认完再答缓存策略(强缓存与协商缓存、内容哈希文件名)与 CDN 回源,别自作主张选一种答到底。文件上传的完整链路是:选文件 → 前端做类型/大小/数量校验 → 小文件直接 FormData 走 multipart/form-data 一次 POST;大文件切成分片,每片带序号与文件指纹,并发上传、失败分片单独重试,服务端按 uploadId 合并;上传前用文件 hash 查一次实现秒传,分片进度用 XMLHttpRequest.upload.onprogress 上报,断点续传就是把已上传分片记下来下次跳过。跨域、鉴权 token 怎么带、超时与并发度控制是面试官最容易追问的几处。

AI 相关两问与整体复盘。 「最近关注什么 AI 技术」不是让你报菜名,面试官想看的是你真的用过:讲一个具体场景,你拿它解决了什么问题、效果如何、哪里不行。更值得说的是那些有踩坑细节的用法——比如编码助手改大文件时上下文会丢、RAG 检索回来的片段和问题不匹配、agent 工具调用参数幻觉,能讲出这类问题就说明你在真用。「怎么确保 AI 生成的内容正确」的标准答案是别信模型自己的确认,要把正确性落到可验证的机制上:让模型产出能跑的测试、类型检查和 lint,并真的执行;关键路径保留人工 review;事实性内容要求给出处;模型说不清的地方允许它答「不知道」,再配合多次采样交叉比对来降低单次幻觉的影响。作者复盘说这场面完「脑袋发昏、沟通有点累」,往往说明回答是散点式的、被追着走——准备时把「自我介绍、每段实习的离职原因、一个讲得透的项目」这三块练成固定结构,遇到开放题先给结论再展开,反问环节提前备两三个关于团队、业务和技术栈的问题,节奏就能回到自己手里。