• 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是确认连接

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

  • 相关阅读:
    yeoman+grunt/gulp+bower构建angular项目
    eclipse配置svn 并从svn下载maven项目 配置tomcat启动maven项目(二)
    eclipse配置svn 并从svn下载maven项目 配置tomcat启动maven项目
    mysql Oracle常用使用区别
    海思平台交叉编译curl支持SSL功能
    Gitlab 自动构建心得
    openssl windows平台编译库
    更换树莓派源成国内源
    使用ntp协议同步本地时间(C语言)
    网络分析纪录
  • 原文地址:https://www.cnblogs.com/ad-zhou/p/9823121.html
Copyright © 2020-2023  润新知