codecamp

网络编程

笔者能力有限,总结有误的地方,请读者协作更正。

1.理解同步、异步、阻塞、非阻塞?

同步:执行一个操作之后,等待结果,然后才继续执行后续的操作

异步:执行一个操作的同时之后,可以执行其他操作,然后等待通知在回来执行刚才没有执行完成的操作。

阻塞:进程给CPU传达一个任务之后,一直等待CPU处理完成,然后才之后后面的操作。

非阻塞:进程给CPU传达任务之后,继续处理后续的操作,隔一段时间再来询问之前的操作是否完成。

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

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

NIO中使用多线程的目的是实现少量线程为多个客户端服务,达到线程的复用。

3.Java中有几种类型的流?说出分别有哪些类?

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

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

按流向分类:

输入流: 程序可以从中读取数据的流。 输出流: 程序能向其中写入数据的流。

按数据传输单位分类:

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

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

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

按功能分类:

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

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

4.用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()方法关闭该客户端的套接字连接。

5.TCP/IP的3次握手?释放时候几次握手?

连接时候3次握手:

释放时候4次挥手:

多线程
面向对象
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

第2章 数据库

SQL

第4章 hadoop

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }