【系统设计】前端20道中高难度面试题精解

0 阅读7分钟

大家好,本文整理了前端中高级面试最常考、实际开发最常用的 20 道难点题,涵盖:

  • 扫码登录、秒杀系统、虚拟滚动、断点续传
  • WebSocket、权限系统、性能监控、PWA、水印防删
  • SSG/SSR、虚拟列表、单点登录、埋点SDK、拖拽缩放

每道题都给出面试官最爱听的标准答案结构,面试直接背,开发直接用。


1. 前端如何实现扫码登录功能?

难度:困难 ⭐⭐⭐

核心回答重点:

  • 后端生成唯一 scene 值(随机串+过期时间),返回二维码图片内容。
  • 前端展示二维码,轮询 / WebSocket 长连接监听扫码状态。
  • 手机扫码后,后端更新 scene 状态为已扫码;前端实时收到状态变更。
  • 用户确认登录,后端返回 token、userInfo,前端存储并跳转主页。
  • 安全机制:scene 一次性有效、过期自动刷新、防重复提交、防暴力扫描。

标准流程:
获取二维码 → 展示二维码 → 监听状态 → 已扫码 → 确认登录 → 获取token → 跳转主页

实战建议:
优先使用 WebSocket,性能远优于轮询;scene 必须唯一且短时有效。


2. 如何设计和优化秒杀系统的前端?

难度:困难 ⭐⭐⭐

核心回答重点:

  • 前端防重复提交:按钮置灰、防抖、请求锁状态。
  • 合并请求、减少请求次数、接口超时控制。
  • 性能优化:页面预加载、数据预加载、资源缓存
  • 高并发:请求排队、失败重试、限流降级、骨架屏
  • 安全:接口签名、token 校验、防作弊、防篡改、防刷接口。

核心思想:
前端扛流量,后端控库存;能前端做的绝不麻烦后端。


3. 无限滚动如何自动回收上方内容(虚拟滚动)?

难度:困难 ⭐⭐⭐

核心回答重点:

  • 采用 虚拟列表 思想:只渲染可视区域
  • 监听滚动高度,计算可视区范围,只保留可视区 DOM
  • 数据全部保留,只销毁视图,滚动回去可重新渲染。
  • 使用 IntersectionObserver 监听元素是否可见,性能最优。
  • 不监听 scroll 事件,避免卡顿、丢帧。

适用场景:
长列表、聊天记录、信息流、大数据表格。


4. 大文件断点续传如何实现并保证安全?

难度:困难 ⭐⭐⭐

核心回答重点:

  • 文件按固定大小 切片(chunk)
  • 每个切片带:hash、index、total、fileHash
  • 前端先计算 文件唯一 hash,传给后端查询已上传切片。
  • 只传未上传切片,失败自动重试,支持暂停/继续。
  • 全部传完通知后端 合并切片
  • 安全:文件 hash 校验、切片校验、权限校验、防止篡改。

5. 前端请求耗时统计工具如何设计?

难度:困难 ⭐⭐⭐

核心回答重点:

  • 劫持 fetch/axios/XHR,统一拦截请求。
  • 记录:开始时间、结束时间、耗时、URL、状态码、请求体
  • 统计指标:首屏时间、接口耗时、资源加载、白屏时间。
  • 批量上报、防抖上报、采样上报,不影响业务。
  • 输出:耗时排行、慢接口监控、异常告警。

6. WebAssembly 前端应用与简单计算?

难度:困难 ⭐⭐⭐

核心回答重点:

  • C/C++ 编写核心计算逻辑,编译为 .wasm
  • JS 通过 WebAssembly.instantiate 加载。
  • JS ↔ WASM 互相调用函数、共享内存。
  • 优势:计算极快、不阻塞主线程、安全、体积小
  • 适用:加密、解码、大量计算、图形渲染、AI 推理。

7. 图片裁剪、旋转、缩放功能实现?

难度:困难 ⭐⭐⭐

核心回答重点:

  • 使用 Canvas 绘制原图。
  • 裁剪:绘制选区、拖拽、定位。
  • 旋转:ctx.rotate(angle)
  • 缩放:drawImage 重绘调整尺寸。
  • 支持预览、导出、下载、上传。

8. 前端角色权限系统设计?

难度:困难 ⭐⭐⭐

核心回答重点:

  • 角色:super admin / admin / user / guest
  • 权限:菜单、按钮、接口、数据 四级权限。
  • 实现:
    • 路由守卫控制页面访问
    • 自定义指令控制按钮显隐
    • 全局状态管理权限列表
  • 权限实时更新,刷新保持状态。

9. Markdown 编辑器实时预览?

难度:困难 ⭐⭐⭐

