当前位置: 首页 > news >正文

2025前端面试热门题目——计算机网络篇

计算机网络篇——面试

1. 到底什么是 TCP 连接?

TCP 连接的定义

TCP(传输控制协议)是一个面向连接的传输层协议。TCP 连接是通过 三次握手 确立的可靠数据通信链路,保证了在不可靠网络(如互联网)上的数据传输的准确性、有序性和完整性。

TCP 连接的特性
  1. 面向连接: 通信前建立连接(三次握手),通信结束释放连接(四次挥手)。
  2. 可靠传输: 提供数据分段、确认(ACK)、重传机制,确保数据不丢失、不重复。
  3. 有序传输: 数据按序号重组,确保顺序。
  4. 全双工: 支持双向同时通信。
  5. 流量控制与拥塞控制: 防止发送过快或网络拥堵。

2. HTTP 1.0 和 HTTP 2.0 有什么区别?

特性HTTP 1.0HTTP 2.0
连接复用不支持,每次请求需建立新连接(无连接复用)。支持多路复用,一个 TCP 连接可发送多个请求。
传输格式基于纯文本。基于二进制帧,效率更高。
头部压缩不支持,头部信息冗余较大。支持 HPACK 算法压缩,减少网络传输量。
服务器推送不支持。支持服务端主动推送资源(Server Push)。
队头阻塞存在,阻塞一个请求会影响整个连接性能。解决了应用层的队头阻塞问题(但仍有 TCP 层问题)。

3. HTTP 2.0 和 HTTP 3.0 有什么区别?

特性HTTP 2.0HTTP 3.0
底层协议基于 TCP 协议。基于 QUIC 协议(UDP)。
连接建立需要 TCP 三次握手+TLS 握手,延迟较高。支持 0-RTT 快速握手,大幅降低延迟。
队头阻塞存在 TCP 队头阻塞问题。无队头阻塞(QUIC 的流独立)。
加密传输通过 TLS 实现加密。内置加密,数据始终安全传输。
部署需要依赖操作系统的 TCP 协议栈支持。基于用户态协议,灵活易更新。

4. HTTP 和 HTTPS 有什么区别?

特性HTTPHTTPS
安全性明文传输,容易被窃听或篡改。数据加密传输,防止窃听和篡改。
协议基于 HTTP 协议。HTTP+SSL/TLS 实现加密。
端口默认使用端口 80。默认使用端口 443。
性能无需加密计算,性能略高。数据加密解密需额外计算,性能略低。
证书需求无需证书。需要申请 SSL 证书,成本较高。

5. TCP 是用来解决什么问题?

TCP 的主要问题解决:
  1. 可靠传输: 确保数据包正确、无丢失地到达目标。
    • 解决:序列号、确认机制、超时重传。
  2. 顺序传输: 确保数据包按发送顺序到达。
    • 解决:序列号与接收端排序机制。
  3. 流量控制: 避免发送端数据过快,导致接收端处理不过来。
    • 解决:滑动窗口协议。
  4. 拥塞控制: 避免网络拥堵,降低整体传输性能。
    • 解决:慢启动、拥塞避免算法。

6. TCP 和 UDP 有什么区别?

特性TCPUDP
连接方式面向连接(需三次握手)。无连接,直接发送。
可靠性可靠传输,有确认和重传机制。不可靠传输,无确认机制。
数据顺序有序传输,接收方数据按序排列。无序传输,数据可能乱序。
开销开销较大,需要维护连接状态和控制信息。开销较小,无需连接管理。
速度速度较慢,但稳定。速度快,但可能丢包。
适用场景文件传输、Web 浏览、邮件等需要可靠性的场景。视频直播、在线游戏、DNS 查询等需要低延迟的场景。

7. TCP 的粘包和拆包能说说吗?

粘包和拆包的定义:
  • 粘包: 多个小数据包被合并为一个包,接收端无法区分数据边界。
  • 拆包: 一个大数据包被拆分为多个小包传输。
产生原因:
  1. 粘包:

    • 发送端将多个小数据包合并为一个大数据包(节约资源)。
    • TCP 流是无边界的,接收端无法判断每个数据包的分界点。
  2. 拆包:

    • 单个数据包大小超过了 TCP 最大传输单元(MTU)。
解决方法:
  1. 固定长度协议:

    • 每个数据包规定固定长度,接收端按长度解析。
  2. 分隔符协议:

    • 使用特定分隔符(如 \n\r\n)标记数据边界。
  3. 长度前缀协议:

    • 在数据包前附加长度信息,接收端根据长度解析。
