深入解析网络协议:从OSI七层模型到HTTP与TCP/IP的关系
在网络的世界里,理解不同协议如何协同工作以实现高效、可靠的通信至关重要。无论是构建动态的Web应用,还是进行复杂的网络编程,对基础协议的理解都是不可或缺的。本文首先介绍OSI七层模型,这是一个为网络系统设计提供通用参考框架的标准模型。接着,我们将探讨当你在浏览器中输入一个网址后发生的一系列过程,包括DNS查询、建立TCP连接、发送HTTP请求等关键步骤。此外,我们还将详细讨论如何安全有效地实现跨域资源共享(CORS),以及HTTP协议从1.0版本到2.0版本的发展历程和它们之间的区别。最后,文章将深入分析HTTP协议与TCP/IP协议之间的关系,解释它们是如何共同作用来支持现代互联网的运作的。
通过阅读本文,读者不仅能够获得关于网络通信底层原理的知识,还能理解这些原理如何应用于实际的Web开发和网络编程中。无论你是初学者还是有一定经验的技术人员,都可以从中得到启发,并加深对网络架构的理解。让我们一起探索这个由协议构成的精彩世界吧!
1.OSI 的七层模型都有哪些?
OSI(开放系统互联模型)是一个定义了网络通信功能分层框架的标准模型。它由国际标准化组织(ISO)提出,旨在为不同的网络系统提供一个通用的参考框架。OSI模型分为七层,每一层都负责处理特定类型的网络功能,并与相邻的上下层进行交互。以下是OSI七层模型从高层到低层的概述:
-
应用层(Application Layer):
- 这是最接近最终用户的层次,直接为应用程序提供网络服务。
- 负责支持网络应用程序及实现用户希望执行的所有网络通信任务,例如电子邮件、文件传输等。
- 相关协议包括HTTP、HTTPS、FTP、SMTP等。
-
表示层(Presentation Layer):
- 主要负责数据格式转换、加密解密以及压缩等操作。
- 确保发送方的数据能够被接收方理解,解决不同系统间的数据表示差异问题。
- 例如SSL/TLS加密就在此层处理。
-
会话层(Session Layer):
- 管理会话,即控制和管理不同机器上的应用程序之间的对话。
- 负责建立、管理和终止会话,并维护会话状态。
- 支持远程过程调用(RPC)、命名服务等功能。
-
传输层(Transport Layer):
- 提供端到端的错误检测和恢复服务,确保数据可靠地从源地址传输到目的地址。
- 包含TCP和UDP两种主要协议,前者提供可靠的连接导向服务,后者则提供较不稳定的无连接服务。
-
网络层(Network Layer):
- 处理数据包在网络中的传输路径选择问题。
- 决定如何将数据从源地址路由到目的地址,涉及IP寻址和路由选择。
- 核心协议是IP(Internet Protocol),还包括ICMP、ARP等。
-
数据链路层(Data Link Layer):
- 关注物理连接上相邻节点间的可靠数据传输。
- 分为两个子层:逻辑链路控制(LLC)和媒体访问控制(MAC)。负责帧同步、差错控制、流量控制等功能。
- 常见协议如以太网、PPP等。
-
物理层(Physical Layer):
- 最底层,涉及到实际的物理连接介质,如电缆、光纤、无线电波等。
- 定义了电信号或光信号的形式、电压水平、物理连接器规格等。
- 负责比特流的传输。
每层都依赖于其下一层提供的服务,并向上一层提供服务。这种分层结构使得网络设计更加模块化,便于故障排查和技术更新。
2.浏览器中输入: “www.woaijava.com”之后都发生了什么? 请详细阐述
当你在浏览器地址栏中输入www.woaijava.com
并按下回车键后,一系列复杂的操作将在后台展开,从DNS解析开始直到网页内容完全加载显示在屏幕上。以下是这一过程的详细步骤:
1. URL解析与检查
- 浏览器首先会检查你输入的内容是否是一个有效的URL,并尝试补全协议(如http://或https://)。
2. DNS查询
- 查找域名对应的IP地址:浏览器首先检查本地缓存(包括浏览器缓存和操作系统缓存),如果找不到,则向配置的DNS服务器发送查询请求。
- 如果本地DNS服务器没有所需信息,它将递归地查询其他DNS服务器直至找到
www.woaijava.com
对应的IP地址。
3. 建立TCP连接
- 使用第二步获取到的IP地址,浏览器试图通过TCP协议与目标Web服务器建立连接。这通常涉及到三次握手过程以确保双方都准备好进行数据交换。
4. SSL/TLS握手(如果是HTTPS)
- 如果目标网站使用HTTPS协议,浏览器与服务器之间还需完成SSL/TLS握手过程,以协商加密算法、验证服务器身份并交换密钥,从而创建一个安全的通信通道。
5. 发送HTTP/HTTPS请求
- 连接成功后,浏览器构建并发送HTTP GET请求(或其他类型的请求,比如POST)到服务器,包含请求行(方法、URI、版本)、头部字段以及可能的消息体(对于非GET请求)。
6. 服务器处理请求
- Web服务器接收到请求后,根据请求路径确定要返回的资源。这可能涉及执行服务器端脚本(如PHP、Java等)来动态生成页面内容。
7. 返回响应
- 服务器生成响应消息,包括状态行(如200 OK)、响应头部以及响应正文(HTML文档、图片等)。然后将此响应发送回客户端。
8. 渲染页面
- 解析HTML:浏览器开始解析HTML文档,构建DOM树。
- 加载资源:当遇到外部资源(如CSS、JavaScript文件、图片等)时,浏览器会发起新的HTTP或HTTPS请求去下载这些资源。
- 构建渲染树:结合DOM树和CSSOM(CSS对象模型),形成渲染树,决定哪些节点可见及它们的样式。
- 布局与绘制:计算各元素的确切尺寸和位置(布局阶段),并将最终图像绘制到屏幕上(绘制阶段)。
9. 执行JavaScript
- 如果页面中有嵌入的JavaScript代码,在适当时候会被执行。JavaScript可以修改DOM结构,改变页面的行为或外观。
10. 用户交互
- 页面加载完成后,用户可以与页面进行交互,触发事件处理程序,进一步动态更新页面内容。
整个流程中,可能会有多个往返于客户端和服务器之间的通信,特别是对于动态内容或者需要加载大量外部资源的页面。此外,现代浏览器还采用各种优化技术,如预取、预加载、延迟加载等,来提高性能和用户体验。
3.如何实现跨域?
跨域资源共享(CORS,Cross-Origin Resource Sharing)是一个W3C标准,它允许服务器声明哪些源可以访问其资源。当一个资源试图从不同的域名、协议或端口请求另一个资源时,就会发生跨域请求。为了安全地实现跨域,有几种方法可以采用:
1. CORS(跨域资源共享)
这是最常用的解决方案之一,通过设置HTTP响应头来允许特定的跨域请求。
-
简单请求:对于GET、HEAD或POST请求(且没有自定义头部,除了被浏览器自动添加的),如果Content-Type是
application/x-www-form-urlencoded
,multipart/form-data
, 或者text/plain
,则被视为简单请求。在这种情况下,只需在服务器端设置适当的响应头即可:
Access-Control-Allow-Origin: http://example.com
-
预检请求:对于非简单请求(如PUT, DELETE请求或者设置了自定义头部的请求),浏览器会先发送一个OPTIONS请求进行预检,询问服务器是否允许实际请求。
需要在服务器端设置以下响应头:
Access-Control-Allow-Origin: http://example.com Access-Control-Allow-Methods: POST, GET, OPTIONS Access-Control-Allow-Headers: Content-Type, Authorization Access-Control-Max-Age: 86400 // 缓存预检请求的结果一天
2. JSONP(JSON with Padding)
一种较老的技术,主要用于支持旧版浏览器。它利用了<script>
标签不受同源策略限制的特点,通过动态创建<script>
元素并指定src属性为需要跨域访问的URL来实现数据获取。
<script src="http://otherdomain.com/data.json?callback=myCallback"></script>
服务器返回的数据格式类似如下:
myCallback({"key": "value"});
但是,JSONP仅支持GET请求,并存在一定的安全隐患。
3. 使用代理
如果无法直接修改服务器以支持CORS,可以在同一域名下部署一个代理服务器。前端向这个代理服务器发起请求,代理服务器再向目标服务器转发请求并将结果返回给前端。
例如,在Node.js中使用Express框架创建一个简单的代理:
const express = require('express');
const request = require('request');
const app = express();app.use('/proxy', (req, res) => {const url = 'http://targetdomain.com' + req.url;req.pipe(request(url)).pipe(res);
});app.listen(3000, () => console.log('Proxy server running on port 3000'));
4. WebSocket
WebSocket协议本身并不受同源策略的限制,因此可以通过WebSocket实现跨域通信。
5. 设置文档.domain属性(仅限于子域之间)
如果两个页面属于同一个顶级域名下的不同子域名,可以通过设置document.domain
为相同的顶级域名来解除跨域限制。
例如,假设有一个页面位于a.example.com
,另一个页面位于b.example.com
,两者都可以执行document.domain = "example.com"
来共享脚本和资源。
总结
- 对于现代Web应用,推荐使用CORS作为解决跨域问题的主要手段。
- JSONP由于其局限性和安全性问题,现在较少使用。
- 当前端与后端不在同一域时,可以考虑使用代理服务器。
- WebSocket适用于需要实时双向通信的场景。
选择哪种方法取决于具体的应用需求和技术栈。
4.HTTP1.0、 HTTP1.1、 HTTP2.0的关系和区别
HTTP/1.0、HTTP/1.1和HTTP/2是互联网协议HTTP的不同版本,它们各自代表了在不同时间点上对原始HTTP协议的改进和发展。下面详细介绍这三个版本的关系和主要区别:
HTTP/1.0
- 发布时间:1996年
- 特点:
- 每个请求都需要建立一个新的TCP连接,即所谓的“短连接”,这导致了较高的延迟,特别是在频繁请求小文件时效率低下。
- 不支持持久连接,默认情况下每次请求完成后就会关闭连接。
- 缺乏对管道化(pipelining)的支持,这意味着必须等待前一个响应返回才能发送下一个请求。
- 简单直接,但性能有限。
HTTP/1.1
- 发布时间:1999年
- 改进点:
- 持久连接:默认启用了持久连接(Keep-Alive),允许在一个TCP连接上发送多个请求和响应,减少了连接建立和断开的开销。
- 管道化:虽然理论上支持管道化(即可以不等待前一个响应就发送下一个请求),但由于服务器端实现的问题以及可能导致的队头阻塞问题,实际应用中并未广泛采用。
- 分块传输编码:允许服务器将响应体分割成多个部分逐个发送,适用于动态生成的内容。
- 虚拟主机:通过Host头部字段支持在同一IP地址上托管多个域名。
- 增强缓存机制:提供了更强大的缓存控制选项。
- 尽管做了许多改进,HTTP/1.1仍然存在一些限制,比如无法充分利用网络带宽,尤其是在高延迟网络环境中表现不佳。
HTTP/2
- 发布时间:2015年
- 重大改进:
- 二进制分帧层:不同于HTTP/1.x使用的文本协议,HTTP/2采用了二进制格式进行数据传输,提高了协议解析效率并减少了错误发生的可能性。
- 多路复用:允许在同一个TCP连接上同时发起多个请求和响应,解决了HTTP/1.x中的队头阻塞问题,极大地提高了页面加载速度。
- 头部压缩:使用HPACK算法压缩HTTP头部,减少了不必要的重复传输,节省了带宽。
- 服务器推送:服务器可以在客户端明确请求之前主动向客户端推送资源,如CSS、JavaScript等,进一步加快页面加载速度。
- 流优先级:允许客户端指定哪些资源更重要,以便优先加载关键资源。
- 安全性:虽然HTTP/2标准本身并不强制要求加密,但所有主流浏览器只支持基于TLS的HTTP/2(通常称为HTTPS),因此实际上大多数实现都是加密的。
总结
- 从HTTP/1.0到HTTP/1.1:主要是为了解决HTTP/1.0的低效性,增加了持久连接、管道化等功能,显著提升了性能。
- 从HTTP/1.1到HTTP/2:则是为了克服HTTP/1.1在现代Web应用中的局限性,引入了二进制分帧、多路复用、头部压缩等特性,使得网页加载更加高效和快速。
随着技术的发展,HTTP/3也已推出,它基于QUIC协议而非TCP,旨在进一步改善网络性能,特别是在移动和高丢包率的网络环境中。不过,HTTP/2依然是目前广泛部署和使用的主要HTTP版本之一。
5.说说HTTP协议与TCP/IP协议的关系
HTTP(超文本传输协议)和TCP/IP(传输控制协议/互联网协议)是互联网通信中不同层次的协议,它们各自在数据传输过程中扮演着不同的角色。理解这两者之间的关系有助于更好地掌握网络通信的基本原理。
TCP/IP协议栈
TCP/IP实际上是一个协议族,它定义了如何通过网络进行数据通信的一系列规则和标准。TCP/IP模型通常分为四层:
- 应用层:直接为应用程序提供服务,处理高层协议如HTTP、FTP、SMTP等。
- 传输层:负责端到端的数据传输,主要包括TCP和UDP两种协议。
- 网络层:负责路由选择和数据包转发,核心协议是IP(Internet Protocol)。
- 链路层:涉及物理连接上的数据传输,包括以太网、Wi-Fi等技术。
HTTP与TCP/IP的关系
-
HTTP位于应用层:HTTP是一种应用层协议,主要用于Web浏览器和Web服务器之间的通信。它定义了客户端如何向服务器发送请求以及服务器如何响应这些请求的标准。
-
依赖于TCP/IP:虽然HTTP本身并不直接处理数据的实际传输细节,但它依赖于下层的TCP/IP协议来完成这一任务。具体来说:
- HTTP使用TCP作为其传输层协议:这意味着每当一个HTTP请求被发起时,首先需要建立一个TCP连接(对于HTTP/1.1及以上版本,默认情况下会尝试复用现有的连接)。TCP提供了可靠的、面向连接的服务,确保数据能够按序到达且没有丢失或损坏。
- IP负责路由选择:一旦建立了TCP连接,IP协议就会接管数据包在网络中的路由工作,决定如何从源地址到达目标地址。
具体流程
当你在浏览器中输入一个网址(例如http://www.example.com
)并按下回车键时,以下步骤会发生:
- 浏览器解析URL,确定要访问的服务器地址。
- 如果尚未建立TCP连接,则启动TCP三次握手过程与目标服务器建立连接。
- 连接建立后,浏览器构建HTTP请求并通过已建立的TCP连接发送给服务器。
- 服务器接收到HTTP请求后,处理请求,并通过相同的TCP连接返回HTTP响应。
- 浏览器接收HTTP响应,并根据响应内容渲染网页。
总结
简而言之,HTTP是基于TCP/IP之上的一种应用层协议,用于实现Web客户端与服务器之间的通信。而TCP/IP则提供了底层的网络通信基础设施,确保数据能够在复杂的网络环境中可靠地传输。HTTP利用TCP提供的可靠传输服务来保证请求和响应的完整性,同时依靠IP来进行全球范围内的路由选择。因此,可以说HTTP是TCP/IP协议栈的一个用户,它利用了TCP/IP提供的功能来完成特定的应用层任务。
相关文章:
深入解析网络协议:从OSI七层模型到HTTP与TCP/IP的关系
在网络的世界里,理解不同协议如何协同工作以实现高效、可靠的通信至关重要。无论是构建动态的Web应用,还是进行复杂的网络编程,对基础协议的理解都是不可或缺的。本文首先介绍OSI七层模型,这是一个为网络系统设计提供通用参考框架…...
链表-相关面试算法题
目录 面试题 02.04. 分割链表 面试题 02.05. 链表求和 面试题 02.06. 回文链表 面试题 02.07. 链表相交 面试题 02.04. 分割链表 面试题 02.04. 分割链表 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点…...
CSS Overflow 属性详解
CSS Overflow 属性详解 在网页设计和开发中,CSS Overflow 属性是一个非常重要的特性,它决定了当内容超出其容器大小时应该如何处理。本文将详细介绍 CSS Overflow 属性的相关知识,包括其语法、作用、常用属性值以及一些实际应用场景。 1. CSS Overflow 属性概述 CSS Over…...
一、MySQL备份恢复
一、MySQL备份恢复 1.1 MySQL日志管理 数据库中数据丢失或被破坏可能原因 误删除数据库 数据库工作时,意外断电或程序意外终止 由于病毒造成的数据库损坏或丢失 文件系统损坏后,系统进行自检操作 升级数据库时,命令语句不严格 设备故…...
Python-04BeautifulSoup网络爬虫
2025-03-04-BeautifulSoup网络爬虫 记录BeautifulSoup网络爬虫的核心知识点 文章目录 2025-03-04-BeautifulSoup网络爬虫 [toc]1-参考网址2-学习要点3-核心知识点1. 安装2. 导入必要的库3. 发送 HTTP 请求4. 创建 BeautifulSoup 对象5. 解析 HTML 内容5.1 查找标签5.2 根据属性…...
记录uniapp小程序对接腾讯IM即时通讯无ui集成(2)
完成以上步骤之后开始进行登录,登陆就需要账号。这个账号我们可以在腾讯云中创建。 有了账号之后开始去小程序进行登陆操作。腾讯云接口文档 这里除了帐号还需要一个校验值userSig正常项目开发这个字段可以在登陆后让后端返回,现在是测试我们直接去控制…...
DE2115实现4位全加器和3-8译码器(FPGA)
一、配置环境 1、Quartus 18.1安装教程 软件:Quartus版本:Quartus 18.1语言:英文大小:5.78G安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.0GHz 内存4G(或更高) 下载通道①百度网盘丨64位下载…...
大白话面试中应对自我介绍
在面试中,自我介绍是开场的关键环节,它就像你递给面试官的一张“个人名片”,要让面试官快速了解你并对你产生兴趣。下面详细讲讲应对自我介绍的要点及回答范例。 一、自我介绍的时间把控 一般面试中的自我介绍控制在1 - 3分钟比较合适。时间…...
【JavaScript—前端快速入门】JavaScript 综合案例 — 猜数字
JavaScript 综合案例—猜数字 预期效果 需求 完成基本的页面布局在文本框输入数字后,点击"猜"按钮,结果那一行会显示"猜大了"或者"猜小了"每猜一次,就会增加一次猜的次数猜到数字后,结果显示要猜的…...
X Window---图形接口
摘抄自 鸟哥的linux私房菜 基础篇 第四版 有鉴于图形用户接口(Graphical User Interface, GUI) 的需求日益加重,在 1984 年由 MIT 与其他第三方首次发表了 X Window System ,并且更在 1988 年成立了非营利性质的 XFree86 这个组织。所谓的XFree86 其实是…...
CSS浮动详解
1. 浮动的简介 浮动是用来实现文字环绕图片效果的 2.元素浮动后会有哪些影响 对兄弟元素的影响: 后面的兄弟元素,会占据浮动元素之前的位置,在浮动元素的下面;对前面的兄弟 无影响。 对父元素的影响: 不能撑起父元…...
shell脚本编程实践第2天
1 内容格式化 1.1 输出格式化 1.1.1 echo解读 学习目标 这一节,我们从 基础知识、简单实践、小结、三个方面来学习。 基础知识 命令简介 echo命令的功能是将内容输出到默认显示设备,一般起到一个提示的作用。OPTIONS: -n 不要在最后自…...
wgcloud-server端部署说明
Wgcloud 是一款开源的轻量级服务器监控系统,支持多平台,可对服务器的 CPU、内存、磁盘、网络等指标进行实时监控。 以下是 Wgcloud Server端的详细部署步骤: 环境准备 服务器: 至少准备两台服务器,一台作为监控端&a…...
AES/CBC/PKCS5Padding加密
1、加密代码如下 public static String encryptAEs_CBC(String data,String key,byte[] iv) {Cipher cipher = null;try {cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");//位数不够,自动补一个长度int blocksize = cipher.getBlockSize();byte[] dataBytes …...
9.8 Visual Studio 2022安装Qt 和安装graphic
1.安装Qt 1. 安装Qt 首先打开Visual Studio,然后创建一个项目,再在最上面的一行依次打开“扩展-->管理扩展”,再在搜索框内搜索“QT”,显示如下界面: 再在右边QT右边有个“在浏览器中查看”,打开后出现…...
【C++设计模式】第四篇:建造者模式(Builder)
注意:复现代码时,确保 VS2022 使用 C17/20 标准以支持现代特性。 分步骤构造复杂对象,实现灵活装配 1. 模式定义与用途 核心目标:将复杂对象的构建过程分离,使得同样的构建步骤可以创建不同的表示形式。 常见场景&am…...
Spring Boot如何利用Twilio Verify 发送验证码短信?
Twilio提供了一个名为 Twilio Verify 的服务,专门用于处理验证码的发送和验证。这是一个更为简化和安全的解决方案,适合需要用户身份验证的应用。 使用Twilio Verify服务的步骤 以下是如何在Spring Boot中集成Twilio Verify服务的步骤: 1.…...
制造业中的“大数据”:如何实现精准决策?
在当今全球经济竞争日趋激烈、技术变革周期不断缩短的环境下,制造业面临着全新的挑战和机遇。随着信息技术的飞速发展,“大数据”正以前所未有的速度渗透到制造业的各个环节,帮助企业实现更精准的决策、更灵活的生产组织以及更敏捷的市场响应…...
Linux cat 命令
cat(英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上,它的主要作用是用于查看和连接文件。 使用权限 所有使用者 语法格式 cat [选项] [文件] 参数说明: -n:显示行号,会在输…...
CSS—flex布局、过渡transition属性、2D转换transform属性、3D转换transform属性
1.flex布局 也叫弹性布局,是浏览器提倡的布局模型,非常适合结构化布局,提供了强大的空间分布和对齐能力,不会产生浮动布局中脱标现象,布局网页更简单,更灵活。 flex容器属性: 属性描述d…...
Java UDP 通信:实现简单的 Echo 服务器与客户端
在计算机网络编程中,UDP(User Datagram Protocol)是一种无连接的传输层协议,它允许应用程序在不建立连接的情况下发送数据包。与 TCP 不同,UDP 不保证数据包的顺序、可靠性或完整性,但它具有低延迟和低开销…...
使用GitLink个人建站服务部署Allure在线测试报告
更多技术文章,访问软件测试社区 文章目录 🚀前言🔑开通GitLink个人建站服务1. 前提条件2. 登录GitLink平台(https://www.gitlink.org.cn/login)3. 进入设置>个人建站>我的站点4. 新建站点5. 去仓部进行部署6. 安…...
Mybatis plus异常: type `java.time.LocalDateTime` not supported by default
1、问题: Java数据库实体对象有字段如下: TableField(typeHandler JacksonTypeHandler.class) private Map<String, Object> dataDetail; 如果dataDetail中有LocalDateTime对象,在保存时会报如下异常: Caused by: com.…...
Django:文件上传时报错in a frame because it set ‘X-Frame-Options‘ to ‘deny‘.
即:使用Content-Security-Policy 1.安装Django CSP中间件: pip install django-csp 2.更改项目配置: # settings.py MIDDLEWARE [...csp.middleware.CSPMiddleware,... ]CSP_DEFAULT_SRC ("self",) CSP_FRAME_ANCESTORS (&q…...
腾讯云 | 微搭低代码快速开发数据表单应用
如上所示,登录腾讯云微搭低代码业务控制台,开始新创建一个应用,创建应用的方式包括,根据实际的业务需求,从模版列表中选择一个模板填入数据模型创建新应用,使用微搭组件自主设计数据模型创建新应用…...
【RabbitMQ】RabbitMQ的核心概念与七大工作模式
🔥个人主页: 中草药 🔥专栏:【中间件】企业级中间件剖析 在现代分布式系统和微服务架构中,消息队列(Message Queue) 是解决服务间通信、系统解耦和流量削峰的关键技术之一。而 RabbitMQ 作为一…...
金蝶ERP星空对接流程
1.金蝶ERP星空OPENAPI地址: 金蝶云星空开放平台 2.下载金蝶云星空的对应SDK包 金蝶云星空开放平台 3.引入SDK流程步骤 引入Kingdee.CDP.WebApi.SDK 右键项目添加引用,在打开的引用管理器中选择浏览页签,点击浏览按钮,找到从官…...
【C++】基于范围的for循环(range-based for loop)
一. std::vector 元素排布顺序 在 C 中,std::vector 是一个动态数组,用于存储同类型元素的序列。当你向 std::vector 中添加元素时(通常通过 push_back 方法),元素是按照你添加它们的顺序排列的。 具体来说ÿ…...
下载b站视频音频
文章目录 方案一:jjdown如何使用 方案二:bilibili哔哩哔哩下载助手如何使用进入插件网站插件下载插件安装 使用插件下载视频音频:复制音频下载地址 方案三:bat命令下载单个音频下载单个视频下载单个音视频 方案一:jjdo…...
LabVIEW DataSocket 通信库详解
dataskt.llb 是 LabVIEW 2019 内置的核心函数库之一,位于 vi.lib\Platform\ 目录下,专注于 DataSocket 技术的实现。DataSocket 是 NI 提供的网络通信协议,支持跨平台、跨设备的实时数据共享,广泛应用于远程监控、分布式系统集成等…...
金融项目实战
测试流程 测试流程 功能测试流程 功能测试流程 需求评审制定测试计划编写测试用例和评审用例执行缺陷管理测试报告 接口测试流程 接口测试流程 需求评审制定测试计划分析api文档编写测试用例搭建测试环境编写脚本执行脚本缺陷管理测试报告 测试步骤 测试步骤 需求评审 需求评…...
初始网络编程
什么是网络编程? 在网络通信协议下,不同计算机上运行的程序,进行的数据传输。 应用场景:即时通信、网游对战、金融证券、 国际贸易、邮件、等等。 不管是什么场景,都是计算机跟计算机之间通过网络进行数据传输。 …...
编译可以在Android手机上运行的ffmpeg程序
下载代码 git clone gitgithub.com:FFmpeg/FFmpeg.git git checkout n7.0建立build目录 mkdir build cd build创建build.sh脚本 vim build.sh这段脚本的主要功能是配置和编译 FFmpeg,使其能够在 Android 平台上运行,通过设置不同的架构和 API 级别&am…...
使用Kubernetes部署Spring Boot项目
目录 前提条件 新建Spring Boot项目并编写一个接口 新建Maven工程 导入 Spring Boot 相关的依赖 启动项目 编写Controller 测试接口 构建镜像 打jar包 新建Dockerfile文件 Linux目录准备 上传Dockerfile和target目录到Linux 制作镜像 查看镜像 测试镜像 上传镜…...
LC77. 组合
LC77. 组合 题目要求(一)回溯1. 解决思路2. 具体步骤3. 代码实现4. 复杂度分析5. 示例解释示例 1:示例 2: 6. 总结 LC77. 组合 题目要求 (一)回溯 要解决这个问题,我们需要生成从 [1, n] 范围内选择 k 个数的所有可能组合。组合的顺序不重要…...
Android中的ANR(Application Not Responding)现象
Android中的ANR(Application Not Responding)现象是指应用程序未能在规定的时间内响应系统或用户的输入事件,从而触发系统弹出的无响应对话框。以下是关于ANR现象的详细解释: 一、ANR现象的定义 ANR通常发生在以下情况ÿ…...
操作系统启动——前置知识预备
文章目录 1. 理解冯诺依曼体系结构1.1 简单见一见冯诺依曼1.2 进一步认识1.3 为什么一定要有内存的存在? 2. 操作系统2.1 概念2.2 设计OS的目的2.3 OS的核心功能2.4 如何理解“管理”二字?(小故事版)2.5 系统调用和库函数概念 3. 进程简述3.1 基本概念3.…...
Unity中VFX烟雾特效与场景中的碎片物体重叠时闪烁问题
双击Unity项目中vfx特效文件,选中VFX编辑器中的Output Particle节点,看右侧的Inspector窗口 这个图的BlendMode是Alpha, 意味着渲染队列是3000要关闭Z Write Mode, 其值设置为off最后一个属性Sorting Priorty 设置为50,意味着渲染队列在3000…...
[RN]React Native知识框架图详解
React Native 是一个基于 React 的跨平台移动应用开发框架。以下是 React Native 知识框架图的详细解析: React Native 知识框架 1. 核心概念 JSX:JavaScript XML 语法,类似 HTML 的语法,用于描述 UI 组件。组件(Com…...
每日OJ_牛客_游游的字母串_枚举_C++_Java
目录 牛客_游游的字母串_枚举 题目解析 C代码 Java代码 牛客_游游的字母串_枚举 游游的字母串 描述: 对于一个小写字母而言,游游可以通过一次操作把这个字母变成相邻的字母。a和b相邻,b和c相邻,以此类推。特殊的࿰…...
解锁MacOS开发:环境配置与应用开发全攻略
✨✨✨这里是小韩学长yyds的BLOG(喜欢作者的点个关注吧) ✨✨✨想要了解更多内容可以访问我的主页 小韩学长yyds-CSDN博客 目录 引言 一、MacOS 开发环境配置 (一)必备工具安装 (二)集成开发环境(IDE)选…...
IDEA 2025最新版2024.3.3软件安装、插件安装、语言设置
IntelliJ IDEA是一款由JetBrains公司开发的集成开发环境(IDE),主要用于Java语言的开发,它通过提供丰富的功能如智能代码补全、代码分析、版本控制集成等来提高开发效率。 IDEA有社区版和专业版两个版本,社区版是免费开…...
leetcode 0018 四数之和-medium
1 题目:四数之和 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复&#x…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_conf_add_dump
ngx_conf_add_dump 定义在src\core\ngx_conf_file.c static ngx_int_t ngx_conf_add_dump(ngx_conf_t *cf, ngx_str_t *filename) {off_t size;u_char *p;uint32_t hash;ngx_buf_t *buf;ngx_str_node_t *sn;ngx_conf_dump_t *cd;has…...
家政预约小程序用例图分析
在和客户进行需求沟通的时候,除了使用常规的问答的形式,我还使用图形化工具更深入的沟通。比如借助UML的用例图来开展系统分析,并且按照角色详细拆解了家政预约小程序的各个用例。在分析阶段思考的越多,沟通的越多,在系…...
unity学习62,尝试做第一个小游戏项目:flappy bird
目录 学习参考 1 创建1个unity 2D项目 1.1 2D项目模板选择 1.1.1 2D(built-in-Render pipeline) 1.1.2 universe 2D 1.1.3 这次选择 2D(built-in-Render pipeline) 1.2 创建项目 1.2.1 注意点 1.2.2 如果想修改项目名 2 导入美术资源包 2.1 下载一个flappy bird的…...
Windows10下本地搭建Manim环境
文章目录 1. 简介2. Python环境3. uv工具4. Latex软件5. 安装Manim数学库6. 中文支持参考 1. 简介 manim是个一科普动画的库, 本文用到的是社区版本。 2. Python环境 这个不用多说,可以参考其他的文章。记得把pip也安上。 3. uv工具 上面的pip是老…...
zabbix“专家坐诊”第277期问答
在线答疑:乐维社区 问题一 Q:这个怎么解决呢? A:缺少这个依赖。 Q:就一直装不上。 A:装 zabbix-agent2-7.0.0-releasel.el7.x86 64 需要前面提示的那个依赖才可以装。 问题二 Q:大佬,如果agen…...
解决git clone下载慢或者超时问题
在网上找了很多办法,直接最简单的使用镜像网站下载。 国内可用的镜像网站有: https://github.com.cnpmjs.org # 服务器位于香港https://gitclone.com # 服务器位于杭州https://doc.fastgit.org # 服务器位于香港 例如:将 git clone https:…...
机器学习:强化学习的epsilon贪心算法
强化学习(Reinforcement Learning, RL)是一种机器学习方法,旨在通过与环境交互,使智能体(Agent)学习如何采取最优行动,以最大化某种累积奖励。它与监督学习和无监督学习不同,强调试错…...