面试体验总结
体验
整个面试过程比较轻松,氛围没有很紧张,但我感觉自己的回答并不理想,尤其是笔试题目,第一道就没有做出来。
面试过程
岗位React为主,这次面试主要围绕 React 技术栈展开,面试官没有让我做自我介绍,直接进入正题。
面试官:看了下简历,先来个基础的,有了解过 diff算法 吗?
内心独白:第一题就让我有点紧张了,因为我平时没有经常去深入理解这些底层原理。
我简单回答了 React 的 diff 算法不会跨层次比较元素,只会在相同的节点层级进行对比 ,
是使用深度优先遍历,对比两个数,如果某个节点的key或者状态发生改变就进行替换。面试官随后问了更具体的替换细节,我回答说和key相关,
答得不理想。
面试题:使用 useState
的过程分析
面试官给了个场景,用 setTimeout
来控制 state
,问我点击 button
后 setTimeoutState
的打印结果是什么。
说出了正确结果后,问原因 我回答说:
state 是批量更新的过程,举了官网的例子来说明,就好比叫服务员点菜,服务员会将所有点的菜一起送到厨房。
面试官:那你说下 React 有哪些常见的 Hooks,分别有什么作用?
我提到了 useState
、useEffect
、useRef
、useCallback
、useMemo
,还顺带提了一下 19 年新出的 useOptimsic
,并对每个 Hook 的作用进行了详细解释。
面试官:详细说下 useRef 的作用
我从两个方面回答:
- 存储值,不会随着组件的重新渲染而变化。
- 操作 DOM。
面试官继续追问:什么场景下用到 useRef
?举个例子说明。
我举了个简单的例子:比如有个 input
框,还有个按钮,如果你想通过点击按钮让 input
框获得焦点,可以用 useRef
来操作 DOM。
面试官:讲一下 怎么调试样式,布局相关的
打开浏览器Element,演示
面试官:平时怎么调试
- console.log
- 断点
- react的话用react-devtools工具
- log用得比较多点
面试官:讲一下 React 的性能优化
我提到了 useCallback
、useMemo
和 memo
,并结合自己的项目经验解释了这些技术如何在特定场景下提升性能。
笔试题
-
实现一个打点功能:要求在子组件点击时,从 HOC 组件监听到对应打点记录,用 HOC(高阶函数)实现。
刚开始我想着用自定义 Hooks 做,但面试官提醒说高阶函数更合适,经过几次提示后,我还是没能做出来。 -
递归实现树的前缀遍历。
-
实现一个
sleep
函数。
后两道题很快解决。
思考
这次面试让我意识到:
- 基础原理:像
diff算法
这样的基础原理需要加强记忆和理解,平时不能只注重 API 层面的使用,应该深入底层原理。 - 场景化回答:回答问题时最好结合实际项目中的场景,能够更有说服力。
- 沟通和细节:在解释复杂问题时,应尽量深入每一个细节,而不是停留在表面。
当晚通知过一面