知蛛网
  • 首页
  • 会员
  • 活动
  • 工作台

常见问题
活动
关于我们
联系我们
隐私协议
用户协议
会员协议
© 2026 知蛛网. 保留所有权利。
首页会员工作台我的
flynn@flynn
主页wiki简历作品集
目录
全部书籍
00-路线
  • 学习路线
  • 命名与写作规范
01-计算机基础
01-计算机网络
  • 互联网是如何工作的
  • HTTP协议
  • TCP/IP协议
  • 浏览器直接打开本地html文件,请求时的协议问题
02-浏览器原理
  • 浏览器是如何渲染页面的
  • 浏览器是如何渲染页面的
  • 面试之浏览器
03-操作系统
  • 进程与线程
  • 内存管理与虚拟内存
  • IO 模型与多路复用
  • 文件系统与页缓存
04-数据结构与算法
  • 数组与链表
  • 栈与队列
  • 哈希表
  • 树与堆
  • 基础数据结构
01-基础数据结构
02-高级算法
  • 排序算法
  • 二分查找
  • 递归与回溯
  • 动态规划
  • 双指针与滑动窗口
03-leetcode刷题
02-前端核心
01-web开发
  • Web 和 Web 标准
  • web 入门
  • web 开发
  • URL
  • 域名
  • Web服务器
  • 命令行
  • 工作流程和流程
  • 超链接
  • 浏览器指纹
02-html
  • HTML基础语法
  • HTML 概述
  • HTML 发展史
  • HTML调试
  • HTML标题与段落
  • 文本格式化
  • 强调与重要性
  • 块级元素和内联元素
  • 列表
  • 区块
  • 语义元素
  • 页面结构化和语义化
  • 超链接
  • 相对路径和绝对路径
  • 图片
  • 表格
  • 表单和按钮
  • 多媒体
  • 视频/音频
  • HTML 头部
  • HTML 字符集
  • HTML颜色
  • HTML 语言代码
  • HTML 国家/地区
  • Emoji (表情符号)
  • HTML 标签简写及全称 |
  • SVG
  • Canvas 2D
  • Canvas 3D
  • 框架 `<iframe>`
  • HTML 拖放
  • HTML5 Geolocation(地理定位)
  • Web 存储
  • HTML URL 编码
  • MathML
  • 远程图片资源在自己网站中无法展示问题
03-css
  • CSS简介
  • CSS 语法
  • CSS 创建
  • CSS 发展史
  • CSS 浏览器支持
  • CSS 选择器
  • CSS `!important` 规则
  • css颜色
  • CSS 文本格式
  • CSS 盒子模型
  • CSS 尺寸
  • CSS 内边距
  • CSS 外边距
  • CSS 边框
  • CSS 轮廓
  • CSS 背景(background)
  • CSS 溢出
  • CSS 文档流
  • CSS 显示和可见性
  • CSS 浮动
  • CSS 定位
  • CSS 对齐方式
  • CSS 网页布局
  • CSS 多列布局(CSS Multi-column Layout)
  • CSS 透明度
  • CSS 响应式设计(Responsive Design)
  • CSS 媒体查询
  • CSS 列表
  • CSS 表格
  • CSS 表单
  • CSS 链接
  • CSS 用户界面
  • CSS 计数器
  • CSS 过渡
  • CSS 动画
  • CSS 2D 转换
  • CSS 3D 转换
  • CSS 变量(CSS Custom Properties)
  • CSS 原生嵌套(CSS Nesting)
  • CSS 函数(CSS Functions)
