面经-字节跳动后端开发

字节跳动一面(估计凉凉了)

南京某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看一些数据。

像我们在校学生,平时接触不到生产上的数据和业务场景,如何提升自己

找实习是最好的,或者自己接项目,做老师的项目。

总结

现在还有很多不足的地方,得抓紧时间研究了,一定要功在平时啊。广度优先的时候也要注意深度。多刷题,多总结才能走的远,基础是最重要的。

很想去字节跳动,后面继续努力吧。加油啊。

如果后面还有二面(呜。。。)继续更新。

posted @ 2019-08-13 15:00  Xieth  阅读(2910)  评论(0编辑  收藏  举报