【C++上岸】C++常见面试题目--网络篇(第二十四期)
C++面试必看:网络篇常见问题解析 👋
大家好!欢迎来到C++面试系列的网络篇第二十四期。我将带你逐一击破网络相关的常见面试题,助你轻松上岸!😊 网络知识是C++面试中的高频考点,掌握这些能让你在面试中脱颖而出。准备好了吗?Let’s go! 💪
文章目录
1. 什么是HTTP协议?
HTTP(HyperText Transfer Protocol)即超文本传输协议,它是Web应用中最基础的通信协议,用于在客户端(如浏览器)和服务器之间传输超文本数据(如HTML页面)。简单来说,HTTP就是Web世界的“快递员”,负责把请求和响应送达到位!📦
- 核心作用:支持客户端向服务器发送请求(如获取网页),服务器返回响应(如HTML内容)。
- 应用场景:几乎所有网站都基于HTTP,比如你访问百度时,浏览器就是用HTTP协议获取数据的。
2. HTTP协议有什么特点?
HTTP协议有几个关键特性,理解这些能帮你回答面试官时的深度问题:
- 无状态(Stateless):每个请求都是独立的,服务器不保存客户端状态。这意味着每次请求都得重新验证身份,就像每次见面都要重新自我介绍一样!🤔
- 基于请求-响应模型:客户端发起请求,服务器返回响应。例如,浏览器请求
GET /index.html,服务器返回200 OK和页面内容。 - 无连接(Connectionless):早期HTTP(如1.0)每次请求后关闭连接,效率低;但HTTP1.1改进为持久连接(后面会细说)。
- 灵活可扩展:支持各种数据类型(如文本、图片),通过Header字段自定义。
小贴士:面试中常考“无状态”的缺点——比如购物车功能需要Cookie或Session来维持状态,这时可以补充说明!💡
3. HTTPS建立连接过程是什么?
HTTPS(HTTP Secure)是HTTP的安全版,通过SSL/TLS协议加密数据。建立连接的过程叫“TLS握手”,一般分4步(俗称SSL四次握手),我来一步步拆解:
- 客户端Hello:客户端向服务器发送支持的加密套件列表和随机数。
- 服务器Hello:服务器选择加密套件,发送自己的证书(包含公钥)和另一个随机数。
- 密钥交换:客户端验证证书后,用公钥加密一个“预主密钥”并发送;服务器用私钥解密。
- 完成握手:双方用预主密钥和随机数生成会话密钥,之后所有通信都加密传输。
整个过程就像交换秘密暗号 🤫:客户端说“我能用AES”,服务器回“好,用AES,这是我的ID卡”,然后双方确认暗号后开始加密聊天。耗时约100-500ms,比HTTP慢一点,但安全第一!🔒
4. HTTP和HTTPS的区别是什么?HTTPS有什么优缺点?
区别:
- 安全性:HTTP是明文传输,数据容易被窃听(如密码泄露);HTTPS通过SSL/TLS加密,确保数据机密性和完整性。
- 端口:HTTP默认端口80,HTTPS默认443。
- 证书:HTTPS需要CA(证书颁发机构)签发的数字证书来验证服务器身份。
HTTPS优缺点:
- 优点:
- 安全!防窃听、防篡改,适合电商、银行等敏感场景。
- 提升SEO排名(搜索引擎优先推荐HTTPS站点)。
- 缺点:
- 性能开销:加密解密增加CPU负载,可能降低响应速度(优化后影响小)。
- 成本高:需要购买和维护SSL证书。
表情包时间:想象HTTP是裸奔 🏃♂️,HTTPS是穿防弹衣 🦸♂️——安全但有点笨重!面试时强调“安全优于性能”的理念,能加分哦~
5. HTTP返回码是什么?
HTTP返回码(状态码)是服务器响应请求时的3位数字代码,表示请求结果。常见的有5类:
- 1xx(信息性):如100 Continue(请求继续),临时状态。
- 2xx(成功):如200 OK(请求成功)、201 Created(资源已创建)。
- 3xx(重定向):如301 Moved Permanently(永久重定向)、304 Not Modified(资源未修改)。
- 4xx(客户端错误):如400 Bad Request(请求无效)、404 Not Found(资源不存在)。
- 5xx(服务器错误):如500 Internal Server Error(服务器内部错误)、503 Service Unavailable(服务不可用)。
实战例子:当浏览器显示404时,就是服务器告诉你“页面丢了” 😅。面试中,最好能举例说明,比如403 Forbidden表示无权限访问。
6. HTTP1.1和HTTP1.0的区别?
HTTP1.1是HTTP1.0的升级版,主要区别在性能和功能上:
- 持久连接(Persistent Connection):HTTP1.0每次请求后关闭TCP连接,效率低;HTTP1.1默认保持连接复用,减少握手开销(省时省资源!)。
- Host头字段:HTTP1.1必须包含Host头部,支持虚拟主机(一台服务器托管多个网站)。
- 管道化(Pipelining):HTTP1.1允许客户端发送多个请求而不用等响应,提升并发性(但易出队头阻塞问题)。
- 缓存机制增强:如ETag和Cache-Control头部,更精细控制缓存。
对比:HTTP1.0像单车道 🚗,每次只过一辆车;HTTP1.1像多车道 🚗🚗,车流更顺畅!面试时提到这些优化,能体现你的深度理解。
7. SSL四次握手的过程?
SSL四次握手(即TLS握手)是HTTPS建立安全连接的核心,前面简要提过,这里详细展开:
- Client Hello:客户端发送随机数、支持的加密算法列表(如TLS_AES_128_GCM_SHA256)。
- Server Hello:服务器回复随机数、选定的加密算法、数字证书(含公钥)。
- Client Key Exchange:客户端验证证书后,生成预主密钥(Pre-Master Secret),用服务器公钥加密发送;同时发送“Change Cipher Spec”信号。
- Server Finish:服务器用私钥解密预主密钥,生成会话密钥;发送“Change Cipher Spec”和“Finished”消息,确认加密开始。
全程图解:想象成两国大使交换密信 📜:客户端说“我用AES加密”,大使馆回“行,这是我的护照”,然后双方用密钥锁定通信。耗时短但安全,面试时画个流程图会更清晰!✍️
8. 跨域是什么?条件是什么?在header里需要加什么?有几种方案?
跨域(Cross-Origin) 指浏览器出于安全限制,阻止网页向不同源(Origin)的服务器发起请求。默认同源策略(Same-Origin Policy)要求协议、域名、端口三者一致。
- 跨域条件:当请求的URL与当前页面源不同时触发,比如页面在
http://a.com,请求http://b.com的数据。 - Header需要加什么:服务器响应头中需添加
Access-Control-Allow-Origin字段,指定允许的源(如*表示所有源,或http://a.com)。 - 解决方案:
- CORS(Cross-Origin Resource Sharing):最标准方案,服务器设置响应头(如
Access-Control-Allow-Origin)。 - JSONP(JSON with Padding):利用
<script>标签不受同源限制的特性,通过回调函数获取数据(只支持GET请求)。 - 代理服务器:客户端请求同源代理,代理转发到目标服务器(避开浏览器限制)。
- CORS(Cross-Origin Resource Sharing):最标准方案,服务器设置响应头(如
表情包提醒:跨域就像隔墙聊天 🧱—CORS是开个门 🚪,JSONP是丢纸条 📝!面试时,优先推荐CORS,因为它更安全灵活。
9. 负载均衡反向代理模式的优点、缺点?
负载均衡反向代理(如Nginx、HAProxy)是分布式系统中的关键组件,它将客户端请求分发到多个后端服务器。
- 优点:
- 高可用性:单台服务器故障时,代理自动切换流量,服务不中断(像备用发电机 🔋)。
- 负载均衡:平均分配请求,避免某服务器过载(提高性能和吞吐量)。
- 安全防护:隐藏后端服务器IP,提供DDoS防御和SSL终端。
- 缺点:
- 单点故障:代理本身出问题,整个系统瘫痪(需冗余部署)。
- 性能瓶颈:代理处理所有请求,可能成为性能瓶颈(需优化配置)。
- 配置复杂:维护路由规则和健康检查增加运维成本。
小贴士:在C++面试中,结合场景说——比如电商网站用Nginx处理百万并发,优点突出;但小项目可能觉得缺点太贵。💼
10. DNS的寻址过程?
DNS(Domain Name System)是将域名(如www.baidu.com)解析为IP地址的系统。寻址过程分层递归:
- 本地DNS查询:客户端先查本地缓存或Hosts文件;若无,向配置的DNS服务器(如ISP的DNS)请求。
- 递归查询:本地DNS服务器依次查询:
- 根域名服务器(如
.),获取顶级域(TLD)服务器地址(如.com)。 - TLD服务器返回权威域名服务器地址(如
baidu.com的NS记录)。 - 权威服务器返回目标IP(如
180.101.49.12)。
- 根域名服务器(如
- 响应客户端:本地DNS缓存IP并返回给客户端,完成解析。
全程耗时:通常10-200ms,像快递追踪 🚚:本地站→总站→分站→取件!面试时,强调DNS的层次化设计能高效处理全球请求。
结语 🎉
恭喜你!一口气啃完了C++网络篇的核心面试题。记住,网络知识重在理解原理而非死记——面试时结合实例讲解(如用DNS解释网站访问过程),会让面试官眼前一亮 ✨。如果觉得有帮助,欢迎分享给更多小伙伴!有疑问随时留言,我会尽力解答。加油,C++上岸之路,你一定能行!💪
表情包彩蛋:学习网络协议就像解谜 🧩——难但超有成就感!下期见~ 👋
版权声明:本文为原创内容,转载请注明出处。内容基于公开知识整理,确保真实可靠。面试备战时,多动手写代码实践(如用C++模拟HTTP请求),效果更佳!💻
更多推荐
所有评论(0)