版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java网络编程高频面试题及详细答案一、网络基础核心面试题1.说一说HTTP和HTTPS的区别HTTP是超文本传输协议,基于明文传输,端口默认80;HTTPS是HTTP+SSL/TLS,是加密安全的传输协议,端口默认443。核心区别有五点:1.安全性:HTTP明文传输,数据容易被窃听、篡改、劫持;HTTPS通过非对称加密握手、对称加密传输数据,可防窃听、防篡改、防劫持。2.端口不同:HTTP默认80,HTTPS默认443。3.证书要求:HTTPS需要CA机构颁发的数字证书,HTTP无需证书。4.性能:HTTPS需要握手加密、解密流程,相比HTTP会有轻微性能损耗,延迟略高。5.协议层级:HTTP属于应用层协议,HTTPS是在应用层与传输层之间增加了SSL/TLS安全层。2.TCP和UDP的核心区别TCP是面向连接的可靠传输协议,UDP是无连接的不可靠传输协议,具体区别如下:1.连接性:TCP需要三次握手建立连接、四次挥手断开连接;UDP无需建立连接,直接发包。2.可靠性:TCP保证数据不丢失、不重复、有序到达,有确认应答、重传机制、滑动窗口;UDP不保证可靠,可能丢包、乱序。3.控制机制:TCP拥塞控制、流量控制、超时重传;UDP无任何控制机制。4.开销与速度:TCP头部开销大,传输速度慢;UDP头部极小,传输延迟低、速度快。5.适用场景:TCP用于文件传输、网页、接口请求等对可靠性要求高的场景;UDP用于直播、语音通话、游戏对局等对实时性要求高、可少量丢包的场景。3.详细讲一下TCP三次握手、四次挥手三次握手(建立连接)核心目的:确认双方收发能力都正常第一次握手:客户端向服务端发送SYN报文,请求建立连接,客户端进入SYN_SENT状态。第二次握手:服务端收到SYN报文,回复SYN+ACK报文,确认客户端发送能力正常,同时向客户端发起连接请求,服务端进入SYN_RCVD状态。第三次握手:客户端收到SYN+ACK报文,发送ACK确认报文,确认服务端收发能力正常,客户端、服务端均进入ESTABLISHED连接状态,连接建立完成。四次挥手(断开连接)核心目的:TCP全双工通信,收发通道需单独关闭第三次挥手:被动方数据接收完毕,发送FIN报文,请求关闭自身发送通道,进入LAST_ACK状态。第四次挥手:主动方收到FIN,回复ACK确认,等待超时确保被动方收到报文后,进入CLOSED状态,连接彻底断开。4.为什么TCP是三次握手不是两次?两次握手无法解决失效连接报文问题。如果客户端发送的SYN报文因为网络延迟迟到,客户端超时重发SYN并成功建立连接、传输数据、断开连接。若采用两次握手,迟到的旧SYN报文到达服务端后,服务端会直接建立连接并占用资源,但客户端早已断开连接,不会响应服务端,造成服务端资源浪费。三次握手可以让客户端校验报文有效性,无效报文直接丢弃,避免无效连接占用服务端资源。5.为什么TCP挥手需要四次?TCP是全双工通信,读写通道相互独立,不能一次性关闭。当一方停止发送数据后,另一方可能还有剩余数据需要传输,所以只能先关闭单向的写通道,等另一方数据传输完毕后,再关闭反向通道,因此需要四次交互,无法合并步骤。二、JavaSocket编程面试题1.简述Java中BIO的Socket通信流程BIO是同步阻塞IO,是Java最基础的网络编程模型,服务端和客户端流程如下:服务端流程:1.创建ServerSocket,绑定指定端口,监听客户端连接;2.调用accept()方法阻塞等待客户端连接,无连接时一直阻塞;3.客户端连接成功,返回Socket对象,用于数据读写;4.通过Socket获取输入流、输出流,读取客户端数据并响应;5.通信结束,关闭流和Socket资源。客户端流程:1.创建Socket,指定服务端IP和端口,发起连接请求;2.连接成功后,获取输出流发送数据,输入流接收响应;3.数据交互完成,关闭资源。2.BIO的缺点是什么?为什么不适合高并发场景1.阻塞严重:accept()、read()、write()均为阻塞方法,单个线程只能处理一个连接;2.资源开销大:为支持多客户端,必须为每个连接单独开启一个线程,连接数多会导致线程暴涨,占用大量内存、CPU;3.线程切换频繁:大量线程会导致操作系统上下文切换频繁,系统吞吐量急剧下降;4.空闲连接浪费资源:大量客户端连接空闲时,对应线程依然被占用,无法处理新请求。因此BIO只适合连接数少、并发低的小型场景,不适合互联网高并发服务。3.Socket编程中常见的异常及原因1.ConnectException:Connectionrefused:服务端未启动、端口未监听、端口被占用或防火墙拦截,连接被拒绝。2.SocketTimeoutException:读写超时,网络延迟过高、对方未及时返回数据。3.IOException:Connectionreset:连接被对方强制关闭,对方程序崩溃、主动断开连接、网络中断。4.BindException:Addressalreadyinuse:端口被其他进程占用,或服务端重启后端口未释放。1.BIO(同步阻塞):线程阻塞等待连接和数据读写,一对一连接模型,代码简单,并发能力差。2.NIO(同步非阻塞):JDK1.4推出,基于缓冲区、通道、选择器实现,一个线程可管理多个连接,IO操作不阻塞,数据就绪后主动处理,高并发性能优异。2.详细讲解NIO的三大核心组件NIO核心由Buffer、Channel、Selector三部分组成,三者配合实现非阻塞多路复用。1.Buffer(缓冲区)数据读写的容器,所有数据必须通过缓冲区传输,底层是数组。核心属性:position(读写位置)、limit(限制位置)、capacity(容量)。常用缓冲区:ByteBuffer、CharBuffer、IntBuffer等,网络编程只用ByteBuffer。2.Channel(通道)双向数据传输通道,可读写数据,区别于BIO单向流。常用通道:FileChannel、SocketChannel、ServerSocketChannel。通道不存储数据,只负责传输,必须配合Buffer使用。3.Selector(选择器/多路复用器)NIO的核心,单个线程通过Selector监听多个Channel的IO事件(连接、读、写),通道无事件时线程不阻塞、不占用资源,事件就绪后再处理,实现单线程管理上万连接,是高并发的核心。3.NIO非阻塞的原理是什么NIO将Socket通道设置为非阻塞模式,线程不会等待连接和数据。所有通道注册到Selector,Selector会轮询监听所有注册通道的就绪事件。当通道没有任何IO事件时,线程不会阻塞等待,可执行其他任务;当有连接、读写事件就绪时,Selector会筛选出就绪的通道,交由线程处理数据。通过这种多路复用机制,摆脱了BIO一线程一连接的限制,极大提升并发承载能力。4.NIO的零拷贝原理传统BIO读写文件网络传输需要:磁盘文件→内核缓冲区→用户缓冲区→内核socket缓冲区→网卡,发生两次拷贝、多次上下文切换。NIO通过FileChannel的transferTo/transferFrom方法实现零拷贝,数据直接从磁盘文件拷贝到内核socket缓冲区,跳过用户缓冲区,减少数据拷贝次数和上下文切换,大幅提升大文件传输效率。这里的零拷贝并非完全无拷贝,而是无用户态到内核态的拷贝。四、TCP进阶与网络问题实战面试题1.什么是TCP粘包、拆包?产生原因及解决方案概念:TCP是流式协议,无数据包边界,操作系统会根据缓冲区大小、网络情况整合或拆分数据,导致接收方无法区分完整数据包。粘包:多条发送的数据被合并成一条接收。拆包:一条完整数据被拆分成多次接收。产生原因1.发送方TCP缓冲区未满,多次数据合并发送;2.接收方缓冲区已满,数据被拆分接收;3.网络传输的MTU限制,大数据包被底层拆分。解决方案(项目通用)1.固定长度报文:每条数据固定字节长度,不足补位,接收方按长度读取;2.分隔符收尾:每条数据末尾添加自定义分隔符,接收方按分隔符拆分数据包;3.报文头+报文体:最常用方案,报文头存储报文长度,接收方先读固定长度报文头,获取长度后读取对应长度报文体,精准拆分数据包(Netty默认方案)。2.TCP滑动窗口和流量控制、拥塞控制流量控制:解决发送方发送太快,接收方处理不过来的问题。通过滑动窗口机制,接收方每次ACK会携带自身剩余缓冲区大小,发送方根据窗口大小调整发送速率,避免接收方缓冲区溢出。拥塞控制:解决网络链路拥堵的问题。维护拥塞窗口,通过慢启动、拥塞避免、快重传、快恢复四个阶段,动态调整发送数据量,避免网络过载丢包。3.TCP超时重传机制发送方发送报文后会开启计时器,如果超时未收到接收方的ACK应答,会判定报文丢失或ACK丢失,自动重传该报文,保证数据可靠传输。超时时间并非固定值,会根据网络延迟动态调整,避免重传过早或过晚,平衡可靠性和传输效率。五、Netty高频面试题(Java网络进阶)1.为什么项目中不用原生NIO,而用Netty?原生JDKNIO存在大量底层问题,开发难度极高:1.原生NIO存在空轮询BUG,导致CPU100%占用;2.原生NIOAPI繁琐,需要手动处理缓冲区读写翻转、粘包拆包、异常处理、断线重连;3.原生NIO线程模型简陋,需要自己封装线程池、任务调度;4.无成熟的编解码、心跳检测、超时处理机制。Netty基于NIO封装,修复原生BUG,提供极简API、成熟的线程模型、内置编解码器、心跳检测、断线重连、流量控制,稳定性和性能远超原生NIO,是Java网络编程的行业标准。2.Netty的核心线程模型(Reactor主从多线程)Netty默认采用主从Reactor多线程模型:1.Boss线程组:负责监听端口、接收客户端连接,不处理业务读写,线程数默认1个;2.Worker线程组:负责处理已建立连接的IO读写、事件处理、编解码,线程数默认CPU核心数*2;3.业务线程池:复杂耗时业务脱离Worker线程,交给自定义业务线程池处理,避免阻塞IO线
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026安全员c证考试试题及答案
- 2026年部编版初中语文七年级上册第2单元文言文阅读同步练习题及答案
- 2026余压发电在工业节能领域的应用前景专题报告
- 2026人工智能在制造业中的应用探索及工业互联网发展研究
- 2026人工智能医疗应用场景解析及市场规模预测与创投热点追踪报告
- 2026中国远洋渔船专用高盐防腐调味品研发进展追踪
- 2026中国直播电商供应链重构主播生态与流量变现模式分析报告
- 2026中国文化创意产业发展趋势与投资机会评估
- 2026年江苏省译林版小学四年级英语下册第9单元词汇练习题及答案
- 2026年湘教版高二化学第6章化学反应同步练习题及答案
- 2026年三级公立医院绩效考核指标分析报告
- 物业服务履约质量评价方案
- 光明区2025广东深圳市光明区科技创新服务中心博士后招聘笔试历年参考题库典型考点附带答案详解
- 学礼仪懂尊重做文明小学生-小学主题班会课件
- 高级机工见习记录薄填写
- 中国创新药械多元支付白皮书2026
- 2025年医院普外科岗招聘笔试题目(附答案)
- 第四单元跨学科实践活动3:水质检测及净水器的制作课件2025-2026学年九年级化学人教版上册
- 学校后勤外包合同
- (广东二模)广东省2026年4月高三高考模拟测试(二)数学试卷(含标准答案及解析)
- 茅坝镇行政审批工作制度
评论
0/150
提交评论