字节跳动面试难吗,应该如何应对?

关注者
7,802
被浏览
7,746,002

324 个回答

21届硕,去年秋招拿了字节跳动offer。

字节跳动面试最大的特点就是爱考算法题

你随便翻几篇字节跳动面经就会发现

考的算法题一般都是Leetcode原题

只是有的时候,你没刷过,不知道那道题是Leetcode上的原题

举个例子,下面这道题你知道是Leetcode原题吗?

给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表

没错,是Leetcode 25. K 个一组翻转链表

这道题其实是字节跳动算法高频榜位列第2,数据来自CodeTop高频榜

算法题频度
3. 无重复字符的最长子串106
25. K 个一组翻转链表84
206. 反转链表83
215. 数组中的第K个最大元素81
146. LRU缓存机制68

再来看看这道题

给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [nums l, nums l+1, ..., nums r-1, nums r] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

这也是Leetcode原题, 209. 长度最小的子数组

字节跳动教育、飞书、商业化、视频架构等部门考察过,共计19次。

字节跳动考察Leetcode209的面经原文

好了,回到问题本身

如何应对字节跳动面试?

单从准备算法题而言,刷字节跳动题库是最高效的方法,没有之一

世界上本没有题库,但面经多了,就有了题库—— @一个搬砖的胖子

大数据可以一定程度预测人的行为

那通过汇总大量面经,也是可以摸清面试官考察算法题的规律

我在字节跳动面试高频算法题汇总一文中,统计过牛客的 389 篇字节跳动面经

发现考察次数 ≥ 3次的题目,一共有 95 道,但它们的出现频率却高达 80.16%!

高频题的重要性不言而喻。

想想也是,面试官在那么大的工作压力下

根本没工夫找一些自己不熟的题刁难你

因此,每个面试官翻来覆去就考自己熟悉的那几道题

而且,悄悄告诉大家

有些题可能只有某个部门的面试官会考察

比如,Leetcode 668. 乘法表中第k小的数

看到题目评论有人在字节跳动面试遇到过该题。

我猜了下部门,果然中了。

因为这道题目前只有字节跳动-商业变现部门考到过。(面试官请忽略这一段)

接下来我将列出汇总上千篇面经而得的字节高频题Top 100

若你想按照部门、岗位筛选查看题库,可以在免费开源的CodeTop中查询

所有频度都是我人工总结而得,这耗费我非常多的精力

如果对你有帮助的话,为我点个赞吧

字节跳动高频题Top 100

题目 出现次数

3. 无重复字符的最长子串 106

25. K 个一组翻转链表 84

206. 反转链表 83

215. 数组中的第K个最大元素 81

146. LRU缓存机制 68

103. 二叉树的锯齿形层次遍历 64

15. 三数之和 62

121. 买卖股票的最佳时机 61

160. 相交链表 58

1. 两数之和 48

236. 二叉树的最近公共祖先 45

53. 最大子序和 39

42. 接雨水 38

21. 合并两个有序链表 36

415. 字符串相加 36

88. 合并两个有序数组 35

199. 二叉树的右视图 34

102. 二叉树的层序遍历 33

33. 搜索旋转排序数组 33

200. 岛屿数量 33

54. 螺旋矩阵 31

105. 从前序与中序遍历序列构造二叉树 30

141. 环形链表 28

101. 对称二叉树 28

300. 最长上升子序列 28

20. 有效的括号 28

31. 下一个排列 27

69. x 的平方根 27

56. 合并区间 25

23. 合并K个排序链表 25

143. 重排链表 25

46. 全排列 25

232. 用栈实现队列 24

112. 路径总和 24

124. 二叉树中的最大路径和 24

5. 最长回文子串 24

142. 环形链表 II 23

94. 二叉树的中序遍历 23

113. 路径总和 II 23

92. 反转链表 II 23

958. 二叉树的完全性检验 22

补充题1. 排序奇升偶降链表 22

