Java网络编程面试题及答案.docx

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

Java网络编程面试题及答案

1.说说TCP和UDP的区别?在Java中分别用什么类实现?

答案:

核心区别体现在可靠性和使用场景:

TCP:面向连接(三次握手)、可靠传输(重传+确认)、字节流、有拥塞控制,适合对数据完整性要求高的场景(如文件传输、HTTP请求);

UDP:无连接、不可靠(丢包不重传)、datagram(数据报)、速度快,适合实时性优先的场景(如即时通讯心跳包、视频流)。

Java实现类:

TCP:.Socket(客户端)、.ServerSocket(服务端);

UDP:.DatagramSocket(收发数据)、.DatagramPacket(封装数据报)。

2.用Java写TCP客户端和服务端的核心流程是什么?实际开发中会遇到什么问题?

答案:

核心流程(BIO模型):

服务端:

创建ServerSocket绑定端口(如newServerSocket(8080));

调用accept()阻塞等待客户端连接,返回Socket;

通过Socket的getInputStream()/getOutputStream()读写数据;

处理完后关闭流和Socket。

客户端:

创建Socket连接服务端(如newSocket(,8080));

同上通过流读写数据;

关闭资源。

实际问题:

粘包/拆包:TCP是字节流,多个数据包可能合并(粘包)或拆分(拆包)。解决方案:

定长协议(如每个包固定1024字节,不足补0);

分隔符(如用\n分割,读取时直到遇到分隔符);

协议头+长度(如前4字节存数据长度,读取时先读长度再读对应字节)。

线程阻塞:BIO一个连接占一个线程,高并发时线程耗尽,需改用NIO或Netty。

3.BIO、NIO、AIO的区别?为什么Netty比JDK原生NIO好用?

答案:

三者核心区别(基于IO模型):

模型

阻塞性

线程模型

适用场景

BIO

同步阻塞

1连接1线程

低并发(如内部管理系统)

NIO

同步非阻塞

1线程处理多连接(Selector)

高并发(如网关、服务端)

AIO

异步非阻塞

回调通知(完成后触发)

高并发且需低延迟(如金融交易,Java中用得少,Linux下依赖epoll)

Netty优势:

解决原生NIO痛点:

避免Selector空轮询bug(JDK1.6前存在,Netty已修复);

简化缓冲区操作(原生ByteBuffer需手动flip切换读写,NettyByteBuf自动扩容+读写分离);

开箱即用功能:

自带粘包拆包解码器(如LengthFieldBasedFrameDecoder);

支持SSL、HTTP、WebSocket等协议;

线程模型优化(主从Reactor,避免单线程瓶颈)。

4.Netty的核心组件有哪些?它的线程模型是怎样的?

答案:

核心组件:

EventLoopGroup:线程池,管理EventLoop(每个EventLoop是单线程,处理多个Channel的IO事件);

通常分两组:BossGroup(接受客户端连接,只处理Accept事件)、WorkerGroup(处理连接的读写事件);

Channel:网络连接的抽象(如NioSocketChannel对应TCP客户端连接);

ChannelPipeline:责任链,存储ChannelHandler(处理IO事件,如解码、业务逻辑);

ChannelHandler:实际处理逻辑的组件(如SimpleChannelInboundHandler处理读事件);

Bootstrap:启动辅助类(客户端用Bootstrap,服务端用ServerBootstrap)。

线程模型(主从Reactor):

BossGroup的EventLoop监听端口,收到Accept事件后,创建NioSocketChannel;

将NioSocketChannel注册到WorkerGroup的某个EventLoop(轮询分配,避免单线程过载);

后续该连接的所有IO事件(读/写)都由同一个EventLoop处理(线程安全,无需加锁)。

5.实际项目中,如何用Netty实现一个高并发的TCP服务端?需要注意哪些优化点?

答案:

核心实现步骤:

初始化EventLoopGroup:

BossGroup线程数:1(默认,因Accept事件少);

WorkerGroup线程数:默认CPU核心数×2(避免线程切换过多);

配置ServerBootstrap:

指定channel(NioServerSocketChannel.class);

文档评论(0)

151****9429 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档