「前端」快手一面面经

面经

一开始简单聊了一下项目,问我 react 和 Vue 哪个比较熟,我说 React,然后就开始问我 React 面经了

  1. React 有哪些 Hooks?
    1. 答了useRef, useState, useMemo, useCallback
  2. 你了解类组件的生命周期吗?
    1. 只用过函数组件,没答上来
    2. 其实跟 Vue 一样,挂载/更新/卸载(同时也提供一些生命周期钩子)
  3. 对于 React 的组件,我希望在挂载之后执行一段逻辑,应该写在哪儿?
    1. 写一个 watchEffect,放在回调里,依赖数组传一个空的
  4. 那如果希望卸载的时候执行呢?
    1. 在这个回调的 return 里写一个函数体
  5. Hooks 有什么限制吗,比如不能在什么场景下用?
    1. 不能在 if 和 for 里写,因为 React 的响应式实现严格依赖 Hooks 的调用顺序来管理状态,if/for 里写会导致这个顺序发生改变
  6. 继续追问:具体是怎么影响的?
    1. 答的不太好,其实是因为 React 依据 Hooks 的调用顺序来识别每个 Hook,一但这个顺序发生改变可能导致状态错位等问题
  7. React 在什么地方保存这个 Hooks 的顺序?
    1. 那更是答不出来了
    2. React 在 Hook 调用栈追踪了每个组件在一次渲染中调用的所有 Hooks,每当组件渲染时,React 就会开始重新填充这个栈;由于 Hook 的位置是固定的,就可以通过索引去匹配到之前存储的状态和副作用x
  8. 之前提到的 useCallback 和 useMemo有什么区别?
    1. 前者用于缓存回调函数,避免匿名的回调函数被重新创建,或者传递给子组件时导致子组件重新渲染;
    2. 后者用于缓存计算结果,只在依赖项变化时重新计算
  9. 用过 useLayoutEffect 吗?
    1. 没用过
    2. 就是一个在 DOM 发生改变后,页面重绘前触发的一个 Hook
  10. React 组件通讯有几种方式?
    1. 父子通讯:传 state, setState
    2. 兄弟通讯:提升状态到父组件
    3. 深层通讯:Context
    4. 复杂的状态管理:Redux
  11. 你提到了 Redux,那 Redux 的更新是怎么触发视图更新的?
    1. 没答上来
    2. Action 被 Dispatch
    3. Reducer 处理 state
    4. store 更新并通知所有订阅者
    5. 通过 react-redux 的 connect 或 useSelector 来通知 React 组件发生改变(最重要的其实是这一点)
  12. 你了解事件总线吗?
    1. 没答上来
    2. 通过一个中央总线来管理和分发事件,通过在中央总线上订阅发布事件,从而避免复杂的组件间通讯
  13. 了解 React18 的 Fiber 架构吗?
    1. 也没答上来
    2. 这个一句两句也说不清楚了,贴个链接吧https://fe.azhubaby.com/React/Fiber.html
  14. 我说我比较熟悉 Vue3 的性能优化手段,面试官说你可以说说
    1. Proxy 代替 getter/setter
    2. 使用 patch flag 标记更新内容,依赖数组追踪依赖,加上树结构打平,实现了高效的 diffing 算法
    3. 静态提升、事件缓存和 slot 生成优化
  15. 你提到 Proxy 比 getter、setter 性能更好,那好在哪儿?
    1. 对于大型的对象,proxy 可以直接对整个对象进行代理,但 getter、setter 需要遍历整个对象去添加 getter、setter
  16. Proxy 是深层还是浅层的?
    1. 答了 reactive 反正是深层的
    2. 又追问了 Proxy 呢?答成了深层的,但应该是浅层的
  17. 了解过 Vue2 中数组是怎么代理的吗?
    1. 没有
    2. Vue 2 通过拦截数组的原型来实现响应式(一般使用 Object.defineProperty,但对于数组这个方法不能拦截数组的索引变化或者方法)
  18. ES 6 中 Promise 有哪些方法?
    1. all, catch, finally, then
  19. 追问了 all 方法里 catch 行为,如果一个 promise 被拒绝了,还会等待其他的吗?
    1. 不会
  20. then 方法是会每一个 Promise 完成了执行一次,还是等所有 Promise 执行完了再执行一次?
    1. 后者
  21. 了解 WeakMap 吗?
    1. WeakMap 与 Map 不同的点在于前者只能用对象类型作为 key,并且是弱引用的,所以不提供遍历方法,且一旦作为 key 的对象失去引用就会被垃圾回收
  22. 聊聊箭头函数?
  23. 了解 V8 的垃圾回收机制吗?
    1. 聊了比较简单的引用计数法垃圾回收机制,聊了这个算法会受循环引用的限制;
    2. 现在的浏览器使用的是标记-清除算法,即会从根出发,所有无法从根取得的对象都会被垃圾回收
    3. 详细的可以参考这个:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Memory_management
  24. 开始问 css,怎么居中一个元素?
  25. css 中的定位
  26. 手撕:
    1. 手写一个 compose 函数,返回一个函数,能够对传入的不定量个函数进行链式调用
    2. 二叉树的 Z 型遍历(一层从左到右输出,一层从右到左输出)

