(面试)TCP、UDP协议
TCP(传输控制协议)和UDP(用户数据报协议)是互联网核心的传输层协议,负责应用程序之间的数据传输。它们在设计目标、特性和适用场景上有显著差异:
- TCP:面向连接,可靠的,速度慢、效率低,适用于需要传输可靠的数据时使用。
- UDP:无连接,不可靠,速度快、效率高,适用于高效传输忽略可靠性时使用
1. TCP(Transmission Control Protocol)
-
特点:
- 面向连接:通信前需通过“三次握手”建立连接,结束后通过“四次挥手”断开连接。
- 可靠传输:通过确认应答(ACK)、超时重传、数据排序等机制确保数据不丢失、不重复、按序到达。
- 流量控制:通过滑动窗口机制动态调整发送速率,避免接收方缓冲区溢出。
- 拥塞控制:通过慢启动、拥塞避免等算法减少网络拥塞。
- 全双工通信:支持双向数据流。
-
头部开销:较大(通常20字节,可扩展至60字节),包含序列号、确认号、控制标志等字段。
-
适用场景:需要高可靠性的应用,如网页浏览(HTTP/HTTPS)、文件传输(FTP)、电子邮件(SMTP)等。
2. UDP(User Datagram Protocol)
-
特点:
- 无连接:无需建立连接,直接发送数据包。
- 不可靠传输:不保证数据到达、不保证顺序,无重传机制。
- 轻量高效:头部仅8字节(含源/目标端口、长度、校验和),无复杂控制机制。
- 支持广播/多播:可向多个目标同时发送数据。
- 低延迟:无需等待确认或重传,适合实时应用。
-
适用场景:对实时性要求高、可容忍少量丢失的应用,如视频会议(Zoom)、在线游戏、DNS查询、VoIP(如Skype)、物联网传感器数据等。
TCP三次握手与四次挥手全指南
三次握手确保客户端与服务器收发能力正常,四次挥手处理双向连接释放。
图中字符详解:
SYN:代表连接请求或接收的报文段。
seq:指发送的第一个字节的序号。
ACK:确认报文段,用于回应SYN。
ack:确认号,表示希望收到的下一个数据的第一个字节的序号。
在TCP协议中,主动发起连接请求的一方被称为客户端,而被动等待连接的一方则被称为服务端。无论是客户端还是服务端,一旦TCP连接成功建立,双方均可进行数据的发送与接收。
连接建立之初,服务器和客户端都处于CLOSED状态。在通信正式开始前,双方需要分别创建自己的传输控制块(TCB)。服务器完成TCB创建后,会进入LISTEN状态,随时准备接收客户端发来的连接请求。
1、第一次握手:
客户端向服务端发送一个SYN报文(SYN=1),并指明客户端的初始化序列号ISN(x),即图中的seq=x,它表示本报文段所发送的数据的第一个字节的序号。在发送SYN报文后,客户端进入SYN_SENT状态,意味着它正在等待服务端的连接确认。
SYN_SENT状态解释:当客户端发送连接请求后,它进入SYN_SENT状态,等待服务端的响应。在这个状态下,客户端准备好了接受服务端的连接确认。
TCP协议规定:SYN=1的报文段是用于建立连接的请求,它不携带任何数据,但会消耗一个序号。这是TCP协议确保连接建立过程中的有序性和可靠性的一种方式。
2、第二次握手:
服务器在接收到客户端的SYN报文后,会以SYN报文作为回应(SYN=1),并赋予自己独特的初始化序列号ISN(y),即图中的seq=y。同时,服务器将客户端的ISN+1设置为确认号ack的值,以此确认已收到客户端的SYN报文,并期待接收到的下一个数据报的起始序号为x+1。在此之后,服务器会进入SYN-RCVD状态,等待对连接请求的进一步确认。
SYN-RCVD状态解析:当服务器在收到并发送连接请求后,会进入SYN-RCVD状态,此时它正在等待对初始连接请求的确认。在这个状态下,服务器已经准备好接受来自客户端的进一步通信。
TCP协议规定:SYN=1且ACK=1的报文段是用于确认连接的应答,它同样不携带任何数据,但通过确认号的使用,确保了连接建立过程中的有序性和可靠性。
3、第三次握手:
在收到服务器发送的SYN报文后,客户端会回应一个ACK报文。这个ACK报文将服务器的ISN+1作为ack的值,表明客户端已经收到了服务器的SYN报文,并期待接收到的下一个数据报的起始序号为y+1。同时,客户端将自己的序列号seq设置为x+1,即初始序列号seq=x增加1。完成这些操作后,客户端进入ESTABLISHED状态,表示连接已成功建立。服务器在收到这个ACK报文后,也会转入ESTABLISHED状态,此时双方连接的建立工作全部完成。
ESTABLISHED状态解释:当一个TCP连接进入ESTABLISHED状态时,它意味着连接已经打开,数据可以开始在双方之间传送。
四次挥手连接释放:
TCP连接的终止需要经过四次包的交换,因此被称为四次挥手。在这四次交换中,客户端或服务器都可以主动发起连接的释放动作。值得注意的是,TCP连接是双向的,因此四次挥手中,前两次主要用于断开一个方向的连接,后两次则用于断开另一方向的连接。
1、第一次挥手
客户端首先发送一个FIN报文,其中包含一个序列号seq=u,表示请求连接终止。在发送完毕后,客户端停止数据发送,并主动关闭TCP连接。此时,客户端进入FIN_WAIT_1状态,等待服务器的确认。
FIN_WAIT_1状态解析:该状态表示客户端正在等待远程TCP的连接中断请求,或者等待先前连接中断请求的确认。FIN=1标志着该报文段是一个连接释放请求。而seq=u则代表客户端向服务器发送的最后一个字节的序号。
2、第二次挥手
服务端在收到客户端的FIN报文后,会发送一个ACK报文作为回应。这个ACK报文中,序列号值设为客户端序号值加1,意在确认已收到客户端的报文。随后,服务端进入CLOSE_WAIT状态,等待本地用户的连接中断请求。
CLOSE_WAIT状态解析:在此状态下,服务端等待来自本地用户的连接释放请求。ACK报文中的ACK=1表示应答,而seq=v则指明了服务端释放应答报文段的首字节序号。同时,ack=u+1表明服务端希望从第u+1个字节开始接收报文段,并已成功接收了前u个字节。
完成第二次挥手后,客户端到服务端的连接已释放,服务端不再接收客户端数据,而客户端也已无数据待发送。然而,服务端到客户端的连接仍保持开启,若服务端在此期间发送数据,客户端仍需正常接收。此状态将持续一段时间,直至整个CLOSE-WAIT状态结束。
3、第三次挥手
服务端在完成数据的发送后,会向客户端发送一个连接释放报文。这个报文头包含FIN标志位为1,以及ack序号值为u+1。由于在CLOSE_WAIT状态期间,服务端可能又发送了一些数据,假设此时的序列号为seq=w。发送完毕后,服务端进入LAST_ACK状态,等待来自客户端的连接中断确认。
4、第四次挥手
客户端在收到服务端的FIN报文后,会响应一个ACK报文,其中ack序号值为w+1,同时将自己的序列值加1作为ACK报文的seq序号值,即seq=u+1。此后,客户端进入TIME_WAIT状态。
TIME_WAIT:确保远程TCP收到连接中断请求的确认
该状态会持续2MSL(最长报文段寿命)的时间。在此期间,TCP连接并未完全释放。若在这段时间内未收到服务端的重发请求,客户端将进入CLOSED状态,并撤销TCB。
服务端在收到客户端的确认ACK报文后,会立即进入CLOSED状态,并撤销TCB,从而结束此次TCP连接。值得注意的是,服务端结束TCP连接的时间点通常早于客户端。
1、为何TCP建立连接时采用三次握手而非两次或四次?
采用两次握手会导致已失效的连接请求报文段被重新发送至服务端,从而造成服务端资源的无效消耗。而三次握手已足够确保握手过程中的通信正常,无需增加至四次,否则将显得冗余。
2、为何TCP关闭连接时需要四次挥手?
TCP协议的半关闭特性允许其连接的一端在完成发送后,仍能继续接收来自另一端的数据。因此,任何一方都可以在数据传输结束后主动发起连接释放的通知,并在对方确认后进入半关闭状态。当另一方也确认无数据再发送时,才会发出最终的连接释放通知,对方确认后,TCP连接即完全关闭。
3、为何TIME_WAIT状态需持续2MSL后才能转为CLOSE状态?
当TCP连接的一方完成连接释放后,会进入TIME_WAIT状态。这个状态需要持续2倍的最大段寿命(Maximum Segment Lifetime,MSL)的时间,这是为了确保在传输过程中可能存在的延迟数据包能够被对方完全接收。只有当2MSL时间过去后,确认对方已收到所有数据,该TCP连接才能完全关闭,进入CLOSE状态。
- 确保服务端能够接收到客户端的确认应答。
如果客户端在发送完确认应答后立即进入CLOSED状态,而该应答不幸丢失,服务端在等待超时后将尝试重新发送连接释放请求。但此时,由于客户端已经关闭,无法再作出响应,这会导致服务端无法正常关闭TCP连接。因此,TIME_WAIT状态的持续存在,是为了保证服务端能够接收到并处理客户端的确认应答,从而确保连接的平滑关闭。
2. 防止“三次握手”中提及的“已失效的连接请求报文段”干扰当前连接。
当客户端发送完最后一个确认报文后,经过2MSL的时间间隔,可以确保在本连接持续时间内产生的所有报文段都已从网络中清除。这样,新建立的连接就不会受到旧连接请求报文的影响。
相关文章:
(面试)TCP、UDP协议
TCP(传输控制协议)和UDP(用户数据报协议)是互联网核心的传输层协议,负责应用程序之间的数据传输。它们在设计目标、特性和适用场景上有显著差异: TCP:面向连接,可靠的,速…...
数据库blog1_信息(数据)的处理与效率提升
🌿信息的处理 🍂实际中离不开信息处理 ● 解决问题的建模 任何对问题的处理都可以看作数据的输入、处理、输出。 eg.一个项目中,用户点击信息由前端接收传递到后端处理后返回结果eg.面对一个问题,我们在搜集信息后做出处理与分析…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(23):受身形
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(23):受身形 1、前言(1)情况说明(2)工程师的信仰2、知识点(1)うけみけい 受身形1、グループ2、グループ3、グループ(2) か ~かどうか1、か2、かどうか3、单词(1)日语(2)日语片假名单词4、相近词练习5、单词…...
kubernetes的Service与服务发现
kubernetes的Service与服务发现 1 Service1.1 Service概念1.2 Service类型1.2.1 ClusterIP1.2.2 NodePort1.2.3 LoadBalancer1.2.4 ExternalName1.2.5 Headless 2 CoreDNS2.1 CoreDNS概念2.2 CoreDNS插件架构2.3 CoreDNS在kubernetes下的工作原理2.4 Pod上的DNS解析策略 3 Ingr…...
python打卡day28
类的简单复习 知识点回顾: 类的定义pass占位语句类的初始化方法类的普通方法类的继承:属性的继承、方法的继承 类就是对属性和方法的封装,一个常见的类的定义包括了: 关键字class类名语法固定符号冒号(:)一个初始化函数__init__(…...
【学习心得】英伟达的诸多显卡性能对比
型号 CUDA核心 显存容量 算力(FP32/TFLOPS) A100 6912 HBM2e/80G 19.49 A800 6912 HBM2e/80G 19.49 H100 14592 HBM3/80G 51.22 H800 14592 HBM3/80G 51.22 T4 4352 GDDR6/16G 8.14 P40 3840 GDDR5/24G 11.76 L40 18176 G…...
使用Pinia持久化插件-persist解决刷新浏览器后数据丢失的问题
文章目录 一、现象二、原因三、解决:使用Pinia持久化插件-persist安装persistpinia中使用persist插件在创建定义状态时配置持久化 四、参考资料 一、现象 登录成功后,能正常看到文章分类的数据,但只要刷新浏览器就提示服务异常 二、原因 P…...
mysql中4种扫描方式和聚簇索引非聚簇索引【爽文一篇】
目录 一 mysql的聚簇索引&非聚簇索引 1.1 数据表 1.2 聚簇索引 1.3 非聚簇索引 1.4 覆盖索引 二 mysql的4种扫描查询 2.1 全表扫描 2.2 索引扫描 2.3 覆盖索引扫描 2.4 回表扫描 2.5 总结 三 mysql的回表查询详解 3.1 回表查询 一 mysql的聚簇索引&非聚簇…...
交流学习 | 江西同为科技有限公司赴海尔总部考察交流
2025年4月8日至9日,江西同为科技有限公司在江西省科技装备商会的带领下,以蔡文君经理为代表,一行人赴山东青岛海尔总部开展两天的考察交流活动。本次考察不仅深入剖析了海尔企业的前沿技术与管理理念,更促进了行业内科技创新、商业…...
AGI大模型(20):混合检索之rank_bm25库来实现词法搜索
1 混合检索简介 混合搜索结合了两种检索信息的方法 词法搜索 (BM25) :这种传统方法根据精确的关键字匹配来检索文档。例如,如果您搜索“cat on the mat”,它将找到包含这些确切单词的文档。 基于嵌入的搜索(密集检索) :这种较新的方法通过比较文档的语义来检索文档。查…...
QT调用Halcon查询所有摄像头名称
QT软件中的测试代码 //获取当前连接的所有设备信息实例HTuple hv_general, hv_ValueList;InfoFramegrabber("DirectShow", "device", &hv_general, &hv_ValueList);qDebug()<<QString::fromUtf8(hv_general.S().Text());//Value list for de…...
16 C 语言布尔类型与 sizeof 运算符详解:布尔类型的三种声明方式、执行时间、赋值规则
1 布尔类型 1.1 布尔类型概述 布尔类型用于表示逻辑上的真(true)和假(false)两种状态,是编程中条件判断和逻辑运算的基础。在 C 语言中,布尔值的表示方式随着标准的发展而不断完善。 1.2 布尔类型的三种声…...
配置ssh服务-ubuntu到Windows拷贝文件方法
背景: 在工作中,需要频繁从ubuntu到Windows拷贝文件,但有时间总是无法拷出,每次重启虚拟机又比较麻烦并且效率较低。可以使用scp服务进行拷贝,不仅稳定而且高效,现将配置过程进行梳理,以供大家参…...
使用ts-node搭建typescript运行环境
目录 首先安装好node.js 安装typescript 安装ts-node 创建一个typescript文件 使用ts-node运行typescript文件 首先安装好node.js 安装typescript npm install typescript4.7.4 -g 安装ts-node npm install ts-nodev10.8.1 -g 创建一个typescript文件 文件名为app.ts&a…...
如何深入学习MATLAB的高级应用?
文章目录 要深入学习 MATLAB 的高级应用,需要在掌握基础语法后,系统性地学习特定领域的工具箱和算法,并通过实战项目提升能力。以下是分阶段的学习路径和资源推荐: 一、深化核心技能 高级矩阵运算与线性代数 matlab % 稀疏矩阵处…...
英汉 “语言” 初印象:符号背后的文化底色
英汉 “语言” 初印象:符号背后的文化底色 原始尺寸更换图片 在生活里,我们每天都会进行各式各样的交流,或许不曾留意,汉语和英语这两种极具代表性的语言,从最简单的问候语中就能展现出它们独特的文化内…...
C语言_编译全攻略_从原理到实战的深度解析
在 C 语言开发中,编译是连接源代码与可执行程序的关键桥梁。理解编译过程不仅能提升开发效率,更能帮助我们定位内存泄漏、性能瓶颈等深层次问题。本文将从编译原理出发,结合 GCC 工具链,带你掌握 C 语言编译的核心技术。 一、编译流程底层原理 1. 编译四阶段详解 预处理…...
AGI大模型(21):混合检索之混合搜索
为了执行混合搜索,我们结合了 BM25 和密集检索的结果。每种方法的分数均经过标准化和加权以获得最佳总体结果 1 代码 先编写 BM25搜索的代码,再编写密集检索的代码,最后进行混合。 from rank_bm25 import BM25Okapi from nltk.tokenize import word_tokenize import jieb…...
Vue3学习(组合式API——ref模版引用与defineExpose编译宏函数)
目录 一、ref模版引用。 (1)基本介绍。 (2)核心基本步骤。(以获取DOM、组件为例) (3)案例:获取dom对象演示。 <1>需求:点击按钮,让输入框聚焦。 (4&…...
Zephyr OS 中的 FIFO 接口应用介绍
目录 概述 1 FIFO的接口函数 1.1 K_FIFO_DEFINE函数 1.2 k_fifo_init函数 1.3 k_fifo_put函数 1.4 k_fifo_get 函数 1.5 k_fifo_is_empty 函数 2 应用验证 2.1 UART中使用FIFO范例 2.2 生产-消费类型范例 3 注意事项 3.1 内存管理 3.2 线程安全边界 概述 Zephy…...
前端基础之CSS
基本语法规范 引入方式 1.内部引入 <style>p{color:blue ;font-size:30px;}</style> 2.行级引入 <p style "color : green ;font-size : 40px;">hello ,wyx</p><p>hello , wyx1</p><h1>hello , wyx2</h1> 3.外…...
【Linux网络】DNS与ICMP
DNS(Domain Name System) DNS是一整套从域名映射到IP的系统。 DNS背景 TCP/IP使用IP地址和端口号来确定网络上的一台主机的一个程序。但是IP地址不方便记忆。 于是人们发明了一种叫主机名的东西,是一个字符串,并且使用hosts文件来描述主机名和IP地址的…...
第二十七天打卡
一些函数 for i in range(2, 10000):if is_prime(i):print(i) if ...: 这是 Python 里的条件判断语句,当 is_prime(i) 的返回值为 True 时,就会执行 if 语句块里的代码。 func.__name__ 的作用 func.__name__ 是 Python 中函数对象的一个特殊属性&am…...
38-日语学习小程序
系统功能特点: 技术栈: springBootVueMysqlUni-app 功能点: 用户端 管理员端 用户端: 1.首页: 轮播图展示、N2词汇列表、网站公告列表 2.学习模块: 有五十音图 词汇 语法 3.社区模块: 可进行发帖 也可查看帖子进行回复 可查看小组 4.我的: N2词汇(点击查看详情…...
信贷风控笔记6——风控常用指标(面试准备14)
一、PSI: 1.计算过程:变量分箱10-20箱;统计各分箱内样本占比; 算各个分箱的index(实际占比-预期占比)*ln(实际占比/预期占比); 将各分箱index求和得PSI 2.情况分类&…...
UDP三种通信方式
单播(Unicast) 单播是最常见的通信方式,数据从一个发送方传输到一个特定的接收方。发送方将数据包发送到接收方的IP地址和端口号,接收方通过监听指定的端口接收数据。单播适用于一对一的通信场景。 import java.net.DatagramPac…...
Windows运维工具批处理版
测试环境:windows10 必看: 1.新建记事本,另存为:文件类型所有文件,文件名运维.bat,编码ansi,复制代码,保存,双击运行 2.有的功能需要输入管理员密码,如果没…...
无需配置光猫,使用网管交换机配合路由器的IPTV功能实现单线复用
一、背景 弱电箱和电视柜只预留了一根网线,路由器放在电视柜,想实现既可以上网又可以正常观看iptv,本文提供了一种方法。 二、准备工作 1、带iptv功能的路由器;2、水星sg105pro网管交换机;3、网线若干; …...
Elasticsearch 官网阅读之 Term-level Queries
Term-level Queries 参考:https://www.elastic.co/docs/reference/query-languages/query-dsl/query-dsl-exists-query 一、Term Query Term Query 是 term 精准查询。需要注意的是,在进行 Term Query 的时候,要避免 text 类型的字段&#x…...
医疗大模型技术演进与行业应用全景
摘要 本文系统梳理医疗大模型技术架构的三大演进阶段,深度解析Transformer架构优化、多模态融合、模型压缩等核心技术突破。结合Google Med-PaLM、启真医疗大模型等16个典型行业案例,揭示医疗大模型在诊断辅助、药物研发、医院管理等九大场景的应用成效。基于权威评测数据,…...
【软考 McCabe度量法】
McCabe度量法(McCabe’s Cyclomatic Complexity)是由Thomas McCabe提出的一种用于衡量程序模块环路复杂性的软件度量方法。它通过分析代码的控制流结构来评估程序的复杂度,帮助开发者识别难以维护或测试风险较高的代码区域。 一、McCabe度量法…...
LabVIEW光谱信号仿真与数据处理
在光谱分析领域,LabVIEW 凭借其图形化编程、丰富函数库及强大数据处理能力,成为高效工具。本案例将介绍如何利用 LabVIEW 仿真光谱信号,并对实际采集的光谱数据进行处理,涵盖信号生成、数据采集、滤波、分析及显示等环节。 一…...
从零开始认识 Node.js:异步非阻塞的魅力
Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境,用于在服务器端运行 JavaScript 代码。它的设计目标是让开发者能够用 JavaScript 构建高性能、可扩展的网络应用。以下是关于 Node.js 的详细介绍: 1. 核心特点 事件驱动与非阻塞 I/O&…...
ECMAScript 2018(ES2018):异步编程与正则表达式的深度进化
1.版本背景与发布 发布时间:2018年6月,由ECMA International正式发布,标准编号为ECMA-262 9th Edition。历史意义:作为ES6之后的第三次年度更新,ES2018聚焦于异步编程、正则表达式和对象操作的标准化,推动…...
【gitee 初学者矿建仓库】
简易的命令行入门教程: Git 全局设置: git config --global user.name "你的名字"触摸 git config --global user.email "你的邮箱"创建 git 仓库: mkdir codestore cd codestore git init -b "main" touch README.md # 选择运行 git add REA…...
Java 类和对象
文章目录 类和对象实例化对象this构造和初始化封装访问修饰限定符包自定义包 static代码块 类和对象 Java当中一切皆对象对象是什么呢? 比如是一个人,手机等怎么描述对象呢? 可以用类描述对象,可以理解类为一个模版,用…...
湖北理元理律师事务所:科学债务管理模型构建实录
债务问题本质是资源错配问题。湖北理元理律师事务所基于400案例的司法大数据,提炼出一套“三阶九步”债务管理模型,本文从技术视角解析其运作逻辑与实操价值。 模型架构:从诊断到执行的全周期管理 阶段一:债务体检(1…...
JavaScript vs Python 用于 Web Scraping(2025):终极对比指南
1. 引言 在不断发展的 Web Scraping 领域,选择合适的编程语言对于项目的成功至关重要。虽然 JavaScript 和 Python 在 2025 年仍然是 Web Scraping 领域的热门选择,但它们各自具备不同的优势和挑战。 本指南将深入分析 JavaScript 和 Python 的核心特性…...
数据结构day3
一、gdb调试 gcc -g main.c linklist.c // 对两个.c文件进行编译,生成 a.out 文件 gdb a.out //调试可执行文件 a.out b linklist.c:36 // 在该.c文件第 36 行设置断点 r // 运行程序,但会在断点前停…...
VSCode launch.json 配置参数详解
使用 launch.json 配置调试环境时,会涉及到多个参数,用于定义调试器的行为和目标执行环境。以下是一些常用的配置参数: 1、"type" :指定调试器的类型,例如 "node" 表示 Node.js 调试器࿰…...
[已解决] LaTeX “Unicode character“ 报错 (中文字符处理)
问题: 写 LaTeX 文档,特别是包含中文时,经常遇到类似下图的 “Unicode character XXXXXX” 报错 (X) Unicode character 本 (U672C) LaTeX [行 xx, 列 x] (X) Unicode character 报 (U62A5) LaTeX [行 xx, 列 x] ...这通常意味着我们的 LaTe…...
c++成员函数返回类对象引用和直接返回类对象的区别
c成员函数返回类对象引用和直接返回类对象的区别 成员函数直接返回类对象(返回临时对象,对象拷贝) #include <iostream> class MyInt { public:int value;//构造函数explicit MyInt(int v0) : value(v){}//加法操作,返回对象副本&…...
python项目参考文献
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
Go语言实现链式调用
在 Go 语言中实现链式调用(Method Chaining),可以通过让每个方法返回对象本身(或对象的指针)来实现。这样每次方法调用后可以继续调用其他方法。 示例:实现字符串的链式操作 假设你想对一个字符串连续执行…...
深入解析SpringMVC:从入门到精通
上文了解到SpingBoot的相关知识,此文开启Sping家族下的新篇章 1. 什么是SpringWebMVC? 官方对于SpringMVC的描述是这样的: 什么是Servlet呢? Servlet 是⼀种实现动态页面的技术.准确来讲Servlet是⼀套JavaWeb开发的规范,或者说…...
Java-Collections类高效应用的全面指南
Java-Collections类高效应用的全面指南 前言一、Collections 类概述二、Collections 类的基础方法2.1 排序操作2.1.1 sort方法2.1.2 reverse方法2.1.3 shuffle方法 2.2 查找与替换操作2.2.1 binarySearch方法2.2.2 max和min方法2.2.3 replaceAll方法 三、Collections 类的高级应…...
微软家各种copilot的AI产品:Github copilot、Microsoft copilot
背景 大家可能听到很多copilot,比如 Github Copilot,Microsoft Copilot、Microsoft 365 Copilot,有什么区别 Github Copilot:有网页版、有插件(idea、vscode等的插件),都是面向于程序员的。Mi…...
JAVA EE_HTTP
为什么意气风发的少年,总是听不进去别人的劝解。 ----------陳長生. ❀主页:陳長生.-CSDN博客❀ 📕上一篇:JAVA EE_网络原理_数据链路层-CSDN博客 1.HTTP 1.1.HTTP是什么 H…...
SEO 优化实战:ZKmall模板商城的 B2C商城的 URL 重构与结构化数据
在搜索引擎算法日益复杂的今天,B2C商城想要在海量信息中脱颖而出,仅靠优质商品和营销活动远远不够。ZKmall模板商城以实战为导向,通过URL 重构与结构化数据优化两大核心策略,帮助 B2C 商城实现从底层架构到搜索展示的全面升级&…...
使用HtmlAgilityPack采集墨迹天气中的天气数据
需要解析对应的HTML源码: <div class"left"><div class"wea_alert clearfix"><ul><li><a href "https://tianqi.moji.com/aqi/china/jiangxi/hukou-county" >< span class"level level_2&qu…...