2026-01-11 09:51:37
腾讯音乐前端实习一面常见问题及解答如下:
1. CSS 相关:display: none 和 visibility: hidden 的区别display: none:元素从渲染树中完全移除,不占据空间,触发回流(reflow)和重绘(repaint)。
visibility: hidden:元素仍在渲染树中,占据空间但不可见,仅触发重绘。
display: none:子元素也会被隐藏,且无法通过 CSS 单独显示。
visibility: hidden:子元素可通过 visibility: visible 单独显示。
方案 1:Flex 布局
.container { display: flex; }.left, .right { width: 200px; }.center { flex: 1; }优点:代码简洁,天然支持响应式。
缺点:需注意浏览器兼容性(IE 部分版本不支持)。
方案 2:Calc 计算
.center { width: calc(100% - 400px); margin: 0 200px; }优点:无需额外容器,兼容性较好。
缺点:需手动计算宽度,可能因父容器宽度变化导致布局错乱。
方案 3:绝对定位 + margin
.container { position: relative; }.left, .right { position: absolute; width: 200px; }.center { margin: 0 200px; }优点:脱离文档流,不依赖父容器宽度。
缺点:绝对定位元素可能覆盖其他内容,需注意层级管理。
实现私有变量(如模块模式)。
函数防抖/节流(通过闭包保存计时器)。
使用 React.memo 缓存函数组件,避免无必要重渲染。
useCallback 缓存回调函数,避免子组件因引用变化重渲染。
避免在 useState 中存储临时计算值(如 const total = a + b 应改用 useMemo)。
使用 useReducer 处理复杂状态逻辑,减少重复更新。
虚拟列表/表格(长列表优化)。
懒加载(React.lazy + Suspense)。
避免内联函数在渲染中重复创建(如 onClick={() => {...}} 应改为 useCallback)。
合成事件和生命周期中,setState 异步更新,需通过回调获取最新值(如 setState({ count: 1 }, () => {...}))。
原生事件(如 setTimeout)中,setState 同步更新。
多层组件传递状态时,可用 useContext 或状态管理库(如 Redux)简化。
通过回溯法枚举所有可能,用 left 和 right 控制左右括号数量。
确保任意时刻 right ≤ left(避免无效括号)且总数不超过 n。
计算可见区域起始索引和结束索引。
渲染对应索引的列表项。
通过 transform 或 padding 模拟滚动位置,保持滚动条正常显示。