04-javascript
  • 什么是 JavaScript?
  • 编程范式(Programming Paradigm)
  • 什么是范式?
  • ECMAScript 规范
  • 什么是语法糖
  • 开发环境搭建
  • 什么是堆和栈?
  • 什么是执行上下文
  • JavaScript 垃圾回收机制
  • 作业队列与事件循环
  • 深拷贝和浅拷贝
  • 语法与类型
  • 字面量
  • 控制流与错误处理
  • 循环与迭代
  • 函数
  • 表达式与运算符
  • 数字和字符串
  • 表达日期与时间
  • 正则表达式
  • 索引集合类
  • 带键的集合
  • 对象
  • 类
  • Promise
  • async/await
  • 迭代器和生成器
  • 国际化
  • 模块
  • 资源管理
  • 属性的可枚举性和所有权
  • 闭包
  • 继承与原型链
  • 元编程
  • 内存管理
  • 内置对象
  • arguments 对象
  • BOM 对象(浏览器对象模型)
  • DOM 对象(文档对象模型)
  • bind、apply、call的区别
  • new 操作符
  • typeof 和 instanceof 的区别
  • HTML5 Web Workers
05-typescript
  • TypeScript 类型系统基础
  • 类型体操
03-框架与跨端
01-react
  • 开发环境搭建
  • JSX
  • 组件
  • 生命周期
  • Hooks
  • 组件通信
  • 状态管理
  • React 19 新特性
  • useCallback 闭包陷阱
  • 常用的性能优化操作
  • Firbe 架构
  • React 18 新特性
  • useRef
  • 基于umijs 4.0 搭建官网
  • react+vite本地开发,如何手机联调
  • React 实现谷歌登录
  • React 项目调起 WhatsApp
02-vue
  • vue 解决跨域请求
  • 在vue2使用TinyMCE富文本编辑器
  • 使用jszip 导出新闻
  • Vue 本地开发启用 https
  • 基于vue3+vite+ts+elementplus+pinia+axios搭建后台管理系统
03-react-native
  • iOS 开发环境(RN 0.72)
  • RN 原生模块(Native Module)
  • 查看Maven包的Java包名
  • 优化 APP 启动速度
  • 安全键盘
  • 启动图与 Icon 尺寸规范
  • RN如何生成/配置iOS的开发者证书和生产证书
  • 邓白氏编码
  • 微信开放平台配置Universal Link
  • 上架至Apple App Store
04-android
  • 开发环境搭建
  • Android项目目录结构
  • 认识Gradle
04-工程化
01-git
  • 如何解决已被git跟踪文件不在跟踪
  • git标签
  • Git报错: Failed to connect to github.com port 443 解决方案
  • Git 分支操作速查
02-构建工具
  • 构建工具原理与选型
02-webpack
  • webpack 核心概念与构建流程
  • webpack 性能优化
03-vite
  • vite 为什么快
  • vite 插件与生产构建
03-测试
  • 前端测试体系
04-部署
  • Nginx 反向代理解决跨域
  • SPA 刷新非首页报 404
05-docker
  • Docker 常用命令
  • docker-compose nginx配置ssl证书
  • Docker Desktop 升级后 docker-compose 命令找不到
06-性能优化
  • 前端性能优化体系
  • 背景 GIF 优化方案
07-微前端
  • 微前端实战(qiankun)
  • 微前端 · qiankun
01-qiankun
05-后端与数据
01-nodejs
  • Node 版本与依赖的 engines 冲突
  • Express 实现 Gmail 发信(邮箱验证码)
02-php
  • 浏览器保存新闻,发布到自有网站
  • [分布式] 浏览器保存新闻,发布到自有网站
  • 邮件发送,多账号轮询
  • nginx和php-fpm通信问题导致网站页面空白
03-python
  • macOS M1 芯片 如何安装 py 和 tkinter
  • tkinter 编写的程序如何打包成桌面软件
04-架构设计
  • 后台管理系统中角色管理、管理员管理、权限设置他们三者之间的关系
05-运维
  • redis启动失败
  • 实现自动备份宝塔项目及数据库到本地
  • 宝塔面板
01-宝塔
06-实战项目
  • 实战准备工作
02-项目记录
  • AI-Chat 模块技术文档
  • CRMChat 部署
