面经-字节跳动后端开发
字节跳动一面(估计凉凉了)
南京某211渣硕,第一次大厂面试给了头条。感觉好多基础知识掌握的不牢靠。面试结束之后深刻感受到考前突击的方式不可取,功在平时才能厚积薄发。为了这次面试突击了两周,还是有很多东西没有准备充分,很多基础不牢靠。以后得更加努力了。
上午十点半面试,面了一个半小时,说如果有二面,后续会再联系,但估计应该没有后续了。要学习的东西还有很多,以后继续加油吧。很喜欢字节跳动这个名字,第一次听见的时候感觉很有灵性,非常希望能去字节的团队。这次的失败就当作对自己的激励吧。
首先问了一些项目的情况
Java有哪些常用的线程池
之前还没来得及准备线程池,哭晕,直接回复不太了解,第一个问题就这么告终,实在有点过意不去。Java基础太薄弱了。
哪些同步的方式,就是加锁
用synchronized关键字加锁,还有分段锁。
追问,怎么理解分段锁?
之前只顾记概念了,没能好好理解。瞎胡说一通,说不是对整个数据段加锁,而是一段一段的加锁(面试官内心应该是奔溃的),性能比synchronized关键字好。
追问,知道哪些数据结构是用分段锁的吗?
回答只知道ConcurrentHashMap。
追问,那它是怎么实现分段锁的,了解过吗?
回答没有。
除了这个还有没有别的数据结构用分段锁?
回答不是很清楚。
synchronized知道怎么用吗?
之前没怎么用过,回答在方法或变量前面使用。面试官内心应该很崩溃了。
知不知道锁的可重用是一个什么样的概念?
这个真没了解过。
数据库里面的索引了解吗,可以谈谈它的结构吗
hash索引和B+树索引,如果查询单条记录的话,hash索引比较方便。查询多条记录的话B+树索引能够提高查询效率。
追问:B+树和B树什么区别?
回答:这个好像答反了,哭晕
为什么使用索引查询会变快呢?
回答:本身数据库的结构是按页存储,不同的页之间构成一个循环链表,页里面的记录也是单链表。如果不用索引并且数据量比较大的话,查询效率低。如果用B+树balabala,说的有点语无伦次。最主要原因还是对B+树没那么了解。
知道聚簇索引吗?
回答:聚簇索引也叫聚集索引。是以主键为索引的。
追问:主键索引和普通的索引有什么区别
回答:以主键索引查询没有回表的操作,普通索引的话好像没有回表的操作。
追问:为什么主键索引就不需要回表呢,根本原因是啥?
回答:好像是数据库里面是以主键存储的。面试官:大致是这个意思
讲一下tcp三次握手四次挥手
三次握手主要是为了通信双方建立一个可靠的通信信道。第一次握手balabala,第二次balabala,第三次balabala。
四次挥手balabala
追问:为什么握手要三次,改成两次行不行?
回答:没理解面试官的意思,答偏了。直接说的两次握手的话接收端无法确认自己是不是发送成功,发送端是不是成功接收。
追问:两次的话断开会有什么问题?
我的回答还是建立在三次握手的基础之上来思考的,没有抛开三次握手的概念。
算法题,二叉树的序列化与反序列化
昨天基友刚答过这题,今天又来了。早上还瞄过一眼,感觉应该不会再出现吧,但没想到还是出现了。用的是前序遍历的方式对二叉树进行序列化,反序列化的时候感觉也挺顺利的,但后面执行出现了一个bug,好像是有个递归的出口没考虑到,网页上写代码又不像用IDE,还可以debug,一时半会没找到原因,期间还问了面试官StringBuilder在哪个包下。。。再加上遇到问题解决不了,有点紧张,卡了很久。最后让我回头再调试。还是不能太依赖于IDE,要学会在没有IDE的情况下写代码。
用过kafka对吧,了解kafka吗
搭过集群。producer往broker的特定topic发数据,consumer从topic读数据。
问:知道什么是consumer group吗?
这个问题答得也不好,可能是有点慌了。有点语无伦次,答非所问。
问:kafka的offset怎么管理知道吗?
听错问题了,以为问的kafka集群怎么管理。答zookeeper。。。
追问:除了zookeeper有没有其他方式
答:只用过zookeeper。
问:topic的offset怎么与consumer group对应上的?
乱答一通
问:offset是和什么绑定的?
可能面试官知道我理解错他的意思答偏了,又进一步引导了一下。当时脑子都乱了,说了一些offset的读取策略,也不知道对不对。往文件里面写。
感觉这一块问题还是因为自己平时理解的不够深入,光顾着使用,却忘记总结了。如果基础好的话,不至于那么慌吧。
问我有没有什么想问的
我问了三个问题
平时工作如果忙的话,怎么学习自己的东西
会做技术分享,每个月都有人会做技术分享,一个组内,每个人按月份分享。学东西的话在工作中遇到一些问题,解决了也能够学到一些东西。
怎么学习源码,有什么策略
一般遇到问题会去源码那边跟一下,如果单纯学源码的话,最好按模块来看,架构是什么样子的。最好是能够跑起来,debug看一些数据。
像我们在校学生,平时接触不到生产上的数据和业务场景,如何提升自己
找实习是最好的,或者自己接项目,做老师的项目。
总结
现在还有很多不足的地方,得抓紧时间研究了,一定要功在平时啊。广度优先的时候也要注意深度。多刷题,多总结才能走的远,基础是最重要的。
很想去字节跳动,后面继续努力吧。加油啊。
如果后面还有二面(呜。。。)继续更新。