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

【每日八股】复习计算机网络 Day3:TCP 协议的其他相关问题

文章目录

  • 昨日内容复习
    • TCP 的四次挥手?
    • TCP 为什么要四次挥手?
    • 在客户端处于 FIN_WAIT_2 状态时,如果此时收到了乱序的来自服务端的 FIN 报文,客户端会如何处理?何时进入 TIME_WAIT 状态?
    • TCP 四次挥手丢了怎么办?
    • TCP 的延迟应答和累积应答?
    • TCP 会出现三次挥手吗?
    • TCP 的 MSL?
  • 复习计算机网络 Day3:TCP 协议的其他相关问题
    • 已经建立了 TCP 连接,客户端突然出现故障了怎么办?
    • 什么时候用长连接,什么时候用短连接?
    • TCP 的半连接队列和全连接队列?
    • 什么是 SYN 攻击?如何避免?
    • TIME_WAIT 的作用?过多如何解决?
    • TIME_WAIT 为什么要经过 2MSL?
    • CLOSED_WAIT 过多如何解决?

昨日内容复习

TCP 的四次挥手?

TCP 的四次挥手过程可以总结如下,为了方便描述,我们将客户端认定为主动关闭方,将服务端认定为被动关闭方:

  • 第一次挥手:客户端发送 FIN 置位的报文到服务端,并从 ESTABLISED 状态进入 FIN_WAIT_1 状态,此时客户端为半关闭状态,客户端仍然可以接收数据,但是不会再发送数据;
  • 第二次挥手:服务端接收到客户端的 FIN 报文后,发送 ACK 报文对 FIN 报文进行确认,同时进入 CLOSED_WAIT 状态,再次期间服务端将继续处理应用层还没有发送完的数据。客户端收到 ACK 后进入 FIN_WAIT_2 状态;
  • 第三次挥手:服务端处理好数据后,发送 FIN 报文,随后进入 LAST_ACK 状态;
  • 第四次挥手:客户端接收到来自服务端的 FIN 报文后,进入 TIME_WAIT 状态,等待 2MSL 时间后客户端关闭。服务端收到 ACK 报文后立即关闭。

TCP 为什么要四次挥手?

TCP 进行四次挥手而不是三次挥手的原因是服务端可能在收到客户端的 FIN 后仍然有数据要发送,因此服务端确认客户端发来的 FIN 报文的 ACK 报文与服务端发送给客户端的 FIN 报文在有数据没有处理完的情况下不能合并,因此 TCP 需要四次挥手。

当然,需要注意的是,TCP 可以三次挥手,当服务端没有数据发送给客户端时,服务端将 ACK 与 FIN 合并,发送 FIN-ACK 报文。

在客户端处于 FIN_WAIT_2 状态时,如果此时收到了乱序的来自服务端的 FIN 报文,客户端会如何处理?何时进入 TIME_WAIT 状态?

如果客户端收到了乱序的来自服务端的 FIN 报文,会将其存入缓冲区,等待服务端的其他数据到达,一并放入缓冲区。当客户端接收不到数据时,按顺序比对报文的序列号,如果 FIN 报文的序列号顺序且合法,则将其视为正确的 FIN 报文,回发 ACK 报文并进入 TIME_WAIT 状态;否则丢弃 FIN 报文,等待正确的 FIN 报文。

TCP 四次挥手丢了怎么办?

  • 第一次挥手丢失:客户端发送给服务端的 FIN 报文丢失,此时客户端收不到来自服务端的 ACK 报文,触发超时重传;
  • 第二次挥手丢失:服务端确认客户端的 FIN 报文的 ACK 报文丢失,此时客户端会认为自己的 FIN 报文丢失,客户端触发超时重传;
  • 第三次挥手丢失:客户端没有收到服务端的 FIN 报文,此时客户端处于 FIN_WAIT_2 状态,不会给服务端发送 ACK 报文,因此服务端会触发超时重传,重新发送 FIN 报文;
  • 第四次挥手丢失:服务端没有收到客户端的 ACK 报文,此时服务端会重新发送 FIN 报文给客户端。客户端发送 ACK 之后进入 2MSL 的 TIME_WAIT 状态,当再次收到 FIN 报文后,会重置 2MSL 计时器,并再次发送 ACK 报文。如果客户端此时已经到达 2MSL 并关闭,那么服务端会在超时重传最大次数上限后关闭连接。

