字节前端全栈实习一面:渲染、Worker 与认证

岗位:前端 · 25 道题 · 更新于 2026-10-03

本场面试题

  1. 怎样做自我介绍?
  2. 项目来源是什么?
  3. 怎样讲清双引擎渲染的项目难点?
  4. Canvas 与 X6 怎样渲染和分层?
  5. 视口裁切为什么有用,怎样用千节点压测验证?
  6. 为什么将 CPU 计算放到 Web Worker?
  7. 业务中的“最小割集”在算什么?
  8. 连续提交计算怎样保证最新结果,setTimeout 的 await 如何让出事件循环?
  9. 个人项目为何做,是否有真实用户?
  10. Monorepo 的范围是什么?
  11. 为什么选择 access token 与 refresh token?
  12. 两个 token 怎样获得,存在哪里?
  13. 刷新时一定会返回新的 refresh token 吗?
  14. 无感刷新怎样处理并发请求?
  15. 单 token 是否可行,“爬虫拿到 refresh token”与 HttpOnly 有什么关系?
  16. LangGraph checkpoint 如何注册,消息什么时候进入状态?
  17. 为什么做埋点?
  18. PV、UV 和性能指标分别怎样统计?
  19. 常见页面性能指标分别表示什么?
  20. Vue 应用怎样上报 FCP?
  21. 项目用了 AI 或课程代码吗,怎样说明独立工作?
  22. 手写并发任务调度器怎样明确契约?
  23. 怎样把依赖任务分成可并行批次?
  24. 实习、课程与入职时间怎样回答?
  25. 反问:团队对实习生三个月的预期产出是什么?

面经与参考答法

字节跳动 · 全栈偏前端 · 实习一面。经历与项目规模为候选人自述,未独立证实;以下问题按记录归纳,短答为教学整理。记录中的不正确解释在短答中澄清,不当作面试官答案。

(1)怎样做自我介绍?

围绕岗位说明相关学习背景、工程经历和承担的职责,用一个可验证结果承接后面的项目讨论。没有做过的部分明确说明,避免把团队工作全算成个人成果。

(2)项目来源是什么?

说明项目来自课程、开源、实习业务还是自主需求,分别列出复用和独立设计的部分。来源本身不决定质量,能解释取舍、复现行为并提供证据才有助于继续深挖。

(3)怎样讲清双引擎渲染的项目难点?

把难点落到同一坐标系下的渲染、交互和数据同步:谁拥有状态,哪层绘制什么,缩放或拖动怎样同步,如何用 trace 与交互指标验证改动。原文没给完整实现,不能替候选人补造架构或收益。

(4)Canvas 与 X6 怎样渲染和分层?

先说明项目真实使用的渲染方式,再划分绘制层、可交互图形层和统一数据状态;保持相同坐标变换、层级与命中规则。Canvas 像素绘制与图形库的元素、事件管理不同,X6 的具体行为依版本和配置,不能仅凭库名认定某一实现。

(5)视口裁切为什么有用,怎样用千节点压测验证?

只在离屏内容确实占用显著绘制或布局成本时裁切,并为拖动方向保留预加载余量。固定图规模、视口、设备与动作,比较可见对象数、帧耗时和交互延迟,检查快速拖拽是否缺内容;千节点是记录中的测试规模,不是必要裁切的通用阈值。

(6)为什么将 CPU 计算放到 Web Worker?

Worker 在独立执行环境计算,能减少长计算对页面主线程的阻塞,但不保证总计算更快。数据传输和调度也有成本,Worker 不能直接操作 DOM;普通异步网络等待不需要因为“异步”就搬到 Worker。

(7)业务中的“最小割集”在算什么?

先明确业务对象、失效或断开的判定,以及“最小”是包含关系极小还是代价最小;这两个含义不能混用。记录未给出完整业务模型,所以不能直接套某个图算法。若讨论图上的割,应说明删除哪些点或边会破坏目标连通条件。

(8)连续提交计算怎样保证最新结果,setTimeout 的 await 如何让出事件循环?

给任务递增 ID,只提交仍对应最新 ID 的结果;取消还需 Worker 在分片边界让出 task 并检查标记。await Promise.resolve 只续接微任务,可能继续饿死消息;await new Promise(resolve => setTimeout(resolve, 0)) 先让 timer task 执行 resolve,再由微任务续接 await 后的代码;因此跨过一个 task 边界,但不保证零延迟或每次必绘制。

(9)个人项目为何做,是否有真实用户?

分别说明需求来源、独立承担的范围和是否真实使用,以可核验反馈支持后续改动。原帖只记录这些问题,没有给用户规模;不得把演示、课程练习或朋友试用扩写成稳定线上业务。

(10)Monorepo 的范围是什么?

先列出仓库实际有哪些应用与共享包,以及依赖、构建和测试的边界;单仓库不等于一个部署单元。Workspace 管包间引用,任务图决定哪些包受变更影响;共享代码也需要 API 和版本边界,不能只因为文件在一起就任意互相导入。

(11)为什么选择 access token 与 refresh token?

