【1】简述BIO的分类
BIO按节点流字节流和字符流,处理流包含缓冲流和转换流
【2】简述BIO、NIO、AIO的区别
Java BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善
Java NIO:同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理
Java AIO(N 10.2)异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理
【3】序列化与反序列化
序列化是把内存对象转成与平台无关的二进制编码,反序列化将二进制编码反序列化成内存对象
【4】序列化id的作用
如果类没有显示定义这个静态常量,它的值是Java运行时环境根据类的内部细节自动生成的。若类的实例变量做了修改,serualVersionUID可能发证变化。故建议,显式声明。
【5】Java序列化如果有些字段不想进行序列化,怎么办?
对于不想进行序列化的变量,使用transient关键字修饰。transient关键字的作用是:阻止实例中那些用此关键字修饰的变量序列化;当对象被反序列化,被transient修饰的变量值不会被持久化和恢复。transient只能修饰变量,不能修饰类和方法。被staitc修饰的字段也不能被序列化,因为static修饰的属性属于类。
【6】网络通讯协议
网络通讯协议有两套参考模型,一套是OSI参考模型,一套是TCP/IP参考模型,OSI过于理想,实际开发都采用TCP/IP参考模型开发。
TCP/IP模型分为应用层、传输层、网络层、物理+数据链路层。
Java基础Socket、ServletSocket、serverSocketChannel,SocketChannel都属于TCP/IP模型的传输层TCP协议
DatagramPacket编程属于TCP/IP模型TCP/IP模型的传输层HTTP协议
基于HTTP的servlet属于TCP/IP模型的应用层HTTP协议
基于webSocket实现的属于TCP/IP模型层的应用层的WS协议
【7】在Java中,我有三个socket,我需要多少个线程来处理?
Socket是BIO的同步式阻塞式编程,所以三个socket需要三个线程来处理。
【8】Java中怎么能创建ByteBuffer?
ByteBuffer.allocate()、ByteBuffer.allocateDirect(10);直接缓存、ByteBuffer.wrap();