Java网络编程笔试真题(含详细答案)_第1页
Java网络编程笔试真题(含详细答案)_第2页
Java网络编程笔试真题(含详细答案)_第3页
Java网络编程笔试真题(含详细答案)_第4页
Java网络编程笔试真题(含详细答案)_第5页
已阅读5页,还剩5页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java网络编程笔试真题(含详细答案)适用场景:Java后端初级开发、实习面试笔试难度:基础+中等(贴合企业校招/社招初面考点)说明:整套试题无偏题怪题,覆盖TCP/UDP、Socket、IO模型、HTTP协议、网络编程常见问题,答案通俗易懂、贴合实际开发一、单项选择题(共10题)1.Java网络编程中,基于可靠连接、面向字节流的传输协议是()A.UDPB.TCPC.HTTPD.ICMP2.下列关于UDP协议的描述,正确的是()A.面向连接、可靠、有序B.无连接、不可靠、效率高C.面向连接、不可靠、有序D.无连接、可靠、无序3.Java中用于实现TCP服务端的核心类是()A.SocketB.ServerSocketC.DatagramSocketD.DatagramPacket4.Socket编程中,close()方法关闭连接后,下列说法正确的是()A.仅关闭输入流B.仅关闭输出流C.同时关闭输入输出流D.不关闭任何流5.HTTP协议默认的端口号是(),HTTPS默认端口号是()A.80、443B.8080、443C.80、8080D.22、4436.下列不属于TCP三次握手作用的是()A.确认双方发送能力正常B.确认双方接收能力正常C.同步初始序列号D.快速断开连接7.JavaBIO网络模型的特点是()A.非阻塞、单线程处理多连接B.阻塞、一个连接一个线程C.非阻塞、多路复用D.阻塞、单线程处理所有连接8.DatagramPacket类的主要作用是()A.创建UDP服务端连接B.封装UDP发送/接收的数据包C.建立TCP连接D.实现网络流数据读写9.TCP四次挥手的核心目的是()A.快速建立连接B.保证双方数据完全传输完毕,优雅断开连接C.校验数据完整性D.同步网络端口10.下列关于Socket缓冲区的说法错误的是()A.Socket拥有独立的输入、输出缓冲区B.缓冲区满时,TCP写入数据会阻塞C.缓冲区数据会随连接关闭直接丢失D.数据读取不及时会堆积在输入缓冲区二、填空题(共5题)1.网络编程三要素:________、________、________。2.TCP是________连接协议,UDP是________连接协议。3.JavaNIO三大核心组件:________、________、________。4.端口号的取值范围是________,其中0-1023为________端口。三、简答题(共5题)1.简述TCP和UDP的核心区别,以及各自的适用场景。2.简述TCP三次握手和四次挥手的过程。4.Socket编程中为什么会出现粘包问题?如何解决?5.简述HTTP1.0、HTTP1.1、HTTP2.0的主要区别。四、编程题(共2题)1.编写JavaTCP通信代码,实现客户端向服务端发送一句消息,服务端接收并回复消息,完成单次通信。2.编写JavaUDP通信代码,实现客户端与服务端的简单数据交互。参考答案及详细解析一、单项选择题答案1.B解析:TCP是面向连接、可靠、基于字节流的传输层协议;UDP是无连接、不可靠的;HTTP是应用层协议,ICMP是网络层协议。2.B解析:UDP无需建立连接,直接发送数据包,不保证数据送达和顺序,省去握手确认机制,传输效率极高,适合实时性要求高的场景。3.B解析:ServerSocket是TCP服务端监听端口、等待客户端连接的核心类;Socket是TCP客户端类;DatagramSocket用于UDP编程。4.C解析:Socket的close()方法会同时关闭底层的输入流和输出流,释放端口和连接资源。5.A解析:HTTP默认80端口,HTTPS(加密HTTP)默认443端口,8080是Tomcat默认服务端口,不属于协议默认端口。6.D解析:三次握手用于建立可靠连接,校验双方收发能力、同步序列号;四次挥手用于断开连接。7.B解析:BIO(阻塞IO)是传统同步阻塞模型,服务端每接收一个客户端连接,就需要开启一个独立线程处理,连接未处理完毕会阻塞线程。8.B解析:UDP基于数据包传输,DatagramPacket专门用于封装要发送和接收的数据、目标地址、端口等信息。9.B解析:TCP是全双工通信,读写通道独立,四次挥手可以保证双方各自的数据都传输完成,再关闭对应通道,实现优雅断开,避免数据丢失。10.C解析:Socket关闭前,系统会优先发送缓冲区残留数据,不会直接丢失;其余选项均为Socket缓冲区的正确特性。二、填空题答案1.IP地址、端口号、传输协议2.面向、无3.Buffer(缓冲区)、Channel(通道)、Selector(选择器)4.0-65535、知名(系统)5.同步阻塞、同步非阻塞、异步非阻塞三、简答题详细答案1.TCP和UDP核心区别及适用场景核心区别:①连接特性:TCP面向连接,传输前需三次握手建立连接;UDP无连接,无需建立连接直接传输数据。②可靠性:TCP提供数据确认、重传、排序、校验机制,数据不丢失、不乱序;UDP无任何校验机制,可能丢包、乱序。③传输方式:TCP基于字节流,无数据边界;UDP基于数据包,有明确数据边界。④效率开销:TCP头部开销大、传输效率低;UDP头部极简、传输效率极高。适用场景:TCP:文件传输、网页访问、邮件、数据库连接等对数据可靠性要求极高的场景。UDP:视频直播、语音通话、游戏实时对战、广播消息等对实时性要求高、可容忍少量丢包的场景。2.TCP三次握手、四次挥手过程三次握手(建立连接):第一次握手:客户端向服务端发送SYN报文,请求建立连接,客户端进入同步等待状态。第二次握手:服务端接收SYN报文,回复SYN+ACK报文,确认客户端请求,同时向客户端发起连接请求,服务端进入同步接收状态。第三次握手:客户端接收服务端报文,回复ACK报文,告知服务端连接已就绪,双方连接建立成功,进入传输状态。四次挥手(断开连接):第一次挥手:主动关闭方发送FIN报文,告知对方不再发送数据,请求关闭写通道。第二次挥手:被动关闭方接收FIN报文,回复ACK报文,确认关闭请求,此时被动方仍可向主动方传输剩余数据。第三次挥手:被动方数据传输完毕后,发送FIN报文,告知主动方数据传输完成,请求关闭连接。第四次挥手:主动方接收FIN报文,回复ACK报文,等待一段时间后确认对方接收完毕,双方正式关闭连接。BIO(同步阻塞IO):优点:代码简单、易懂、开发成本低,适合少量并发连接场景。缺点:一个连接一个线程,并发量高时线程数量暴增,占用大量内存,线程切换开销大,并发性能极差。NIO(同步非阻塞IO):优点:基于多路复用器,单线程可管理大量连接,无需为每个连接创建独立线程,并发性能大幅提升,适合高并发服务场景。缺点:代码复杂度高,需要手动处理读写就绪事件,编程难度大。优点:完全异步,无需轮询监听事件,IO操作由系统完成后主动回调程序,性能最高。缺点:JDK支持不完善,操作系统兼容性差,实际项目中极少使用。4.Socket粘包问题原因及解决方案产生原因:TCP是字节流协议,无数据边界,操作系统会根据缓冲区大小、网络情况,将多次发送的小数据合并,或一次大数据拆分传输,导致接收方无法区分每条独立数据,出现粘包、拆包现象。解决方案:①固定长度:每条消息统一固定字节长度,接收方按长度读取数据。②分隔符:消息末尾添加自定义分隔符,接收方根据分隔符拆分消息。③长度头:消息头部携带消息体长度,接收方先读取长度,再读取对应长度的消息内容(企业最常用方案)。5.HTTP1.0/1.1/2.0核心区别HTTP1.0:短连接,每次请求都需要建立、断开一次TCP连接,无持久连接,请求效率低,不支持管道化。HTTP1.1:默认持久连接,一次TCP连接可多次请求响应;支持请求管道化、缓存优化、断点续传,解决了1.0的连接重复创建问题,但存在队头阻塞问题。HTTP2.0:基于HTTPS,支持二进制帧传输、多路复用,一个连接可并发处理多个请求,彻底解决队头阻塞;支持头部压缩、服务器主动推送,传输效率大幅提升。四、编程题完整代码答案1.TCP客户端服务端通信代码TCP服务端代码:java

