【KO】前端面试五
以下是这些前端开发项目场景题的答案及解析:
96. 介绍一下 requestIdleCallback
api
requestIdleCallback
是浏览器提供的 API,用于在浏览器空闲时段执行低优先级任务,充分利用空闲时间,避免影响关键渲染、交互等操作。
- 基本用法:接收回调函数和可选的
options
(如timeout
设定超时时间,超过则不管是否空闲都会执行),回调会传入IdleDeadline
对象,可通过timeRemaining()
知晓剩余空闲时间,didTimeout
判断是否因超时而执行。 - 应用场景:后台统计上报、低优先级 DOM 操作、数据预加载等非关键任务,让主流程更流畅。
- 注意:因浏览器兼容性(如 Safari 支持度有限 ),复杂场景可结合
setTimeout
等做降级,现代框架生态里,也有类似调度逻辑的库(如 React 的Scheduler )实现更精细的任务调度。
97. documentFragment
api 是什么,有哪些使用场景?
documentFragment
(文档片段)是 DOM 的轻量级容器,可像 DOM 节点一样挂载子元素,但自身不属于当前文档树,操作它不会触发页面重排(reflow
),性能更优。
- 作用:批量操作 DOM 时,先把节点插入片段,再一次性把片段插入文档,减少重排次数。比如循环创建列表项,逐个插入文档会多次触发重排,借助片段则只触发一次。
- 使用场景:
- 动态生成复杂 DOM 结构(如表格、列表),批量添加到页面;
- 做 DOM 节点的临时存储、转移,比如将页面某部分节点暂存到片段,后续再处理。
98. git pull
和 git fetch
有啥区别?
git fetch
:- 功能:从远程仓库拉取最新的提交记录( refs、objects 等 )到本地仓库的远程分支(如
origin/main
),不会合并到本地当前工作分支 。可理解为“获取远程更新信息,但不影响本地代码状态”。 - 常用流程:
git fetch origin
→ 查看远程分支与本地分支差异(git diff origin/main
) → 再决定是否合并(git merge
)。
- 功能:从远程仓库拉取最新的提交记录( refs、objects 等 )到本地仓库的远程分支(如
git pull
:- 功能:相当于
git fetch
+git merge
(默认行为,也可配置为rebase
),拉取远程分支更新后,直接合并到本地当前分支,会影响本地工作分支代码 。 - 注意:若本地分支有未提交的修改,可能触发合并冲突,需先处理或 stash 改动。
- 功能:相当于
- 总结:追求更可控的更新流程(先看差异再合并)用
fetch
;想快速拉取并合并远程最新代码到本地,用pull
,但要留意冲突风险。
99. 前端如何做页面主题色切换【腾讯一面】
常见实现方式:
- CSS 变量(自定义属性) + 切换类名/属性:
- 定义主题色相关 CSS 变量,如
:root { --primary-color: #007bff; }
,深色主题时,给html
或body
加类名(如.dark-theme
),覆盖变量值:.dark-theme { --primary-color: #343a40; }
。 - 切换逻辑:JS 控制
document.documentElement.className
增减,或用setAttribute
改属性,结合 CSS 选择器匹配。
- 定义主题色相关 CSS 变量,如
- CSS 预处理器(Less/Sass) + 多主题文件:
- 提前用预处理器定义不同主题的变量文件(如
theme-light.less
、theme-dark.less
),打包时生成多套样式,运行时通过 JS 动态加载对应 CSS 文件(如link
标签替换、import()
动态导入 )。
- 提前用预处理器定义不同主题的变量文件(如
- 动态生成样式:
- JS 直接操作
style
标签,根据主题配置动态插入 CSS 规则,适合主题配置灵活、需实时计算样式值的场景。
- JS 直接操作
- 框架生态方案:
- Vue 中可结合
scoped
样式、provide/inject
传递主题配置;React 可通过 Context 管理主题,搭配 CSS-in-JS 库(如styled-components
,用ThemeProvider
切换主题 )。
- Vue 中可结合
100. 前端视角 - 如何保证系统稳定性【字节一面】
从前端角度,保障系统稳定可从这些维度入手:
- 代码质量:
- 严格 TypeScript 类型约束,减少类型错误;ESLint + Prettier 规范代码格式、规避语法隐患;单元测试(Jest、Vitest 等 )覆盖核心逻辑,集成测试(Cypress、Playwright )保障流程。
- 错误处理:
- 全局捕获 JS 错误(
window.addEventListener('error')
、window.addEventListener('unhandledrejection')
),接口请求统一拦截异常(Axios 响应拦截器),上报错误日志(结合 Sentry 等工具 ),并做兜底提示(如 Toast 告知用户“操作失败,请重试” )。
- 全局捕获 JS 错误(
- 性能优化:
- 首屏优化:路由懒加载(如 React 用
React.lazy
+Suspense
、Vue 用
- 首屏优化:路由懒加载(如 React 用