tcp 和http 网络知识
1. 请简述TCP和HTTP的定义与基本概念
- TCP:即传输控制协议(Transmission Control Protocol),是一种面向连接的、可靠的、基于字节流的传输层通信协议。它为互联网中的数据通信提供稳定的传输机制,在不可靠的IP层之上,通过确认、重传和错误检测等技术确保数据正确到达。比如在文件传输场景中,TCP保证文件的每个字节都能准确无误地从源端传输到目的端。
- HTTP:超文本传输协议(HyperText Transfer Protocol),是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。常见的网页浏览就是基于HTTP协议,浏览器向服务器发送HTTP请求获取网页资源,服务器返回对应的HTTP响应。
2. TCP是如何保证数据的可靠性的
TCP通过多种机制保证数据可靠性:
- 序列号与确认应答:TCP为每个发送的字节编号,接收方收到数据后,会发送ACK确认包给发送方,ACK包中包含确认号,告知发送方下一个期望接收的数据字节序号。通过这种方式,发送方可以确认数据是否被正确接收。
- 超时重传:发送方发送数据后会启动一个定时器,如果在规定时间内没有收到对应的ACK确认,就会认为数据丢失,重新发送该数据。例如,在网络不稳定时,数据包可能丢失,超时重传机制确保数据最终能被送达。
- 流量控制:利用滑动窗口机制,接收方通过在ACK包中告知发送方自己的接收窗口大小(即还能接收的数据量),发送方根据接收窗口大小控制发送速率,避免发送过快导致接收方缓冲区溢出。
- 拥塞控制:包括慢启动、拥塞避免、快速重传和快速恢复等算法。发送方维护一个拥塞窗口,根据网络拥塞情况动态调整。如在网络拥塞时,减少数据发送量,防止网络进一步恶化。
3. 说一说TCP的三次握手过程,为什么是三次握手
三次握手是建立TCP连接的过程:
- 第一次握手:客户端向服务器发送SYN(同步序列编号)包,该包中包含客户端的初始序列号(例如x),此时客户端进入SYN_SENT状态,表明客户端希望与服务器建立连接。
- 第二次握手:服务器接收到客户端的SYN包后,向客户端发送SYN - ACK包。这个包包含两部分,一是对客户端SYN的确认(ACK = x + 1),二是服务器自己的初始序列号(例如y),此时服务器进入SYN_RCVD状态。
- 第三次握手:客户端收到服务器的SYN - ACK包后,向服务器发送ACK包,确认收到服务器的SYN - ACK(ACK = y + 1),此时客户端和服务器都进入ESTABLISHED状态,连接建立成功。
TCP需要三次握手主要有两个原因:
- 防止旧的重复连接引起混乱:在网络状况复杂或较差时,发送方可能会连续发送多次建立连接请求。若只有两次握手,接收方无法判断请求是正常的还是过期的,可能导致错误连接。三次握手能让双方确认对方收到了自己的初始序列号,避免这种情况。
- 同步初始化序列号:TCP需要初始化序列号保证消息顺序。两次握手无法确认序列号是否正常,四次握手则会浪费系统资源,三次握手是最优解。
4. 请阐述HTTP常见的请求方法及其区别,比如GET和POST
HTTP常见的请求方法有GET、POST、PUT、DELETE、HEAD等,其中GET和POST区别如下:
- 语义用途:
- GET:从服务器获取指定资源,是只读操作。例如在浏览器中输入网址访问网页,就是使用GET方法获取网页资源。
- POST:根据请求负荷(报文body)对指定资源做出处理,通常用于新增或提交数据,如用户注册、表单提交数据等场景。
- 安全性与幂等性:
- GET:从RFC规范定义看,GET方法安全且幂等。安全指不会破坏服务器资源,幂等指多次执行操作结果相同。实际开发中若用GET实现新增或删除数据,则不具备安全和幂等性。
- POST:因为会修改服务器资源,所以不安全,且多次提交可能创建多个资源,不幂等。但实际若用POST实现查询数据,则安全且幂等。
- 数据传输位置与可见性:
- GET:数据通过URL的查询参数传递,在浏览器地址栏可见。例如:
https://example.com/search?q=apple
,其中q=apple
就是查询参数。 - POST:数据放在请求体(body)中传输,浏览器地址栏不可见,但抓包工具可查看。
- GET:数据通过URL的查询参数传递,在浏览器地址栏可见。例如:
- 缓存性:
- GET:可被缓存,浏览器和代理服务器(如Nginx)都能对GET请求的数据做缓存,且浏览器中GET请求可保存为书签。
- POST:大部分实现中不可缓存,浏览器一般不会缓存POST请求,也不能保存为书签。
5. 当在浏览器中输入一个URL并回车后,从网络层面描述计算机做了哪些工作步骤
- DNS解析:浏览器首先检查自身缓存,看是否有该URL对应的IP地址。若没有,则向本地DNS服务器发送查询请求。本地DNS服务器若缓存中有记录,直接返回IP;没有则向根DNS服务器、顶级域名服务器等依次查询,最终获取到目标URL对应的IP地址。
- TCP连接建立:浏览器获取IP地址后,与目标服务器建立TCP连接,通过三次握手过程(客户端发送SYN包、服务器返回SYN - ACK包、客户端再发送ACK包),成功建立可靠连接。
- HTTP请求发送:TCP连接建立后,浏览器构建HTTP请求报文,包括请求行(如GET /index.html HTTP/1.1)、请求头(如User - Agent、Accept等),若为POST请求还会有请求体。然后将请求报文通过TCP连接发送给服务器。
- 服务器处理请求与响应:服务器接收到HTTP请求后,根据请求的URL和方法,找到对应的资源或执行相应的业务逻辑。处理完成后,构建HTTP响应报文,包含状态行(如HTTP/1.1 200 OK)、响应头(如Content - Type、Content - Length等)和响应体(如网页的HTML内容),并通过TCP连接返回给浏览器。
- TCP连接关闭:浏览器接收完响应数据后,若不需要再与服务器通信,会通过四次挥手过程关闭TCP连接(客户端发送FIN包、服务器返回ACK包、服务器再发送FIN包、客户端返回ACK包)。
- 浏览器渲染页面:浏览器根据HTTP响应中的Content - Type等信息,对响应体中的数据进行解析和渲染。若响应内容是HTML页面,浏览器会解析HTML、CSS和JavaScript,构建DOM树,渲染页面并展示给用户。
6. 简述HTTP协议的无状态性及其带来的问题与解决方案
- 无状态性定义:HTTP协议的无状态性指服务器不保留关于客户端的任何状态信息。每个HTTP请求都是独立的,服务器无法区分这是同一个客户端的连续请求还是不同客户端的请求。例如,用户在一个页面登录后,再访问该网站的其他页面,服务器无法直接知道该用户已登录。
- 带来的问题:在需要跟踪用户状态的应用场景中,如电商购物车、用户登录状态保持等,无状态性使得服务器难以处理。每次请求都需额外机制来识别用户身份和状态,增加开发复杂度。
- 解决方案:
- Cookie:服务器在HTTP响应头中添加Set - Cookie字段,将一些状态信息(如用户ID、登录状态标识等)发送给客户端。客户端收到后,在后续的HTTP请求头中带上Cookie字段,服务器通过解析Cookie来识别用户状态。
- Session:服务器为每个客户端分配一个唯一的Session ID,通常通过Cookie将Session ID发送给客户端。服务器在内存或存储中维护Session数据,客户端每次请求时,服务器根据Session ID找到对应的Session数据,获取用户状态等信息。
- Token:常用于前后端分离的应用中。服务器验证用户身份后,生成一个Token(如JWT,JSON Web Token),包含用户身份等信息,返回给客户端。客户端在后续请求中,将Token放在请求头或其他位置发送给服务器,服务器通过验证Token来确认用户身份和权限。
7. 讲讲HTTP1.0和HTTP1.1的主要区别
- 连接方式:
- HTTP1.0:只支持短连接,浏览器每次请求都需与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接。这意味着对于包含多个资源(如多个图片)的网页,会频繁建立和断开TCP连接,增加开销和延迟。
- HTTP1.1:支持持久连接(默认开启),在一个TCP连接上可传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。一个包含许多图像的网页文件的多个请求和应答可在一个连接中传输,但每个单独的网页文件的请求和应答仍需使用各自的连接。通过设置
Connection: Keep - Alive
头字段开启持久连接。
- Host字段:
- HTTP1.0:请求消息中的URL没有传递主机名(hostname),因为当时认为每台服务器都绑定一个唯一的IP地址。
- HTTP1.1:增加了
Host
字段,随着虚拟主机技术发展,一台物理服务器上可能存在多个共享一个IP地址的虚拟主机。通过Host
字段,服务器能知道客户端请求的具体虚拟主机,如Host: www.example.com
。
- 缓存处理:
- HTTP1.0:缓存功能有限,对缓存的控制不够精细。
- HTTP1.1:引入了更多缓存相关的字段和机制,如
Cache - Control
头字段,可设置多种缓存策略,包括缓存过期时间、是否可缓存等,比HTTP1.0中简单的Expires
字段更灵活和强大。
- 错误处理:
- HTTP1.0:错误状态码相对较少,对一些错误情况的描述不够细致。
- HTTP1.1:定义了更多详细的错误状态码,如409 Conflict(表示请求与资源当前状态冲突)、410 Gone(表示资源已永久删除)等,能更准确地反馈服务器处理请求时遇到的问题。
8. 描述一下HTTP请求和响应的报文格式
- HTTP请求报文格式:
- 请求行:由请求方法(如GET、POST)、请求URL和HTTP协议版本组成,例如
GET /index.html HTTP/1.1
。 - 请求头:包含一系列键值对,用于传递关于客户端环境、请求内容等信息。常见的请求头有
User - Agent
(用于标识客户端类型,如浏览器名称和版本)、Accept
(声明客户端可接受的数据类型)、Accept - Encoding
(声明可接受的压缩方法)、Cookie
(用于传递客户端存储的Cookie信息)等。每个请求头占一行,格式为Header - Name: Header - Value
。 - 空行:请求头和请求体之间用一个空行分隔,标识请求头结束。
- 请求体:GET请求一般没有请求体,POST请求时,请求体包含要提交给服务器的数据,如表单数据、JSON格式数据等。数据格式根据
Content - Type
头字段指定,例如application/x - www - form - urlencoded
表示表单数据,application/json
表示JSON格式数据。
- 请求行:由请求方法(如GET、POST)、请求URL和HTTP协议版本组成,例如
- HTTP响应报文格式:
- 状态行:由HTTP协议版本、状态码和状态描述组成,例如
HTTP/1.1 200 OK
。状态码表示请求处理的结果,如200表示成功,404表示资源未找到。 - 响应头:同样是一系列键值对,用于传递关于服务器环境、响应内容等信息。常见的响应头有
Content - Type
(表示响应内容的数据类型,如text/html
表示HTML页面)、Content - Length
(表示响应内容的长度)、Set - Cookie
(用于在客户端设置Cookie)、Cache - Control
(控制缓存策略)等。 - 空行:响应头和响应体之间用空行分隔。
- 响应体:包含服务器返回给客户端的数据,如HTML页面内容、图片二进制数据、JSON格式的API响应数据等,具体内容根据请求的资源和服务器处理结果而定。
- 状态行:由HTTP协议版本、状态码和状态描述组成,例如
相关文章:
tcp 和http 网络知识
1. 请简述TCP和HTTP的定义与基本概念 TCP:即传输控制协议(Transmission Control Protocol),是一种面向连接的、可靠的、基于字节流的传输层通信协议。它为互联网中的数据通信提供稳定的传输机制,在不可靠的IP层之上&a…...
伟世通与火山引擎深度合作 前沿AI智能座舱解决方案亮相上海车展
2025年4月24日,上海 —— 全球领先的汽车电子技术供应商伟世通与字节跳动旗下云服务平台火山引擎在2025上海车展联合举办新闻发布会,正式发布基于AI大模型的下一代智能座舱解决方案。该方案深度融合伟世通高性能域控平台与火山引擎豆包大模型的AI能力&am…...
中国250米土壤质地类型数据
土壤质地指土壤中砂粒、粉粒和黏粒的相对含量和组成。根据土壤质地的不同,可以将土壤分为砂土、壤土、黏土等类型。土壤质地对土壤的物理性质(如渗透性、保水性)和化学性质(如养分含量)有重要影响。 本数据集是以250米…...
springboot2.x升级到3.x 惨痛经验总结
一、前言(废话) 升级的缘由 都是因为:Spring 目录遍历漏洞(CVE-2024-38816) 可参考文章:springboot 修复 Spring Framework 特定条件下目录遍历漏洞(CVE-2024-38816) 然后就趁着工…...
【Python】保持Selenium稳定爬取的方法(防检测策略)
selenium 防检测策略的方法汇总: 合理设置延迟:请求间添加随机延迟 (2-10秒) 限制爬取频率:控制每小时/每天的请求量 轮换用户代理:准备至少10个不同的User-Agent 使用住宅代理:优先选择高质量的住宅代理IP 处理验…...
【Linux】进程优先级和进程切换
📝前言: 这篇文章我们来讲讲进程优先级和进程切换: 🎬个人简介:努力学习ing 📋个人专栏:Linux 🎀CSDN主页 愚润求学 🌄其他专栏:C学习笔记,C语言入…...
基于 Python(selenium) 的今日头条定向爬虫:根据输入的关键词在今日头条上进行搜索,并爬取新闻详情页的内容
该项目能够根据输入的关键词在今日头条上进行搜索,并爬取新闻详情页的内容。 一、项目准备 1. 开发环境配置 操作系统:支持 Windows、macOS、Linux 等主流操作系统,本文以 Windows 为例进行说明。Python 版本:建议使用 Python 3.8 及以上版本,以确保代码的兼容性和性能。…...
AIDL进程间通信
一、项目开启AIDL 在使用AIDL的模块下build.gradle 文件中添加以下代码 android {...buildFeatures {aidl true} }操作完需要rebuild 二、创建aidl服务接口 假设当前所需要的包名为com.jingluo.test_aidl ,那么aidl就需要处于同样的路径下,即如下目录…...
线程同步与互斥
系统11. 线程同步与互斥 1. 线程互斥 1-1 进程线程间的互斥相关背景概念 临界资源:多线程执⾏流共享的资源就叫做临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时刻,互斥保证有…...
腾讯一面面经:总结一下
1. Java 中的 和 equals 有什么区别?比较对象时使用哪一个 1. 操作符: 用于比较对象的内存地址(引用是否相同)。 对于基本数据类型、 比较的是值。(8种基本数据类型)对于引用数据类型、 比较的是两个引…...
某地农产品交易中心钢网架自动化监测项目
1. 项目简介 本项目规划建设现代物流产业园,新建6万平方米仓库,具体为新建3栋钢构仓库2万平方米,2栋砖混结构仓库1万平方米,3栋交易中心2万平方米,改造现有3栋3层砖混结构仓库1万平方米,配备智能化仓库物流…...
PGSql查看表结构以及注释信息
创建视图 CREATE OR REPLACE VIEW dbo.v_sys_tableinfo AS SELECT pc.relname AS tablename, pa.attname AS columnname, pt.typname AS columntype, CASE WHEN pa.attlen > 0 THEN pa.attlen::integer ELSE pa.atttypmod - 4 END AS columnlength, pa.attnotnull …...
C++23 中 constexpr 的重要改动
文章目录 1. constexpr 函数中使用非字面量变量、标号和 goto (P2242R3)示例代码 2. 允许 constexpr 函数中的常量表达式中使用 static 和 thread_local 变量 (P2647R1)示例代码 3. constexpr 函数的返回类型和形参类型不必为字面类型 (P2448R2)示例代码 4. 不存在满足核心常量…...
Linux服务器上mysql8.0+数据库优化
1.配置文件路径 /etc/my.cnf # CentOS/RHEL /etc/mysql/my.cnf # Debian/Ubuntu /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu/Debian检查当前配置文件 sudo grep -v "^#" /etc/mysql/mysql.conf.d/mysqld.cnf | grep -v "^$&q…...
深度学习之卷积神经网络入门
一、引言 在深度学习蓬勃发展的今天,卷积神经网络(Convolutional Neural Network,简称 CNN)凭借其在图像识别、计算机视觉等领域的卓越表现,成为了人工智能领域的核心技术之一。从手写数字识别到复杂的医学影像分析&a…...
【kafka初学】启动执行命令
接上篇,启动:开两个cdm窗口 注意放的文件不要太深或者中文,会报命令行太长的错误 启动zookeeper bin\windows\zookeeper-server-start.bat config\zookeeper.properties2. 启动kafka-serve bin\windows\kafka-server-start.bat config\serv…...
MoE架构解析:如何用“分治”思想打造高效大模型?
在人工智能领域,模型规模的扩大似乎永无止境。从GPT-3的1750亿参数到传闻中的GPT-4万亿级规模,每一次突破都伴随着惊人的算力消耗。但当我们为这些成就欢呼时,一个根本性问题愈发尖锐:如何在提升模型能力的同时控制计算成本&#…...
【Qt】文件
🌈 个人主页:Zfox_ 🔥 系列专栏:Qt 目录 一:🔥 Qt 文件概述 二:🔥 输入输出设备类 三:🔥 文件读写类 四:🔥 文件和目录信息类 五&…...
Linux常见故障:排查思路与错误分析指南
引言 当Linux系统"生病"时,它不会说话但却会通过各种症状"求救"🆘!本文将带你建立系统化的故障排查思维,从磁盘到内存,从网络到服务,全方位掌握Linux系统的"把脉问诊"技巧。…...
基于随机变量的自适应螺旋飞行麻雀搜索算法(ASFSSA)优化BP神经网络,附完整完整代码
3. 麻雀搜索算法 麻雀群体分为两个角色,即发现者和跟随者。它们有三个行为:觅食、跟随和侦察。发现者的任务是寻找食物并告知跟随者食物的位置。因此,发现者需要在一个大范围内搜索,而跟随者的觅食范围通常较小。这是更新发现者位…...
vscode切换Python环境
跑深度学习项目通常需要切换python环境,下面介绍如何在vscode切换python环境: 1.点击vscode界面左上角 2.在弹出框选择对应kernel...
Gradle安装与配置国内镜像源指南
一、Gradle简介与安装准备 Gradle是一款基于JVM的现代化构建工具,广泛应用于Java、Kotlin、Android等项目的构建自动化。相比传统的Maven和Ant,Gradle采用Groovy或Kotlin DSL作为构建脚本语言,具有配置灵活、性能优越等特点。 在开始安装前…...
施工配电箱巡检二维码应用
在过去,施工配电箱的巡检主要依赖于纸质记录方式。巡检人员每次巡检时,都要在纸质表格上详细填写配电箱的各项参数、运行状况以及巡检时间等信息。这种方式在实际操作中暴露出诸多严重问题,信息易出现错误、数据会有造假现象、数据量庞大整理…...
全链路自动化AIGC内容工厂:构建企业级智能内容生产系统
一、工业化AIGC系统架构 1.1 生产流程设计 [需求输入] → [创意生成] → [多模态生产] → [质量审核] → [多平台分发] ↑ ↓ ↑ [用户反馈] ← [效果分析] ← [数据埋点] ← [内容投放] 1.2 技术指标要求 指标 标准值 实现方案 单日产能 1,000,000 分布式推理集群 内容合规率…...
第19章:Multi-Agent多智能体系统介绍
第19章:Multi-Agent多智能体系统介绍 欢迎来到多智能体系统 (Multi-Agent System, MAS) 的世界!在之前的章节中,我们深入探讨了单个 AI Agent 的构建,特别是结合了记忆、上下文和规划能力的 MCP 框架。然而,现实世界中的许多复杂问题往往需要多个智能体协同工作才能有效解…...
【C++游戏引擎开发】第25篇:方差阴影贴图(VSM,Variance Shadow Maps)
一、VSM 的核心思想 1.1 VSM 的核心思想 1.1.2 从深度到概率的转变 VSM 的核心创新在于将阴影判定从深度比较转换为概率估算。通过存储深度分布的统计信息(均值和方差),利用概率不等式动态计算阴影强度,从而支持软阴影并减少锯齿。 1.1.3 深度分布的统计表示 VSM 在阴…...
代码随想录打卡|Day27(合并区间、单调递增的数字、监控二叉树)
贪心算法 Part05 合并区间 力扣题目链接 代码随想录链接 视频讲解链接 题目描述: 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组࿰…...
yum包管理器
1.介绍 yum是一个shell前端软件包管理器,基于RPM包管理,能够从指定的服务器.自动下载RPM包并且安装,可以自动处理依赖关系,并且一次安装所有依赖的安装包。 2.yum基本指令 查询yum服务器是否有需要安装的软件: yum list I grep xx软件列表. 安装指定的yum包&…...
Linux多线程技术
什么是线程 在一个程序里的多执行路线就是线程。线程是进程中的最小执行单元,可理解为 “进程内的一条执行流水线”。 进程和线程的区别 进程是资源分配的基本单位,线程是CPU调度的基本单位。 fork创建出一个新的进程,会创建出一个新的拷贝&…...
通过模仿学习实现机器人灵巧操作:综述(上)
25年4月来自天津大学、山东大学、瑞士ETH、南方科技大学、通用 AI 国家重点实验室、爱丁堡大学和中科院自动化所的论文“Dexterous Manipulation through Imitation Learning: A Survey”。 灵巧操作是指机械手或多指末端执行器通过精确、协调的手指运动和自适应力调制&#x…...
LLM数学推导——Transformer问题集——注意力机制——稀疏/高效注意力
Q13 局部窗口注意力的内存占用公式推导(窗口大小 ) 局部窗口注意力:解决长序列内存困境的利器 在注意力机制中,全局注意力需要计算序列中每个元素与其他所有元素的关联,当序列长度 N 较大时,权重矩阵的内…...
Git 入门知识详解
文章目录 一、Git 是什么1、Git 简介2、Git 的诞生3、集中式 vs 分布式3.1 集中式版本控制系统3.2 分布式版本控制系统 二、GitHub 与 Git 安装1、GitHub2、Git 安装 一、Git 是什么 1、Git 简介 Git 是目前世界上最先进的分布式版本控制系统。版本控制系统能帮助我们更好地管…...
系统架构师2025年论文《论软件架构评估》
论软件架构评估 摘要: 我所在的单位是国内某知名医院,2017 年 1 月医院决定开发全新一代某市医院预约挂号系统,我担任本次系统的架构师,主要负责整个系统的架构设计工作。该系统旨在优化医院挂号流程,提高患者就医体验,是医院应对医疗信息化变革和提升服务的重要举措。…...
基于51单片机的超声波液位测量与控制系统
基于51单片机液位控制器 (仿真+程序+原理图PCB+设计报告) 功能介绍 具体功能: 1.使用HC-SR04测量液位,LCD1602显示; 2.当水位高于设定上限的时候,对应声光报警报警&…...
抓包工具Wireshark的应用解析
一、Wireshark简介 Wireshark(前身为Ethereal)是一款开源、跨平台的网络协议分析工具,自1998年诞生以来,已成为网络工程师、安全专家及开发者的核心工具之一。它通过网卡的混杂模式(Promiscuous Mode)捕获…...
在 Java 项目中搭建和部署 Docker 的详细流程
引言 在现代软件开发中,Docker 已成为一种流行的工具,用于简化应用的部署和运行环境的一致性。本文将详细介绍如何在 Java 项目中搭建和部署 Docker,包括配置文件、代码示例以及流程图。 一、整体工作流程 以下是整个流程的概览:…...
15.ArkUI Checkbox的介绍和使用
以下是 ArkUI Checkbox 组件的详细介绍和使用指南: 一、Checkbox 基础介绍 功能特性: 提供二态选择(选中/未选中)支持自定义样式和标签布局支持与数据状态绑定提供状态变化事件回调 适用场景: 表单中的多选操作设置…...
WebUI可视化:第5章:WebUI高级功能开发
学习目标 ✅ 掌握复杂交互逻辑的实现 ✅ 学会自定义界面样式与布局 ✅ 实现安全高效的文件处理 ✅ 优化性能与用户体验 5.1 自定义样式开发 5.1.1 修改主题颜色(以Streamlit为例) 在应用入口处添加全局样式: python import streamlit as st # 自定义主题 st.markdown…...
增加首屏图片
增加首屏图片(bg.jpg) web-mobile类型打包 //index.html脚本 <div id"myDiv_1111"style"background: url(./bg.jpg) 50% 50%/ 100% auto no-repeat ; width:100%;height:100%;position:absolute;"></div> //游戏内脚本…...
联合体和枚举类型
1.联合体类型 1.1:联合体类型变量的创建 与结构体类型一样,联合体类型 (关键字:union) 也是由⼀个或者多个成员变量构成,这些成员变量既可以是不同的类型,也可以是相同的类型。但是编译器只为最⼤的成员变量分配⾜够的内存空间。联合体的特…...
《AI大模型趣味实战》构建基于Flask和Ollama的AI助手聊天网站:分布式架构与ngrok内网穿透实现
构建基于Flask和Ollama的AI助手聊天网站:分布式架构与ngrok内网穿透实现 引言 随着AI技术的快速发展,构建自己的AI助手聊天网站变得越来越流行。本研究报告将详细介绍如何通过两台电脑构建一个完整的AI聊天系统,其中一台作为WEB服务器运行F…...
kubernets集群的安装-node节点安装-(简单可用)-超详细
一、kubernetes 1、简介 kubernetes,简称K8s(库伯内特),是用8代替名字中间的8个字符“ubernete”而成的缩写 云计算的三种主要服务模式——基础设施即服务(IaaS)、平台即服务(PaaS࿰…...
【Linux内核设计与实现】第三章——进程管理04
文章目录 8. exit() 进程退出8.1. exit() 系统调用的定义8.2. do_exit() 函数8.2.0. do_exit() 的参数和返回值8.2.1. 检查和同步线程组退出8.2.2. 清理与调试相关的资源8.2.3. 取消 I/O 和信号处理8.2.4. 检查线程组是否已终止8.2.5. 释放系统资源8.2.6. 释放线程和调度相关资…...
Golang | 迭代器模式
迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种顺序访问聚合对象(如列表、树等集合结构)中元素的方法,而无需暴露其底层实现细节。通过将遍历逻辑与集合本身解耦,迭代器模式使…...
美颜SDK动态贴纸实战教程:从选型、开发到上线的完整流程
在直播、短视频、社交娱乐全面崛起的当下,美颜SDK早已不再局限于“磨皮瘦脸”,而是逐步迈向更智能、更富互动体验的方向发展。动态贴纸功能,作为提升用户参与感和内容趣味性的关键手段,正在被越来越多的平台采纳并深度定制。本文将…...
ArkTS中的空安全:全面解析与实践
# ArkTS中的空安全:全面解析与实践 在ArkTS编程领域,空安全是一个极为关键的特性,它在很大程度上影响着代码的稳定性和可靠性。今天,我们就深入探究一下ArkTS中的空安全机制,看看它是如何保障我们的代码质量的。 ## A…...
C语言基础语法详解:从入门到掌握
C 基础语法 C 语言是一种通用的编程语言,广泛应用于系统编程、嵌入式开发和高性能计算等领域。 C 语言具有高效、灵活、可移植性强等特点,是许多其他编程语言的基础。 在 C 语言中,令牌(Token)是程序的基本组成单位…...
如何把两个视频合并成一个视频?无需视频编辑器即可搞定视频合并
在日常生活中,我们经常需要将多个视频片段合并成一个完整的视频,例如制作旅行记录、剪辑教学视频或拼接短视频素材。简鹿视频格式转换器是一款功能强大的工具,不仅可以进行视频格式转换,还支持视频合并功能。以下是使用简鹿视频格…...
Servlet小结
视频链接:黑马servlet视频全套视频教程,快速入门servlet原理servlet实战 什么是Servlet? 菜鸟教程:Java Servlet servlet: server applet Servlet是一个运行在Web服务器(如Tomcat、Jetty)或应用…...
C语言面试高频题——define 和typedef 的区别?
1. 基本概念 (1) #define 定义:#define 是预处理指令,用于定义宏。作用:在编译之前进行文本替换。语法:#define 宏名 替换内容示例:#define PI 3.14159 #define SQUARE(x) ((x) * (x))(2) typedef 定义:…...