importjava.io.BufferedReader;

importjava.io.IOException;

importjava.io.InputStreamReader;

importjava.io.OutputStreamWriter;

import.ServerSocket;

import.Socket;

/**

*TCP服务端

*/

publicclassTcpServer{

publicstaticvoidmain(String[]args){

ServerSocketserverSocket=null;

Socketsocket=null;

BufferedReaderbr=null;

OutputStreamWriterosw=null;

try{

//绑定8888端口,监听客户端连接

serverSocket=newServerSocket(8888);

System.out.println("TCP服务端已启动,等待客户端连接...");

//阻塞等待客户端连接

socket=serverSocket.accept();

System.out.println("客户端已连接");

//读取客户端消息

br=newBufferedReader(newInputStreamReader(socket.getInputStream()));

Stringmsg=br.readLine();

System.out.println("接收客户端消息:"+msg);

//向客户端回复消息

osw=newOutputStreamWriter(socket.getOutputStream());

osw.write("服务端已收到消息:"+msg+"\n");

osw.flush();

}catch(IOExceptione){

e.printStackTrace();

}finally{

//关闭资源

try{

if(osw!=null)osw.close();

if(br!=null)br.close();

if(socket!=null)socket.close();

if(serverSocket!=null)serverSocket.close();

}catch(IOExceptione){

e.printStackTrace();

}

}

}

}TCP客户端代码:java

