【已OC】字节tiktok后端架构——耐面王熬出来了
三四月份一直在准备保研和在校内做科研,当时顺便把BAT和一些其他大厂的算法岗也都投了个遍,但无一例外全简历全进垃圾桶了,也浪费了许多投递机会。可是当时不懂事,中小厂当时都不想投,感觉没必要。可是被挂太多简历了,于是又投了一些非互联网公司的算法,只有huawei机器学习接了我的简历,对接的HR一开始很热情,但机试过了之后就被晾在了一边,也不约面也不挂,后来自己调研了一下组的情况感觉也不是很想去,这一套下来对华子的印象也不太好,就懒得联系不了了之了。
结果就是金三银四直接过去了(当时还没这个概念),直到五月末忙校内后才抛弃幻想,想着还是做点先开发吧,毕竟算法是近一年才开始有产出,而且是AI安全方向的,感觉即使有顶会也不是很被认可。。。开发至少在校期间经验和产出都比较多了。可谁想这也一投一个不吱声,才发现各个厂的暑期hc基本都没了,虽然不少大厂的官网依然可以投递,但基本都是石沉大海,问了几个老学长要了内推,但最后都被告知应该没名额了,一份简历一天辗转几个部门都没过,后来我才知道什么是金三银四。。。到最后只有全年可投的宇宙厂有面试机会了,于是开启了长达一个半月的面试阶段。。。
06-04 字节后端Infra一面
问题:
- 操作系统的组成包括哪些部分,都能实现哪些功能?
- 操作系统中内存是怎么分配的,虚拟内存的原理是什么
- TCP和UDP的区别是什么
- 知道哪些应用层常用的状态码
- MySQL索引原理
- MySQL和Redis的区别是什么,如何选择使用哪个
- Redis能不能用来做持久化存储
- 学术经历与论文
- 项目背景,自己负责的部分是哪些
- 团队合作开发时有没有遇到过矛盾,是如何解决的
- 如何管理社团,作为社长需要做哪些工作
手撕:三数之和
反问:
- 团队主要业务是什么:内部提效
- 实习生能够接触到多核心的业务:看水平,无限制
- base在哪里:大钟寺
总结:
- 第一次面确实比较紧张,对晓艳老师说的“尴尬地笑”有了更深的理解。。
- 好在总体问的还是比较简单的,不出意外地过了
06-09 字节后端Infra二面
问题:
- 介绍项目的详细业务和功能
- Java多线程用在哪?
- 简历里提到的响应速度提效是怎么做的,以什么为标准,提升效果是理论值还是实际测试值
- Redis怎么缓存的,缓存了哪些数据
- 项目的缓存是怎么更新的
- Redis有哪些部署方式
- PostgreSQL和MySQL的区别
- 项目中的AI算法用在哪里了
- 问了一下科研经历
手撕:合并有序数组
反问:
- 做后端需要对算法了解吗:不怎么需要,算法团队会解决
- 需要提前学Go吗:可入职后现学
- 团队内部怎么分工的
总结:
- 感觉对自己的项目不够熟悉,多线程没答好,不够其实没出大问题,感觉还是有过的可能的
- 没有主动联系HR,泡了几天就应该联系一下的,结果泡了七天之后挂了
- 觉得以后联系HR要主动点,说不定机会就给到了(谁想后来太主动了也出了意外)
06-20 飞书后端一面
项目:
- 项目中遇到最大的困难是什么,怎么解决的
- 了解网络分层模型吗,为什么要分层
- 知道哪些协议?HTTP是哪个层的协议
- 讲一下HTTP和TCP的关系,谁包裹谁?(答得太急差点答反了)
- 开发中有没有用过分层的概念?
- 数组和链表的区别?
- 访问一个数组时虚拟地址是怎么确定的,实际存储物理地址是又怎么确定的?
- 一个数组在物理内存中一定是连续的吗?
- 数组查找和删除最小值的复杂度是多少,说说能想到什么数据结构?
- 讲一下优先队列,了解底层实现吗?
- 讲一下知道的平衡二叉树
- Java中哪些集合类是红黑树实现的
手撕:滑动窗口找最小值,秒了
总结:
- 虽然过了,但感觉面试的时候被狠狠拷打,应该不算优秀过,只是勉强过
- 数据结构与算法的基础有待加强
- 操作系统内存的理解有待加强
06-23 飞书后端二面
问题:
- 介绍项目的业务
- 系统服务了哪几种用户,分别有什么功能
- 有没有考虑过用飞书实现类似的功能,或者说有什么功能飞书不能实现
- 系统分为哪几个模块
- 数据库表怎么设计的,为什么这么设计
- 数据库的范式?
- 项目遇到的困难有哪些:节流
- 节流怎么做的
- 如果换成在分布式场景下,上面的节流问题,怎么解决多个消费者最大同时消费数量的同步问题
手撕:求三角形最上层到最下层的最小权值
总结:
- 数据库基础不够扎实
- 高并发业务能力不足
- 又挂了,被狠狠拷打,最后业务情景题感觉需求比较奇怪(分布式但要总体节流,而不是各个),也没答好
- 有个小插曲,就是我问HR下一轮时间有点太急了,面完第二天我就问了,HR直接不回我,第二天就挂了,估计有可能是原因,虽然我也没法确认就是了。唉。。。问也不是不问也不是。。。不过这些都化作了经验。。。
06-27 tiktok一面
问题:
- 项目用的是MySQL吗
- 项目的Redis主要用在哪了
- 为什么用Redis,和其他数据库的区别是什么
- 详细讲一下项目中缓存的流程
- 缓存有没有遇到过数据一致性的问题,怎么解决
- 线程A读数据是1,B后写数据为2;但是写缓存时A比B后写cache,导致缓存又覆盖为1,这种缓存冲突怎么解决的
- 讲一下PostgreSQL默认的隔离界别是什么
- PostgreSQL在RR隔离界别下会遇到什么问题,怎么解决
- 你刚才提到MySQL中使用MVCC解决可重复读的,可以详细讲一下吗
- 详细讲一下一次网络请求的全流程,从输入URL到获取网页,越细越好
- DNS是哪一层的,基于什么
- 为什么DNS基于UDP
- 讲一下操作系统内存管理
手撕:判断回文链表,要求空间复杂度为O(1),时间复杂度O(n)。
反问:
- 部门业务主要有哪些:其实架构没有具体的业务,都是对上层业务做具体支持,巴拉巴拉(会议室进人了听不清)
- 实习生主要会负责哪一块:简单需求上手,做做优化吧,巴拉巴拉(也是听不清,当时应该提醒面试官换个位置的,唉)
- 比较有挑战的点是什么:主要是性能上的挑战,具体的又没听清。。
总结:
- Redis缓存一致性不够熟
- 一开始以为面的是北京岗,结果面试官人在深圳,可能因为简历写了家在深圳,老广口音触发了我的思乡之情。。。
- 面试官比较热情,反问给的回答很充分,感觉问一句会答我五分钟,可惜环境比较嘈杂,我也没好意思说换位置,最后过了
07-02 tiktok二面
项目:
- 学的AI有哪些实践?
- 中的顶会具体做什么内容
- Transformer多头注意力
- 多头注意力具体是怎么work的
- Transformer掩码是必须的吗
- 怎么扩大模型的Context
手撕:寻找rotate之前数组的第K个数(被吐槽代码写得不咋地,但复杂度看着没问题呀,感觉是被调侃了哈哈哈)
被追问:
- 平时怎么学习的
- 有什么爱好吗
无反问环节,直接被感谢时间了
总结:
- 面试官开局迟到半小时,经典
- Transformer的细节不太熟了,可以复习一下
- 感觉一直在聊天,虽然面试官吐槽我代码写的不咋地,但最后还是愉快的过了
小插曲
面完第二天就说约技术三面,结果过一会又联系说跳过了技术三面直通HR面,这是运气来了还是二面面试官发力了。。。
07-04 tiktok HR面
问题:
- 自我介绍
- 了解部门业务吗
- 介绍自己的优点和缺点
- 你觉得你的能力是天赋吗
- 知道前几次面试被别的部门挂的原因吗
- 实习6个月能保证吗
- 什么时候能到岗
反问:
- 具体介绍部门业务
- 有什么需要提前知道的吗
- 实习生入职有培训吗
总结:
- 有几点回答没思考清楚就出口了,差点翻车;HR面本身就没那么多问题,可以慢慢答
- 反问的问题有点少,感觉可以再多问一点,当时也不太清醒,问完HR一脸“就问完了?”的表情
- 好在总体聊的还是比较愉快,感觉应该稳了,最后泡池子泡了十天,估计是在排位
07-14 offer call
没啥内容,就是确认了一下入职时间,然后就愉快地发offer了。
后记
从五月末到七月中一直都在面字节,心态也从一开始的紧张到逐渐平和。第一个岗其实是被转岗的,我本来投递的是Dev AI,但被转到Infra了,对业务不是很了解,而且两次面试问业务得到的回复都是比较形式化的,就是部门的使命之类的,感觉不是很明白,不过当时我才第二次面试没啥感觉,主要还是自己的问题吧,也是不出意料地挂了。
第二个部门是我后来补投的,一投就约面了,一面其实还是挺愉快的,虽然回顾的时候发现面试官多次尝试引导我给出错误的答案,但好在没被牵着走,最后面试官说他过的人进来之后一般干活都没问题,后来就过了,我还挺开心的;结果二面感觉就被压力了,面试官感觉是部门大leader,看着很严肃,问的问题也比较难,就一直往难的方向引导,在我最后感觉快要熬到通关的时候硬是出了一道比较刁钻的业务题,给我问懵了;不过面试官最后又问我人在哪,我说在北京,他说ok,我还以为有机会,结果可能又因为我联系HR的操作又挂了。。。第二次挂二面的时候,正好在牛客看到了一篇“字节耐面王”的文章,作者总共面了字节11次,最后以放弃告终。当时我本来觉得二面是个坎,估计自己过不去了,但看了耐面王的故事之后感觉还是得继续面,于是反手就投了两个本地生活的后端,决定把所有部门面完了才罢休。
但好巧不巧,没等本地生活约面,tiktok就给我先打电话来了,这次真是白月光了。tiktok其实是我五月末就投了的,算是最想去的部门了,不过之前一直没约面,结果现在来了,经历了前两次的失败,感觉出什么意外也不奇怪了,反而心态平和了,后面面试也出奇地顺利。现在回顾起来,其实前几次的失败也并非毫无用处,与其说失败不如说是探索,至少之前出过问题的回答在后面都没再犯第二次,对自己的理解也相对而言更客观了,感觉就是能从面试官的角度去看自己的简历,从而做出相应的准备。
当然感觉最重要的还是运气,自己毕竟没有相应的实习,主要都是校内经历,第一次就直接冲大厂确实有不小的压力,而且因为自己一开始总是拿做科研麻痹自己,让自己很忙,就不想准备太多面试的东西,还把时间拖到了六月份,可以说是把自己很多机会都堵死了。好在耐面王遇到了伯乐,tiktok二面的时候一直在聊AI和科研,难得地表现了一下自己的长处,感觉也很受面试官待见,而且估计是真的缺人了,于是一手烂牌打出了好结果,这除了运气也不知道怎么评了,难道我真的比自己想的要强吗?hhh
#耐面王##面经##字节#