亲身经历:字节跳动面经总结

编程帮

共 4332字,需浏览 9分钟

 ·

2022-06-01 12:44

不点蓝字关注,我们哪来故事?


剑指大厂,一个指导程序员进入大公司/独角兽的精品社群,致力于分享职场达人的专业打法,包括「学习路线+简历模板+实习避坑+笔试面试+试用转正+升职加薪+跳槽技巧+副业外快」。

点击去了解,2022 一起剑指大厂吧 ~








背 景


本人2本毕业,目前工作四年,一直是Java。


做的都是些二线公司,没做过一线。四年跳了三家公司。在家休息了几个月,

五月中旬开始面试。

 

由于跳槽过多而且已经是淡季的原因。内推的我的字节哥们儿,推了不知道多少个部门,从字节海外电商推到教育线简历都由于频繁跳槽都挂了。最后才被广告营销捞了起来(而且居然是个Java部门)。


这里还是奉劝大家跳槽不要像我这么频繁,唉。而且想进大厂,建议找人内推。这是我第一次面字节,也是今年第一场面试,各种意义都算是初体验了233。


一 面


一面是个小哥,估计比较腼腆,骗我说显示坏了他没开摄像。我笑着说没事。


技术面试20分钟,算法我做了10分多种orz。总计半个多小时。

 

1. 简单说下项目

我项目比较挫,就介绍了下,然后项目就跳过了


2. redis的zset是如何实现的?为什么使用跳表不使用别的数据结构?

redis的zset基于ziplist和dict以及skiplist实现。这里我简单说了下这三个有什么字段,以及优化的细节。至于为什么使用跳表,我直接回答了官方原文。话说回来感觉zset每个大厂都会考啊。


3. redis的持久化方式

rdb和aof,这里本来我想扩展说一下。面试官直接说时间有限,不用了,希望能在短时间多问点东西。这场面试整体节奏很快,很多都是简单说下就问下一个问题了。


4. redis的集群方式,各有什么特点

哨兵配主从,可以保证可靠。redis cluster可以增加可扩展性。


5. redis cluster的通信机制,说一下蜂巢

基于goosip,具体的不了解,这一段就跳过了。


6. mysql innodb 以及mongodb的索引结构

b+树,简单讲了下。这一题就结束了。


7. rr级别如何防止幻读

这一题我听错了,听成了rr级别为什么要防止幻读。所以回答偏了。就说因为rc级别不会有 LostUpdate问题,但是rr级别由于mvcc版本会出现,rr作为更高等级级别必须要处理该问题,所以使用锁来处理,但是快照本身不能解决write skew,所以并没有解决幻写,某种角度来说也没有完全解决幻读。后面发现好像回答方向错了,所以还是简单提了下快照读,当前读,间隙锁,行锁之类的东西。这一题讲的有点久了,失误失误。


8. synchronized原理,讲一下底层实现

一开始我也就标准的说了下锁升级的过程,也说了mutex lock。最后面试官问到比较深,问我moniter里面啥内容,我就记得waitsets,entrylist,owner,count这几个,然后说了下,Java基础就这么结束了。


9. 除了zk你还用过其他注册中心吗?之间有什么区别

nacos,eureka,consol。有的是cp,有的是ap。注册中心一般走ap就够了。简单说了下原因


10. 算法 

开始出的是,最小编辑代价。一看是较难,我担心做不出,要求换了一题。换成了二叉树之字形遍历,由于紧张,结果写了10分钟。尴尬的一笔。

 

小结


整体而言就是节奏很快,是今年节奏最快的一场面试,建议大家准备的时候也琢磨下怎么用最少的字回答最多的内容。难度的话符合我对字节面试常规难度的印象。最后出算法的时候,出了一道较难的题,把我心态整崩了。因为据我了解,字节一般前面回答的不错的话,算法不太会刁难你。当时做题的时候我满脑子都想着为啥出这么难,我前面回答的还行啊。其实也可能是面试官不懂这个规矩,就随便出了一道,不要太敏感2333。


二 面


最难的一面来了。


面完我整个人都裂开了。面试官我感觉应该也是所有面试官中技术最强的,没有之一。另外面试官那边噪音很大,有时候听不清他说什么。不过这回面试官终于露脸了。


技术25分钟,算法25分钟。

 

1. 说下项目

这回面试官比较关注服务器的数量,qps之类的东西。这些我都记得,不过项目整体比较挫。面试官也就不深问了,直接进入八股文环节。


2. 会什么语言?说下jvm吧。

我只会java,哈哈哈。所以面试官就问java了。jvm问的还挺深,什么tlb,逃逸分析,栈帧里面有什么,还好去年看过全都防出去了。


3. 说下metaspace和permGen。

本来信号就不好,还说英文,我听了几遍才知道问的是元空间和永久代。简单说了下。


4. 元空间中创建对象会不会开辟物理地址内存

这tm问的是什么?我题目都不太懂orz


5. system.gc()一定会触发gc吗?和full gc有什么关系?

不一定。该题回答的比较朴素。

哈哈。java就这么结束了


6. redis的aof文件过大怎么处理,怎么解决,开启aof的方式有几种?了解rewrite命令吗?

由于不了解这一块儿,几乎团灭了。redis还算是我的强项,结果居然败的这么惨


7. kafka。。。

回答没用过(其实用过,但是好多年前的事情了,所以就直接说没用过,简历上只写了rocketmq。)


8. 用过什么mq,说一下rocketmq的消费方式,什么是死信队列