importjava.io.BufferedReader;

importjava.io.IOException;

importjava.io.InputStreamReader;

importjava.io.OutputStreamWriter;

import.Socket;

/**

*TCP客户端

*/

publicclassTcpClient{

publicstaticvoidmain(String[]args){

Socketsocket=null;

OutputStreamWriterosw=null;

BufferedReaderbr=null;

try{

//连接本地8888端口服务端

socket=newSocket("localhost",8888);

//发送消息给服务端

osw=newOutputStreamWriter(socket.getOutputStream());

osw.write("HelloTCP网络编程\n");

osw.flush();

//读取服务端回复

br=newBufferedReader(newInputStreamReader(socket.getInputStream()));

Stringres=br.readLine();

System.out.println("接收服务端回复:"+res);

}catch(IOExceptione){

e.printStackTrace();

}finally{

//关闭资源

try{

if(br!=null)br.close();

if(osw!=null)osw.close();

if(socket!=null)socket.close();

}catch(IOExceptione){

e.printStackTrace();

}

}

}

}2.UDP客户端服务端通信代码UDP服务端代码:java

importjava.io.IOException;

import.DatagramPacket;

import.DatagramSocket;

/**

*UDP服务端

*/

publicclassUdpServer{

publicstaticvoidmain(String[]args){

DatagramSocketsocket=null;

try{

//绑定8889端口

socket=newDatagramSocket(8889);

System.out.println("UDP服务端已启动,等待接收数据...");

//创建字节数组接收数据

byte[]data=newbyte[1024];

DatagramPacketpacket=newDatagramPacket(data,data.length);

//阻塞接收数据包

socket.receive(packet);

//解析数据

Stringmsg=newString(packet.getData(),0,packet.getLength());

System.out.println("接收客户端消息:"+msg);

}catch(IOExceptione){

e.printStackTrace();

}finally{

if(socket!=null&&!socket.isClosed()){

socket.close();

}

}

}

}UDP客户端代码:java

importjava.io.IOException;

import.DatagramPacket;

import.DatagramSocket;

import.InetAddress;

/**

*UDP客户端

*/

publicclassUdpCl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论