面灵AI→

白驹科技前端面经:实习迁移难点与跨域闭包

base
广州
时间
2026-10
来源
牛客网

《面试题目》

  1. 自我介绍,以及上一段实习的离职原因。
  2. 讲一下汇量实习的业务,你在里面担任什么角色、做了哪些工作?
  3. 参与这个工作有多少人?整个周期是多长?
  4. 为什么要做这次迁移?迁移的难点是什么?
  5. ECharts 图表一共有多少个?有做二次封装吗?
  6. 你在字节的工作流是什么样的?从分配需求到开发再到上线。
  7. 发布流程是什么样的?
  8. 内部的版本控制工具是什么?部署流程是什么样的——比如现在你有一个新需求到上线,这个版本管理是怎样的?
  9. 前端如何解决跨域?
  10. 闭包是什么?使用场景有哪些?
  11. 反问(业务轮岗方向、内部 AI 工具的使用与报销、实习生培养方式、转正 HC、团队技术栈)。

《参考解析》

实习经历要讲成「你拍了哪些板」,而不是「团队做了什么」。 面试官连问人数、周期、迁移原因、迁移难点,是在核对你在项目里的真实位置。可用的组织方式是:先说业务背景与目标(为什么迁、不迁会怎样),再说团队规模与你的角色边界(哪几个模块归你、你和谁协作),然后是技术方案与关键决策(选型、兼容或灰度方案、数据迁移顺序),最后是结果与复盘(耗时、性能或维护成本的变化、踩过的坑)。迁移类项目的「难点」不要答成「工作量大」,要落到具体冲突上:新旧逻辑并行期怎么保证一致、历史数据与脏数据怎么处理、回滚路径是什么、上线后怎么验证,这些才是面试官想听的判断力。人数与周期这种数字要如实报,被追问细节答不上来时宁可说「这块由另一位同学负责」,也不要含糊过去——含糊一次,后面所有项目描述的可信度都会被重新审视。

ECharts 二次封装是前端工程化的常见考点。 被问到图表数量与是否封装,实质在看你有没有把重复代码抽象掉。合格的封装至少解决四件事:一是配置收敛,把共性主题、坐标轴、tooltip、颜色盘、空数据与加载态收进默认配置,业务侧只传数据与差异项(用深合并而不是整体替换);二是生命周期管理,组件内 init/setOption/resize/dispose 与 ResizeObserver 绑定,避免图表实例泄漏和窗口缩放时不同步,路由切换时务必 dispose;三是数据更新策略,setOption 的合并语义要讲清,series 数量变化时用 notMerge 或补 replaceMerge,否则会出现旧系列残留;四是按需引入,echarts/core 加显式注册图表与组件,控制打包体积。如果再往上走一层,就是把「图表配置」变成数据驱动(同一份 schema 渲染不同图表),这样新加一个图表不用改组件代码。

跨域的回答要把「浏览器为什么拦」和「服务端怎么放行」分开。 同源策略限制的是浏览器里的脚本读跨源响应,不是服务端收不到请求。方案按场景给:开发期用本地代理(Vite/Webpack devServer 的 proxy)把请求转发到后端,把跨域问题绕成同源;生产期优先在网关或后端配 CORS,要说清预检请求的触发条件(非简单请求的方法、自定义头、Content-Type 非表单三选一)、Access-Control-Allow-Origin 不能同时为 * 且带 credentials、以及 Access-Control-Max-Age 缓存预检降低开销;前后端同主域不同子域时最省事的是把 Cookie 的 Domain 设到主域并统一走子域;实在需要跨站且不能改后端时用 Nginx 反向代理或 BFF 层转发。JSONP 与 document.domain 现在基本只作为历史方案提一句。要主动说安全边界:Access-Control-Allow-Origin 不要回显任意来源,Allow-Credentials 与宽松来源组合等于把接口开放给所有站点。

闭包的关键是「函数持有对外层词法环境的引用」。 JS 用词法作用域,内层函数被返回或被异步回调持有后,外层函数的变量对象不会随调用栈销毁,就形成了闭包。典型使用场景:数据私有化与模块模式(用 IIFE 或闭包维护内部状态,只暴露方法)、柯里化与偏函数(提前固化参数)、防抖节流(用闭包保存 timer 与上次执行时间)、循环里用 let 或工厂函数固定每次迭代的变量、以及在回调中捕获请求上下文。追问一般是三个方向:一是内存,闭包持有的变量不会被回收,长生命周期的闭包引用大对象或 DOM 会造成泄漏,排查靠 Heap Snapshot 的 Retainers 链;二是 var 与 let 在循环里表现不同的原因(前者同一个变量对象,后者每次迭代新建绑定);三是「闭包和 this 无关」——this 由调用方式决定,闭包只锁变量,两者常被混着问,答的时候分开说。

需求到上线的版本管理流程要能画出一条线。 前端岗被问到发布流程,期待的是具体工具链而不是概念:分支模型(主干开发 + 短生命周期特性分支,或 Git Flow)、提交规范与 Code Review 门禁、CI 里跑什么(lint、类型检查、单测、构建)、构建产物怎么进制品库或对象存储、发布方式是全量覆盖还是灰度与回滚(静态资源用带 hash 的文件名 + 版本目录,回滚即切换索引文件)、以及环境区分(dev/staging/prod 的配置注入)。如果团队有微前端或 SDK 形态的产物,还要说清版本兼容与多版本共存。答不上自家工具名时,把「我实际用的是 X,流程是 A→B→C」讲成一条可复述的链路,比笼统说「Jenkins 自动化」有说服力。

最后的反问环节也是评分项。 这家给的信息点很实用:前端为主、后续往全栈走,技术栈是 Vue3 + Java,转正 HC 一到两个,公司报销 AI 工具。提问时优先问「入职后前三个月会参与什么」「前端与后端的协作边界」「转正的评估标准与时间点」这类能指导自己决策的问题,其次才是技术栈细节;不要问「加班多不多」「我表现怎么样」这种把判断交回对方的问题。