- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
网络编程面试题及答案(实战版)
一、基础概念题(共5题)
问题:TCP和UDP的核心区别是什么?实际开发中如何选择?
答案:核心区别体现在可靠性、连接性、传输效率三方面。TCP是面向连接的可靠传输,通过三次握手建立连接、四次挥手断开,支持重传、流量控制、拥塞控制,适合对数据完整性要求高的场景(如文件传输、支付接口);UDP是无连接的不可靠传输,不保证数据到达顺序和完整性,但延迟低、开销小,适合实时性要求高的场景(如直播、游戏语音、物联网数据上报)。实际选择时,先判断“是否能接受数据丢失”,再考虑延迟需求——比如即时通讯的消息收发用TCP,而语音通话用UDP配合自定义重传机制。
问题:什么是粘包/拆包?TCP为什么会出现这种情况?
答案:粘包是指多个发送方的数据包被接收方合并成一个包接收;拆包是指一个大数据包被拆分成多个小包接收。TCP出现这种情况的核心原因是“面向字节流”的特性:TCP没有数据包边界,只负责按序传输字节流,且会使用滑动窗口进行批量发送、Nagle算法合并小数据包,再加上底层链路MTU限制(默认1500字节),超过MTU的数据会被IP层分片,最终导致接收方无法直接区分数据包边界。
问题:HTTP和HTTPS的区别,HTTPS的加密过程是怎样的?
答案:HTTP是明文传输,端口80,无加密无身份验证,易被窃听和篡改;HTTPS是HTTP基于TLS/SSL的加密版本,端口443,具备加密、身份验证、数据完整性校验三大特性。HTTPS加密过程(TLS1.3简化版):①客户端发送支持的加密套件和随机数;②服务器返回证书(含公钥)、选择的加密套件和随机数;③客户端验证证书合法性(通过CA根证书链),用服务器公钥加密“预主密钥”发送给服务器;④双方用各自的随机数和预主密钥生成“会话密钥”;⑤后续所有通信都用会话密钥进行对称加密(如AES),同时用HMAC校验数据完整性。
问题:Socket编程中,accept()、connect()、listen()三个函数的作用和调用顺序?
答案:调用顺序分服务端和客户端:①服务端:先创建Socket(socket())→绑定端口(bind())→监听连接(listen(),参数backlog表示半连接队列大小)→阻塞等待客户端连接(accept(),返回新的Socket用于与该客户端通信);②客户端:创建Socket(socket())→发起连接请求(connect(),向服务端IP+端口发送连接请求,触发三次握手)。核心逻辑:listen()是服务端“打开监听状态”,connect()是客户端“发起三次握手”,accept()是服务端“确认三次握手完成,建立连接”。
问题:什么是IO多路复用?select、poll、epoll的区别?
答案:IO多路复用是指一个进程/线程可以同时监控多个文件描述符(Socket本质是文件描述符),当某个文件描述符就绪(可读/可写/异常)时,通知应用程序处理,避免阻塞在单个IO操作上,提高并发效率。三者区别:
select:支持的文件描述符数量有限(默认1024),采用轮询遍历所有监控的fd,效率随fd数量增加而下降,需要手动重置监控集合;
poll:解决了select的fd数量限制,采用动态数组存储fd,但仍需轮询遍历,效率问题未根本解决;
epoll:Linux特有,基于事件驱动机制,通过红黑树存储监控的fd,就绪fd会被加入就绪链表,应用程序直接处理就绪链表即可,无需轮询,支持水平触发(LT)和边缘触发(ET),高并发场景下性能最优(如Nginx底层用epoll)。
二、核心技术题(共4题)
问题:如何实现一个简单的TCP服务器(伪代码或核心步骤)?
答案:以C语言风格伪代码为例,核心步骤:
//1.创建TCPSocket(IPv4,字节流)
intlisten_fd=socket(AF_INET,SOCK_STREAM,0);
//2.设置端口复用(避免端口占用问题)
intreuse=1;
setsockopt(listen_fd,SOL_SOCKET,SO_REUSEADDR,reuse,sizeof(reuse));
//3.绑定IP和端口
structsockaddr_inserver_addr;
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=INADDR_AN
原创力文档


文档评论(0)