1. BIO、NIO、AIO 有什么区别?
同步阻塞IO(BIO)
我们熟知的Socket编程就是BIO,一个socket连接一个处理线程(这个线程负责这个Socket连接的一系列数据传输操作)。阻塞的原因在于:操作系统允许的线程数量是有限的,多个socket申请与服务端建立连接时,服务端不能提供相应数量的处理线程,没有分配到处理线程的连接就会阻塞等待或被拒绝。
同步非阻塞IO(NIO)
New IO是对BIO的改进,基于Reactor模型。我们知道,一个socket连接只有在特点时候才会发生数据传输IO操作,大部分时间这个“数据通道”是空闲的,但还是占用着线程。NIO作出的改进就是“一个请求一个线程”,在连接到服务端的众多socket中,只有需要进行IO操作的才能获取服务端的处理线程进行IO。这样就不会因为线程不够用而限制了socket的接入。客户端的socket连接到服务端时,就会在事件分离器注册一个 IO请求事件 和 IO 事件处理器。在该连接发生IO请求时,IO事件处理器就会启动一个线程来处理这个IO请求,不断尝试获取系统的IO的使用权限,一旦成功(即:可以进行IO),则通知这个socket进行IO数据传输。
异步阻塞IO(AIO)
AIO是发出IO请求后,由操作系统自己去获取IO权限并进行IO操作;NIO则是发出IO请求后,由线程不断尝试获取IO权限,获取到后通知应用程序自己进行IO操作。
2. Files的常用方法都有哪些?
File():构造函数,一般是依据文件所在的指定位置来创建文件对象。
CanWrite():返回文件是否可写。
CanRead():返回文件是否可读。
CompareTo(File pathname):检查指定文件路径间的顺序。
Delet():从文件系统内删除该文件。
DeleteOnExit():程序顺利结束时从系统中删除文件。
Equals(Object obj):检查特定对象的路径名是否相等。
Exists():判断文件夹是否存在。
GetAbsoluteFile():返回文件的完整路径。
GetAbsolutePath():返回文件的完整路径。
GetName():返回文件名称。
GetParent():返回文件父目录路径。
GetPath():返回文件的潜在相对路径。
GetParentFile():返回文件所在文件夹的路径。
HashCode():返回文件哈希码。
IsDirectory():判断该路径指示的是否是文件。
IsFile():判断该路径指示的是否是文件。
LastModified() :返回文件的最后修改时间标志。
Length():返回文件长度。
List():返回文件和目录清单。
Mkdir():生成指定的目录。
RenameTo(File dest):更名文件。
SetReadOnly():将文件设置为可读。
ToString():返回文件状态的字符串。
ToURL():将文件的路径字符串转换成URL
3. java 容器都有哪些?
1、分类
Collection接口
- List,按照插入顺序保存元素
- Set,插入元素不能重复且无序
- Queue,先进先出
Map接口
键值对的一组映射。
2、实现类
2.1 List
ArrayList
- 基于数组实现
- 优点在于随机访问列表中的元素速度快
- 缺点在于插入删除效率低
LinkedList
- 当实现Queue接口的时候,添加了element()/peek()/poll()/offer()/remove()方法
- getFirst()/element()和peek()
- 获取列表第一个元素
- 列表为空时,element()抛出NoSuchElementException异常,peek()返回null
- removeFirst()/remove()和poll()
- 删除列表第一个元素
- 列表为空时remove()抛出异常,poll()返回null
2.2 Set
Set的最重要的应用就是判断一个元素是否在一个Set中,* contains()/containsAll() ,因此查找就成了Set中最重要的操作,通常会选择一个 HashSet *来实现快速查找。
HashSet
采用散列函数,查找速度较快,顺序与添加的顺序可能不同
TreeSet
元素存储在红-黑树中,对元素进行排序
LinkedHashSet
既保存了查找的速度,也保存了插入的顺序
4. Collection 和 Collections 有什么区别?
1、java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
2.java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
5. List、Set、Map 之间的区别是什么?
1. 三者之间的区别如下:
1) 元素重复性:
① List允许有重复的元素。任何数量的重复元素都可以在不影响现有重复元素的值及其索引的情况下插入到List集合中;
② Set集合不允许元素重复。Set以及所有实现了Set接口的类都不允许重复值的插入,若多次插入同一个元素时,在该集合中只显示一个;
③ Map以键值对的形式对元素进行存储。Map不允许有重复键,但允许有不同键对应的重复的值;
2) 元素的有序性:
① List及其所有实现类保持了每个元素的插入顺序;
② Set中的元素都是无序的;但是某些Set的实现类以某种殊形式对其中的元素进行排序,如:LinkedHashSet按照元素的插入顺序进行排序;
③ Map跟Set一样对元素进行无序存储,但其某些实现类对元素进行了排序。如:TreeMap根据键对其中的元素进行升序排序;
3) 元素是否为空值:
① List允许任意数量的空值;
② Set最多允许一个空值的出现;[ 当向Set集合中添加多个null值时,在该Set集合中只会显示一个null元素]
③ Map只允许出现一个空键,但允许出现任意数量的空值;
总结: List中的元素,有序、可重复、可为空;
Set中的元素,无序、不重复、只有一个空元素;
Map中的元素,无序、键不重,值可重、可一个空键、多可空值;