22年腾讯 & 字节跳动日常实习 9面面经(已offer)
楼主来自美本某top15计算机专业,大四上半年修完了所有课程,下半年提前回国养老等研究生offer,顺便找个实习,挣点钱,旅个游
前前后后面了5个部门,将近10场面试,最后拿到了字节和腾讯IEG的日常实习offer。复盘一下面试经过,有些内容记得不是很清。大家凑合着看
2022.1.20 CSIG 腾讯云 后台开发 一面
自我介绍
首先掰扯了上一段实习blabla,然后面试官问了我你是全职么?我说不是,我是日常实习,还要读研呢,然后他说那估计就只能给你日常实习的待遇了blabla,我说没问题,没想干全职
1. 给出一个5升和3升的水,要求最少步数倒出来4升。
这个简单,小学奥数题
2. 如果是a升和b升倒c升呢?用计算机的方法想
我想的是优先队列搜,然后hash储存一下节点的值,然后摁搜
面试官:还有么? 我就开始推数学方法,不过没推出来了,面试官说可以了,到这里就ok
3. 三次握手四次挥手
4. 为什么time_wait
5. 你的项目讲讲
6. http和https的区别
7. tcp和udp区别
8. 反问
他们组是对接微信小程序的,主要语言是golang和云产品中间件
然后估计是先要全职的吧,就给我挂了,反正面了一圈感觉,面试官捧着你或者给你出简单题,多半是打一开始没打算要你
2022.2.15 腾讯IEG 游戏数据科学 | 运营开发 一面
好像这个是他们的后台开发,他们说的后台更类似于基础架构那种
1. 上一段实习经历,深挖
2. 实习的时候介绍+项目
3. 手写个快排吧
我两个版本揉成一团了,写炸了,其实也就多了一行不该出现的代码,面试官说没事,继续
4. http + https
5. 看到你的webserver支持POST和GET,说说这两者有啥区别
不建议说安全或者不安全,其实区别有好几条,大家仔细看看即可
6. tcp三次握手和四次挥手,为什么挥手不是三次?为什么要有time_wait?
7. https证书怎么避免中间人攻击
直接向证书签发机构校验证书有效性
8. http的步骤,输入浏览器会发生什么
9. 快排你没写出来,写一个nth_element吧
好在这个写出来了,看得出来面试官是想让我将功补过,自我感觉八二开,然后过了一会儿,复试了
2022.2.21 腾讯IEG 游戏数据科***营开发 二面
1. 上一段实习
2. 消息队列是用别人的还是自研的
3. 消息队列的延时如何实现?
我不太清楚哎,mentor让我看过这个,写一篇km文章当我答辩依据,但我后来没来得及看,猜了个轮询 + 判断时间戳
4. 你的webserver支持tcp连接么?
我其实没太搞懂他想问啥,因为http本来就是基于tcp的一种协议,我们跨服聊天了半晌,然后切到下一个
5. http发出去怎么分成包
我讲了断线传输和tcp分包原理,他好像不太满意,但是没追究
6. protobuf看你用了,protobuf的基本语法
这个没问题,毕竟crud boy基本功还是在的
7. protobuf最好的一点是版本向下兼容,你了解是怎么实现的么?
我说实话,以前听说过,但不太了解,后来看了看正解貌似网络上也只是用法,没有具体实现,只能搪塞过去
8. 口述算法题,一个不知道递增或者递减但一定有序的旋转数组查找目标值
这个想了一下,就是抽四个点取样,然后大力二分就好
9. leveldb为什么高效?
这里可能想说的是顺序写吧,包括跳表那里可能有一些局部性原理在,但是我没准备到,之前只是在公司内部看过后台培训资料里写的,就不太清楚
10. mysql怎么实现主从复制
惨了,没准备到数据库内容,然后说了说binlog和redolog,具体没说清楚
11. 反问
我还有哪些地方不足,他说你算法挺好的,但是能看出来你很多知识点广而不深,建议以后加强
我当时觉得可能要挂了捏,和老爸说我可能要在家待一阵子了,但是我老爹说他面试人的时候,一般给你过的话才会把真实情况说出来,否则恭维一下挂了就好了,双方不伤面子
后来被老爸言中了,下午状态回到复试,那就准备三面
2022.2.25 腾讯IEG 游戏数据科***营开发 三面
来人是个副总监,人非常干练
1. 自我介绍
2. 盘上一段实习
3. 你上次实习导师是谁?企微查了查我导师名字
4. 未来打算回国么?
我说肯定回,他说那好
5. 那随便问个问题吧,linux线程切换怎么实现
我在网上看了很多进程的,似乎不是很多描写线程的,我写过linux进程调度,就跟他说了一下,他说你应该不懂对吧,不是那样的,不过没关系
6. 总结
他说怎么说,欢迎你加入吧,然后状态转到hr面,hr面不涉及业务,略
然后腾讯差不多了,也就是说暑假不用家里蹲了,但是感觉不是特别舒服,因为其实自己面试的时候漏洞很多,但是面试官都没有深究,而是放过了我,似乎是因为我上一份实习的title才选择了我。个人不是特别习惯这种名头而非个人水平带来的光环加成,所以选择了继续面试。我觉得在自己背景的加成之上,展现自己的水平,才能心安理得地接受offer。之后本来oc了,但因为一些小事情又卡着不下了,其实审批通过了,但是听闻tx锁hc,自己赶紧准备后路去了。接着冲!!
2022.2.23 字节跳动 电商国际化 | 后台开发 一面
这次面试官很和蔼,开摄像头。
1. 上段实习
2. 怎么解决分布式缓存初期过冷的问题?
刚开始随便说了个,他说不对,后来提示我可以用流量控制,我说加个因子,给缓存预热做铺垫,他说对了,其实你想复杂了。然后双方哈哈哈笑了起来,我觉得面试官人很不错
3. 消息队列是怎么实现延时的
寄,我说开多个线程然后条件变量协助实现,他似乎不太满意。不过没深究
4. tcp和udp区别
5. 为什么三次四次而不是两次三次
6. tcp为什么比udp慢
本来说了连接管理和拥塞流量控制,包头大小和封包方式,他不太满意,后来说是建立连接和重传。我:???这不和我刚说的一样?
7. select, poll, epoll
这个就很常规了,说了下四种IO模型
8. epoll算是同步模型么?
我不太清楚捏,本来觉得有回调和什么proactor和reactor模式,应该算异步,但是想了想epoll_wait()的时候似乎是阻塞的,另外处理的时候的一些手法让我感觉应该是同步的,然后面试官点了点头
9. 算法题,说你是打acm的,那来个典的吧,上台阶,一次只能走1步,两步,或者三步,问n级台阶方案数
一眼斐波那契,这应该是基本功了。我一口气说了三种解法。
最大槽点来了,我先写了递推,然后滚动数组优化,并且表示如果他想要我可以给他写个矩阵快速幂来O(logn)来解决问题。甚至可以试试用高中数列推一下通项。
然后他先说我写错了,一番交谈我get到大概意思说我只初始化了0,1,2的状态,没有写第三步的时候的方案数,但显然第三步的状态可以从前三步推过来,没啥毛病,在第0级台阶的时候方案数可不就是1种么
然后为了不显得我情商低,我手造了前几个的数据,运行出来都是对的,然后他可能意识到了我写的对的,说那你滚动数组优化看看,我也写出来了,和他说这个复杂度O(n),应该是除了矩阵和公式之外最快的
他说你这个不是最快的,我说我平时没有写很多优化常数的,他说你的代码的优化空间不是常数,我nm直接迷惑了?你不让用矩阵我还有更快的?????我是整整一年没写算法了,但这点我不可能忘
然后说我第二级和第一级台阶的加法多计算了一次,所以不是常数?我到最后没优化出来,我且不说这个优化是不是常数,有没有意义,下次计算的时候不是还一样要考虑这个问题,那你优化意义是啥????
我嘴上说:啊我没这样想,我下去一定好好学习一下
我(内心):谢天谢地哦
10. 没有反问,他总结的
面试官:我看你投了好多部门,你可能更喜欢这些技术底层blablabla,不适合后台开发(我实习在某核心部门后台,那你说是就是吧),听到这就知道我没戏了,但是还是强撑着礼貌说嗯好的
面完火很大,第二天看到自己被挂了火更大了,上次见这么离谱的面试还是在上次
2022.2.25 字节跳动 抖音社交 | 后台开发 一面
面试官能看的出来很累,问题都很流程化
1. tcp和udp区别
2. 为什么三次 + 四次
我已经麻了
3. 为什么time_wait
4. 虚拟内存
5. IO多路复用, select, poll, epoll
6. 多级页表了解么?
我其实知道,但一紧张忘了,面试官说跳表了解么?我说还行,他说复杂度多少,我说多级的不算,两级最快应该是根号,他说可以的。
7. mysql的隔离级别
8. 脏读,不可重复读和幻读
9. 隔离级别和实现原理
这次我好好学习了一遍,然后把细节说了,他很满意
10. 你在学校成绩咋样?
面试官说能感觉到我基础不错。不得不说这次面试比上次观感好多了
11. ACID
12. 算法题, 给出一个01矩阵,把所有被1完全包围的0变成1然后输出
一开始想的是bfs然后特判一下从某点是否会出界的情况。面试官说可以,但是不是最优,需要对你原来的逻辑改动一下。然后我发现可以从边界bfs染色,没被染到的自然就是被1包围的
然后5分钟写了个bfs,切了
13. 反问
我问有下一面的话什么时候通知,面试官说有的话很快就有人通知
然后果不其然,第二天二面
2022.2.25 字节跳动 抖音社交 | 后台开发 二面
面试官应该是组长这个级别的人物,和我上次实习的组长好像啊两个人
1. 复盘实习
2. 缓存,看到你用了LRU缓存,说说怎么实现
然后我按照代码的思路说了,我说我可以写一下,他说OK,我明白了,我相信你能写出来的
3. 怎么用其他数据结构替换lru的链表
说真的我没太想到,想的就是动态数组然后用尾部交换来删除,但是没想到怎么O(1)插入更新
4. 红黑树?
我其实不太了解,说了说那五条规则和和avl的区别,面试官听到我说叶子节点都是nil指针就说ok,不用说了
5. leveldb为什么高效
大概从局部性和顺序写说了个,但是忘了说跳表加锁的成本,这点答得一般
6. mysql主从复制
7. 多机一致怎么搞?
我说了下一致性哈希,然后虚拟节点,他说嗯
8. 写题,深拷贝带有随即指针的链表
链表题杀我啊,然后我一开始用数组的思路写了个极其复杂的链表,然后面试官说那你这样还是把链表转化成数组做了,你可以只用一个map的,然后我说我想复杂了,一见链表就慌,跟他说了下单map思路,他说可以,不用写了,他刚才看我写的时候就感觉到我能写出来了
后面去看了下题解,发现是拆点,麻了,链表这个我根本想不到
然后hr说等着三面,然后插曲来了,三面面试官看我不能转正,说想要个能转正的来,其实我能理解,部分可能就是婉拒嘛,这也没啥说的,毕竟链表题炸了这我认了,多加练习就好了,再说了,大四确实没啥优势
然后hr很给力,帮我跑了四个部门,最后约到了西瓜的后台,我tx offer快下来了,缺的就是时间。我前几面面评评价很不错,hr说帮我争取下,然后很惊喜地少了一面,直接二面三面邮件一起发了
然后
2022.3.3 字节跳动 西瓜视频 后台开发 | 二面
1. 缓存的一致性怎么保证,怎么保证数据不在短时间内集体过期
3. 线程进程区别
4. 三次握手和四次挥手,为什么要有time_wait这个状态?
5. 描述一下红黑树,和二叉查找树有什么区别?(简述了一下那几个插入规则,并且比对了一下avl,简单说了一下平衡规则和依稀记得的那几条规则)
6. 操作系统的用户态和内核态,为什么要有用户态和内核态
7. sql,问如果让你实现join会怎么去实现,要求复杂度最低
这我真不知道,只是想了下说先过滤形成一个快照,对using子段进行排序,然后两个指针尺取O(n + m),后来说有没有更快的,我就说数据库磁盘数据结构有内存块,可以先分成小文件然后多路查找归并加速,并且同时进行比对筛选,他说OK差不多了。然后事后我回去看了下,确实和我说的差不多,但是可能漏了一点就是可以hash查找,潜意识里觉得hash对海量数据太大了,然后就没想到
8. 一些常规八股
然后做题,原地算法找未出现的第一个正整数
我之前搞mex大部分都是set和multiset暴力搞,真没拿原地做过,然后当时觉得完蛋了,现在算法水平已经在谷底了,大概率寄
不过很快定了定神,自己手撸了几组样例然后仔细想了下,发现只有两种情况,要么换到原来的位置上,要么呆在别的位置上的就是重复的或者不在范围内的,有点思路了,然后就用while类似于并查集那样一直换到换不出来的搞出来了,自己测了几个没问题,样例也过了,面试官说ok。真给我吓坏了,麻了。
然后问我什么时候能来,到什么时候
反问:
咱们组是干什么的,感觉类似于一个后台 偏中台的组,主要语言golang
自己的不足大概是对项目掌握不够,而且一说起来时间长就容易不自信,然后垮掉,之后得多练练表达这方面
2022.3.5 字节跳动 | 西瓜视频 后台开发 | 三面
1. 聊上一段实习 2. 聊人生
3. 说你实习的收获是什么
4. 你这次来想有什么样的收获?
5. 写一道算法题吧,二维矩阵每个维度有序,查找目标值
一眼二分,然后面试官说可以,但不是最高效的。我想起来队友曾经说过这道题有比二分更快的算法。
仔细想了下发现好像沿着对角线尺取即可,O(n + m),写了个程序,造了两组数据过了
6. 反问
我有什么需要改进的地方?
面试官说不同的同学能够看出来不同的风格,有些是偏竞赛的,有些是工程,你代码说明你是偏竞赛的。
然后还有,能看出来你脑子里东西很多,但以后表达的时候要多以用户为出发点,因为你脑子里有的东西,客户不一定知道,所以你如果说得太过细节用户可能会觉得晕,另外说话可以慢一点。
这说的其实很对了,我说话确实很多时候让别人觉得逻辑很跳跃,如果我能把所有的点写下来,大家其实还是很认可我的叙述的。我觉得这个部门面试官们真的蛮好的,人很和善的。
2022.3.7 字节 Offer
然后让我意外的是3.11逛街的时候接到电话,IEG那边也下offer了,但已经答应字节了,诚信第一,另外想在还是学生的时候多体验几家公司的风格,就选择了字节
然后总结下吧,感觉面了这么多,发现其实去年自己挺头铁的,那么点知识敢去面大厂,真的是初生牛犊不怕虎,想想真的是全身冒冷汗。
不过自己的算法确实一年不写大退步了,研究生的时候还得坚持本科一样的训练才行呢。工作的项目也得搞一搞,现在项目可以没有,但以后就不行了。
#实习面经##腾讯##字节跳动##面试题目#