蚂蚁金服面试(Java开发工程师:一面)

ArrayList与LinkedList之间的区别:
ArrayList是一个可变大小的数组。当更多的元素加入到ArrayList中时,其大小将会动态增长。内部的元素可以直接通过get与set方法进行访问。

LinkedList是一个双向链表,在添加和删除元素时具有比ArrayList更好的性能。但在get与set方面弱于ArrayList。

什么情况会造成内存泄露:
在Java中,内存泄露就是存在一些被分配的对象,这些对象有两个特点:
首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;
其次,这些对象是无用的,即程序以后不会再使用这些对象。
如果满足以上两个条件,这些对象就可以判定为Java中的内存泄露,这些对象不会被GC所回收,然而它却占用内存空间。

什么是线程死锁,如何解决
产生死锁的四个条件:
1、互斥条件:进程在某一时间内独占资源
2、请求与保持条件:一个进程因请求资源而阻塞时,对已经获得的资源保持不放
3、不剥夺条件:进程已经获得资源,在未使用完之前,不能强行剥夺。
4、循环等待条件:若干进程之间形成一种头尾相连的循环等待资源关系。

线程死锁是因为多线程访问共享资源,由于访问的顺序不当造成的,通常是一个线程锁定了一个资源A,而又想去锁定资源B;在另一个线程中,锁定了资源B,而又想去锁定资源A以完成自身的操作,两个线程都想得到对方的资源,而不愿意释放自己的资源,造成两个线程都在等待,而无法执行的情况。

要解决死锁,可以从死锁的四个条件出发,只要破坏了一个必要条件,那么死锁就解决了。在Java中使用多线程的时候一定要考虑是否有死锁的问题。

红黑树是什么?怎么实现?时间复杂度?
红黑树是一种特殊的二叉查找树。它满足二叉查找树的特征:任意一个节点所包含的健值,大于等于左孩子的健值,小于等于右孩子的健值。

红黑树的每个节点上都有存储位表示节点的颜色,颜色是红或黑。红黑树的特性:
1、每个节点或者是红色,或者是黑色。
2、根节点是黑色。
3、每个叶子节点是黑丝。
4、如果一个节点是红色,则它的子节点必须是黑色。
5、从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。

关于它的特性,需要注意的是:
第一:特性3中的叶子节点,是只为空的节点。
第二:特性5中,确保没有一条路径会比其他路径长两倍。因为,红黑树是相对接近平衡的二叉树。
在这里插入图片描述
红黑树的应用比较广泛,主要是用它来存储有序的数据,它的查找、插入和删除操作的时间复杂度为O(lgN)

TCP三次握手
所谓的“三次握手”是对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而确定的数据确认及发送数据、接收完毕后何时撤销联系,并建立虚连接。

为了提供可靠的传送,TCP在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标主机后确认消息。TCP总是用来发送大批量数据。当应用程序在收到数据后要做出确认时也要用到TCP。
在这里插入图片描述

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SNED状态,等待服务器确认;SYN:同步序列编号(Synchronized Sequence Numbers)
第二次握手: 服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器端进入RESTABLISHED状态,完成三次握手。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值