字节大厂外包 - 一面

121 阅读3分钟

面试体验总结

体验

整个面试过程比较轻松,氛围没有很紧张,但我感觉自己的回答并不理想,尤其是笔试题目,第一道就没有做出来。

面试过程

岗位React为主,这次面试主要围绕 React 技术栈展开,面试官没有让我做自我介绍,直接进入正题。


面试官:看了下简历,先来个基础的,有了解过 diff算法 吗?

内心独白:第一题就让我有点紧张了,因为我平时没有经常去深入理解这些底层原理。

我简单回答了 React 的 diff 算法不会跨层次比较元素,只会在相同的节点层级进行对比 ,

是使用深度优先遍历,对比两个数,如果某个节点的key或者状态发生改变就进行替换。面试官随后问了更具体的替换细节,我回答说和key相关,

答得不理想。


面试题:使用 useState 的过程分析

面试官给了个场景,用 setTimeout 来控制 state,问我点击 buttonsetTimeoutState 的打印结果是什么。

说出了正确结果后,问原因 我回答说:

state 是批量更新的过程,举了官网的例子来说明,就好比叫服务员点菜,服务员会将所有点的菜一起送到厨房。


面试官:那你说下 React 有哪些常见的 Hooks,分别有什么作用?

我提到了 useStateuseEffectuseRefuseCallbackuseMemo,还顺带提了一下 19 年新出的 useOptimsic,并对每个 Hook 的作用进行了详细解释。


面试官:详细说下 useRef 的作用

我从两个方面回答:

  1. 存储值,不会随着组件的重新渲染而变化。
  2. 操作 DOM

面试官继续追问:什么场景下用到 useRef?举个例子说明。

我举了个简单的例子:比如有个 input 框,还有个按钮,如果你想通过点击按钮让 input 框获得焦点,可以用 useRef 来操作 DOM。


面试官:讲一下 怎么调试样式,布局相关的

打开浏览器Element,演示


面试官:平时怎么调试

  • console.log
  • 断点
  • react的话用react-devtools工具
  • log用得比较多点

面试官:讲一下 React 的性能优化

我提到了 useCallbackuseMemomemo,并结合自己的项目经验解释了这些技术如何在特定场景下提升性能。


笔试题

  1. 实现一个打点功能:要求在子组件点击时,从 HOC 组件监听到对应打点记录,用 HOC(高阶函数)实现。
    刚开始我想着用自定义 Hooks 做,但面试官提醒说高阶函数更合适,经过几次提示后,我还是没能做出来。

  2. 递归实现树的前缀遍历

  3. 实现一个 sleep 函数
    后两道题很快解决。


思考

这次面试让我意识到:

  1. 基础原理:像 diff算法 这样的基础原理需要加强记忆和理解,平时不能只注重 API 层面的使用,应该深入底层原理。
  2. 场景化回答:回答问题时最好结合实际项目中的场景,能够更有说服力。
  3. 沟通和细节:在解释复杂问题时,应尽量深入每一个细节,而不是停留在表面。

当晚通知过一面