亲身经历:字节跳动面经总结
不点蓝字关注,我们哪来故事?
剑指大厂,一个指导程序员进入大公司/独角兽的精品社群,致力于分享职场达人的专业打法,包括「学习路线+简历模板+实习避坑+笔试面试+试用转正+升职加薪+跳槽技巧+副业外快」。
背 景
本人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语言中文网」官方公众号,关注手机阅读教程 ✬