41. 缺失的第一个正数 21

70. 爬楼梯 20

155. 最小栈 20

129. 求根到叶子节点数字之和 20

2. 两数相加 19

98. 验证二叉搜索树 19

76. 最小覆盖子串 18

122. 买卖股票的最佳时机 II 18

19. 删除链表的倒数第N个节点 18

169. 多数元素 18

剑指 Offer 22. 链表中倒数第k个节点 18

39. 组合总和 18

470. 用 Rand7() 实现 Rand10() 18

165. 比较版本号 18

543. 二叉树的直径 17

162. 寻找峰值 17

32. 最长有效括号 17

240. 搜索二维矩阵 II 17

93. 复原IP地址 17

209. 长度最小的子数组 17

226. 翻转二叉树 16

48. 旋转图像 16

718. 最长重复子数组 16

补充题4. 手撕快速排序 16

518. 零钱兑换 II 15

64. 最小路径和 15

234. 回文链表 15

110. 平衡二叉树 15

83. 删除排序链表中的重复元素 15

322. 零钱兑换 15

62. 不同路径 14

104. 二叉树的最大深度 14

148. 排序链表 14

82. 删除排序链表中的重复元素 II 14

198. 打家劫舍 14

151. 翻转字符串里的单词 13

230. 二叉搜索树中第K小的元素 13

1143. 最长公共子序列 13

4. 寻找两个正序数组的中位数 13

239. 滑动窗口最大值 13

补充题2. 圆环回原点问题 13

78. 子集 12

72. 编辑距离 12

剑指 Offer 09. 用两个栈实现队列 11

695. 岛屿的最大面积 11

144. 二叉树的前序遍历 11

394. 字符串解码 11

8. 字符串转换整数 (atoi) 11

24. 两两交换链表中的节点 11

补充题9. 36进制加法 11

128. 最长连续序列 10

704. 二分查找 10

739. 每日温度 10

224. 基本计算器 10

79. 单词搜索 10

221. 最大正方形 9

22. 括号生成 9

剑指 Offer 36. 二叉搜索树与双向链表 9

感觉不难,但没 offer。面了两个组(共见了 5 个面试官),一个组至今没有消息,另一个组的 HR 说:感觉你想做业务 leader,但我们最需要的是前端技术 leader,而且业务 leader 已经招满了。我觉得这是双方期望没有聊好吧,也可能只是 HR 找个理由婉拒。

我几个月前从 Facebook 裸辞后,就有中国猎头拉我去面字节跳动,说他们要招个 leader 建立前端的基础架构团队,解决前端散落在各个产品导致技术不可复用的问题。一开始猎头说这个职位回报给张一鸣,我心想你就瞎扯吧,无论前端基础架构受到如何种重视,最多都只能放在一个更大的基础架构团队内。后来猎头纠正说,这个职位回报给 DK,目标定级 4-2,我还是觉得在瞎扯,反正看不到 offer 我不信。不过面试我倒是不介意的,互相了解一下嘛,所以就答应了聊一聊。(其实之前 DK 来 Facebook 的时候大家也有交流过。)

面试用的是牛客网,看起来跟我们在 Facebook 店面用的 CoderPad 差不多,不过已经支持视频了,还能让你先调试视频音频连接再进入房间。进入房间后发现 CoderPad 的样子后,我就开始想对方会让我做什么题写什么代码。面试官进来后开门见山地说,我们就聊聊项目吧,不需要写代码。类似的面试方式面了三轮,然后因为他们听说我对教育事业感兴趣,于是又让我跟他们的对应产品(也就是收购回来的 GoGoKid)面了两轮。最后是教育那边 HR 把我拒了,但基础架构这件事情猎头说要等消息,一直没说什么,我也懒得追。

说一下我对整个面试过程的一些观察吧。


