20210312~java面试记录

本文记录了一场java面试,涵盖了算法与基础知识点。算法部分包括判断二叉树同构及实现循环队列;基础部分涉及OS内存逻辑地址与物理地址区别,TCP四次挥手的time_wait作用。面试题强调了并发处理及二叉排列树的操作。
摘要由CSDN通过智能技术生成

算法笔试40mins+基础面试20mins

算法题:

------【1】判断两棵二叉树的同构,
同构:一棵树的任意节点的左右子树任意次交换后,能和另外一棵树相同,那么这两棵树是同构的;

judge(root1, root2):
     1、都为空树,则同构
     2、一空一非空,则非同构
     3、根值不同,则非同构
     4、两棵树的左子树都为空,则judge(root1.right, root2.right)
     5、两棵树的左子树都不为空,且值相同:
        judge(root1.left, root2.left) and judge(root1.right, root2.right)
     else 5:
        judge(root1.left, root2.right) and judge(root1.right, root2.left)

-----【2.1】使用数组,实现一个循环队列(先进先出);不要额外增加全局变量
循环队列:求余实现弯曲效果,循环队列必须给定最大值MAX_Q_SIZE;—利用循环解决空间浪费问题;
front、rear:rear追到head说明对队列满了,front追上rear说明队列为空;
当rear=front时,队列可能为空,也可能为满;

满: 队列添加元素到rear的下一个元素是head时,(Q.rear+1)%MAX_Q_SIZE== Q.front;
空: 队列删除元素到head = rear时, Q.rear = Q.front;
添加和删除元素都要求余;
添加: (rear+1)%MAX_Q_SIZE
删除:(front+1)%MAX_Q_SIZE

-----【2.2】无锁支持并发(一个push线程、多个pop线程;单个生产者多个消费者,提示:可使用cas原子操作)???

-----【3】在二叉排列树上面找出第N大的节点。 注意:不能把二叉树全量存储到另外的存储空间:比如存储到数组后再取出;
中序递归遍历,每访问完一个节点,count++直到第N个;

基础题:

-----【1】OS内存为什么要分为逻辑地址和物理地址?
逻辑地址:CPU所生成的地址,该地址是内部和编程使用的、并不唯一;
物理地址:内存中的内存单元实际地址,就是内存中每个内存单元的编号,这个编号是顺序拍好的,物理地址的大小决定了内存中有多少个内存单元;

-----【2】TCP四次挥手中time_wait字段的作用?
TCP的四次挥手:因为每个方向都需要一个FIN和一个ACK
TCP四次挥手

1、主动关闭
连接的才有TIME_WAIT状态;
2、TIME_WAIT== 2 MSL因为1)防止旧连接的数据包,2)确保最后的ACK能被服务器接收到;
MSL: 报文最大生存时间,它是任何报文在网络上存在的最长时间,超过这个时间,报文将被丢弃;
TTL:是ip数据报可以经过的最大路由数,没经过一个处理它的路由器,此值就减1,当此值为0时,数据包将被丢弃;
MSL >= TTL消耗为0的时间,以确保报文被自然消亡;
TIME_WAIT== 2 MSL:网络中可能存在来自客户端的数据包,这些数据包被服务器处理后,需要给客户端反馈,一来一回需要2倍时间;

3、三次握手:第三次握手是可以携带数据的,前两次不可以;
TCP三次握手

三次握手原因:1)阻止重复历史连接的初始化 、2)同步双方的初始序列号、3)避免资源浪费

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值