JAVA语言网络编程遇到的问题分析及解决方式
小标 2018-11-05 来源 : 阅读 904 评论 0

摘要:本文主要向大家介绍了JAVA语言网络编程遇到的问题分析及解决方式,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言网络编程遇到的问题分析及解决方式,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

1.网络编程时的同步、异步、阻塞、非阻塞?


同步:函数调用在没得到结果之前,没有调用结果,不返回任何结果。


异步:函数调用在没得到结果之前,没有调用结果,返回状态信息。


阻塞:函数调用在没得到结果之前,当前线程挂起。得到结果后才返回。


非阻塞:函数调用在没得到结果之前,当前线程不会挂起,立即返回结果。


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


NIO有效解决了多线程服务器存在的线程开销问题。


在NIO中使用多线程主要目的不是为了应对每个客户端请求而分配独立的服务线程,


而是通过多线程充分利用多个CPU的处理能力和处理中的等待时间,达到提高服务能力的目的。


3.什么是java的序列化(串行化)?


简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),


并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。


4.什么情况下需要序列化?序列化的注意事项,如何实现java序列化(串行化)?


·当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;


·当你想用套接字在网络上传送对象的时候;


·当你想通过RMI传输对象的时候;


序列化注意事项


1、如果子类实现Serializable接口而父类未实现时,父类不会被序列化,但此时父类必须有个无参构造方法,否则会抛InvalidClassException异常。


2、静态变量不会被序列化,那是类的“菜”,不是对象的。串行化保存的是对象的状态,即非静态的属性,即实例变量。不能保存类变量。


3、transient关键字修饰变量可以限制序列化。对于不需要或不应该保存的属性,应加上transient修饰符。要串行化的对象的类必须是公开的(public)。


4、虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序列化ID是否一致,就是private static final long serialVersionUID = 1L。


5、Java序列化机制为了节省磁盘空间,具有特定的存储规则,当写入文件的为同一对象时,并不会再将对象的内容进行存储,而只是再次存储一份引用。反序列化时,恢复引用关系。


6、序列化到同一个文件时,如第二次修改了相同对象属性值再次保存时候,虚拟机根据引用关系知道已经有一个相同对象已经写入文件,因此只保存第二次写的引用,所以读取时,都是第一次保存的对象。


5.java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?


JDK提供的流继承了四大类:


InputStream(字节输入流),OutputStream(字节输出流),Reader(字符输入流),Writer(字符输出流)。


按流向分类:


输入流:程序可以从中读取数据的流。


输出流:程序能向其中写入数据的流。


按数据传输单位分类:


字节流:以字节(8位二进制)为单位进行处理。主要用于读写诸如图像或声音的二进制数据。


字符流:以字符(16位二进制)为单位进行处理。


都是通过字节流的方式实现的。字符流是对字节流进行了封装,方便操作。在最底层,所有的输入输出都是字节形式的。


后缀是Stream是字节流,而后缀是Reader,Writer是字符流。


按功能分类:


节点流:从特定的地方读写的流类,如磁盘或者一块内存区域。


过滤流:使用节点流作为输入或输出。过滤流是使用一个已经存在的输入流或者输出流连接创建的。


6.用JAVA SOCKET编程,读服务器几个 字符,再写入本地显示。


客户端向服务器端发送连接请求后,就被动地等待服务器的响应。


典型的TCP客户端要经过下面三步操作:


1、创建一个Socket实例:构造函数向指定的远程主机和端口建立一个TCP连接;


2、通过套接字的I/O流与服务端通信;


3、使用Socket类的close方法关闭连接。


 


服务端的工作是建立一个通信终端,并被动地等待客户端的连接。


典型的TCP服务端执行如下两步操作:


1、创建一个ServerSocket实例并指定本地端口,用来监听客户端在该端口发送的TCP连接请求;


2、重复执行:


1)调用ServerSocket的accept()方法以获取客户端连接,并通过其返回值创建一个Socket实例;


2)为返回的Socket实例开启新的线程,并使用返回的Socket实例的I/O流与客户端通信;


3)通信完成后,使用Socket类的close()方法关闭该客户端的套接字连接。


7.TCP/IP在连接时有几次握手?释放时有几次握手?


TCP三次握手连接的建立过程:



TCP四次挥手的释放过程:



          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程