示意图:
  • 粘包:
    发送端:包1[Hello] + 包2[World] => 合并为 [HelloWorld]
    接收端:无法区分 Hello 和 World。
    
  • 拆包:
    发送端:包 [LargeData]
    接收端:分为 [Large] 和 [Data]
    
代码举例:
# 粘包问题示例:发送两条消息,但接收端读取到的是拼接后的数据
client.send("Hello".encode())
client.send("World".encode())# 接收端可能收到:HelloWorld

1. 说说 TCP 的三次握手?

TCP 的三次握手是建立连接的过程,用于确保通信双方都准备好数据传输并确认网络稳定。

三次握手步骤:
  1. 第一次握手(SYN):
    客户端发送一个带 SYN(同步)标志的数据包,表示请求建立连接,同时指明自己的初始序列号 (Seq = x)。

  2. 第二次握手(SYN-ACK):
    服务器收到客户端的 SYN 后,发送一个带 SYN 和 ACK 标志的数据包,表示同意连接,并告知自己的初始序列号 (Seq = y) 和确认号 (Ack = x+1)。

  3. 第三次握手(ACK):
    客户端收到 SYN-ACK 后,发送一个带 ACK 标志的数据包,确认号 (Ack = y+1),表示握手完成,连接建立。

示意图:
客户端                服务端|---SYN(x)--->||<--SYN-ACK(y)-||---ACK(x+1)--->|
连接建立成功

2. 说说 TCP 的四次挥手?

TCP 的四次挥手是断开连接的过程,用于保证双方都可以正常关闭通信。

四次挥手步骤:
  1. 第一次挥手(FIN):
    客户端发送一个带 FIN 标志的数据包,表示数据发送完毕,请求关闭连接。

  2. 第二次挥手(ACK):
    服务器收到 FIN 后,发送 ACK 确认,表示同意关闭连接,但可能还有未处理完的数据。

  3. 第三次挥手(FIN):
    服务器处理完数据后,发送 FIN 请求,表示可以关闭连接。

  4. 第四次挥手(ACK):
    客户端收到 FIN 后,发送 ACK 确认,并进入 TIME_WAIT 状态,等待一段时间以确保服务器收到 ACK。

示意图:
客户端                服务端|---FIN--->||<---ACK---||<---FIN---||---ACK--->|
连接断开成功

3. 为什么 TCP 挥手需要有 TIME_WAIT 状态?

TIME_WAIT 的作用:
  1. 确保数据的可靠性:

    • 确保服务器收到客户端的最后一个 ACK,如果服务器未收到,会重新发送 FIN。
  2. 避免端口重用:

    • 等待旧连接的残留数据清理完毕,避免新连接受到干扰。
TIME_WAIT 的持续时间:
  • 通常为 2 × 最大报文段寿命(2×MSL),约 60~240 秒。

4. TCP 超时重传机制是为了解决什么问题?

超时重传机制的目的:

确保数据可靠传输,即使由于网络丢包、拥塞等原因导致数据包未被接收。

工作流程:
  1. 发送方发送数据包并启动定时器。
  2. 若在超时时间内未收到确认(ACK),则重新发送数据包。
  3. 若多次超时仍无响应,则认为连接中断。
关键参数:
  • RTT(Round Trip Time): 确认包的往返时间。
  • RTO(Retransmission Timeout): 超时时间动态调整,通常为 RTT 的倍数。

5. TCP 滑动窗口的作用是什么?

滑动窗口的作用:

控制数据的流量,防止发送方发送过快导致接收方处理不过来。

特点:
  1. 动态调整窗口大小:
    • 窗口大小表示发送方可连续发送的最大数据量,无需逐一等待确认。
  2. 提高传输效率:
    • 通过批量发送多个数据包,减少等待时间。
示意图:

滑动窗口机制:

窗口大小 = 4
发送方: [1] [2] [3] [4] | [5] [6]
接收方: ACK [1] => 滑动窗口更新 => [5] 可发送

6. TCP/IP 四层模型是什么?

TCP/IP 模型层次:
  1. 应用层:
    提供用户直接使用的网络服务(如 HTTP、DNS、SMTP)。

  2. 传输层:
    提供可靠或不可靠的端到端通信(如 TCP、UDP)。

  3. 网络层:
    确定路由并传输数据包(如 IP 协议)。

  4. 网络接口层:
    定义数据在物理网络上的传输方式(如 Ethernet)。


7. OSI 七层模型是什么?

层次功能描述示例协议
应用层为用户提供网络服务接口。HTTP、FTP、SMTP
表示层数据格式转换和加密解密。SSL、TLS
会话层建立、管理和终止会话。NetBIOS
传输层提供可靠传输或无连接服务。TCP、UDP
网络层选择路由并传输数据包。IP、ICMP、ARP
数据链路层确保数据在同一网络中的节点间可靠传输。Ethernet、PPP
物理层负责硬件设备间的数据传输。光纤、电缆等传输介质。