核心回答重点:

  • 左侧编辑区、右侧预览区。
  • 使用 marked 库将 md 转 HTML。
  • 代码高亮:highlight.js
  • 支持分屏、全屏、同步滚动。

10. SPA 首屏加载慢如何优化?

难度:中等 ⭐⭐⭐

核心回答重点:

  • 路由懒加载、代码分割、按需加载
  • 资源压缩、图片懒加载、CDN 加速
  • SSR / SSG / 预渲染
  • 强缓存、协商缓存
  • 骨架屏、loading、资源优先级

11. 图片拖拽、缩放、旋转预览组件?

难度:困难 ⭐⭐⭐

核心回答重点:

  • mousedown / mousemove / mouseup 实现拖拽
  • 滚轮/双指手势实现缩放
  • transform 位移,不触发重排
  • 边界限制、双击还原、手势回弹

12. 单点登录 SSO 前端实现?

难度:中等 ⭐⭐⭐

核心回答重点:

  • 一处登录,多系统自动登录。
  • 统一鉴权中心,共享 token/ticket/cookie
  • 流程:
    跳转鉴权中心 → 验证登录态 → 带回 token → 本系统自动登录。

13. WebSocket 实时聊天、在线状态?

难度:困难 ⭐⭐⭐

核心回答重点:

  • 连接:open/message/error/close
  • 消息结构:user/content/time/status
  • 在线状态、正在输入、已读未读
  • 心跳、断线重连、消息补发、持久化
  • 桌面通知、声音提醒

14. 前端日志埋点 SDK 设计?

难度:中等 ⭐⭐⭐

核心回答重点:

  • API:log/error/event/performance/user
  • 自动埋点:页面、点击、请求、错误、性能
  • 批量、防抖、节流、采样上报
  • 设备信息、用户标识、环境信息
  • 轻量、无侵入、可扩展

15. 页面水印 + 防止被删除?

难度:中等 ⭐⭐⭐

核心回答重点:

  • Canvas 生成水印,全屏覆盖
  • MutationObserver 监听 DOM 修改
  • 一旦删除/隐藏,立刻自动重绘
  • 多层水印、最高层级、不可点击

16. 移动端下拉刷新 + 上拉加载?

难度:中等 ⭐⭐⭐

核心回答重点:

  • touchstart/touchmove/touchend 判断距离
  • 下拉刷新:清空数据、重新请求
  • 上拉加载:分页追加、合并列表
  • 状态:刷新中、加载中、无更多数据

17. 响应式三栏布局(PC三栏、移动端单栏)?

难度:中等 ⭐⭐⭐

核心回答重点:

  • @media 查询区分设备
  • PC(>1200px):flex 三栏等高
  • 平板:双栏
  • 移动端(<768px):单栏垂直排列

18. Service Worker 实现离线访问?

难度:中等 ⭐⭐⭐

核心回答重点:

  • 注册 SW,监听 install/activate/fetch
  • 缓存 HTML/CSS/JS/图片
  • 拦截请求:有网用网络,无网用缓存
  • 支持 PWA 离线应用

19. 通用表格组件(分页、排序、筛选)?

难度:中等 ⭐⭐⭐

核心回答重点:

  • 数据驱动:columns/data/pagination
  • 分页:页码、页大小、总数
  • 排序:asc/desc/default
  • 筛选:输入、下拉、多选、远程筛选

20. EventBus 事件总线实现组件通信?

难度:中等 ⭐⭐⭐

核心回答重点:

  • 发布订阅模式(pub/sub)
  • 核心方法:on / off / emit / once
  • 维护事件 map + 回调队列
  • 跨组件、跨页面、无耦合通信

📌 面试速记总结(收藏必备)

  1. 扫码登录:唯一scene + WebSocket + 状态过期
  2. 秒杀:防重复提交 + 排队限流 + 预加载
  3. 虚拟滚动:可视区渲染 + IntersectionObserver
  4. 断点续传:文件切片 + hash + 秒传 + 重试
  5. 监控:劫持请求 + 批量上报 + 性能统计
  6. WASM:C/C++ 编译 + JS 互操作 + 高性能计算
  7. 图片处理:Canvas + 裁剪旋转缩放
  8. 权限:路由守卫 + 指令控制 + 四级权限
  9. MD 编辑器:marked + 代码高亮 + 实时预览
  10. 首屏优化:懒加载 + CodeSplit + SSR/CDN

本文 20 题都是前端中高级面试必考、实际开发必用的核心知识点,建议收藏,面试前快速过一遍,通过率大幅提升。

后续我会把每道题写成完整代码实战教程(含源码),关注不迷路。

你觉得哪道题最难?评论区告诉我!