首先,我没有感觉到面试有很明确的类型和分工,这是跟 Facebook 很不一样的。Facebook 每一轮面什么是有分工的,不由得面试官随意发挥,只能在分工范围内选择题目然后根据面试者表现动态调节。字节跳动的面试官好多人都选择让我先从简历和项目经历说起,这样就会让我面对不同的人复述差不多的事情,然后再看他们想要具体了解什么。


有一个互相对不上的问题是复杂系统设计经验。有一位面试官问到我这个问题,我发现我们在 Facebook 基本上不做这件事情,准确来说是做得很松散导致没什么好说的。尽管我们也需要解决复杂系统的设计,但我们不会好像大多数公司一样要出设计文档然后各种评审。我们往往拉几个人在白板上写写画画一番,最后大家都同意某个设计了就可以着手写代码了,而且通常不会有人把文档写下来。(这其实是个 Facebook 的缺点。)

同时为了求快,我们会放弃掉一部分不确定的复杂性,优先把确定必须要做的做出来。例如说,这个新产品如何支持某某规模的高并发?发布后有没有几万月活都很难说,还想什么高并发,这个问题暂时不在系统设计中考虑。真的规模上来后,我们再重新设计系统。留存做不起来,月活上不去,说这个没意思。

为此我只能跟面试官说,我们的做事方法就是必须要考虑解决当下的问题,会有一些系统设计但不做长远复杂的系统设计。我们更多的是要考虑业务的复杂性,而不是纯技术系统的复杂性。业务可能如何走向,例如前面说的,新产品发布成功是一回事不成功又是另一回事,那如何两手准备才好。感觉我把这个话题给聊死了,然后面试官只能问:那你们如何根据业务规划战略和根据实际进展动态调整战略。


还有一个互相对不上的地方在于对技术 leader 的期望。在 Facebook 习惯了对 E5+ 有产品甚至是业务的期望,也就是说不能单纯地解决业务和产品丢过来的技术难题,还要保证只解决正确且重要的问题,这些问题被解决后要能帮助产品和业务成功。如果不能帮助产品和业务成功,解决的技术问题再难也等于白费。如果能够帮助产品和业务获得巨大的成功,就算所需要用到的技术很简单也会得到认可。

感觉这就跟中国公司习惯的做法很不一致。中国公司还是习惯于技术人员就崇尚技术,作为技术 leader 你对产品和业务的话语权十分有限,还是 PM 和其它角色掌管着产品和业务的成败。我觉得这样的领域壁垒对我未来创业没什么帮助,因为创业就必须让技术和产品彻底服务于商业,一个人必须从头到尾地理解技术、产品和业务。

这件事情面试官表示他也同感,因为他面过其它来自美国的面试者也有这样的期望差异。他问我到底想要做技术、产品还是业务,我说我希望带一个技术团队做涉及到产品和业务的事情,最终要能对业务做出贡献。最后就出现了开头所说的 HR 反馈,他们觉得我想做业务,但他们只想找技术 leader。


最后,字节跳动安排面试这件事情上的人性化程度显然是还不能跟美国公司比的。美国西岸时间和中国北京时间能对上的也就是那几个小时,但有一部分的面试官就是不能在北京时间下午 2 点前面,这就导致我这边很晚了。我跟猎头说,反正我不会面过凌晨 12 点的,你要晚开始的话一天只能面一轮。

这个信息猎头不知道正确传达没有,但 HR 还是预先安排多轮。我就问面试官这怎么回事,面试官说他们是先把多轮安排上,如果我面完一轮后不困就可以选择继续面下去。我当然选择不面下去,反正我没必要为此牺牲我的睡眠时间。在这种我们叫做「面试体验」(类似于「用户体验」)的事情上,可能中国公司还是好无意识,缺乏人性关怀。


我觉得面试不难的原因在于总体上就是聊聊天,很多问题只要我了解大局,方方面面我都可以深入谈。当然这只是我单方面的感觉啦,也有可能我完全没找到对方面的点在哪里哦。不过既然他们让我面到 5 轮,那我前面那几轮估计不是太差吧。