8. Cookie、Session、Token 之间有什么区别?

特性CookieSessionToken
存储位置客户端浏览器。服务器端。客户端,通常结合 Authorization 头传输。
安全性较低,易被篡改或劫持。较高,敏感数据存储在服务器。高,通过签名防篡改。
生命周期有效期受限于设置的失效时间。随 Session 存续,通常依赖 Cookie。有效期受限于令牌的过期时间。
适用场景简单状态管理(如购物车)。用户认证、敏感数据操作。跨域认证、分布式系统。

9. 如何解决页面请求接口大规模并发问题?

解决思路:
  1. 前端优化:

    • 合并请求:减少接口调用次数。
    • 缓存策略:使用浏览器缓存或 CDN。
    • 限流:对请求进行排队或批量处理。
  2. 服务端优化:

    • 负载均衡: 使用 Nginx 或 LVS 分担流量。
    • 分布式架构: 数据库、缓存服务(如 Redis)分片部署。
    • 数据库优化: 建立索引、读写分离。
  3. 缓存机制:

    • 使用 CDN 分担流量压力。
    • 热点数据缓存到 Redis 或 Memcached。
  4. 消息队列:

    • 使用 RabbitMQ、Kafka 等,将请求异步化,平滑高峰流量。
  5. 监控与扩展:

    • 监控系统性能,动态扩展服务器。

相关文章:

2025前端面试热门题目——计算机网络篇

计算机网络篇——面试 1. 到底什么是 TCP 连接? TCP 连接的定义 TCP&#xff08;传输控制协议&#xff09;是一个面向连接的传输层协议。TCP 连接是通过 三次握手 确立的可靠数据通信链路&#xff0c;保证了在不可靠网络&#xff08;如互联网&#xff09;上的数据传输的准确…...

LEAST-TO-MOST PROMPTING ENABLES COMPLEX REASONING IN LARGE LANGUAGE MODELS---正文

题目 最少到最多的提示使大型语言模型能够进行复杂的推理 论文地址&#xff1a;https://arxiv.org/abs/2205.10625 摘要 思路链提示在各种自然语言推理任务中表现出色。然而&#xff0c;它在需要解决比提示中显示的示例更难的问题的任务上表现不佳。为了克服这种由易到难的概括…...

Java开发经验——日志治理经验

摘要 本文主要介绍了Java开发中的日志治理经验&#xff0c;包括系统异常日志、接口摘要日志、详细日志和业务摘要日志的定义和目的&#xff0c;以及错误码规范和异常处理规范。强调了日志治理的重要性和如何通过规范化错误码和日志格式来提高系统可观测性和问题排查效率。 1. …...

使用复数类在C#中轻松绘制曼德布洛集分形

示例在 C# 中绘制曼德布洛特集分形解释了如何通过迭代以下方程来绘制曼德布洛特集&#xff1a; 其中 Z(n) 和 C 是复数。程序迭代此方程&#xff0c;直到 Z(n) 的大小至少为 2 或程序执行最大迭代次数。 该示例在单独的变量中跟踪数字的实部和虚部。此示例使用Complex类来更轻松…...

VSCode 启用免费 Copilot

升级VSCode到 1.96版本&#xff0c;就可以使用每个月2000次免费额度了&#xff0c;按照工作日每天近80次免费额度&#xff0c;满足基本需求。前两天一直比较繁忙&#xff0c;今天周六有时间正好体验一下。 引导插件安装GitHub Copilot - Visual Studio Marketplace Extension f…...

常见问题整理

DevOps 和 CICD DevOps 全称Development & Operation 一种实现开发和运维一体化的协同模式&#xff0c;提供快速交付应用和服务的能力 用于协作&#xff1a;开发&#xff0c;部署&#xff0c;质量测试 整体生命周期工作内容&#xff0c;最终实现持续继承&#xff0c;持续部…...

使用Vue创建前后端分离项目的过程(前端部分)

前端使用Vue.js作为前端开发框架&#xff0c;使用Vue CLI3脚手架搭建项目&#xff0c;使用axios作为HTTP库与后端API交互&#xff0c;使用Vue-router实现前端路由的定义、跳转以及参数的传递等&#xff0c;使用vuex进行数据状态管理&#xff0c;后端使用Node.jsexpress&#xf…...

【Springboot知识】Redis基础-springboot集成redis相关配置

