字节-高级前端三轮面经
共 4556字,需浏览 10分钟
·
2024-06-24 23:19
字节的面试难度,一直是大厂中的 Top 级别,即使是前端岗位,也特别看重算法能力。今天就给大家分享一篇字节的社招面经,原作者是《低代码平台开发实践:基于react》这本书的作者,在低代码平台这块有较深的研究,让我们一块来学习下他的面经吧。
以下是正文。
我面试的职级是 2-2,一共经历了 3 轮技术面,每一面都要手写算法。
2023 年 7 月下旬,我经历了一次裁员,一直到了 2024 年 1 月才开始找工作。在今年的 2 月初,我参加了字节跳动的面试,虽然没能通过第 3 轮面试,我记录了当时的一些面试问题,希望能帮助大家了解字节的面试流程和问题。
第一轮面试
首先是自我介绍,主要介绍在任职的公司落地了低代码平台和用户操作记录回溯,还向开源项目 rrweb 提交了两个PR,最后是公司的插件化架构。
PS:大家在自我介绍中,可以突出自己有亮点的内容,可以引导后续面试官的提问
自我介绍完毕,面试官的第一个问题是:为什么离职?
我因为被裁而离职,也如实做了回答,后面的面试官也都问了为什么被裁。
PS:如果在某个公司的工作经历不满两年,很容易被问到为什么离职,回答时需要注意,尽量不要吐槽前公司
由于我从离职到面试字节中间隔了7个月左右,面试官还重点关注了离职之后在做什么。
离职之后,我首先回家休息了近 1 个月,旅游了近 2 个月,然后写书花了 1 个多月,到 1 月底开始找工作,这没什么好隐瞒的,如实告知了面试官。
PS:这位大佬还是挺实诚的,有过写书的经历,在能力和项目经历上,绝对很有竞争力的
第一轮主要面试 JS 和 React基础知识,问题如下:
-
浮点数运算的精度问题,比如 0.1 + 0.2 不等于 0.3 这是什么原因,要怎么解决? -
对 webpack 有了解吗 -
webpack中 loader 与 plugin 有什么区别 -
有没有写过 plugin -
我们写代码的时候是 es6,浏览器运行的时候是 es5,在做代码转化的时候,webpack 做了哪些工作? -
在 React 类组件中,为什么修改状态要使用 setState 而不是用 this.state.xxx = xxx -
setState 函数做了哪些事情 -
React 生命周期 componentWillUnMount() 对应的 hooks 要怎么写 -
useState 的原理是什么,背后怎么执行的,它怎么保证一个组件中写多个 useState 不会串 -
函数组件重新渲染的时候怎么拿到useState之前的状态,而不是得到初始化的状态 -
React为什么要自定义合成事件 -
你的简历里写了关注资产损失,这是做什么事情。 -
你在地代码开发与实践上也做了一些事情,当时是做什么呢? -
表单的联动是怎么处理的 -
当时做这个表单驱动的时候,为什么没有用 Formily 现成的方案呢 -
被裁的原因是什么呢 -
从离职到现在一直没有找工作吗? -
从11月底到现在两个月了有哪些 offer 了吗
算法题
-
实现 loadsh.get 方法 -
计算二叉树的最大深度 -
岛屿的最大面积
最后是反问环节。面试时长 1 小时 40 多分钟。
一面的时间很长,可能是面试官对这位同学的项目经历很挺感兴趣,也能是因为作者在算法题这块花的时间有点多
第二轮面试
由于简历重点介绍了低代码,并且在自我介绍的时候,提到了我在 gap 期间写的书,二面面试官的大部分问题都与低代码相关。
问题如下:
-
为什么写书 -
能把你的掘金上发的低代码文章发给我吗? -
低代码针对的中后台是什么样的 -
table 中的字段也是可以配置的吗?Table 头和每一项下面展示的内容怎么配置 -
为什么要做低代码 -
做低代码系统的时候你有考虑研发量吗 -
整个低代码都是你一个人做吗? -
当属性面板上有修改之后,画布刷新的机制是怎么样的 -
继续讨论研发量,开发规划的问题 -
没有考虑使用已有的低代码项目做二次改造吗 -
做低代码的时候有没有遇到比较难的问题,怎么解决的 -
被裁的原因
PS:作者在面试时重点介绍了自己开发的低代码平台,其实最近在筛简历时,发现很多人都写了低代码平台。但大家得提前想好,这样的平台是否真的能给团队带来很高的价值。稍微大点的公司都会有这个系统,除了老板喜欢提升效率的平台,大家做汇报也好看。但实际上,现在的低代码平台还是有很多局限性,大家要想好平台的能力边界在哪儿。
算法题
-
最大子数组和 -
最长回文子串
最后是反问环节。面试时长 1 个小时左右。
第三轮面试
这一轮的面试官没让做自我介绍,一开始就是写算法题
算法题
-
K 个一组翻转链表
下面是询问的问题
-
为什么写书 -
在市面上类似的书有一些,你的书有什么不同 -
什么场景适合做低代码,给什么用户使用 -
低代码最适合的场景是不是no-code? -
怎么界定低代码和无代码的边界 -
你做的低代码平台能实现的最复杂的一个场景是什么样的 -
为什么json要转化为手写代码 -
转化成手写代码是什么样的 -
源码解析器是什么 -
开发低代码的背景 -
整个项目的周期有多长 -
从酷家乐离职之后主要在写书吗? -
用户操作记录回溯工具是为了解决什么问题 -
用户记录回溯工具有达到目的吗 -
主管有没有说被裁的原因
最后是反问环节。面试时长 1 个小时左右。
总结
面试被问到的重点问题如下:
-
为什么被裁 -
被裁之后在干什么 -
低代码项目的迭代安排和人员安排 -
市面上的已有低代码方案
需要改进的点:
-
为了迫使自己在对方问问题之后思考问题,重复一下问题里的关键字。比如,当对方问为什么 React使用 setState() 修改状态,而不是直接给 this.state 赋值去修改?重复一遍面试官的话,如果面试官说的话很长,那就提炼出关键字后重复一遍。 -
当某个方案有多个原因时,先回答1,2,3,再逐条分析。比如为什么 React 要封装合成事件?为什么要将低代码 json 转成手写代码?为了让自己回答问题更专注,使用手指头记录自己说到了第几点。(结构化)
面试官点评
三面的算法题是一道 hard 难度的题目,大家通常会认为,问 hard 难度其实是因为没 hc。
但讲道理,k长度一组反转链路,其实是一个实际难度在简单到中等之间的题目,标了个 hard 可能是因为它在 leetcode 属于比较早期的题目,并不是真的难写。
对于数据结构扎实的同学来说,leetcode 的链表题可能是最简单的一块了。
事实上,2-1/2-2
的职级,对于基础要求其实在各类面试中区分得并不明显。字节的前端岗位面试,对于硬核内容的考察通常并不会很深,很多时候是看你的实际项目解决了啥问题,看你在这个项目领域里的深度,甚至有没有带人的经验,然后再定你是2-1
还是2-2
,面2-2
给2-1
也并不少,但带人的岗位经常会要求 3-1
了。
大家也不要太把字节的面试当模板,有些共性的背题该背就背,算法该刷还是得刷,除此之外还是要坚持一些自己的技术追求,感兴趣的问题多深入一些,比如你最近解决/解决中的问题,在 github 上有多少解决方案,哪些方案比较好,你做得哪些是更好的,以后想解决啥问题。
作者:何遇er
原文:https://juejin.cn/post/7345821800880324671