Java常见面试题之IO流与网络基础

目录

10流与网络基础考核点

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

2.字节流与字符流的区别

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

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

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

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

7.为什么需要序列化?

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

9.序列化 ID 作用?

10.transient关键字作用?

11.TCP和UDP 区别?

12.TCP 三次握手

13.TCP 四次挥手

14.HTTP和HTTPS 别

15.常见 HTTP 状态码

16.常见HTTP 请求方法

17.浏览器输入 url 地址到显示主页过程

18.GET和POST 区别

19.AJAX原理

20.七层模型


10流与网络基础考核点


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

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

2.字节流与字符流的区别

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


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

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


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

缓冲区就是一段特殊的内存区域,很多情况下当程序需要频繁地操作一个资源(如文件或数据库)则性能会很低,所以为了提升性能就可以将一部分数据暂时读写到缓存区,以后直接从此区域中读写数据即可,这样就显著提升了性。
对于 Java 字符流的操作都是在缓冲区操作的,所以如果我们想在字符流操作中主动将缓冲区刷新到文件则可以使用 flush() 方法操作

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

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

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

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

7.为什么需要序列化?

可以从两个方面来解释,一方面是为了方便数据存储,另一方面是为了方便数据的传递。序列化就是将一对象 (标志对象的类型) 及其状态转换为字节码,保存起来(可以保存在数据库,内存,文件等), 然后可以在适当的时候再将其状态恢复 (也就是反序列化)

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

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

9.序列化 ID 作用?

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

10.transient关键字作用?

Transient 关键字阻止该变量被序列化到文件中

11.TCP和UDP 区别?

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

12.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。

13.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。

14.HTTP和HTTPS 别

|              | HTTP             | HTTPS            |
| ------------ | ---------------- | ---------------- |
| 端口         | 80               | 433              |
| 安全性       | 无加密,安全性差 | 有加密,安全性强 |
| 资源消耗     | 较少             | 较多             |
| 是否需要证书 | 不需要           | 需要             |
| 使用协议     | TCP              | TCP、SSL、TLS    |

15.常见 HTTP 状态码

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

16.常见HTTP 请求方法

GET:查询指定的页面信息,并返回实体主体。
POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
PUT:从客户端向服务器传送的数据取代指定的文档的内容。
DELETE:请求服务器删除指定的页面。

17.浏览器输入 url 地址到显示主页过程

1. DNS 解析
2. TCP 连接
3. 发送 HTTP 请求
4. 服务器处理请求并返回 HTTP 报文
5. 浏览器解析渲染页面
6. 连接结束

18.GET和POST 区别

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

19.AJAX原理

ajax:异步通信实现页面局部刷新的技术;核心组件:XmlHttpRequest;通过XmlHttpRequest组件对象来向服务器发送异步请求,从服务器获得数据,然后用JavaScript来操作DOM而更新页面

20.七层模型

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值