07-面试专项
01-面试
  • 面试之自我介绍
  • CSS 面试
  • JS面试
  • React面试
  • Vue面试
  • RN 面试 · 题目清单
  • RN 面试 · 答案详解
  • RN 物流公司 · 题目清单
  • RN 物流公司 · 答案详解
  • Uniapp 面试
  • 带团队经验
12-react专项
  • 一个表格,某一行的某一列数据变动了,如何优化性能?
13-reactnative专项
  • RN 开发过程中,有遇到什么棘手的问题?你是如何解决的?
14-过往面试总结
  • 冷哥传媒 · 面试题
  • 沐腾科技 · 面试题
  • 字符频率排序
02-面试八股
  • 网络八股
  • 浏览器八股
  • 工程化八股
03-算法面试题
  • 前端高频手写题
  • 场景设计题
04-真实面试经历
  • 20251027 盾蓝科技 面试
  • 20251028 芝麻甜心 面试
08-工具
01-n8n
  • 初始n8n
  • 快速入门
  • 在宝塔中搭建n8n环境
  • n8n中常用节点
  • n8n和代码的区别
02-Trae
  • Figma MCP 配置指南
03-UI_UX_pro_max
  • UI_UX_pro_max的使用
04-开发环境
  • VMWare虚拟机安装
  • PowerShell 执行策略与编码设置
98-杂项
  • A股股票交易相关费用
99-手册
  • iOS 开发者账号申请流程及费用
  • 邓白氏编码申请及费用
  • App 推送通道申请及费用
  • App 开发收费项目清单
  • 注册AWS账号
  • 使用Amazon Polly实现文本转语音
  • Google 翻译 Key 申请与前端调用
  • 使用SmsForwarder转发短信

场景设计题

03-算法面试题2026/11/14

场景题没有标准答案,考的是能否先拆问题再给方案。这份清单给每类题的回答骨架、层次顺序与关键权衡点。

面试怎么答

场景题的统一框架是四步,顺序不能乱:

步骤要做的事常见失误
澄清问清数据规模、用户环境、技术栈、成功标准上来就写方案
分层按数据、渲染、网络、发布等层次拆开所有点混在一起讲,听完不知道重点
权衡每个方案说代价,给出选择条件只讲优点,一问就露
度量用指标验证,给出兜底与回滚没有验收标准

回答时先给一句话总纲,再展开两到三层,收尾主动说"这个方案的代价是……"。面试官要的是决策过程,不是组件名单。

场景一:设计前端埋点 SDK

面试官想听什么:不是"调接口上报",而是事件模型、上报可靠性、性能开销与数据治理的完整闭环。

分层回答

  1. 事件模型:事件 = 事件名 + 公共属性(页面、设备、版本、用户标识)+ 业务属性 + 时间戳 + 唯一 ID。区分 PV、点击、曝光、自定义、性能、错误六类。
  2. 采集层:暴露 track() 命令式与声明式两套 API;自动采集只做低成本项(PV、路由、错误)。
  3. 曝光采集:用 IntersectionObserver 而不是 scroll 监听,按可见比例与停留时长判定,同一元素只报一次。
  4. 上报层:内存队列 + 批量发送,触发条件是条数阈值、时间阈值、页面隐藏;卸载时用 sendBeacon 或 fetch keepalive。
  5. 可靠性:失败重试 + 本地暂存(IndexedDB 限量),服务端按事件 ID 幂等;弱网下降低采样率。
  6. 性能:SDK 体积控制在 10KB gzip 内,异步加载,发送放到空闲时段,避免与首屏抢主线程。
  7. 治理:事件字典与版本、字段校验、隐私合规(脱敏、同意、不上报证件号)。

关键权衡

  • 全量采集 vs 采样:全量利于分析,采样省带宽;按事件类型分级。
  • 自动采集 vs 手动:自动覆盖率高但体积大,手动精确但要靠规范约束。
  • 实时上报 vs 批量:实时利于排查,批量省请求。
  • 自建 vs 第三方:自建可控、合规,第三方省事但受限于其模型。

追问:SPA 路由切换怎么上报?SDK 自身报错怎么防死循环?怎么证明埋点没影响 LCP?