TCP 的延迟应答和累积应答?

  • 延迟应答:TCP 不会立即发送 ACK 应答接收到的报文,而是积累一定的数据后,与 ACK 报文一并发送;
  • 累积应答:TCP 头部当中的确认号表示的是发送报文的一方期望下一次收到的序列号,说明该序列号之前的字节已经全部收到,这就是累积应答。

TCP 会出现三次挥手吗?

会,当被动关闭方收到主动关闭方 FIN 报文后,没有数据要发送时,将 ACK 和 FIN 合并发送,此时就出现了三次挥手。

TCP 的 MSL?

指的是报文的最长生命周期,即报文在网络中被丢弃之前的最长生存时间。TCP 报文被包裹在 IP 数据报中,IP 数据报的报头有 TTL 字段。

复习计算机网络 Day3:TCP 协议的其他相关问题

在这里插入图片描述

已经建立了 TCP 连接,客户端突然出现故障了怎么办?

TCP 存在保活计时器,如果客户端发生故障,服务端不会一直等待。计时器通常设置为两个小时,每当客户端有消息发送过来,服务端都会重置计时器。超时之后,服务端每隔一定的时间周期(75 s)向客户端发送探测报文,如果连续十次都没有回复,服务端会认为客户端发生故障,断开连接。

什么时候用长连接,什么时候用短连接?

长连接多用于操作频繁的点对点通讯,而且连接数不能太多。例如,数据库的连接就是长连接。

Web 网站的 HTTP 服务一般使用短连接,短连接可以快速释放资源。

TCP 的半连接队列和全连接队列?

半连接队列:也称 SYN 队列。服务端收到客户端的 SYN 请求连接报文后,内核会把该连接存储到半连接队列中,并向客户端发送 SYN-ACK 报文。换句话说,半连接队列(SYN 队列)存储的就是已经向服务端发起了连接请求但是还没有完成连接建立的客户端。

全连接队列:也称 ACCEPT 队列。服务端收到第三次握手客户端发送的 ACK 报文后,内核就会把该客户端从 SYN 队列中移除,并转入到 ACCEPT 队列。

什么是 SYN 攻击?如何避免?

SYN 攻击指的是恶意攻击方通过合法手段不断向服务端发送 SYN 报文,从而使得合法用户无法得到服务响应。当大量的 SYN 请求到来时,服务端会进入 SYN_RECV 状态,将连接加入到 SYN 队列并分配进程控制块,同时回发 SYN-ACK 报文,当服务端等不到 ACK 报文时,还会不断触发超时重传重新发送 SYN-ACK 报文,最终导致服务端资源耗尽。

解决办法

  • Cache:收到 SYN 报文后使用 Hash 表保存 SYN 报文的信息,发送 SYN-ACK 后,收到 ACK 才为该连接分配 TCB,节省资源;
  • Cookie:服务端收到 SYN 报文后,不直接分配资源,而是通过加密算法生成一个 SYN Cookie 作为初始序列号。只有收到客户端发送的合法的 ACK 后才分配连接资源。
  • Proxy 防火墙:设立中间层防火墙,确认连接有效后,才向内部服务器发送 SYN 请求。
  • 减少 SYN-ACK 重传次数;
  • 监视半连接队列和全连接队列当中的无效连接;
  • 增大半连接队列的数量;

TIME_WAIT 的作用?过多如何解决?

TCP 常用的三种状态:ESTABLISHED 表示连接建立,CLOSED_WAIT 表示被动关闭,TIME_WAIT 表示主动关闭。

