Java中IO流和网络编程相关的面试题

一、常见的io流有哪些,它们的作用是什么?

在Java中,常见的IO流有以下几种:

1. 字节流(Byte Streams):用于处理二进制数据的输入输出。常见的字节流有InputStream和OutputStream。

2. 字符流(Character Streams):用于处理文本数据的输入输出。字符流比字节流更高级,能够正确处理字符编码的转换。常见的字符流有Reader和Writer。

3. 缓冲流(Buffered Streams):对字节流和字符流进行缓存,提高IO性能。常见的缓冲流有BufferedInputStream、BufferedOutputStream、BufferedReader和BufferedWriter。

4.对象流(Object Streams):用于序列化(将对象转换为字节流)和反序列化(将字节流转换为对象)Java对象。常见的对象流有ObjectInputStream和ObjectOutputStream。

5. 文件流(File Streams):用于处理文件的输入输出。常见的文件流有FileInputStream和FileOutputStream。

这些IO流的作用如下:

- 输入流用于从外部(如文件、网络)读取数据并读入程序,内存等。
- 输出流用于将程序的数据输出到外部(如文件、网络)。
- 缓冲流用于提高IO性能,通过减少实际读写磁盘的次数,从而加快数据读写速度。
- 对象流用于在Java对象和字节流之间进行转换,方便对象的持久化和传输。
- 文件流用于处理文件的输入输出,读取或写入文件中的数据。

二、序列化和反序列化操作为什么要实现Serilizable接口?

在Java中,序列化(Serialization)是将对象转换为字节流的过程,而反序列化(Deserialization)是将字节流转换为对象的过程。

为了实现序列化和反序列化操作,Java提供了一个Serializable接口。这是一个标记接口(Marker Interface),即不包含任何方法的接口。当一个类实现了Serializable接口时,表示该类的对象可以被序列化和反序列化。

具体为什么要实现Serializable接口有以下几个原因:

1. 标识可序列化:通过实现Serializable接口,类的对象可以被标识为可序列化的,即可以被转换为字节流进行传输或保存。

2. 版本控制:Serializable接口包含一个用于版本控制的序列化版本号(serialVersionUID)。当类的结构发生变化时,序列化版本号可以用于确保反序列化的兼容性。如果反序列化时的版本号与类的当前版本号不匹配,会抛出InvalidClassException异常。

3. 框架支持:许多Java框架和库,如RMI、Hibernate、Spring等,都依赖于Java序列化机制。这些框架会使用Serializable接口来判断对象是否可以进行序列化和反序列化,并相应地处理对象的序列化。

三、TCP 和 UDP之间的作用和区别?

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、 基于IP的传输层协议。

UDP(是User Datagram Protocol的简称,中文名是用户数据报协议),是OSI参考模型中的传输层协议,它是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。 

TCPUDP都是来自于传输层的协议。传输层位于应用层和网络层之间,负责位于不同主机中进程之间的通信。

  1.TCP基于连接,UDP无连接

  2.TCP要求系统资源较多,UDP较少 

  3.TCP保证数据正确性,UDP可能丢包 

  4.TCP保证数据顺序,UDP不保证 

四、什么是 HTTP 协议?

        客户端和服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”。 是一个基于请求与响应模式的、无状态的、应用层的协议,基于 TCP 的连接方式 。   

五、 TCP 的三次握手和四次挥手是什么意思,有什么作用?

为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。 

 

为什么要三次握手?

三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是 双方确认自己与对方的发送与接收是正常的。

SYN:同步序列编号(Synchronize Sequence Numbers)。是TCP/IP建立连接时使用的握手信号。

第一次握手:客户端给服务器发送一个SYN。客户端发送网络包,服务端收到了。服务器得出结论:客户端的发送能力,服务端的接收能力正常。

第二次握手:服务端收到SYN报文之后,会应答一个SYN+ACK报文。服务端发包,客户端收到了。客户端得出结论:服务端的接收和发送能力,客户端的接收和发送能力正常。但是此时服务端不能确认客户端的接收能力是否正常。

第三次握手:客户端收到SYN+ACK报文之后,回应一个ACK报文。客户端发包,服务端收到了。服务器得出结论:客户端的接收和发送能力,自己的接收发送能力都正常。

通过三次握手,双方都确认对方的接收以及发送能力正常。

TCP的四次挥手(Four-way Handshake)是指在TCP连接中断时,两端通过一系列的消息交换来关闭连接的过程。这个过程由客户端和服务器共同完成,主要作用是确保双方都完成了数据的传输并且关闭了连接。

下面是四次挥手的过程:

第一次挥手:客户端发送连接关闭请求(FIN)给服务器,表示客户端没有数据要发送了。

