虽然我已经决定在老家混日子养老了,但最近还是被一个老同学“忽悠”着内推了字节跳动。被同学一教育,搞得我也确实想再去大城市拼搏一把了。到目前已经面试了两轮了,不得不说长时间不做题,有好些东西都忘了。在这里也算复盘一下,巩固一下基础吧。
由于是同学帮忙内推的简历,所以我这里也没有什么简历筛选流程可以看到。当时看岗位的时候,我选出来比较有兴趣又觉得能胜任的有两个岗位,分别是“Rust/C++效率工程”和“C++后端开发工程师”。虽然是Rust粉,但由于对自己的Rust能力表示不自信,纠结好久最后还是选了C++岗位。大概就是在内推后的第3天,接到了字节跳动HR的电话约了第一轮面试,时间是周日的下午四点,岗位却是Rust那个。也不知道是C++那个岗位的没看上我还是Rust这边太缺人,估计看到我简历里有Rust就先面下试试?(
第一轮面试(1)
第一轮面试安排在周日下午4点(字节跳动大小周),使用Zoom视频软件远程视频面试。有两个小组成员分两次面试,每人大概1.5小时。每小轮的套路都一样,上来先让你做一道算法题,在你做题的时候面试官估计才第一次在看你的简历,之后就是根据你简历内容进行的一些问题了。
第一个面试官的算法是输入一个数列,代表一个地区的高低起伏海拔,计算在潮水退去之后,这个数列代表的“坑洼地”能存放多少水。
这题倒不难,但是在你做题的时候他会时不时会你一些问题,再加上长时间没玩OJ,我的代码提交给面试官看的时候被抓到bug了(。尴尬尴尬,估计他也对我的代码不是很满意,又临时加了个数据结构的问题:两个从右往左的链表实现左对齐的加法。
这个我倒很快答上来了,然后就是数据库、操作系统、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个不同长度的有序数列(从小到大),要求把他们全都合并成一个大的有序数列。
补充:后来发现这是一个LeetCode的Hard题: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下班可真晚呐。