TIME_WAIT 的作用

  • 确保主动关闭方发送的最后一个 ACK 到达被动关闭方:主动关闭方在接收到 FIN 报文后,发送 ACK 予以确认,并进入 2MSL 的 TIME_WAIT 状态。如果这个 ACK 丢失,那么被动关闭方会重发 FIN,主动关闭方收到后会重发 ACK。如果没有 TIME_WAIT,那么被动关闭方在没有收到 ACK 之后,会不断触发超时重传重新发送 FIN 报文,导致资源的消耗。
  • 避免旧连接的延迟报文干扰新的连接:TCP 连接通过四元组唯一标识。如果旧的连接中存在由于网络阻塞而没有到达对端的报文,则接收方会误认为这些报文是新的连接发送的,导致数据错乱。旧的连接等待 2MSL 再关闭可以确保旧的报文在网络中全部消亡;
  • 确保全双工通道的可靠关闭:TCP 是全双工协议,双方都需要关闭自己的连接。TIME_WAIT 可以确保双方都能完成关闭流程,即使主动关闭方发送给被动关闭方的 ACK 丢失,由于主动方处于 TIME_WAIT,仍然可以接收 FIN 并重发 ACK。

TIME_WAIT 的副作用
过多的 TIME_WAIT 会占用端口和内存资源(高并发短连接场景下),导致新的连接无法建立。

解决办法:

  • 快速回收 TIME_WAIT;
  • 调整 MSL 时间;
  • 负载均衡或连接池:复用长连接以减少短连接数量。

TIME_WAIT 为什么要经过 2MSL?

第一个 MSL:确保主动关闭方的 ACK 到达对端;
第二个 MSL:确保对端重传的 FIN 可以到达本端;

CLOSED_WAIT 过多如何解决?

CLOSED_WAIT 过多代表被动关闭方为能正确地关闭连接,导致连接资源长期占用。可能是由于程序 Bug 及配置问题导致的,应该去检查程序。

相关文章:

【每日八股】复习计算机网络 Day3:TCP 协议的其他相关问题

文章目录 昨日内容复习TCP 的四次挥手?TCP 为什么要四次挥手?在客户端处于 FIN_WAIT_2 状态时,如果此时收到了乱序的来自服务端的 FIN 报文,客户端会如何处理?何时进入 TIME_WAIT 状态?TCP 四次挥手丢了怎么…...

大模型在胆管结石(无胆管炎或胆囊炎)预测及治疗方案制定中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的 1.3 国内外研究现状 二、胆管结石相关理论基础 2.1 胆管结石概述 2.2 临床表现与诊断方法 2.3 传统治疗方法 三、大模型技术原理与应用优势 3.1 大模型基本原理 3.2 在医疗领域的应用潜力 3.3 用于胆管结石预测的可…...

LeetCode第159题_至多包含两个不同字符的最长子串

LeetCode 第159题:至多包含两个不同字符的最长子串 题目描述 给定一个字符串 s,找出 至多 包含两个不同字符的最长子串 t,并返回该子串的长度。 难度 中等 题目链接 点击在LeetCode中查看题目 示例 示例 1: 输入: s &qu…...

PG CTE 递归 SQL 翻译为 达梦版本