场景二:实现支持 10 万条数据的表格

面试官想听什么:能不能识别"瓶颈在 DOM 数量与主线程",并区分数据层与渲染层。

分层回答

  1. 澄清:是否看全量、有无排序筛选编辑、固定列、能否服务端分页。
  2. 数据层:优先服务端分页;必须前端全量时,把排序、筛选、聚合放进 Web Worker,主线程只拿结果。
  3. 渲染层:虚拟滚动,只渲染视口加缓冲区;固定行高可用除法算区间,不定行高用测量缓存加二分查找。
  4. DOM 复用:行节点池化,滚动时改内容而不是重建;避免整表重排。
  5. 交互层:编辑用局部更新;排序筛选走索引;固定列与表头用 transform 同步滚动。
  6. 细节:缓冲区太小会白屏;横向也要虚拟化;键盘与复制粘贴单独处理。

关键权衡

  • 虚拟滚动 vs 分页:虚拟滚动体验连贯但导出、搜索、打印麻烦;分页实现简单但打断浏览。
  • 固定行高 vs 自适应:固定行高效率高,自适应要测量,首屏可能跳动。
  • 前端计算 vs 服务端:前端省请求但受内存限制,服务端省内存但交互有延迟。

追问:不定高怎么避免滚动跳动?滚动掉帧怎么定位?10 万行同时勾选怎么做(用 Set 存 ID,不存行对象)。

场景三:首屏 1 秒加载

面试官想听什么:会不会拆指标、能不能给出分优先级的清单、做不到时怎么谈目标。

上一篇前端高频手写题
下一篇已经是最后一篇
本页目录
面试怎么答场景一:设计前端埋点 SDK场景二:实现支持 10 万条数据的表格场景三:首屏 1 秒加载场景四:组件库按需加载场景五:排查线上白屏场景六:灰度发布与回滚通用模板关联阅读

分层回答

  1. 定义目标:1 秒指 FCP 还是 LCP?什么网络、机型、地区、冷启动还是二次访问。
  2. 建基线:RUM 采真实用户数据,Lab 用 Lighthouse 做回归,拆成 TTFB、资源加载、渲染、JS 执行四段。
  3. 网络层:CDN 与边缘节点、HTTP/2 或 HTTP/3、Brotli、预连接、减少重定向、接口聚合。
  4. 资源层:关键 CSS 内联、JS 拆分并 defer、图片用 AVIF/WebP 加固定尺寸与 fetchpriority="high"、字体子集化并 preload。
  5. 渲染层:SSR 或 SSG 直出首屏,流式渲染更早出内容,骨架屏降低感知等待,预留尺寸避免 CLS。
  6. 执行层:路由级代码分割、第三方脚本延后、长任务拆分、requestIdleCallback 做非关键工作。
  7. 兜底:设 performance budget 进 CI,灰度对比新旧版本,超预算阻断发布。

关键权衡

  • SSR vs CSR:SSR 首屏快,但服务端成本、缓存策略、 hydration 复杂度都上升。
  • 内联 vs 外链:内联省往返但不可缓存,超过阈值反而拖慢。
  • 图片质量 vs 体积:用响应式图片与格式协商,不要一刀切压缩。

追问:1 秒实在做不到怎么办——按设备与网络分档定目标,优先保"可交互"而不是"全部加载完"。

场景四:组件库按需加载

面试官想听什么:是否理解"按需"有三个粒度:组件代码、样式、图标资源,以及产物格式对 tree shaking 的影响。

分层回答

  1. 目标:首包只含用到的组件,同时保留开发体验(自动导入、类型提示)。
  2. 产物格式:同时输出 ESM 与 CJS,ESM 用 preserveModules 保留模块结构,每个组件一个入口。
  3. 样式策略:每个组件独立 CSS,消费方按需引入;主题用 CSS 变量,避免运行时 CSS-in-JS 开销。
  4. 消费侧:import { Button } from 'ui' 依赖库的 sideEffects 正确标注;需要时用 unplugin 做自动导入与样式注入。
  5. 验证:用打包分析器检查产物,确认未使用组件与全量样式没有进包。
  6. 版本管理:peerDependencies 锁框架版本,语义化版本 + changelog,避免一个项目装两份框架。