访问令牌限制资源访问的生命周期,刷新令牌在允许范围内换取新的访问令牌,以平衡频繁重新登录和泄漏风险。两者用途和接收端不同,不要求都为 JWT;双令牌不是安全保证,服务端会话等方案也可以满足需求。

(12)两个 token 怎样获得,存在哪里?

认证或授权成功后由可信服务签发,按用途返回。浏览器方案可将访问令牌保存在内存,把刷新凭据放在受限的 HttpOnly、Secure Cookie,并设计 SameSite/CSRF 防护;具体选择取决于跨站需求,HttpOnly 不阻止 XSS 发起已登录请求。

(13)刷新时一定会返回新的 refresh token 吗?

取决于服务端策略。采用轮换时每次刷新颁发新刷新令牌、废止旧值并保留令牌族关系,用于检测重放;OAuth 公共客户端需要轮换或发送方约束。不能从“双 token”一词推断项目必然实现了轮换。

(14)无感刷新怎样处理并发请求?

把一次刷新变成共享中的 Promise,过期请求等待同一次刷新完成后再有界重试。刷新失败统一进入重新认证,不能对所有 401 无限刷新;多标签页轮换还需协调,并区分请求失败与非幂等业务操作是否已执行。

(15)单 token 是否可行,“爬虫拿到 refresh token”与 HttpOnly 有什么关系?

单令牌或服务端会话可以成立,应按生命周期与撤销需求比较。普通远程爬虫没有理由能直接读取用户浏览器的 Cookie 或 Storage;HttpOnly 主要限制脚本读取 Cookie,却不能阻止 XSS 借浏览器发请求,也不单独防 CSRF,泄漏后的刷新凭据仍需撤销与重放检测。

(16)LangGraph checkpoint 如何注册,消息什么时候进入状态?

编译图时传入 checkpointer,调用时提供 thread_id;节点返回状态更新,由 reducer 合并。完整快照在 super-step 边界保存,并可记录步内已完成节点的 pending writes;不会因为注册 checkpointer 就自动把任意变量或消息放进上下文。内存 saver 也不等于重启后可恢复的持久存储。

(17)为什么做埋点?

先定义要回答的业务或体验问题,例如哪一步被放弃、哪些设备交互变慢,再决定事件和指标。没有决策用途的事件会增加网络、存储和隐私成本;采集范围应最小化,并保留事件语义、版本与去重规则。

(18)PV、UV 和性能指标分别怎样统计?

PV 按已定义的页面或路由访问事件计数,UV 在明确时间窗口按允许使用的主体标识去重,不代表精确自然人数。性能指标来自浏览器计时与观测接口;区分 SPA 路由事件、完整文档导航和客户端重发,避免重复计数或上传个人内容。

(19)常见页面性能指标分别表示什么?

FCP 描述首次内容绘制,LCP 描述最大内容元素的呈现,CLS 描述意外布局位移,INP 描述交互到下一次呈现的响应。它们测量不同阶段,不能把 FCP 当应用全部可用时间,也不能用单次测试代表真实用户分布。

(20)Vue 应用怎样上报 FCP?

观察浏览器的 paint 条目并选择 first-contentful-paint,使用 buffered 读取已产生条目,按支持情况降级。FCP 属于文档绘制时间线,不是在 mounted 中现读 performance.now;SPA 每次路由切换也不自动生成新的文档 FCP。上报要去重并避免携带敏感 URL 参数。

(21)项目用了 AI 或课程代码吗,怎样说明独立工作?

如实标明课程、AI 辅助和复用代码的范围,解释自己承担的需求、验证和修改。能读懂、运行并维护代码比把生成部分包装成全手写更有价值;原文没有给比例,不能补造独立研发程度。

(22)手写并发任务调度器怎样明确契约?

先约定输入是惰性任务函数、并发上限、结果顺序和错误策略,再用共享索引或队列让有限工作者领取任务。任务启动才调用函数,完成后释放槽位;Promise.all 本身不提供限流,取消也需传给底层操作。

(23)怎样把依赖任务分成可并行批次?

校验 ID 与依赖后,用入度找当前为零的整批任务;这一批结束才释放出边,下一批再加入新零入度节点。输出不足全部节点说明有环;同批是否真能并行还要检查共享资源和副作用,而不是只看数据依赖。

(24)实习、课程与入职时间怎样回答?

如实说明课程约束、学校要求、可入职时间和能承诺的持续周期,不替自己或学校作未获确认的保证。岗位安排需要双方具体讨论,原文的个人背景不延展成对其他学生的通用要求。

候选人反问(原记录)

(25)反问:团队对实习生三个月的预期产出是什么?

原记录只自述回答为“具体产出看个人表现”,未给统一指标。可进一步对齐任务范围、指导方式、验收与阶段反馈;教学建议不是该次面试官已经提出的追加问题。

参考资料

以下资料用于核对教学短答,滚动文档核验于 2026-10-03;不作为候选人现场作答的证据。

面经是候选人自述,解析为 Agent Journey 整理。更多大厂 AI / Agent 岗面经 · 按目标公司模拟面试