字节跳动 前端社招 三次面试+HR面 (已oc)
本人21届双非三个月实习, 没有正式工作经验。
一面 (45min)
- 自我介绍
自我介绍着重项目经验, 突出自己掌握熟练的内容 - 首屏渲染优化方式有哪些(懒加载, 预加载)
- 前端性能优化指标有哪些 (FP, FCP, LCP) 答得不是很理想
- SEO相关优化
- 项目所使用技术的优劣势, 适用场景
- websocket 性能优化
- 后端性能优化指标
- 用过那些hooks, 自定义过那些hooks, 详细说一下
- 登陆状态管理 session cookie token(jwt) 还有分发中心
- 算法题: 金额格式化, 3位一逗号, 没写好, 忽略了负号(蠢死了)
- 内存泄露遇见过吗? 怎么处理
- 循环引用是什么, 产生原因, 怎么检查, 怎么处理
- weakmap, weakset
- css3 动画效果有哪些
- 反问 (学习建议, 发展方向)
第一次面字节, 有点慌慌张张的, 字节的一面是考的最广, 淘汰率最高的。
面试官比较平和, 但是算法题没有考虑周全, 我以为自己就要止步于此了。
庆幸的是两天后接到了二面的通知, 也算是松了口气。
面试主要围绕项目展开, 然后延伸到基础。
二面 (90min 实现写太久了)
- 自我介绍
- 剩下的内容主要根据项目更更更深的展开
- 图片上传方式
- 图片类型的不同(base64 blob)
- 图片格式不同 (jpg gif png jpeg webp)
- 项目技术选择, 和优劣势
- 代码实现题: 异步限流器 (思路对了, 但是返回值忘了返回, 调试了半天没弄出来, 换了一题)
- 算法: 版本号排序
二面面试官真的超级和善, 在一面的基础上挖的更深, 但是会慢慢引导你深入, 在遇到问题也会给出一些回应, 最后还给了一个机会换题目, 超级感谢!。
同样是两天后, 焦急的等来了三面的消息!
三面 (60min)
第一题 是数组去重, 但是比想象的不太一样, 需要判断数组内对象键和值来去重
[{a:1, b:2},{a:1},{a:1}, {a:1, b:{c:1}}, {b:{c:1}, a:1}] => [{a:1, b:2}, {a:1}, {a:1, b:{c:1}}]
我的想法和做法是
实现了一个 JSON.stringify 来按键值排序, 然后set去重, 再用JSON.parse转换回来
然而面试官表示能不能不拷贝或者转换, 应该是想考察深比较, 然而当时没反应过来, 不过有提到循环遍历键值, 不知道面试官怎么看待qwqq第二题原型链 老生常谈了, 手写es5原型链, 也写了点es6, 没写完, 顺便扩展了一下 new函数, Object.create 还有 symbol等基础知识
第三题 React 用 react.createElement 实现 jsx 语法糖
这个距离日常使用真的太久远了, 是刚刚学react的时候接触的
真的忘了参数是啥, 只知道它的作用是转换jsx为虚拟dom, 只擦边答了个大概, 希望面试官能够手下留情qwqq第四题 接着深入, 考察 reactElement, reactComponent 还有 fiberNode 的作用
第一个第二个说实在class组件太久没用了, 完全不知道, 只能蒙了点相关的概念
第三个就是 React 17 以后的 fiber 工作树节点, 谈了一些相关的, 也不太全第五题 非常庆幸还有机会第五题, 判断事件队列, 然而还是做错了两个点
连续 then 会将后续的 then 函数排到微队列尾部
其次 一定要注意, 第二次事件循环, 每处理一个宏任务就要清空一次微任务队列
然后还问了链式调用其中的原理, then 的返回值相关的问题, 这里答得不是很好 害
总的来说其实5题都是常规题目, 有难度, 但没有特别难, 考察对于基础知识的掌握吧
当然不仅此于这么几题, 会根据问到的知识点进行扩展, 延申。
其中正中我的很多薄弱项, 很多概念有所了解但是并不熟练或者深入探索。
还是要加强对于基础知识的掌握程度, 加强认识。
字节HR的效率真的超级快, 依旧2天后就通知技术面通过, 进入hr面。
HR 面 (30min)
- 过去和目前的情况
- 后续安排
- 过去和现在拥有的offer相关
- 对于三次面试的感受和总结
- 对业务了解吗?
- 反问
- 介绍一些字节的业务和相关的工作安排
- 介绍后续安排
- 反问2
hr面后的三天 oc 了~ 由此我也终于加入了字节跳动, 希望入职顺利, 试用期加油~
个人的一些拙见总结:
https://juejin.cn/post/7077403424211337229