关键权衡

  • 单包多入口 vs 多包 monorepo:单包发布简单,多包隔离彻底但版本协调成本高。
  • 按需 vs 全量:小项目全量引入反而少一次请求,大项目必须按需。
  • 编译时样式 vs 运行时:编译时体积小、无闪烁;运行时灵活但增加 JS 与首屏开销。

追问:为什么配了自动导入还是全量——检查是否被转成 CJS、sideEffects 是否漏标、入口是否指向了全量文件。

场景五:排查线上白屏

面试官想听什么:先止损再定位的优先级,以及能不能列出可验证的原因清单。

分层回答

  1. 止损:先回滚或降级,保留现场(错误日志、用户环境、HTML 快照),不要在线上边查边改。
  2. 圈定范围:看监控里的错误率、影响版本、机型、浏览器、地区、网络,判断是灰度还是全量。
  3. 原因清单:JS 语法或 API 不兼容、chunk 404(旧 HTML 引用已删文件)、CDN 错误页、CSP 拦截、接口 401 无兜底、挂载失败、样式隐藏内容。
  4. 验证:用相同 UA 与网络复现,sourcemap 还原堆栈,比对 HTML 里的资源 hash 与 CDN 实际文件。
  5. 长期:错误边界加降级 UI、chunk 失败自动重试、发版原子化、白屏告警。

关键权衡

  • 快速回滚 vs 保留现场:先摘流量再回滚,日志与快照要提前落盘。
  • 全量重试 vs 精准重试:无脑刷新可能掩盖问题,按 chunk 失败重试更可控。
  • 前端兜底 vs 服务端兜底:前端兜底快但依赖 JS 已加载,服务端兜底更彻底。

追问:只有部分用户白屏说明什么(灰度批次、CDN 节点、机型、旧 HTML 缓存);白屏检测怎么做(关键节点渲染 + 超时 + 采样截图)。

场景六:灰度发布与回滚

面试官想听什么:是否理解"发布不是上传文件",而是流量切换、缓存一致性与可回退性。

分层回答

  1. 产物:静态资源带 contenthash 长缓存,index.html 不缓存或极短缓存。
  2. 顺序:先上传全部静态资源,再切换 HTML;多页面项目保证新旧资源共存一个版本周期。
  3. 分流:按用户 ID 哈希、地域、设备或名单灰度;分流在边缘或服务端做,避免被绕过。
  4. 观测:灰度组与对照组的错误率、LCP、接口成功率对比,设自动熔断阈值。
  5. 回滚:保留历史 HTML 与资源目录,切回上一版入口并刷新 CDN;数据库与接口保持向前兼容。
  6. 收尾:全量后保留上一版本至少一个缓存周期,再清理旧产物。

关键权衡

  • 客户端分流 vs 服务端分流:客户端简单但可绕过、首屏可能抖动;服务端准确但要改发布链路。
  • 大爆炸发布 vs 分批:分批稳但要处理新旧版本共存。
  • 长缓存 vs 快速回滚:hash 文件名让两者可以兼得,前提是 HTML 不被缓存。

追问:用户停留在旧页面怎么办(轮询版本号 + 提示刷新);回滚后为什么还有用户是坏的(CDN 与浏览器缓存未过期)。

通用模板

环节一句话模板
澄清"先确认规模、环境与成功标准,我按 X 万条、移动端为主来设计。"
分层"分数据层、渲染层、发布层三步,先解决瓶颈最大的那层。"
权衡"方案 A 胜在……,代价是……,在这个场景我选 A。"
度量"用 LCP/错误率/包体积验收,超阈值就熔断回滚。"

关联阅读

  • React 面试
  • 构建工具原理与选型
  • 面试专项总览