文章目录 1. 添加依赖2. 配置Redis连接3. 配置RedisTemplate&#xff08;可选&#xff09;4. 使用RedisTemplate或StringRedisTemplate5. 测试和验证 集群配置在application.properties中配置在application.yml中配置 主从配置1. 配置Redis服务器使用配置文件使用命令行 2. 配置…...

网络安全概论——身份认证

一、身份证明 身份证明可分为以下两大类 身份验证——“你是否是你所声称的你&#xff1f;”身份识别——“我是否知道你是谁&#xff1f;” 身份证明系统设计的三要素&#xff1a; 安全设备的系统强度用户的可接受性系统的成本 实现身份证明的基本途径 所知&#xff1a;个…...

OpenHarmony-4.HDI 框架

HDI 框架 1.HDI介绍 HDI&#xff08;Hardware Device Interface&#xff0c;硬件设备接口&#xff09;是HDF驱动框架为开发者提供的硬件规范化描述性接口&#xff0c;位于基础系统服务层和设备驱动层之间&#xff0c;是连通驱动程序和系统服务进行数据流通的桥梁&#xff0c;是…...

leecode494.目标和

这道题目第一眼感觉就不像是动态规划&#xff0c;可以看出来是回溯问题&#xff0c;但是暴力回溯超时&#xff0c;想要用动态规划得进行一点数学转换 class Solution { public:int findTargetSumWays(vector<int>& nums, int target) {int nnums.size(),bagWeight0,s…...

在Spring中application 的配置属性(详细)

application 的配置属性。 这些属性是否生效取决于对应的组件是否声明为 Spring 应用程序上下文里的 Bean &#xff08;基本是自动配置 的&#xff09;&#xff0c;为一个不生效的组件设置属性是没有用的。 multipart multipart.enabled 开启上传支持&#xff08;默认&a…...

jvm符号引用和直接引用

在解析阶段中,符号引用和直接引用是Java类加载和内存管理中的重要概念,它们之间存在显著的区别。以下是对这两个概念的详细解析: 一、定义与特性 符号引用(Symbolic Reference) 定义:符号引用是编译器生成的用于表示类、方法、字段等的引用方式。特性: 独立性:符号引用…...

一文流:JVM精讲(多图提醒⚠️)

一文流系列是作者苦于技术知识学了-忘了,背了-忘了的苦恼,决心把技术知识的要点一笔笔✍️出来,一图图画出来,一句句讲出来,以求刻在🧠里。 该系列文章会把核心要点提炼出来,以求掌握精髓,至于其他细节,写在文章里,留待后续回忆。 目前进度请查看: :::info https:/…...

python 分段拟合笔记

效果图: 源代码: import numpy as np import cv2 import matplotlib.pyplot as plt from numpy.polynomial.polynomial import Polynomialdef nihe(x_points,y_points,p_id):# 按照 p_id 将 points 分成两组group_0_x = []group_0_y = []group_1_x = []group_1_y = []for i, …...

Mysql索引类型总结

按照数据结构维度划分&#xff1a; BTree 索引&#xff1a;MySQL 里默认和最常用的索引类型。只有叶子节点存储 value&#xff0c;非叶子节点只有指针和 key。存储引擎 MyISAM 和 InnoDB 实现 BTree 索引都是使用 BTree&#xff0c;但二者实现方式不一样&#xff08;前面已经介…...

数据结构——队列的模拟实现

大家好&#xff0c;上一篇博客我带领大家进行了数据结构当中的栈的模拟实现 今天我将带领大家实现一个新的数据结构————队列 一&#xff1a;队列简介 首先来认识一下队列&#xff1a; 队列就像我们上学时的排队一样&#xff0c;有一个队头也有一个队尾。 有人入队的话就…...

在window环境下安装openssl生成钥私、证书和签名,nodejs利用express实现ssl的https访问和测试

在生成我们自己的 SSL 证书之前&#xff0c;让我们创建一个简单的 Express应用程序。 要创建一个新的 Express 项目&#xff0c;让我们创建一个名为node-ssl -server 的目录&#xff0c;用终端cmd中进入node-ssl-server目录。 cd node-ssl-server 然后初始化一个新的 npm 项目…...

Redis 最佳实践

这是以前写下来的文章&#xff0c;发出来备份一下 Redis 在企业中的最佳实践可以帮助提高性能、可用性和数据管理效率。以下是一些推荐的做法&#xff1a; 选择合适的数据结构&#xff1a; 根据需求选择适当的 Redis 数据结构&#xff08;如 Strings、Lists、Sets、Hashes、So…...

网站灰度发布?Tomcat的8005、8009、8080三个端口的作用什么是CDNLVS、Nginx和Haproxy的优缺点服务器无法开机时

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c; 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...