文章目录 PG SQLDM SQL总结 PG SQL with recursive result as (select res_id,phy_res_code,res_name from tbl_res where parent_res_id (select res_id from tbl_res where phy_res_code org96000#20211203155858) and res_type_id 1 union all select t1.res_id, t1.p…...

JavaScript 位掩码常量教程

JavaScript 位掩码常量教程 位掩码(Bitmask)是一种高效使用内存的技术,在JavaScript中可以用来存储和操作多个布尔值标志。下面我将为您介绍位掩码的基本概念、应用场景以及实践示例。 什么是位掩码常量? 位掩码利用二进制位&a…...

Linux守护进程

一、相关概念 QQ邮箱关于三种协议的解释:SMTP/IMAP服务 1.SMTP协议 SMTP(​​Simple Mail Transfer Protocol​​,简单邮件传输协议)是一种用于发送电子邮件的互联网标准。它在TCP/IP协议族中,通常使用25端口进行通…...

Python多进程并发编程:深入理解Lock与Semaphore的实战应用与避坑指南

引言 在多进程并发编程中,资源竞争问题如同“隐形炸弹”,稍有不慎就会导致数据不一致或程序崩溃。无论是银行转账的余额错误,还是火车票超卖,其根源都在于共享资源的无序访问。如何安全高效地管理这些资源?Python中的锁…...

mysql的5.7版本与8.0版本的差异与兼容性

MySQL 5.7 和 8.0 是两个重要的版本,它们在性能、功能、安全性等方面都有显著的改进,同时也存在一些兼容性问题。以下是具体的改进点和兼容性问题: 一、MySQL 8.0 的改进点 性能提升 优化器改进:MySQL 8.0 对查询优化器进行了重大…...

【Rust 精进之路之第4篇-数据基石·上】标量类型:整数、浮点数、布尔与字符的精妙之处

系列: Rust 精进之路:构建可靠、高效软件的底层逻辑 作者: 码觉客 发布日期: 2025-04-20 引言:构成万物的“原子”——标量类型 在上一篇文章【变量观】中,我们深入探讨了 Rust 如何通过 let、mut、const、static 和 Shadowing 来管理变量绑定,并理解了其背后对安全性…...

LangChain4j模型参数配置全解析:释放大语言模型的真正潜力

LangChain4j模型参数配置全解析:释放大语言模型的真正潜力 前言 在大语言模型应用开发中,参数配置是连接算法理论与工程实践的关键桥梁。合理的参数设置能让模型输出更精准、响应更高效,而错误的配置可能导致成本激增或业务逻辑失效。本文将…...

【深度学习入门_NLP自然语言处理】序章

本部分开始深度学习第二大部分NLP章节学习,找了好多资料,终于明确NLP的学习目标了,介于工作之余学习综合考量,还是决定以视频学习为主后期自主实践为主吧。 分享一个总图,其实在定位的时候很迷茫,单各章节…...

计算机组成原理笔记(十六)——4.1基本算术运算的实现

计算机中最基本的算术运算是加法运算,加、减、乘、除运算最终都可以归结为加法运算。 4.1.1加法器 一、加法器的基本单元 加法器的核心单元是 全加器(Full Adder, FA),而所有加法器都由 半加器(Half Adder, HA&…...

AI日报 - 2025年04月21日

🌟 今日概览(60秒速览) ▎🤖 AGI突破 | O3模型性能引热议,Rich Sutton提出「体验时代」新范式,自递归AI构建仍存挑战。 新模型如O3展示高IQ,但AGI定义与实现路径讨论加剧,强调自主生成数据与体验学习。 ▎&…...

基于Python的推荐算法的电影推荐系统的设计

标题:基于Python的推荐算法的电影推荐系统的设计与实现 内容:1.摘要 本文围绕基于Python的推荐算法的电影推荐系统展开研究。背景在于随着电影数量的急剧增加,用户在海量电影中找到符合自身喜好的影片变得困难。目的是设计并实现一个高效准确的电影推荐系统&#x…...

【perf】perf工具的使用生成火焰图

文章目录 1. What is perf?2. perf使用2.1 perf的子工具集2.2 常用指令perf list指令格式参数perf中事件分类使用示例 perf stat指令格式参数 perf top指令格式参数交互式界面操作使用示例 perf record指令格式参数使用示例 perf report指令格式参数交互式界面操作使用示例 pe…...

Sentinel源码—6.熔断降级和数据统计的实现一

大纲 1.DegradeSlot实现熔断降级的原理与源码 2.Sentinel数据指标统计的滑动窗口算法 1.DegradeSlot实现熔断降级的原理与源码 (1)熔断降级规则DegradeRule的配置Demo (2)注册熔断降级监听器和加载熔断降级规则 (3)DegradeSlot根据熔断降级规则对请求进行验证 (1)熔断降级…...

C语言自增自减题目

一、题目引入 二、运行结果 三、题目分析 这一题中 i的初始值是2 所以执行case2中的命令i-- 表达式的值此时是2 i--完了之后i最后的值是1 由于是switch没有break 就会往下贯穿 直到遇到break为止 case3里面 i 表达式的值是2 i完了之后i的值也是2 综上所述 i的值最终的值是…...

paddleocr出现: [WinError 127] 找不到指定的程序解决办法

paddleocr是一个由百度开发开源的OCR(光学字符识别)工具库。它支持多种语言的文本识别,包括中文、英文、日文等,并具备高效的文本检测和识别能力。paddleocr基于PaddlePaddle深度学习框架开发,提供了丰富的预处理、模型…...

c++STL——list的使用和模拟实现

文章目录 list的使用和模拟实现使用部分list的结构声名默认成员函数initializer_list容量和访问操作修改操作其他接口list的迭代器迭代器的种类 list的模拟实现明确基本结构预处理函数迭代器部分(重点)思路进一步考虑最终代码operator->的重载总结 begin和end访问接口修改操…...

交换机端口安全

端口安全 端口安全(PortSecurity)通过将接口学习到的动态MAC地址转换为安全MAC地址(包括安全动态MAC、安全静态MAC和Sticky MAC),阻止非法用户通过本接口和交换机通信,从而增强设备的安全性。 1、安全mac地址分类 安全动态MAC地址&#xf…...

【Oracle专栏】Oracle中的虚拟列

Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 在EXP方式导出时,发现 出现如下提示 EXP-00107: virtual column 不支持,因此采用expdp方式导出。于是本文针对oracle虚拟列进行简单介绍。 2. 相…...

shell 正则表达式与文本处理器

目录 前言 一、正则表达式 (一)定义与用途 (二)基础正则表达式 (三)基础正则表达式元字符 (四)扩展正则表达式 二、文本处理器:Shell 编程的得力助手 &#xff0…...

ZYNQ笔记(九):定时器中断

版本:Vivado2020.2(Vitis) 任务:使用定时器 (私有定时器) 中断 实现 LED(PS端) 定时1s亮灭翻转 目录 一、介绍 二、硬件设计 三、软件设计 四、效果 一、介绍 Zynq系列是Xilinx(现为AMD)推出的集成了AR…...

idea中运行groovy程序报错

我的项目是使用的 gradle 构建的。 在 idea 中运行Groovy的面向对象程序报错如下: Execution failed for task :Person.main(). > Process command G:/Program Files/jdk-17/jdk-17.0.12/bin/java.exe finished with non-zero exit value 1* Try: Run with --s…...

具身智能零碎知识点(四):联合嵌入预测架构(JEPAs)详解

联合嵌入预测架构(JEPAs)详解 联合嵌入预测架构(JEPAs)详解一、核心思想二、技术原理1. 核心组件2. 训练目标 三、与传统方法的对比四、具体实例例1:视频预测(如Meta的I-JEPA)例2:多…...

linux 搭建 dvwa 渗透测试环境

linux 安装 dvwa 1、分为4个部分,搭建dvwa渗透测试环境2、安装centos 7.63、安装apache http server4、安装mysql5、安装php6、运行dvwa 1、分为4个部分,搭建dvwa渗透测试环境 本文基于centos 7.6 搭建 dvwa 渗透测试环境 安装一个linux系统安装apache…...

C++项目 —— 基于多设计模式下的同步异步日志系统(4)(双缓冲区异步任务处理器(AsyncLooper)设计)

C项目 —— 基于多设计模式下的同步&异步日志系统(4)(双缓冲区异步任务处理器(AsyncLooper)设计) 异步线程什么是异步线程?C 异步线程简单例子代码解释程序输出关键点总结扩展:使…...

【Linux学习笔记】Linux的环境变量和命令行参数

【Linux学习笔记】Linux的环境变量和命令行参数 🔥个人主页:大白的编程日记 🔥专栏:Linux学习笔记 文章目录 【Linux学习笔记】Linux的环境变量和命令行参数前言一.环境变量1.1基本概念1.2常见环境变量1.3和环境变量相关的命令1…...

排序算法-快速排序

描述: 基准值选择:选取数组的最后一个元素 arr[high] 作为基准值 p。初始化索引:i 初始化为 low - 1,其作用是指向比基准值小的最后一个元素的索引。遍历数组:借助 for 循环从 low 到 high - 1 遍历数组。若当前元素 …...

软考高级系统架构设计师-第16章 数学与经济管理

【本章学习建议】 根据考试大纲,本章主要考查系统架构设计师单选题,预计考2分左右。主要是运筹学的计算问题,范围广、难度大,超纲题较多,不用深究。 16.1 线性规划 线性规划是研究在有限的资源条件下,如果…...

爱在冰川-慢就是快

【游资大佬の搞钱心法🔥|小白逆袭必看冰川语录真实案例‼️】 💡刚扒完爱在冰川的万字访谈 发现游资搞钱真的靠"反人性思维" 总结6条狠人法则真实案例 建议收藏反复背诵👇 1️⃣【周期为王】💫 "行情…...

Mac-VScode-C++环境配置

mac上自带了clang所以不是必须下载Homebrew 下面是配置文件(注释记得删一下) package.json {"name": "git-base","displayName": "%displayName%","description": "%description%",&quo…...

【JAVA EE初阶】多线程(1)

这样的代码,虽然也能打印hello thread,但是没有创建新的线程,而是直接在main方法所在的主线程中执行了run的逻辑 start方法,是调用系统api,真正在操作系统内部创建一个线程。这个新的线程会以run作为入口方法&#xff…...

PHP伪协议读取文件

借鉴php伪协议实现命令执行,任意文件读取_ctf php文件读取-CSDN博客 总结 在ctf中常用的有data:// , php://input , php://filter ,file:// php://input ,data://用来执行命令 1.php://input 的用法 http://127.0.0.1/include.php?filephp://input [P…...

动态调整映射关系的一致性哈希负载均衡算法详解

一、核心原理与设计要点 双重映射结构 一致性哈希负载均衡通过 哈希环 和 槽动态分配 实现双重映射关系: • 哈希环构建:将节点(物理或虚拟)和数据键(Key)通过哈希函数(如MD5、CRC32&#xff09…...

控制反转(IOC)和依赖注入(DI)

Target Retention Documented 元注解 Component 将类交给IOC容器管理,成为IOC容器中的bean Autowired 注入运行时所需要依赖的对象 因为Mabatis DAO层注解Reponsitory 基本不用了,现在Mapper层Mapper注解,这里的Mapper层相当于原来的DAO层…...

【每日八股】复习 MySQL Day1:事务

文章目录 复习 MySQL Day1:事务MySQL 事务的四大特性?并发事务会出现什么问题?MySQL 事务的隔离级别?不同事务隔离级别下会发生什么问题?MVCC 的实现原理?核心数据结构版本链构建示例可见性判断算法MVCC 可…...

【数据结构和算法】1. 数据结构和算法简介、二分搜索

本文根据 数据结构和算法入门 视频记录 文章目录 1. 数据结构和算法简介1.1 什么是数据结构?什么是算法?1.2 数据结构和算法之间的关系1.3 “数据结构和算法”有那么重要吗? 2. 二分搜索(Binary Search)2.1 算法概念2…...

4月19日记(补)算了和周日一块写了 4月20日日记

周六啊 昨天晚上又玩的太嗨了。睡觉的时候有点晚了,眼睛疼就没写日记。现在补上 实际上现在是20号晚上八点半了。理论上来说应该写今天的日记。 周六上午打比赛啦,和研究生,输了,我是替补没上场。没关系再练一练明天就可以变强…...

面试常用基础算法

目录 快速排序归并排序堆排序 n n n皇后问题最大和子数组爬楼梯中心扩展法求最长回文子序列分割回文串动态规划求最长回文子序列最长回文子串单调栈双指针算法修改 分割回文串滑动窗口栈 快速排序 #include <iostream> #include <algorithm>using namespace std;…...

微服务与 SOA:架构异同全解析与应用指南

微服务和 SOA&#xff08;面向服务的架构&#xff09;是两种不同的软件架构风格&#xff0c;它们在很多方面存在相似之处&#xff0c;但也有一些区别。以下是对它们的详细介绍&#xff1a; 一、概念 1.微服务 微服务架构将一个大型应用程序拆分成多个小型、独立的服务&#…...

Dijkstra 算法入门笔记 (适用于算法竞赛初学者) - C++ 代码版

目录 算法是做什么的&#xff1f;核心思想&#xff1a;贪就完事了&#xff01;算法前提&#xff1a;不能有负权边&#xff01;需要哪些工具&#xff1f;(数据结构)算法具体步骤关键操作&#xff1a;松弛 (Relaxation)两种实现方式 (C 代码) 朴素版 Dijkstra (O(V^2))堆优化版 …...

脑影像分析软件推荐| GraphVar介绍

目录 1.软件界面 2.工具包功能简介 3.软件安装注意事项 1.软件界面 2.工具包功能简介 GraphVar是一个用户友好的 MATLAB 工具箱&#xff0c;用于对功能性大脑连接进行全面的图形分析。这里我们介绍了该工具箱的全面扩展&#xff0c;使用户能够无缝探索跨功能连接测量的可轻…...

如何优雅地实现全局唯一?深入理解单例模式

如何优雅地实现全局唯一&#xff1f;深入理解单例模式 一、什么是单例模式&#xff1f; 单例模式是一种创建型设计模式&#xff0c;旨在确保一个类只有一个实例&#xff0c;并为该实例提供全局访问点&#xff0c;从而避免全局变量的命名污染&#xff0c;并支持延迟初始化Wiki…...

【Flutter】使用LiveKit和Flutter构建实时视频聊天应用

引言 在当今快速发展的数字世界中&#xff0c;实时视频通信已成为许多应用程序的核心功能。无论是远程工作、在线教育还是社交网络&#xff0c;高质量的实时视频功能都至关重要。LiveKit作为一个开源的WebRTC解决方案&#xff0c;提供了构建可扩展实时音视频应用所需的一切工具…...

Android Jetpack Compose 状态管理解析:remember vs mutableStateOf,有啥不一样?为啥要一起用?

&#x1f331;《Jetpack Compose 状态管理解析&#xff1a;remember vs mutableStateOf&#xff0c;有啥不一样&#xff1f;为啥要一起用&#xff1f;》 在 Jetpack Compose 的世界里&#xff0c;UI 是响应式的。这意味着当状态发生变化时&#xff0c;UI 会自动重组&#xff0…...

QT6 源(37):界面组件的总基类 QWidget 的源码阅读(下,c++ 代码部分)

&#xff08;1&#xff09; QT 在 c 的基础上增加了自己的编译器&#xff0c;以支持元对象系统和 UI 界面设计&#xff0c;有 MOC 、 UIC 等 QT 自己的编译器。本节的源代码里&#xff0c;为了减少篇幅&#xff0c;易于阅读&#xff0c;去除了上篇中的属性部分&#xff0c; 上篇…...

进程与线程:01 CPU管理的直观想法

多进程图像与操作系统核心 好从今天开始&#xff0c;我们就要开始学习操作系统&#xff0c;最核心的图像是多进程图像。前面我们讲过&#xff0c;多进程图像对操作系统来说非常重要&#xff0c;它是操作系统的核心图像。明白了它以后&#xff0c;对于理解操作系统的一大部分内…...

19. git reflog

基本概述 git reflog 的作用是&#xff1a;查看本地仓库的引用日志&#xff08;reference log&#xff09;&#xff0c;例如分支、HEAD等。它可以帮助你找回误删的提交、恢复被覆盖的分支&#xff0c;或回溯操作历史。 基本用法 1.查看完整的reflog git reflog这会显示所有…...

C语言 —— 铭纹织构未诞之镜 - 预处理详解

目录 1. 什么是预处理&#xff08;预编译&#xff09; ​编辑 2. 预定义符号 3. #define 定义常量 4. #define定义宏 5. 带副作用的宏参数 6. 宏替换的规则 7. 宏和函数的对比 8. #和## 8.1 #运算符 8.2 ## 运算符 9. #undef 10. 条件编译 1. 什么是预处理&#xf…...