头条三面凉经
第一家撑到三面的公司,还是很开心的
1面:
1.算法题:求二叉树两节点的最长距离,搞了30分钟。。。
2.volatile修饰符的作用
答:volatile保证线程对该变量的可见性,根据JMM模型每个线程都有一块抽象私有的本地内存区域,该区域与主内存进行交互(当对volatile变量进行写的时候,会是其他线程的内存中存储该变量的值失效)
3.能不能写一个函数,由于指令重排序导致其输出的结果不是想要的
4.解释下 happen-before的规则
2面:
1.算法题:求前序遍历的递归,非递归算法
2.算法题:求一个数组中连续子数组的最大值, 如 【3,-4,1,2】,最大值为3,子数组为【1,2】
3.画出TCP的4次挥手过程,为什么需要四次,不能三次吗
答:当服务端接收到客户端的FIN数据报时,服务端可能还有需要发送的数据,因此FIN与ACK不能合并到一起发送。如果合并到一起发送,就不能确定服务器发送的数据,客户端是否接收到了。
4.解释下TIME_WAIT, 为什么取值为2MSL
答:2MSL刚好是数据报进行一个来回的时间,目的是为了确认服务端没有再次发送FIN;
5.如果服务端中存在大量的TIME_WAIT请分析下原因
答:发送在服务端主动断开连接,并发送ACK响应,进入TIME_WAIT状态,如果客户端一直在向客户端发送FIN包,服务器就会一直发送
6.说下操作系统中页面置换算法
答:先进先出,LRU,
7.说下LRU的实现思路
8.概率题:甲和乙投掷硬币,谁先投到正面谁就赢。先投的人赢的概率是多少 答案应该是2/3,通过一个等比数列可以算出
3面
1.进程与线程的区别(这个不太清楚) 答:一个进程可以有多个线程,一个线程只能属于一个进程。进程的上下文切换的代价比较大:因为进程切换时,会导致高速缓冲区失效;线程上下文切换时,只需要替换程序计数器,还有线程私有内存区就行了。
2.进程切换还需要改变什么
答:进程还需要保存打开文件的状态描述符
3.线程进行替换时,哪些东西会变
4.了解过一些中间件吗,例如负载均衡,数据库,分布式 答:不太清楚
5.了解过b树与b+树的区别吗(我需要好好梳理一下)
答:b树的非叶子节点存储索引和数据,而b+树只在叶子节点存储
6.为什么b+树需要这么做
答与磁盘的IO读取有关,balala,不需要说到了b+树类似平衡树(感觉面试官开始怼了)
7.那么二叉平衡树也可以在非叶子节点存储索引,叶子节点存储数据。两者有什么不同
答:b+树叶子节点用了链表
8.那么二叉平衡树在叶子节点加链表。两者有什么不同
答:b+树是多叉树,这样可以减少树的深度
9.了解隔离性
答只知道有四种隔离
10.算法题:将一个字符串改变其字符(假设需要将字符x变成y,则y也需要变成x),使其与另一个字符串相等 例子 字符串1:aabba -> 字符串2:eeffe //这里 字符串1a变成e,然后该字符串中如果存在e,也要把它变成a,这个返回ture
字符串1:asdf -> 字符串2:asag 返回false
11.工程题:
给你一个大的Hash文件,对其进行快照,获得该时刻文件的快照。 要求在快照过程中,还可以将数据写入该文件中,或者修改该文件中的值。
答:建立一个缓冲区,把那些要改的数据和要更新的之前数据发到缓冲区里面(估计不对)
------------------------------------------
最后,欢迎加入帅地的后端训练营,提供:
1、1对1个性化规划学习,个性化给你安排学习,查漏补缺,冲击大厂冲击银行还是对标小厂,学习路线都不同,帅地会让你以最快的速度去突击这些岗位。
进来基于你各方面都会变的很明确,也可量化,不再迷茫,不再纠结,一心学习!
2、网上很多大杂乱,不靠谱,帅地一对一给你指导,可以让你少走很多弯路,帮助你提前比别人快一步,往正确方向一心学习,才是最重要!
3、完整八股文专题,算法,项目资料,一站式简历服务,从0到1,所有都有,告别网上大杂乱!把时间花在最重要的事情上!
4、训练营永久有效,越早进来价格越低,享受权益越多,不促销,并且保证价格只涨不降,否则你可以来退差价!因为我是真的认可自己的服务!.......
5、每周模拟面试,让你体验一下大厂面试官都是如何提问问题的。
具体欢迎来帅地的后端训练营,详情点击这里:后端训练营