文章目录

美团暑期前端二面整理笔记(五)

1. 大数相加的使用场景

答案

大数相加通常出现在金额、账单、统计、长整数 ID 或超过安全整数范围的场景。

  1. JavaScript 的 Number 有安全整数上限。
  2. 超过这个范围直接相加会丢精度。
  3. 所以要么用 BigInt,要么按字符串逐位相加。

2. JS 的 Number 的范围

答案

JavaScript 的 Number 基于 IEEE 754 双精度浮点数。

  1. 安全整数范围是 -(2^53 - 1)2^53 - 1
  2. 超过这个范围会有精度问题。
  3. 大数相加不能直接转 Number 算,应该按字符串从低位到高位逐位相加并处理进位。
  4. 0.1 + 0.2 !== 0.3 的根因也是浮点数二进制表示精度误差。

3. 从计算机角度解释 Number 的范围

答案

JavaScript 的 Number 基于 IEEE 754 双精度浮点数。

  1. 安全整数范围是 -(2^53 - 1)2^53 - 1
  2. 超过这个范围会有精度问题。
  3. 大数相加不能直接转 Number 算,应该按字符串从低位到高位逐位相加并处理进位。
  4. 0.1 + 0.2 !== 0.3 的根因也是浮点数二进制表示精度误差。

4. setInterval 如果时间长了会发生什么

答案

setInterval 运行久了最常见的问题是任务堆积和时间漂移。

  1. 如果回调执行时间超过间隔时间,下一轮会继续排队。
  2. 页面卡顿、切后台或主线程繁忙时,也会导致显示不准。

5. timeout 中再调用 timeout 和直接用 interval 有什么区别,哪种在倒计时业务场景更好

答案

防抖和定时器题的关键是“控制触发频率”和“避免时间漂移”。

  1. 防抖适合输入框联想、搜索建议;节流适合滚动、拖拽。
  2. 轮询或倒计时更推荐递归 setTimeout,因为比 setInterval 更容易控制节奏,避免任务堆积。
  3. 倒计时展示时最好以真实时间戳为准,而不是单纯每次减一。

6. 怎样防止定时器的延迟显示

答案

定时器本身不保证绝对准时,所以倒计时不能只依赖“每秒减一”。

  1. 更稳妥的做法是保存目标结束时间。
  2. 每次刷新时用“目标时间 - 当前真实时间”重新计算剩余时长。
  3. 这样即使页面卡顿或切后台,也不会累计误差。

7. 如果用真实时间戳作为参照来更新倒计时,又可能产生什么问题

答案

防抖和定时器题的关键是“控制触发频率”和“避免时间漂移”。

  1. 防抖适合输入框联想、搜索建议;节流适合滚动、拖拽。
  2. 轮询或倒计时更推荐递归 setTimeout,因为比 setInterval 更容易控制节奏,避免任务堆积。
  3. 倒计时展示时最好以真实时间戳为准,而不是单纯每次减一。

8. 实现响应式方式有哪些

答案

常见响应式实现方式有两类:

  1. Object.defineProperty,这是 Vue2 的核心思路。
  2. Proxy,这是 Vue3 的核心思路。

Proxy 的优势是能直接代理整个对象,对新增属性、删除属性、数组操作支持更自然。


9. 讲 flex 以及 flex 的一些属性

答案

Flex 题通常从三个层次回答:

  1. 主轴和交叉轴决定布局方向。
  2. flex-grow 决定剩余空间怎么分,flex-shrink 决定空间不够时怎么压缩,flex-basis 决定初始主轴尺寸。
  3. “按比例分配剩余空间”里的剩余空间,就是容器可用空间减去各项基础尺寸之后的空间。

10. flex 按照比例分配剩余空间,剩余空间是怎么来的

答案

Flex 题通常从三个层次回答:

  1. 主轴和交叉轴决定布局方向。
  2. flex-grow 决定剩余空间怎么分,flex-shrink 决定空间不够时怎么压缩,flex-basis 决定初始主轴尺寸。
  3. “按比例分配剩余空间”里的剩余空间,就是容器可用空间减去各项基础尺寸之后的空间。

11. flex-grow、shrink、basis

答案

Flex 题通常从三个层次回答:

  1. 主轴和交叉轴决定布局方向。
  2. flex-grow 决定剩余空间怎么分,flex-shrink 决定空间不够时怎么压缩,flex-basis 决定初始主轴尺寸。
  3. “按比例分配剩余空间”里的剩余空间,就是容器可用空间减去各项基础尺寸之后的空间。

12. 虚拟列表渲染原理,性能差异

答案

虚拟列表的原理是只渲染可视区内容,从而把 DOM 数量控制在较小范围。

  1. 全量渲染适合数据量小,但数据一大就容易卡。
  2. 虚拟列表在大数据量场景下,首屏、滚动和内存表现都会更稳定。

13. web worker

答案

Web Worker 的作用是把计算密集型任务移出主线程,避免页面卡顿。

  1. 适合大文件 hash、复杂解析、图片压缩、数据预处理。
  2. 它不能直接操作 DOM。
  3. 主线程和 Worker 通过 postMessage 通信,大对象传输时要注意成本。

14. FCP

答案

FCP 是 First Contentful Paint,表示页面首次绘制出有意义内容的时间。

  1. 它反映用户什么时候第一次“看到东西”。
  2. 影响 FCP 的常见因素有 HTML 返回速度、关键 CSS、首屏 JS 阻塞、字体和图片加载策略。
  3. 优化常见手段包括减少阻塞资源、拆包、SSR/预渲染、关键资源优先加载。

15. 页面加载过程哪个阶段影响哪个性能指标

答案

不同阶段影响的指标不同。

  1. 网络和服务端响应会影响 TTFB。
  2. 关键资源加载和首屏渲染会影响 FCP/LCP。
  3. 布局抖动会影响 CLS。
  4. 主线程长任务会影响交互指标。

16. vite 开发环境和生产环境区别

答案

Vite 开发态和生产态的核心区别在于构建策略不同。

  1. 开发态基于原生 ESM 按需加载模块,不做整包构建,所以启动和 HMR 很快。
  2. 生产态会走打包流程,对资源做压缩、分包、Tree Shaking 和静态资源输出。
  3. 所以不能只记“Vite 快”,要知道它是在哪个阶段快。

17. 聊 AI

答案

聊 AI 时可以从两个方向展开:

  1. 作为产品能力,AI 可以做问答、生成、检索增强。
  2. 作为研发工具,AI 可以提升编码、测试和文档效率。

关键不是泛泛而谈,而是结合真实项目说清楚边界和落地方式。


18. Vue 写一个倒计时组件,接收一个初始时间 prop 参数

答案

防抖和定时器题的关键是“控制触发频率”和“避免时间漂移”。

  1. 防抖适合输入框联想、搜索建议;节流适合滚动、拖拽。
  2. 轮询或倒计时更推荐递归 setTimeout,因为比 setInterval 更容易控制节奏,避免任务堆积。
  3. 倒计时展示时最好以真实时间戳为准,而不是单纯每次减一。

19. 大数相加

答案

JavaScript 的 Number 基于 IEEE 754 双精度浮点数。

  1. 安全整数范围是 -(2^53 - 1)2^53 - 1
  2. 超过这个范围会有精度问题。
  3. 大数相加不能直接转 Number 算,应该按字符串从低位到高位逐位相加并处理进位。
  4. 0.1 + 0.2 !== 0.3 的根因也是浮点数二进制表示精度误差。