Java网络方面

最近在面试 有些概念懂 可是须要梳理一下 借着面试看看本身会多少.java

1.网络编程的同步 异步 阻塞 非阻塞?面试

同步:函数调用在没有获得结果以前,不返回任何结果;数据库

异步:函数调用在没有获得结果以前,不返回任何结果,返回状态值;编程

阻塞:函数调用在没有获得结果以前,线程挂起,获得结果以后返回值。缓存

非阻塞:函数调用在没有获得结果以前,当前线程不会挂起,当即返回结果。服务器

2.Java如何实现无阻塞方式的Socket编程?网络

NIO能够有效解决多线程服务器存在的线程开销问题,NIO的多线程不是为了应对客户端请求而独立分配线程,多线程

而是经过多线程充分利用CPU的处理能力和处理的时间,达到提升服务效果。异步

3.什么是Java序列化函数

为了保存内存中各类对象的状态(也就是实例变量,而不是方法),而且能够把对象能够读取出来,虽然能够经过方法保存对象状态,java提供了对象

序列化机制更好的保存对象状态(具体的对象序列化能够参照Hibernate二级缓存)

4.什么状况下须要序列化?序列化须要注意什么事情,如何实现Java序列化(串行化)?

Java对象序列化到文件或者数据库中;

使用套接字在网络上传输对象时须要进行序列化;

当但愿RMI传输对象的时候;

序列化注意事情:

1).若是子类实现了序列化接口Sericalizable而父类未实现,父类必须提供一个无参构造函数,不然会抛出InvalidClassException异常。

2).类的静态变量不会被序列化,由于这个静态变量是类变量,而不是对象的。串行化保存的是是对象属性,即非静态的变量。

3.)Java序列化是为了节约磁盘空间,具备特定规则。

4).序列化到同一文件,若是修改了相同对象的属性再次保存时,所以只保存第二次的引用,读取第一次的存储。

 

5.Java有那几种流?JDK提供哪些接口能够继承?

Java提供的流对象

InputStram 字节输入流 OutputStream 字节输出流 Reader 字符输入流 Writer 字符输出流

按流向划分:

输出: 输出字节流 OutputStraam 输出字符流 Writer

输入: 输入字节流InputStream 输入字符流 Reder

按照传输单位划分:

字节流:8位 一个比特 通常状况下图片 等是二进制文件

字节流:16位 两个比特

6.用Java Socket编程

比较典型的Java Socket编程,发送请求后,等待服务器响应。 (这个过程存在阻塞方法)

大概过程

1.建立一个Socket实例,构造函数先远处服务器域名和端口 简历TCP链接

2.经过IO流与服务器创建链接(这个地方存在阻塞方法)

3.IO流中读取数据 而且 Socket关闭链接;

 

服务器的构建模型

1.建立一个ServerSocket端口监听,设置监听端口,用于获取TCP链接

2.重复执行(whlie(true))监听状态一直持续

3.调用ServerSocket 的accept()方法,返回一个客户端链接实例

4.为返回的Socket建立一个新的线程,用于进行线程的服务。

5.通信完成,关闭Socket的close()

7.TCP有链接时候有三次握手?断开链接有几回握手?

             客户端                                                   服务器

              | (发送请求 i)                                               |

              |                   --------------->  (i)                 |(建立j,而且i+1)

             |                  <---------------(j,i+1)               |

             | (获取 j,i+1) 而且(j+1,i+)                             |

             |                    -------------->(j+1,i+1)          |(获取j+1,i+1) 完成握手

seq 是包自己的序列号 ack是确认链接

一次释放 断开链接请求 确认断开链接

相关文章
相关标签/搜索