只用过rocketmq。集群和广播,面试官问只有这两种吗,我说是啊。然后大家一阵尴尬。死信队列简单讲下就结束了。


9. 说一下exchange。。

回答说我没用rabbitmq(其实我用过)。面试官原来前面听错了,以为我用过的是rabbitmq,吐槽说难怪消费方式回答只有两种。


10. ack机制,offset何时位移,broker复制原理

作为mq白痴,基本回答的都是浅尝即止。其实我activemq,rabbitmq,rocket,kafka都用过(毕竟跳槽多)。但是mq确实是我的弱项,唉,这一块儿面的我直接心态崩了,当时心想要挂要挂。


11. mysql索引优化没有走对是什么原因

终于又问我擅长的了。说了下优化器的策略,面试官说不是想问这个,就问我explain,然后我就把explain的字段都说了一遍,面试官说还是理解错了。然后说算了这题跳过,有点小尴尬


12. explain语句会执行sql吗

不会,优化器就结束了。所以rows会有误差。


13. mysql两段提交

说了下binlog和redolg以及分组。说实话,问题直接就说两段提交,不熟悉的人可能都不知道问的是啥啊


14. 说下undolog,是不是只有rollback才会触发undolog

基于回滚保证原子性。由于innodb的锁是锁住索引,所以更新主键之类的的时候,原数据也会保留,所以更新后微commit前一条数据会变两条。在commit的时候会回滚掉原数据,这个场景有点绕,但是我觉得我应该没回答错。


15. 算法 

字符串数组中的字符能否拼接成为某个字符。当时心态比较崩。所以这题虽然不难,但是最后没写出来没走通用例orz。

 

小结


面完心态崩了,除了mysql,其他回答的都一般,算法也没做出来。面试官看我脸色不好,还挥手让我后面加油。当时是真的以为自己挂了。没想到最后有三面,这里感谢下二面面试官,哈哈哈。


三 面


三面面试官是个大佬,头秃的严重,全程都挺忙的样子,有点心不在焉,大多都是聊天,问了下三份工作公司都是干啥的,自己做了什么项目。


聊天10分钟,技术10分钟,算法5分钟。

 

1. java创建一个网络io流。会有什么操作,基于java底层或者网络或者操作系统说一下。

这块我java就简单了下(因为据说字节哪怕面的是java,也很可能做go,所以感觉多少点语言之外的可能好一点)。主要还是说了操作系统和网络。比如ringbuffer,dma,软中断硬中断之类的。


2. 零拷贝说一下

就简单说了下sendfile和mmap。此外提了句senfile比较类似于网络中的对等概念,然后转到了网络


3. 说一下ftp和http的区别

不了解ftp,跳过


4. 文件下载一般用什么协议,udp还是tcp

udp用的多一点,两个都可以。udp主要nat穿透的话打洞容易,这一题过。


5. close wait和time wait有什么区别

这两个我回答的时候刚好说反了,哈哈哈


6. 怎么保持长链接,为什么需要长链接

keep-alive。不然每次链接都要创建fd,浪费资源开销。


7. 日志海量收集

开始的时候没听懂问什么就说日志用kafka啊。最后他提示多台机器,我就说mapreduce,简单说了下mapreduce,就结束了。


8. 你说的主要是离线处理,如何实现实时的呢

流处理的话,flink,spark都没用过,所以不强答了(我简历也没写我会大数据啊。怎么问这个orz)


9. 算法 

给出一串字符串,写出选取三个字符组合出来的所有可能。这一题是唯一一题白板,不需要运行。(这题看到我就想用dfs加回朔,但是问了下面试官说固定只选三个,我就傻傻的决定写三层for循环,写完后面试官看了一下说你就写了三层循环啊,我说嗯)

 

小结

这一面问的感觉都有点莫名其妙,很多人看了我的面经都吐槽问的都是些啥。最后就挂在这个算法上了。感觉自己傻了。内推我的老哥说我面评就一句话,说我算法表达弱,我想想就明白了,大家写算法的时候一定要想清楚,宁可写出来是错的,思路也要往最优解走啊。唉,字节也是我第一次当场写算法,以为只要结果对就行了,结果吃了不了解套路的亏。


总 结


最后知道挂了还是很可惜,不仅已经到第三面了,最重要的是明明是能做出来的,结果自己傻x了。唉,看来是和字节无缘(感觉对不起2面面试官)。


不过字节的效率还是很高的。可惜了我刷了这么多算法,字节面完后我就再也没有刷过一算法了。


要说最大的问题,就是之前没写过算法,一旦不是原题,我就会很慌。其实当时我的算法水平已经够应付社招了。至少之后没再刷过一题算法,以及其他公司算法难度和字节差不多的情况下,我都是基本快速撸完,还没有哪个五分钟不能过的。也算是字节让我在算法上成了老油条吧。


END


欢迎加入我的知识星球,一起剑指大厂,不断升级加薪。剑指大厂,一个指导程序员进入大公司/独角兽的精品社群,致力于分享职场达人的专业打法,包括「学习路线+简历模板+实习避坑+笔试面试+试用转正+升职加薪+跳槽技巧+副业外快」。

剑指大厂不仅是一个获取信息的圈子,还是一个规划职业的导师。已在知识星球,更新如下(点击下图了解更多):

////////////

若觉得文章对你有帮助,随手转发分享,也是我们继续更新的动力。


长按二维码,扫扫关注哦

「C语言中文网」官方公众号,关注手机阅读教程 

浏览 42
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报