Java面试随笔

ArrayList和LinkedList区别

答:Arraylist是一个可以改变大小的数组。当更多的元素加入到ArrayList中时,其大小将会动态的增长。内部的元素可以直接通过get与set方法进行访问,因为Arraylist本质上就是一个数组。同时,Arraylist它是线程不安全的(因为它在add的时候分为两步进行一是找到元素,二是增加元素),但是读写效率比较高。

  LinkedList是一个双链表,在添加和删除元素时具有比Arraylist更好的性能,但在get与set方面弱于Arraylist。它是线程不安全的。

什么情况会造成内存泄露

答:在Java中,内存泄露就是存在一些被分配的对象,这些对象有下面两个特点:

首先,这些对象是可达的,即在有向图中,存在通路可以与其连接;

其次,这些对象是无用的,即程序以后不会再使用这些对象。

如果对象满足这两个条件,这些对象就可以判定为Java中国内存泄露,这些对象不会被GC所回收,然后它却占用内存。

什么是线程死锁,然后解决

答:产生死锁的条件有四个:

  1、互斥条件:所谓互斥就是进程在某一时间内独占资源

  2、请求与保持条件:一个进程因请求资源而被阻塞时,对已获得的资源保持不放

  3、不剥夺条件:进程已获得资源,在未使用完之前,不能强行剥夺

  4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系

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

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

红黑树是什么?怎么实现?时间复杂度?

答:红黑树(Red-Black Tree,简称R-B Tree),它是一种特殊的二叉查找树。红黑树是特殊的二叉查找树,意味着它满足二叉查找树的特征:任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值。除了具备该特性之外,红黑树还包括许多额外的信息。

红黑树的每个节点上都有存储位表示节点的颜色,颜色是红(Red)或黑(Black)。红黑树的特性:

  1. 每个节点或者是黑色,或者是红色
  2. 根节点是黑色
  3. 每个叶子节点是黑色
  4. 如果一个节点是红色的,则它的子节点必须是黑色的
  5. 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点

关于它的特性,需要注意的是:

第一:特性(3)中的叶子节点,只是为空(NIL或null)的节点

第二:特性(5),确保没有一条路径会比其他路径长出两倍。因而,红黑树是相对是接近平衡的二叉树。

红黑树的应用比较广泛,主要是用来存储有序的数据,它的查找、插入、删除操作的时间复杂度是O(lgn)。

 TCP三次握手

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

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

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列标号。

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入RESTBLISHED(TCP连接成功)状态,完成三次握手。

说一下HashMap以及它是否线程安全?

答:HashMap基于哈希表的Map接口的实现。HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。HashMap中hash数组的默认大小是16,而且一定是2的倍数。Hashtable、HashMap都使用了Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式。HashMap实现Iterator,支持fast-fail。

哈希表是由数组+链表组成的,它是通过key值进行hash来定位对象的,这样可以提供比线性存储更好地性能。

HashMap不是线程安全的。

 

转载于:https://www.cnblogs.com/Edward-Wang/p/10849431.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值