白驹科技前端面经:实习迁移难点与跨域闭包
- base
- 广州
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 自我介绍,以及上一段实习的离职原因。
- 讲一下汇量实习的业务,你在里面担任什么角色、做了哪些工作?
- 参与这个工作有多少人?整个周期是多长?
- 为什么要做这次迁移?迁移的难点是什么?
- ECharts 图表一共有多少个?有做二次封装吗?
- 你在字节的工作流是什么样的?从分配需求到开发再到上线。
- 发布流程是什么样的?
- 内部的版本控制工具是什么?部署流程是什么样的——比如现在你有一个新需求到上线,这个版本管理是怎样的?
- 前端如何解决跨域?
- 闭包是什么?使用场景有哪些?
- 反问(业务轮岗方向、内部 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 工具。提问时优先问「入职后前三个月会参与什么」「前端与后端的协作边界」「转正的评估标准与时间点」这类能指导自己决策的问题,其次才是技术栈细节;不要问「加班多不多」「我表现怎么样」这种把判断交回对方的问题。