字节跳动-面试记录

    2020年进入互联网后,一直想进到一线大厂,倒也不是因为别的,总觉得没去过有些遗憾。终于借着上海疫情隔离,在家有比较充足的时间准备面试,拿到了字节offer。简单记录一下面试中遇到的问题吧。

一面

  1. 简单地自我介绍
  2. 项目经历描述,选了之前做的比较好的部分介绍了下,关于项目一面面试官没有特别深入地问。
  3. 项目中用到了哪些中间件,对什么比较熟悉?(常用中间件都有涉及,说自己对mysql比较熟悉
  4. Mysql索引是用的什么数据结构?为什么选择这个数据结构? (回答的时候对比了hash,数组等不同结构的优缺点等
  5. B+树和B树有什么区别?
  6. 索引的工作原理,如何针对这些原理优化等?(主键索引存行记录,非主键索引存主键ID,最左前缀,索引下推,覆盖索引等等都说到了
  7. Mysql有哪些隔离级别?
  8. 什么是幻读?什么隔离级别下会避免幻读?(在一个事务中前后两次读到不一致,后一次读到了前一次没读到的数据。本质上是X锁无法锁到不存在的记录,需要Gap lock来实现。也就是在可重复读隔离级别下会解决这个问题
  9. 什么是MVCC(多版本并发控制,不同隔离级别下创建视图的时机不同等等
  10. Redis有哪些数据类型? (这里有个误会,一开始以为面试官想问的是跳表和压缩列表,说了一堆被打断说想问的是set,hset这些,好在都说上来了。
  11. Redis经典三题,雪崩,击穿,穿透分别是什么,如何避免
  12. 算法题,leetcode原题 全排列 https://leetcode.cn/problems/permutations/

      一面体验还是很棒的,面试官会逐渐深入的问问题,也没有特别偏的题目。Mysql问了很多,但是是在我回答某个问题时提到新的概念时延伸下去的问题,感觉回答的还是比较满意的。算法题中规中矩的DFS,给了20分钟时间,10分钟AC了,随手出的几个case也全通过了。

    一面两小时给的回复,通过了。

 

二面

  1. 简单地自我介绍
  2. 想换工作的原因
  3. 项目经历描述,二面相对一面,针对项目问了很多问题。
  4. 之前的项目中,全量操作的优化中,为什么选择NAS提前备份而不使用Redis(结合项目实际情况与成本方面回答
  5. 项目中有用到消息队列,怎么保证消息不丢失的 (生产端收到ACK认为发送成功,Broker多区备份,Consumer先处理再ACK
  6. 项目中有使用Redis作为分布式锁, 怎么实现的。(先尝试获取锁再操作,消息中存获取锁的实例id,同时指定过期时间。当释放锁的时候先查询再删除,如果查询的不是自己的,就不删除。但这里不是原子性的,需要lua脚本在redis服务端支持,实际项目中没有使用.
  7. 自己动手搞过redis lua脚本吗(没有,这个有点慌,但面试官没有追问了
  8. 项目的评价指标是什么,怎么处理这些指标?(之前是负责推送平台,一方面对内处理整个流程的漏斗数据,一方面收集各个手机厂商的反馈,送达,点击率等情况。同时结合自有埋点
  9. 算法题,有一组微服务A,B,C,D,E.... 等等,同时给一组依赖关系,[]string{{"A","B"}, {"B,C"}},其中 {"A", "B"}代表A服务依赖B服务。某个服务可能依赖0到N个服务,自身也可能被别的服务依赖,请你判断这一组服务中是否有循环依赖. (同样DFS实现,只是每轮深度搜索的时候把当前服务加入Map中,并判断是否已存在,如果存在说明必然有环。有点类似于判断链表是否有环的hash作法。十多分钟AC了,全部case通过。
  10. 有什么想问的吗?(问了下字节服务开发的流程,从需求到上线会经历哪些

      二面也不错,只是面试官没开摄像头,看不到表情有点紧张。最后算法第一次想直接dfs遍历,不使用hash,卡了一下。好在没卡很久。

      二面面试官应该给的评价不错,面完6分钟收到了hr小姐姐的反馈说通过了,hhhh

 

三面

  1. 简单自我介绍
  2. 换工作的原因(我当前的工作在职仅8个月,上一份也只有一年,面试官比较在意。这个问题每次都实话实说了,当前是因为公司不断裁员并且频繁更换项目组,不知道什么时候轮到自己,不稳定。上一份是付出和收获不成正比,工资远低于同级别同时(当然最后这句话没说)
  3. 项目经历描述,在你做的这些优化的基础上,还能想到别的优化方案吗,或者怎么更快一点? (推送下游依赖各个手机厂商,下发速度已达到他们给的阈值,回答说可能要通过一些商务方面的沟通让下游放开限制了,这个应该答的不是很好,但是也确实没有思考过应该怎么处理了
  4. 前两面基础知识还不错,这次问设计相关的题目了。假如要设计一个简易的微博系统,你来负责图片上传(发布博文),首页热榜这两方面的功能,说说你的设计思路。(这部分内容比较多,分几个方面来说吧
    1. 先来说说整体的思路,这个是在知乎看到的,4S分析法。首先是scene,分析一下会有哪些场景,并且给出一个预估的qps。这里和面试官确认是一个项目的起步阶段,qps定的比较低,并且不需要上重型架构。需求希望尽快迭代,那么图片上传部分的图片存储考虑选择使用第三方服务,所以这里可以尽量简化一些处理。
    2. 然后是Service, 拆成哪些服务。用户上传图片与首页热榜显然是两方面的功能,中间通过博文内容来联系,但不能上传图片不应当影响用户看热榜,反过来也一样,这里自然应该拆分成两个服务来处理。
    3. 再则是Storage,存储。持久化是一定要持久化的,mysql没跑了。给了一下表结构的设计。同时热榜需要频繁的访问,考虑加一层缓存来处理。同时这里也针对热榜的这种模式,谈了一下可能会考虑使用大顶堆这种模式来处理,判断博文的时间与热度的综合评分,插入热榜,依据大顶堆的特点,快速的给出排序。
    4. 最后是Scaling, 谈了谈扩展性。一方面是业务上的扩展,数据库层面需要分库分表,服务层面需要多实例与负载均衡。一方面是结构上的扩展,后续可能引入监控,全链路跟踪等更多完善机制等等。
  5. 针对你说的这些,写一下热榜请求响应可能会包含哪些字段吧(照着列了一下,因为边谈边写,一紧张有些命名风格不统一,好在自己发现并修改过来了。
  6. 有什么想问的吗?想问下团队规模,没给出一个明确的回复。

    三面面试官感觉技术水平很高,在谈设计的时候也给了很多提示很问题。

    三面晚上8点开始,面了一个小时,第二天早上9点给的回复说通过了,约了HR面

 

HR面

  1. 自我介绍
  2. 离职原因,这个已经说了很多遍了
  3. 在校的成绩,在之前公司的绩效等
  4. 项目经历,承担的一些职责
  5. 自己有哪些优点和不足
  6. 和同事的人际关系等
  7. 期望的薪资范围

    HR面完之后感觉稳了,但等了两天之后还没结果,以为要凉凉了。结果转了一周HR说业务方ld要综合评判一下,需要再加一轮。心里超级慌

 

终面

  1. 自我介绍
  2. 离职原因,看来真的是很在乎这个,大佬们换工作一定要慎重啊,不要像我一样简历花了
  3. 对工作压力怎么看
  4. 平时自己怎么学习新知识的,有没有交好的领导,怎么评价的?是否需要有人指引着才能进步等等(具体问题记不清楚了,大致是这个
  5. CAP了解吗,简单介绍一下(分布式系统中<分布式是前提>,一致性,高可用性,分区容错性不能同时满足xxx,实际上会有CP或AP, 实践中很难AP,大致是这个,具体记不太清楚了,这里这是简单的看过
  6. 设计题,设计一个延时队列,你会怎么处理 (同样是4S分析法说了一通,最后选择用优先级队列来处理,因为不同product发来的消息可能过期时间不同,有的是5分钟,有的10分钟等等,排序选出将要过期的给干掉,但这种方法最后可能会在量比较大的情况下卡主,比如最后过期操作需要处理10分钟,那么过期的可能就不准确了。中间也谈到了rabitMQ的死信队列,但这个我只是有一点点了解,答的也不是很好。问有没有更好的办法,或者别的数据结构(很懵逼,硬着头皮想了个基于桶排序的处理,比如一天分成24个桶,到达某个桶的小时时就直接清空桶中所有数据,这样在broker接收消息的时候判断什么时候应当过期,分散下压力。但实际上我也不确定这个是不是一个比较好的解决方案
  7. 你有什么想问的?

 

    又是几天焦虑的等待,总算是收到了offer。前后大概25天左右的时间,简单记录一下。

 

posted @ 2022-05-23 12:20  DogTwo  阅读(508)  评论(0编辑  收藏  举报