字节跳动后端Java三面面经
关注回复“1”,即可获取上千篇面经集合pdf
面经内容
【一面】
1. 自我介绍
2. 实习做了啥?
3. 如何做慢查询排查的?
4. 说一说索引?
5.知道聚族索引和非聚族索引吗?
6.接着给了一道题,两条sql语句的区别?select * select a 主要区别是索引覆盖和回表
7.什么情况下索引会失效?
8.接着又给了一道题,建表语句、一条sql和这条sql的explain之后的结果?问为啥不走索引,怎么做?我回答的是有个字段没有建索引,可以增加一个联合索引
9.又问顺序可以改变吗?最左匹配原则
10.说一说事务的隔离级别?
11.接着又给了一道题,在一个事务中有两条sql,select语句和update语句,问在你说的各个隔离级别下,mysql会出现什么问题?RR:有锁和mvcc控制不会有问题,读未提交:会看到其他事务的脏数据,读已提交:读已提交会造成不可重复读问题和幻读问题,但是这里只有一个select,应该不会有问题,大家觉得呢?这里没有updata和insert所以也不会造成幻读这里好像不可重复读和幻读的概念搞反了,这才反应过来
12.binlog,redolog,undolog三者的区别了解吗?
13.说一说volatile?
14.volatile怎么实现的,说一说内存屏障
15.聊一聊计算机网络吧,http的状态码有哪些?http请求头有哪些?
16cookie和session的区别?顺带还给说了token
17.Redis是怎么用的?项目中用的什么数据类型?Redis有什么数据类型
18.Redis的SDS和跳表?跳表是怎么维护这个层级的?我忘记了只记得是有一个随机,然后面试官问了我两下你不太记得了,只知道有一个随机是吧?
19.Redis的数据过期策略,你了解吗
20.接着出了一道智力题,挺长的题目,在面试官的引导下也许说了下思路
21.算法题:二叉树的z字形遍历 先简单的沟通了下思路,使用队列+dfs 面试官说:不使用队列,想想其他数据结构,然后我说栈可以吗?用两个栈可以吗?(这个题目之前也是使用队列做的,临时想的)你自己分析一下嘛?然后说了一下思路,就开始写了,不用main方法写完给他看看就好,最后看了一下,你这少了return(粗心)面试结束
【二面】
上来先两道道题:
1.简单题:数组中的重复数字,不过要将数字和下标输出,心里窃喜。本来想用map,结果不让用Java自带的map;那好使用int模拟map,结果又说试试其他方法吗?那也好 我说排序吗?接着用排序做了一下
2.中等题:lc61旋转链表,没有为难我了,这就搞成一个环然后打破了可以(两题都做过)
内心已经有了些许不太高兴,但是还是陪笑道歉说我之前做题做的都是那种有输入输出的。。。(其实确实是自己这边这种思维导致的,但是他也是沟通没到位啊,他只要说一句你自己写一个链表早就完事了,这个过程至少浪费了10分钟,而且写题过程中一直都是打字,开个视频沟通不好嘛!)
面试开始:
3..你认为你最熟悉的课程是啥?然后我说我学的是网络工程(立马打断我,你只要说你最熟悉的是啥就可以了)(我真想给他说路由与交换)我说数据结构吧,不行这已经出过题了,接着我说计算机网络(被问到炸)
4.计算机网络主要解决什么问题的?
5.TCP/IP协议栈和OSI五层模型,他们的区别是啥,为什么要划分这两个标准(心态已经有点炸)
6.TCP主要解决什么问题,我说 IP层不保证可靠,需要靠TCP来保证
7.什么叫做可靠?怎么保证可靠的,然后我说了一堆,面试官:概括一下:大概就是序号、滑动窗口、流量控制、拥赛控制、确认重传机制
8.说说慢开始算法吧?
9Socket三元组是怎么保证传输到对方的,怎么回来的?给他讲了讲下面这个图的过程,随时打断我问问题
12.如果说一个主机在局域网内怎么传输的?讲了讲NAT的原理
13.说说三次握手吧?如果发送方接收方同时发送SYN请求报文,那么是一次连接还是两次连接?
14.我说两次,肯定吗?可以从接收方和发送方的状态来考虑?这个问题请大佬回答啊我一开始说的是两次连接因为因为每次连接的序号都是随机的互不影响,但是状态的话都会变到SYN SEND啊,如果在TCP里面会去判断状态的话,那就是一次
15.TCP的保活机制了解吧?发个探测报文,能说的具体点嘛?没操作过
16.为什么有了TCP的保活机制还要有应用层的保活机制?两者的区别知道吗?不太懂,我说HTTP具备保活机制,但是其他的应用层协议也许就没有了,所以还要有TCP的保活机制?他说不对?
17.你知道CICD嘛?我忘记问的啥了?我说是持续部署持续集成的那个CICD嘛,他说不是,然后反问你不是在xxx实习嘛?这个云技术很重要的,我说可能部门的侧重点不一样,我在这做数据库的
18.那你说说说TCP四次挥手的几个状态吧?不太记得了,我只知道有time-wait这个状态
19.那如果发送方和接收方同时发送FIN报文呢?会怎么样?我小声嘀咕了一下同时发送会同时到达嘛 请大佬回答
20.那你知道TCP的保活机制的缺点吗?我说不了解,但是我现在知道了为什么要有应用层的保活机制,面试官笑了两声,然后给我说对的,技术就是这样的,我也笑了
21.那你说说三次握手嘛,它的状态是怎么变化的?
22.对计算网络你还有那块比较熟悉吗?我说这个不敢说熟悉,肯定还会有不知道的点,面试官又笑了两声
23.那再问一个问题吧,你还有什么课程比较熟悉吗?操作系统,行那你说说LInux的负载指数是怎么呀的?我说就是那个top下来有一个指标,这个忘记了啊
24.说说你的实习吧?
25.你有什么要问的吗?我说我没有。你对你今天的表现怎么样?我说不是很好,不能只是停留在理论吧啦吧啦我说了一点,然后我反问他:请问您刚才提到的问题,发送方和接收方同时发送SYN报文,怎么去模拟这个场景?对方:沉默20秒,模拟还是能模拟的吗?哈哈,那今天就到这
26.然后你接下来把那个题完成吧,我抽空回看看的,然后花了点时间写了下链表。结束了
【三面】
总体来说就是智力题+算法题,一开始问了一些八股文都是非常常见的,我也都快忘记了,就一个问题有点没怎么见过这里记录一下:
1.在请求体里除了使用json格式,还能使用啥格式,我当时答的是xml
接下来就是智力题轰炸了,我搞错了是三道智力题+一个算法:
2.100个相同的球,分成A、B、C、一共3堆(每一堆至少0个球),一共有多少种分堆方式?(排列和组合吧,我说是什么C310,就是那个C,老忘记了)
3.在岛上有85只老虎和1只羊,老虎可以吃草,但他们更愿意吃羊。如果每次只有一只老虎可以吃羊,而且一旦他吃了羊,他自己就变成羊;而且所有的老虎都是聪明而且完全理性的,他们的第一要务是生存。请问这只羊会不会被吃?(推理了一下,老虎吃完羊之后自己变成羊,又会被别人吃那就是不符合聪明和生存了,所以羊不会被吃?)
4.有100个饺子,A和B轮流吃,每次可以选择吃1~3个,谁吃完最后一个则获胜,如果A先吃,A有必胜的策略?如果没有?B有必胜的策略?(当时说的是没有必胜的策略,采用枚举啊,就6中情况,后来想了想,可以这样,假设A吃x,B吃y,那么A要必胜就意味着 100 % ( x + y ) <= x 才可以,但是100 % ( x + y ) <= x + y s所以要成立的话就有( x + y ) <= x,那么只有A不吃才行)
5.给定m个不重复的字符 [a, b, c, d],以及一个长度为n的字符串tbcacbdata,问能否在这个字符串中找到一个长度为m的连续子串,使得这个子串刚好由上面m个字符组成,顺序无所谓,返回任意满足条件的一个子串的起始位置,未找到返回-1。比如上面这个例子,acbd,3(当时是使用双指针+哈希暴力解了一下,面试官说下去在优化优化,就结束了)