模拟面试复盘
# | 题目 | 你的回答表现 | 分析与建议 |
---|---|---|---|
1 | 浏览器渲染流程 | ✅ 结构清晰,概念正确 | ✔️ 渲染树、layer tree 等术语出现到位。建议加强绘制 vs 合成的区别理解。 |
2 | 事件循环 | ✅ 机制掌握不错 | 微任务/宏任务逻辑有清晰节奏。可以提及常见 API 对应的任务类型(如 setTimeout 是宏,Promise 是微)。 |
3 | React 中的 setState 是同步还是异步的?为什么有时候打印不到最新值? | ⚠️ 概念接近,但有误 | ❌ ” 手动触发更新 ” 表述不准确。setState 是批量异步合并触发更新,不是等待「下一次视图更新」才变。建议理解 useEffect /flushSync 。 |
4 | 前端怎样优化长列表? | ✅ 核心抓住了 | 建议再加上 react-window 、react-virtualized 之类的库名,提高实战性。 |
5 | 虚拟列表实现 | ✅ 代码实战能力 OK | 示例可再完善,例如用更完整的 ref + scrollTop 计算逻辑替代 IO API。建议对两种虚拟滚动方式都能写出。 |
6 | React 组件之间有哪些通信方式?适用于哪些场景? | ✅ 答题结构优秀 | props → context → 状态管理,层级分明。建议记住典型场景 + 反模式(如滥用 context)。 |
7 | 函数组件每次渲染都重新执行,为什么 React 还能保留状态、函数引用?这些数据是怎么“记住”的? | ⚠️ 概念混合,有闭包误区 | ❌ 状态并不是因为闭包被保留,而是因为 React 的 fiber 和 hooks 链维护了状态。闭包反而经常导致 ” 旧值问题 “。建议区分作用域 vs React 内部机制。 |
8 | React 的 Diff 算法是怎么工作的?为什么性能很高? | ✅ 方向正确但需展开 | 你提到 ” 最小更新 “,是关键点。建议记住:同层比较、key 优化、组件重用三件事。 |