02 Java 高级02(IO和网络)

02 Java 高级02(IO和网络)

Java IO 面试题

1. Java 中有几种类型的流?JDK 为每种类型的流提供了哪些抽象类以供继承?

​ 基础流可以分为:字节流,字符流。字节流继承于 InputStream、OutputStream 抽象类,字符流继承于Reader 和 Writer 抽象类。在 java.io 包中还有许多其他的流,如对象流,数据流等都是基于这两种基础流扩展实现的。

​ 字符流:inputstream–FileInputStream–BufferedInputStream–DataInputStream–ObjectInputStream

​ 字节流:Reader 和 Writer

2. 字节流与字符流的区别?(必问)

字节流:可以读写任何内容(文本、音频等)、每次读写1个字节、默认没有缓冲
字符流:默认带缓存,每次读写2 个字节的 Unicode 字符

3. 什么是 Java 序列化,如何实现 Java 序列化?

序列化:用来把JAVA内存的对象读写出来、方便传输和存储

序列化的实现:将需要被序列化的类实现 Serialize 接口,没有需要实现的方法,此接口只是为了标注对象可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream(对象流) 对象,再使用 ObjectOutputStream 对象的 write(Object obj) 方法就可以将参数 obj 的对象写出。

4. 什么是缓冲区?有什么作用?

​ 缓冲区就是一段特殊的内存区域;作用:加速读写的速度

5. BufferedReader 属于哪种流, 它主要是用来做什么的, 它里面有那些经典的方法?

​ 属于字符流中的缓冲流,可以将读取的内容存在内存里面,有 readLine() 方法用来读取一行字符串。

6. 流如何关闭比较好,如果有多个流互相调用传入是怎么关闭的?

​ 流一旦打开就必须关闭,可以使用 close 方法将其关闭。一般关闭流的操作都放入 finally 语句块中以保证该操作一定会执行。若是多个流互相调用,那么只关闭最外层的流即可。

7、BIO、NIO、AIO区别(必问)

BIO:BlockIO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是 模式简单使用方便,并发处理能力低。
NIO:NewIO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
AIO:AsynchronousIO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。

8. 哪些属性不能被序列化?

​ Java 对象的 static,transient 修饰的属性不能被序列化。

9. 序列化 ID 作用?

​ Java 的序列化机制是通过在运行时判断类的 serialVersionUID 来验证版本一致性的。在进行反序列化时,JVM 会把传来的字节流中的 serialVersionUID 与本地实体类中的 serialVersionUID 进行比较,如果相同则认为是一致的,便可以进行反序列化,否则就会报序列化版本不一致的异常。

计算机网络面试题

1 五层网络模型(必问)

​ 物理层、数据链路层、网络层、传输层、应用层

2.TCP 和 UDP 区别?(必问)

连接可靠性传输形式传输效率消耗资源应用场景
TCP有连接可靠字节流文件/邮件传输
UDP无连接不可靠数据报视频/音频传输

3.TCP 三次握手(必问)

  • 第一次握手:客户端向服务端发起建立连接请求,客户端会随机生成一个起始序列号 x,客户端向服务端发送的字段中包含标志位 SYN=1,序列号 seq=100。第一次握手前客户端的状态为 CLOSE,第一次握手后客户端的状态为 SYN-SENT。此时服务端的状态为 LISTEN
  • 第二次握手:服务端在收到客户端发来的报文后,会随机生成一个服务端的起始序列号 y,然后给客户端回复一段报文,其中包括标志位 SYN=1,ACK=1,序列号 seq=y,确认号 ack=x+1。第二次握手前服务端的状态为 LISTEN,第二次握手后服务端的状态为 SYN-RCVD,此时客户端的状态为 SYN-SENT。(其中 SYN=1 表示要和客户端建立一个连接,ACK=1 表示确认序号有效)
  • 第三次握手:客户端收到服务端发来的报文后,会再向服务端发送报文,其中包含标志位 ACK=1,序列号 seq=x+1,确认号 ack=y+1。第三次握手前客户端的状态为 SYN-SENT,第三次握手后客户端和服务端的状态都为 ESTABLISHED。

4.TCP 四次挥手(必问)

  • 第一次挥手:客户端向服务端发送的数据完成后,向服务端发起释放连接报文,报文包含标志位 FIN=1,序列号 seq=u。此时客户端只能接收数据,不能向服务端发送数据
  • 第二次挥手:服务端收到客户端的释放连接报文后,向客户端发送确认报文,包含标志位 ACK=1,序列号 seq=V,确认号 ack=u+1。此时客户端到服务端的连接已经释放掉,客户端不能像服务端发送数据,服务端也不能向客户端发送数据。但服务端到客户端的单向连接还能正常传输数据
  • 第三次挥手:服务端发送完数据后向客户端发出连接释放报文,报文包含标志位 FIN=1,标志位 ACK=1,序列号 seq=w,确认号 ack=u+1。
  • 第四次挥手:客户端收到服务端发送的释放连接请求,向服务端发送确认报文,包含标志位 ACK=1,序列号 seq=u+1,确认号 ack=w+1。

5.HTTP 和 HTTPS 区别(必问)

HTTPHTTPS
端口80433
安全性无加密,安全性差有加密,安全性强
资源消耗较少较多
是否需要证书不需要需要
使用协议TCPTCP、SSL、TLS

6. 常见 HTTP 状态码(必问)

  • 200 - 请求成功
  • 301 - 资源(网页等)被永久转移到其它 URL
  • 404 - 请求的资源(网页等)不存在
  • 500 - 内部服务器错误

7. 常见 HTTP 请求方法(必问)

  • GET查询指定的页面信息,并返回实体主体。
  • HEAD:类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头。
  • POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改
  • PUT:从客户端向服务器传送的数据取代指定的文档的内容、用来添加
  • DELETE:请求服务器删除指定的页面。
  • CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
  • OPTIONS:允许客户端查看服务器的性能。
  • TRACE:回显服务器收到的请求,主要用于测试或诊断。
  • PATCH:是对 PUT 方法的补充,用来对已知资源进行局部更新 。

8.GET 和 POST 区别(必问)

  1. get 请求一般是去取获取数据(其实也可以提交,但常见的是获取数据);post 请求一般是去提交数据。
  2. get 因为参数会放在 url 中,所以隐私性,安全性较差,请求的数据长度是有限制的,不同的浏览器和服务器不同,一般限制在 2~8K 之间,更加常见的是 1kb 以内post 请求是没有的长度限制,请求数据是放在 body 中;
  3. get 请求刷新服务器或者回退没有影响,post 请求回退时会重新提交数据请求。
  4. get 请求可以被缓存,post 请求不会被缓存
  5. get 请求会被保存在浏览器历史记录当中,post 不会

10.Ajax 原理(必问)

​ Ajax 的原理简单来说通过 XmlHttpRequest 对象来向服务器发送异步请求,从服务器获得数据,然后用 JavaScript 来操作 DOM 而更新页面。这其中最关键的一步就是从服务器获得请求数据。

Jquery、Axios、Ajax:Jquery和Axios都封装了Ajax功能

同步请求—会刷新也页面

异步请求—不会刷新页面

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值