字节跳动面试经历 [1] - sbw Blog

字节跳动面试经历 [1]

来源: sbw Blog | 浏览: 8757 | 评论: 16 发表时间: 2019-05-26

虽然我已经决定在老家混日子养老了,但最近还是被一个老同学“忽悠”着内推了字节跳动。被同学一教育,搞得我也确实想再去大城市拼搏一把了。到目前已经面试了两轮了,不得不说长时间不做题,有好些东西都忘了。在这里也算复盘一下,巩固一下基础吧。



由于是同学帮忙内推的简历,所以我这里也没有什么简历筛选流程可以看到。当时看岗位的时候,我选出来比较有兴趣又觉得能胜任的有两个岗位,分别是“Rust/C++效率工程”和“C++后端开发工程师”。虽然是Rust粉,但由于对自己的Rust能力表示不自信,纠结好久最后还是选了C++岗位。大概就是在内推后的第3天,接到了字节跳动HR的电话约了第一轮面试,时间是周日的下午四点,岗位却是Rust那个。也不知道是C++那个岗位的没看上我还是Rust这边太缺人,估计看到我简历里有Rust就先面下试试?(


第一轮面试(1)

第一轮面试安排在周日下午4点(字节跳动大小周),使用Zoom视频软件远程视频面试。有两个小组成员分两次面试,每人大概1.5小时。每小轮的套路都一样,上来先让你做一道算法题,在你做题的时候面试官估计才第一次在看你的简历,之后就是根据你简历内容进行的一些问题了。


第一个面试官的算法是输入一个数列,代表一个地区的高低起伏海拔,计算在潮水退去之后,这个数列代表的“坑洼地”能存放多少水。

byte-dance-interview-algorithm

这题倒不难,但是在你做题的时候他会时不时会你一些问题,再加上长时间没玩OJ,我的代码提交给面试官看的时候被抓到bug了(。尴尬尴尬,估计他也对我的代码不是很满意,又临时加了个数据结构的问题:两个从右往左的链表实现左对齐的加法。

byte-dance-interview-algorithm

这个我倒很快答上来了,然后就是数据库、操作系统、HTTP、TCP/IP基础四连问:


数据库问了索引、B+索引和Hash索引的优缺点、事务、表级锁和行级锁、sql优化、区间查找等,都是教科书级别的简单问题。


操作系统问了虚拟内存、分页、页表的组织形式、当然还有IO方面必问的select/epoll。也是基础为主,外加一点点经验方面的知识点。


HTTP对我来说应该是了解最少的,但是这个面试官尤其对这个话题感兴趣(囧,问了HTTP头、几种请求方式、HTTPS原理、认证过程、HTTP 2.0、QUIC、甚至还问了50x错误各代表什么意义,一下就蒙B了,平时也不怎么用这个,所以只答了个基础。


然后是TCP/IP,握手挥手的开场白没什么问题,然后是超时重传相关的也没啥问题,最后问到流量控制和拥塞控制,这个搁平时完全OK,结果当时紧张的给没说清楚(主要是全忘了2333),心里一下有点悬。


然后是语言部分,基本上是以Rust为主,问了宏,过程宏,Box、Trait Object,详细问了动态分发和静态分发,还有Deref和Drop这些基础Trait,没有问生命周期。C++部分基本都是在问Rust问题的时候带上一句“这个在C++里对应着什么?”,语言方面总体不难。


之后就让我等第二个面试官了。


第一轮面试(2)

第一轮面试的第二个面试官,套路还是原来的套路,难度感觉有一点点加强?算法是N个不同长度的有序数列(从小到大),要求把他们全都合并成一个大的有序数列。


补充:后来发现这是一个LeetCodeHard题:Merge k sorted lists


emmm,果然字越少题越难。他先让说想法,然后当每次说个想法之后,不管这个算法怎么样,面试官都会来一句灵魂之拷问:“那你这个复杂度是多少?”于是在想解法、算复杂度、再改进、再算复杂度...这样循环了两三波之后,终于开始写了。


为什么感觉第二个面试官比较难呢,因为他会制造一些压力,比如讲完题目之后他会直接说,这个题只有20分钟时间,然后在给他讲想法并计算复杂度的时候,就越来越着急。而且最后正式写代码的时候,也不是让你在IDE里写,而是在一个他给的一个类似于记事本的网站上进行白板编程。过程中也会不断问你第x行这样写的原因是什么之类的。


这波面试只有一个算法题,做完之后又来到基础四连问,俩面试官应该是交流过的,问的题目没有太多重叠。


数据库:索引,重点问了Hash索引实际处理方法等。


操作系统问了进程和线程,同步等等,epoll问的比较详细,不过也还算基础范围内吧。


由于上一个问HTTP相关问的多,于是在面完第一个人,等第二个人的时候,我赶紧上网又查了一下相关知识2333。然后果不其然,HTTP不仅问的多,还问的很深,比如HTTP/1.1 的 Pipelining 和HTTP/2的多路复用的区别、TLS握手过程等等,所以我感觉我又双叒叕跪到HTTP上了。


TCP/IP问了基础,没啥重点,流控和拥塞控制我这回直接说了些基础,然后说了解的不多2333。


语言方面以Rust为主,大概问了下做的项目,用到了哪些crate。重点问了Rust的Trait Object和动态/静态分发及相关效率影响,还有和C++的区别之类的。然后问了C++中的智能指针以及对应到Rust中的指针。


结束。


总结

由于这个“Rust/C++效率工程”的小组主要在做业务SDK方面的工作,估计大量用到HTTP吧,所以对这方面非常非常重视。网络方面的其它知识也问的很详细,这个还是得好好准备一下才行。

从下午四点面试到了七点,然后到7:30的时候HR打电话来约下周三晚上8点的第二轮面试。PS.这时候还在工作,字节跳动的HR下班可真晚呐。




相关文章
  • 声明: 评论属于其发表者所有,不代表本站的观点和立场.
  • 南浦月 回复该留言 时间: 2019-05-29

    大佬就是大佬!

  • sbw 回复该留言 时间: 2019-05-29

    乔老师才是大佬!

  • 路人甲 回复该留言 时间: 2019-06-21

    大佬请问是社招吗

  • sbw 回复该留言 时间: 2019-06-24

    是的

  • 路人甲 回复该留言 时间: 2019-06-25

    感谢回复哈,明天要面这个岗位的实习,这篇文章帮助很大~

  • sbw 回复该留言 时间: 2019-06-25

    加油哦,第一面很容易的,重点还是放在第二面上去,如果是内推的话可以提前了解一下面试官背景

  • a-wing 回复该留言 时间: 2019-08-06

    应该都是从 http 业务出身的吧(

  • sbw 回复该留言 时间: 2019-08-06

    是的,因为我本来投的 C++ 后端,但是最终面试岗位是 Rust 效率工程,我一开始也没看 JD,不知道这团队干啥的,没想到全是 HTTP 问题。

已有 8 位网友发表了一针见血的评论,你还等什么?
  • 昵称: *
  • 邮箱:
  • 网址:
  • 记住我的信息
  • Color
  • Red
  • Blue
  • Code
  • bash
  • cpp
  • css
  • java
  • js
  • perl
  • php
  • python
  • ruby
  • sql
  • xml