今年,我在字节跳动面试了九次【已意向书+九面面经】
字节九面心路历程
我今年复习得比较晚了,直到五月才开始准备找实习,但是那段时间大厂的春招基本都结束了,所以只能投字节跳动的日常实习,把自己的第一次面试献给了字节,现在想想那时确实头铁🤣所以当时实习面试非常坎坷,先是投递了小说部门后端研发,苟到二面的时候因为太菜被挂了,随后就被hr告知又被国际部门捞了🤣。第二轮面试稍微顺利点,苟到三面才挂,然后又是面试完的几分钟,hr又告知被游戏部门捞了??(字节这么缺人的么,要反复鞭尸我这个菜鸡儿🙄)然后就是第三轮面试,这时候因为已经有好几轮字节面试的经验了,所以发挥得比较顺利,但是最后还是挂了🙄当时第三轮结束后算是真正被发感谢信了,不过知道自己挂了的那天正好字节的提前批开始,然后想都没想就投了提前批😂,再次证明我属实头铁。最后就是提前批的一二三面,因为之前六次面试经验刷得差不多了,所以就比较顺利,拿到了后端研发的意向书。
最后在这里回馈牛客,直接把九次面试的面经全部发出来,希望大家都早日拿到自己满意的offer
6.2实习一面
1.为什么用zookeeper做服务发现
2.zookeeper如何维护长连接的状态
3.zookeeper主从架构怎么保证数据同步
4.NIO、BIO区别
5.线程池如何保证线程的复用
6.run()、start()的区别
7.Thread、Runnable的区别
8.线程池作用
9.线程池参数
10.阻塞队列、非阻塞队列区别
算法题:
1.打家劫舍三变种
2.有重复字符的字符串全排列
6.8实习二面
这次面试没及时复盘,所以前半个小时的面试题忘得差不多了🤣
算法题:
1.遍历螺旋矩阵
2.求一个微服务系统中进行一次服务调用的最长时间,就是lc里的课程表二,是一个图的遍历问题
这次的面试官比较严肃,搞得我优点紧张,虽然题目基本都是操作系统、网络之类的,不过还是挂了,然后就是新一轮的面试
6.9实习一面
1.http keepalive、tcp keepalive
2.MQ作用、原理以及主要组件
3.kafka了解吗,各个MQ的对比
4.RocketMQ中topic、queue的具体含义
5.集群消费、广播消费
6.protobuf作用
7.为什么项目里要用protobuf,protobuf 的好处
8.市面主流的RPC框架了解多少
9.项目中RPC框架中怎么定义协议的
10Redis持久化方式
11.Redis单进程还是多进程??我印象挺深的,为什么面试官要说单进程而不是单线程
12.Redis集群策略、分槽
13.Redistribution集群中不同节点如何通信
14.Gossip协议
15.跳表结构
算法题
1.带有随机指针链表的深拷贝
6.11实习二面
1.削峰
2.多级缓存一致性
3.延迟双删解决主从Redis节点的数据一致性
4.秒杀项目中缓存预热
5.队列泄洪
6.MySQL事务
7.Docker
8.dubbo服务发现
9.注册中心服务判活
10.负载均衡策略
11.哈希一致性
12.Linux查看具体端口是否被占用
13.思考题:2000w高考成绩(有大量相同数据),无内存限制,要求O(n)时间复杂度排序 当时说用桶排序,只要同桶的数量趋近于高考人数,就可以做到O(n),事后才想到可以用Trie树,有点可惜
算法题:
1.链表节点两两反转
2.链表n个节点为一组反转
6.12实习三面
1.项目中限流怎么做的
2.令牌桶原理、数据结构??数据结构这个我是真的懵了,后来想可以用一个volatile自增字段+阻塞队列实现
3.MySQL乐观锁悲观锁以及对应的sql语句
4.数据库隔离级别
5.dubbo的好处
算法:
1.删除字符串中ab,保证最后字符串没有连接的ab,例aaabbb
最后,这次面试应该是部门leader,讲真,这次面试体验真的不太好,整个过程加撕代码只进行了35min,感觉面试官全程都在看我简历+写面评,基本没在听我说啥,以至于有好几次我说完之后都会有至少15s的冷场,哪怕面试官嗯一声给个反馈也好啊😥,所以最后这场面试是铁挂了,所以就到了新一轮的面试
6.15实习一面
1.秒杀优化,压测QPS
2.Redis读写分离
3.场景题:Redis主从部署,在写请求特别多的场景下,如何保证在从节点读到的数据不是脏数据,我当时被这题问懵了,就说对从Redis上锁,同步完之后在进行回调,面试官笑了,说你还能改Redis源码啊🤣事后问大佬,一个可行解是给数据加上时间戳,然后在代码层面进行时间戳的比较,总之就是有点MVCC的味道
4.Redis是单进程单线程,那为什么RDB时候不会阻塞
5.看过Redis源码吗——自然没有😒
6.MySQL隔离级别——这里面试官肯定是看我之前的面评了,因为我上一面这个问题回答得不是特别好,所以我觉得,提前批还是会影响秋招的,面试官大概率会看你之前得面评,如果前边面试发挥不好,后边自然就给面试官不太好的印象
7.time wait
8.ICMP协议
9.操作系统分页和分段的区别
算法题:匹配字符串
这次面试发挥我觉得还行,不过最后面试官问我能来实习多久,我说两三个月,然后。。。。然后就收到了感谢信🤣,不过那段时间正好提前批开始了嘛,那就字节提前批走起!
6.30提前批一面
这是我在字节九次面试中唯一一次被问到java🤣
1.java GC
2.java内存模型
3.进程、线程
4.线程切换代价为什么小——除了共享内存外线程切换并不会清空CPU和主存之间的缓存
5.线程状态
6.线程什么时候挂起
7.死锁必要条件、如何避免死锁
8.进程间通信
9.OSI七层模型
10.http常用方法
11.post请求返回的100状态码是协议规定的还是浏览器规定的
12.MySQL存储引擎、区别
13.两用引擎优势
14.联合查询
15.查询优化器
16.Redis基本类型
17.Redis zset怎么实现
18.Redis持久化方式
19.全量复制、部分复制
20.复制积压缓冲区
算法题:
1.买卖股票二
2.买卖股票三
7.9提前批二面
1.缓存作用
2.分级缓存如何保证数据一致性
3.面试官一直深入分级缓存的数据一致性,比如什么时候删除脏数据、Redis主从部署怎么保证之类的,总之问的挺深,面试官逻辑非常缜密
4.分布式锁的实现、原理
5.序列化反序列化
6.如果自己实现序列化该如何操作,假如有一个int类型,你如何序列化为字节流
7.序列化如何支持跨平台
8.TCP流量控制、拥塞控制
9.TCP流量控制是通过接收端发送带有接受窗口剩余大小的ACK来实现的,那么如果接收端的TCP没有CPU调度会发送ACK吗,会不会因为接受窗口满了并且不能及时发送ACK导致数据丢失,这个问题讨论了好久,不得不说,这个面试官真的好
10.数据库隔离级别
11.MVCC
12.InnoDB索引实现
13.联合索引
14.MySQL字段类型的长短会对性能有影响吗
15.前缀匹配
算法题:
1.走格子
2.走格子+陷阱
3.走格子,每个格子有血包或者怪物能让自己加血扣血,问走到右下角至少需要多少血量 ,可以从右下到左上的逆向dp,并且dp[m][n]=0作为初始条件,当时觉得面试官想象力真丰富,能想到这么生动的算法题🤣不过几天后我居然真在lc上看到了这样的每日一题,好像还叫地下城与勇士🤣
4.如上题条件,给定一个初始血量,判断能否到达右下角
7.13提前批三面
1.为什么要实现一个RPC框架 (为什么?当然是要水一个项目呗🤣)
2.问什么不用本地调用,而要用微服务 (为什么?因为简历上没微服务过不了初筛啊🤣)
3.微服务的好处
4.微服务网关模块的具体逻辑,为什么要用网关 (这位面试官好爱问问什么啊🤣)
5.网关模块怎么可以保证整个系统的安全性
6.微服务的业务模块拆分,为什么要这样拆分 (??为什么,为什么这么多为什么)🤗
7.对称加密、非对称加密
8.MD5是对称加密么,这部分答错了,有点可惜
9.项目中怎么用MQ的
算法题:
1.输入n,k,输出n的字典序的第k位数字,若n=15,k=7,1 10 11 12 13 14 15 2 3 4 5 6 7 8 9,输出15 这道题浪费了好多时间,我刚开始还傻乎乎的重写Comparactor+StringBuilder来定义字典序,然后转化成topk问题解决,面试官说还有更优解,当时一直没想出来,也浪费了好多时间,最后面试官可能有事吧,等到1h时候面试官说可以了,今天面试先到这里吧,然后就挂了。。。事后我才知道可以用Trie树或dfs直接找到第k个数,然后就感觉特别可惜,因为我觉得自己前半段发挥挺好的,就因为这道题,以至于颓废了两三天,但最后结果还是好的,三面四天后收到了部门的意向书🤣
——————————————————————————————————————————
最后,既然你都看到这了,不妨点个赞帮顶一下再走吧,毕竟这九面复盘+整理我差不多用了三个小时
最后,还是祝大家都早日拿到自己心仪的offer🤗