第二次挥手:服务器收到连接关闭请求(FIN),发送确认消息(ACK)给客户端,确认收到了客户端的关闭请求。

第三次挥手: 服务器发送自己的连接关闭请求(FIN)给客户端,表示服务器也没有数据要发送了。

第四次挥手: 客户端收到服务器的关闭请求(FIN),发送确认消息(ACK)给服务器,确认收到了服务器的关闭请求。

在这个过程中,每次发送关闭请求的一方会等待对方发送确认消息(ACK)回复,以确保双方都已经准备好关闭连接。最后,当双方都收到了对方的关闭请求和确认消息后,连接会彻底关闭。

四次挥手的作用是确保双方都完成了数据的传输并安全地关闭了连接。它可以防止数据的丢失或半开连接状态,确保双方都能够通知对方关闭连接,并且在关闭连接之前完成重要的数据传输。通过四次挥手,双方都能够知道对方已经准备好关闭连接,避免了不必要的等待和超时。

六、 HTTP 的重定向和请求转发之间的区别?

两者的实现如下: 

转发:用request的getRequestDispatcher()方法得到ReuqestDispatcher对象,调用forward()方法。

实例:request.getRequestDispatcher("other.jsp").forward(request, response);

重定向调用response的sendRedirect()方法

实例:response.sendRedirect("other.jsp");

重定向和转发之间的区别:

1> 重定向2次请求,请求转发1次请求

2> 重定向地址栏会变,请求转发地址栏不变

3> 重定向是浏览器跳转,请求转发是服务器跳转

4> 重定向可以跳转到任意网址,请求转发只能跳转当前项目

5> 重定向不能携带数据,请求转发可以携带数据(request.setAttribute("参数名称",要传的参数);

七、 Get和Post的区别?

1. Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。     

2. Get传送的数据量较小,一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。       

3. Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。             

 4. Get执行效率却比Post方法好。Get是form提交的默认方法,如果有文件上传那么就需要更改提交方式为Post,并且表单的 enctype 属性需要设置为 multipart/form-data。 

八、cookie和session的区别?

Cookie和Session是Web开发中用于实现状态管理的两种技术,它们之间有以下区别和作用:

1. 存储位置:Cookie是存储在客户端(浏览器)中的小型文本文件,而Session是存储在服务器端的对象。

2. 存储内容:Cookie主要用于存储少量的文本数据,一般用于保存用户的身份认证、偏好设置等信息。而Session可以存储复杂的对象数据,通常用于保存用户的会话状态、购物车信息等。

3. 安全性:由于Cookie存储在客户端,如果被恶意篡改,则可能会产生安全风险。而Session存储在服务器端,相对来说更安全。

4. 容量限制:Cookie的容量一般被浏览器限制为几KB到几十KB大小,而Session在服务器端可以存储较大的数据。

5. 生命周期:Cookie可以设置过期时间,可以是会话级(关闭浏览器后失效)或持久性(指定过期时间)。而Session的生命周期一般由服务器控制,可以基于时间或用户活动来设置过期时间。

作用方面:

- Cookie可以用于识别用户,实现用户的身份认证和会话跟踪。它可以在不同的请求之间传递用户信息,并保持用户的登录状态。

- Session用于在多个请求之间共享和存储数据。通过将数据存储在Session中,可以在用户的不同页面和请求之间共享数据,实现功能的持久化和状态的保持。

需要注意的是,CookieSession并不是互斥的,它们在实际应用中可以同时使用。Cookie通常用于存储较小的、不敏感的数据,而将敏感的、复杂的数据存储在Session中,从而实现更安全、更高效的状态管理。

九、Servlet生命周期

    Init():初始化阶段,创建并加载servlet对象,servletConfig对象

   Service():运行阶段,调用doGet()和doPost()方法,构造servletRequest和servletResponse对象。

    Destroy():销毁阶段,停止servlet,释放资源

十、Ajax异步交互的实现和作用?

Ajax 即"Asynchronous JavaScript And XML"(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。 一般使用 jQuey 来进行实现,如下所示:

$.ajax({ 
选项 
})
常见的选项有: 
type:请求方式,常见的值有"get","post"等,默认值:get 
url:请求的路径,"/ajax/hello" 
data:请求的参数,参数的常见写法有 键值对或者json 
方式1: name=tom&pwd=123 
方式2: {"name":"tom","pwd":"123"} 
success:请求成功后的回调函数 function(返回值的参数名){} 
contentType:用来设置请求参数的mime类型,默认值:表单的enctype默认值 name=tom&pwd=123 
error:ajax请求时内部发生错误时执行的回调函数 function(){} 
dataType:指定返回值的类型 常见值:text json 
async:是否异步 默认值true 

Ajax应用程序的优势在于: 

1. 通过异步模式,提升了用户体验 

2. 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用 

3. Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Double丶11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值