总结

大部分问题就算答不出来也能跟面试官聊两句,有些问题提前准备到了但是没有准备的那么深,有的问题明明看过文档,但还是答的不够完善;总体来说八股部分还算过得去,手撕也很快,看起来面试官还是比较满意的,希望后续能收到二面吧

#快手##秋招##前端#
全部评论
感谢分享
2 回复 分享
发布于 2024-08-15 20:09 黑龙江
有结果了吗~
1 回复 分享
发布于 2024-08-20 16:52 天津
难顶哇
1 回复 分享
发布于 2024-08-16 11:07 北京
校招吗
1 回复 分享
发布于 2024-08-15 22:23 黑龙江
同学你好,25校招刚刚开始,早投递早处理~ https://neitui.italent.cn/wondershare01/sharejobs?shareId=ca72c234-933e-4d72-a300-81f818367bc1&language=zh_CN
点赞 回复 分享
发布于 2024-08-29 20:29 广东
佬二面了吗
点赞 回复 分享
发布于 2024-08-21 22:41 陕西
好难啊感觉,太厉害了
点赞 回复 分享
发布于 2024-08-20 23:01 广东
有点多呀这个
点赞 回复 分享
发布于 2024-08-19 09:28 北京
详细呀
点赞 回复 分享
发布于 2024-08-18 17:16 广东
mark了,佬写的太全面啦
点赞 回复 分享
发布于 2024-08-18 15:21 陕西
题有点多,多久啊
点赞 回复 分享
发布于 2024-08-15 20:32 浙江
好难
点赞 回复 分享
发布于 2024-08-15 18:02 浙江
太抽象了佬,怎么问这么多啊
点赞 回复 分享
发布于 2024-08-15 17:47 陕西
大佬这个是校招吗?
点赞 回复 分享
发布于 2024-08-15 17:43 北京

相关推荐

从小父母离异家里没人管,靠着心里的不安和学校的环境也算是坚持到了学有所成的地步。到了大学环境开始松散不知道该做什么,只觉得在不挂科的基础上能往上考多少就考多少,等到秋招来临才发现自己有多么幼稚无能,今年九月份初才发现自己原来连一个求职的方向都没有。因为之前做过前后端一体的课设,算是有过了解,而对于其他岗位连做什么都不知道,因此这一个半个月在越来越焦虑的同时埋头苦学,事到如今想要活下去我似乎只能走前端这条路了,9月初先是靠着虚假夸大能力的简历得到一些笔试来确定了考察的方向,有一个大厂的无笔试面试最终是拒绝了没有勇气去面对。然后在这个基础上埋头苦学,如今也算是搭好了自己前端学习的框架和思考的瞄,可以逐渐给自己扩展新的知识和能力了,但这并不是一件多好的事儿,因为我发现学的越多越焦虑,学的越多便越无力。因为我感觉我如今努力学习的知识都是竞争对手们早就掌握了的东西,我如今困惑追求答案的难题早就被别人解决。别人早就能得心应手地做出项目而我连思考都会卡壳,看着别人的笔试和面经上那些闻所未闻的题目,我才知道别人到底有多强而我有多幼稚,我什么时候才能达到别人那种堪称熟练的能力呢?而且网上的焦虑越多越多,即便是真有这么高的能力最后也大概落得一个低薪打工人的下场,我真的感到迷茫。秋招都快结束了,而我还在继续痛苦的学习之旅,这些天找前端面试发现似乎问的有些简单跟网上搜到的内容不符(可能因为并不是大厂),我是不是本来就没打算被招所以别人懒得细问呢?我不知道,我只能继续总结下去学习下去,不管如何我都要活下去,如果我能早一些准备就好了,如果暑假能意识到现在这个情况就好了,可惜没有如果。种下一棵树的最好时间是十年前,其次是现在,虽然我相信自己的学习能力,但已经错过了最好的时机,只能在焦虑与痛苦中每天坚持学下去。目前的路还有很长很长,先去把typescript看了,再去巩固vue3的基础,再去练习elementui的使用,如果这能找到实习的话就好了。接下来呢?去学uniapp和小程序,不管如何我都要对得起曾经努力的自己。即便我们都感到痛苦,但我心中还是希望我们都能靠自己的努力来获取自己想要的幸福。
紧张的牛牛等一个of...:在担心什么呢,有一手985的学历在,就算是小厂别人都会要的,咱们双非的人更多,多少还在沉沦的,怕什么了
一句话证明你在找工作
点赞 评论 收藏
分享
10-19 14:15
兰州大学 Java
_Philia093:蓝桥杯省三删掉
点赞 评论 收藏
分享
评论
31
79
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务