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

计算机网络-八股-学习摘要

一:HTTP的基本概念

全称:

超文本传输协议

从三个方面介绍HTTP协议

1,超文本:我们先来理解「文本」,在互联网早期的时候只是简单的字符文字,但现在「文本」的涵义已经可以扩展为图片、视频、压缩包等,在 HTTP 眼里这些都算作「文本」。再来理解「文本」,它就是超越了普通文本的文本,它是文字、图片、视频等的混合体,最关键有超链接,能从一个超文本跳转到另外一个超文本。HTML 就是最常见的超文本了,它本身只是纯文字文件,但内部用很多标签定义了图片、视频等的链接,再经过浏览器的解释,呈现给我们的就是一个文字、有画面的网页了。
2,传输:从A->B或者从B->A,这里表示HTTP是一个双向的协议。我们在上网冲浪时,浏览器是请求方 A,百度网站就是应答方 B。双方约定用 HTTP 协议来通信,于是浏览器把请求数据发送给网站,网站再把一些数据返回给浏览器,最后由浏览器渲染在屏幕,就可以看到图片、视频了。
3,协议:协议表示的是两者以上共同履行的一个约定,或一个规范,超文本传输协议HTTP 使用计算机能够理解的语言确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式。 

二:常见的状态码:

1)1xx: 信息响应

100 Continue:服务器已接收请求的初步部分,客户端应继续请求。

101 Switching Protocols:服务器同意切换协议,如从HTTP 切换到 WebSocket.

2)2xx: 成功

200 OK:请求成功,服务器返回所请求的资源或数据。

201 Created:请求成功并创建了新的资源,常用于 POST 请求。204 No Content:请求成功但服务器不返回任何内容,常用于除操作。

3)3xx: 重定向

301 Moved Permanently:资源已永久移动到新的 URL,客户端应使用新 URL 访问

302 Found:资源临时移动到新的 URL,客户端应继续使用原来的 URL。

304 Not Modified:资源未修改,客户端可以使用缓存版本

4)4xx: 客户端错误

400 Bad Request:请求无效或语法错误,服务器无法处理,

401 Unauthorized:请求需要身份验证,客户端未提供有效的凭证。

403 Forbidden:服务器理解请求但拒绝执行,通常是权限问题。

404 Not Found:请求的资源在服务器上未找到。

5)5xx: 服务器错误

500 Internal Server Error:服务器内部错误,无法完成请求。

502 Bad Gateway:服务器作为网关或代理,从上游服务器接收到无效响应。

503 Service Unavailable:服务器暂时无法处理请求,通常是因为过载或维护

三:HTTP请求、响应的内容

请求:
请求行

请求行是 HTTP 请求的第一行,包含了以下三个部分:

请求方法:指明客户端要对服务器执行的操作,常见的有:

GET:用于从服务器获取资源,请求的资源会附带在响应中返回,例如在浏览器地址栏输入网址访问网页,就是使用 GET 方法向服务器请求网页资源。

POST:通常用于向服务器提交数据,比如在网页上填写表单并提交时,一般会使用 POST 方法将表单数据发送到服务器。

PUT:用于更新服务器上的资源,将请求体中的数据替换指定的资源。

DELETE:用于删除服务器上指定的资源。

等等.....

请求 URL:指定客户端要请求的资源的统一资源定位符(URL)地址,它标识了请求的目标资源在服务器中的位置,例如https://www.example.com/index.html 。

协议版本:指定客户端使用的 HTTP 协议版本,常见的有 HTTP/1.0、HTTP/1.1 等,例如HTTP/1.1 。

求头

请求头是客户端发送给服务器的附加信息,包含了客户端的相关配置和要求等元数据,常见的有:

Host:指定请求的目标服务器的主机名端口号(若端口号是默认的 80(HTTP)或 443(HTTPS),则端口号可省略),用于服务器识别请求的目标。

User - Agent:标识发起请求的客户端应用程序的信息,包括浏览器类型、版本、操作系统、设备类型等,例如Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 ,服务器可据此返回适合该客户端的内容。

Accept:指定客户端能够接受的响应内容的类型(MIME 类型),例如text/html,application/json ,表示客户端可以接受 HTML 和 JSON 格式的数据。

Content - Type:当请求体中包含数据时,用于指定请求体中发送的数据的类型,比如application/x - www - form - urlencoded 表示表单数据以 URL 编码形式发送,application/json 表示请求体是 JSON 格式的数据。

Authorization:用于在请求中传递授权凭证,以便客户端进行身份验证,例如包含访问令牌等信息,服务器据此验证客户端是否有权限访问请求的资源。

Cookie:用于在请求中传递保存在客户端的会话信息,服务器可以利用这些信息识别用户身份、跟踪用户会话等。

Accept - Charset:指示客户端可以接受的字符集,如utf - 8 ,表示接受 UTF - 8 编码的数据。

Accept - Encoding:指示客户端可以接受的内容编码方式,常见的有gzip 、deflate 等,服务器可以按照客户端支持的方式对响应数据进行压缩。

Accept - Language:指示客户端可以接受的语言,例如en - US 表示接受美国英语,服务器可据此返回对应语言的内容。

Referer:指示当前请求页面的来源页面地址,用于跟踪用户从哪个页面发起的请求,例如从页面 A 点击链接跳转到页面 B,页面 B 的请求头中的 Referer 字段会包含页面 A 的地址。

Connection:主要用于控制客户端和服务器之间的连接行为。keep - alive:这是 HTTP/1.1 协议中的默认值。它表示客户端希望在本次请求完成后,该 TCP 连接不会立即关闭,而是保持打开状态,以便后续可以在同一个连接上发送新的 HTTP 请求。值为close:表示客户端希望在本次请求完成后,服务器关闭该 TCP 连接。

http响应:

状态行

状态行由三部分组成,用于描述响应的状态信息,具体如下:

协议版本:表明服务器使用的 HTTP 协议版本,常见的有 HTTP/1.0、HTTP/1.1、HTTP/2 等。例如 “HTTP/1.1” 。

状态码:是一个三位数,用于表示请求的处理结果,常见的状态码有:

200 OK:表示服务器成功处理了请求,请求的资源正常返回。

状态描述:是对状态码的简短文本描述,用于更直观地说明状态码的含义,例如 “OK” 对应状态码 200,“Not Found” 对应状态码 404 等。

响应头

响应头由多个键值对组成,包含了与响应有关的元数据,常见的响应头有:

Content - Type:指定响应体的内容类型(MIME 类型)和字符集,例如 “text/html; charset=utf - 8” 表示响应体是 HTML 格式,字符编码为 UTF - 8;“application/json” 则表示响应体是 JSON 格式的数据。

Content - Length:用于指定响应体的长度(字节数),以便客户端知道需要接收多少数据。

Location:在重定向响应(如 301、302 状态码)中,该字段指定资源新的 URL 地址,客户端会根据此地址重新发送请求。

Set - Cookie:用于在客户端设置 Cookie,服务器可以通过它来识别用户身份、跟踪用户会话等,例如 “Set - Cookie: session_id=123456; expires=Thu, 01 - Jan - 2026 00:00:00 GMT; path=/” 。

Cache - Control:指定缓存策略,控制客户端和中间缓存服务器如何缓存和处理响应,例如 “Cache - Control: no - cache” 表示不允许缓存,每次都需要从服务器获取最新内容;“Cache - Control: max - age = 3600” 表示响应可以被缓存,且在 3600 秒内是有效的。

Date:表示服务器生成响应的日期和时间,例如 “Date: Sat, 26 Nov 2023 08:45:30 GMT” 。

Server:指明处理请求的 Web 服务器软件信息,如 “Server: Apache/2.4.41 (Ubuntu)” ,但出于安全考虑,有时服务器可能会隐藏或模糊此信息。

Expires:指定响应的过期时间,在该时间之后,缓存的响应将被视为无效,需要重新从服务器获取,例如 “Expires: Thu, 01 Dec 2023 12:00:00 GMT” 。

Last - Modified:表示所请求资源在服务器上的最后修改时间,客户端可以利用这个信息进行缓存验证,例如 “Last - Modified: Mon, 15 Nov 2023 10:30:00 GMT” 。

Connection:主要用于控制客户端和服务器之间的连接行为。值为keep - alive:服务器通过该值告知客户端,本次响应完成后,连接将保持打开状态,客户端可以继续在该连接上发送新请求。值为close:表示服务器在发送完本次响应后,会关闭该 TCP 连接。当服务器检测到客户端可能存在异常行为、资源紧张或者需要强制关闭连接等情况时,可能会在响应头中设置Connection: close 

四:GET和POST的区别

浏览器行为

GET:通常用于获取资源,浏览器会将 GET 请求的 URL 显示在地址栏中,用户可以直接在地址栏输入 URL 发起 GET 请求,并且可以对其进行收藏。例如,在浏览器中输入百度的搜索词,URL 会包含搜索内容,此时就是一个 GET 请求。

POST:一般用于向服务器提交数据,浏览器不会在地址栏中显示 POST 请求的数据,用户无法直接通过地址栏发起 POST 请求,也不能直接收藏 POST 请求。例如,用户登录网站时,输入的用户名和密码通过 POST 请求发送,这些信息不会显示在地址栏。

传参方式

GET:参数通过 URL 的查询字符串传递,多个参数之间用&符号分隔。例如,http://example.com/search?keyword=apple&page=1,其中keyword和page是参数名,apple和1是对应的值。URL 的长度受限于浏览器和服务器的限制,一般较短。

POST:参数放在请求体中,不在 URL 中显示。请求体可以包含各种格式的数据,如表单数据(application/x-www-form-urlencoded)、JSON 数据(application/json)等。这种方式理论上对数据长度没有限制,适用于传输大量数据。

安全性

GET:由于参数暴露在 URL 中,容易被他人通过查看浏览器历史记录、服务器日志等方式获取,安全性较差。例如,如果在 GET 请求的 URL 中传递密码,很容易被泄露。

POST:参数在请求体中,相对不易被窃取,但这并不意味着 POST 请求就是绝对安全的。如果传输过程没有加密(如未使用 HTTPS),数据仍然可能被拦截和篡改。要确保安全性,还需要结合其他安全措施,如加密传输、身份验证等。

幂等性

GET:具有幂等性,即多次执行相同的 GET 请求,对服务器资源的影响是相同的,不会产生额外的副作用。例如,多次请求获取一篇文章的内容,每次得到的结果应该是一样的,且不会对文章本身造成改变。

POST:不具有幂等性,多次提交相同的 POST 请求,可能会在服务器上创建多个相同的资源。例如,多次提交订单创建请求,可能会产生多个相同的订单。

缓存机制

GET:通常可以被浏览器缓存,因为 GET 请求主要用于获取资源,且多次请求结果相同。浏览器可以根据缓存策略,直接从本地缓存中返回响应,减少服务器负载和网络传输。例如,用户刷新页面时,如果资源在缓存有效期内,浏览器可能直接从缓存中加载。

POST:一般不会被缓存,因为 POST 请求用于提交数据,每次请求的结果可能不同,缓存没有意义。而且如果缓存 POST 请求,再次使用缓存数据时可能会导致重复提交等问题。

TCP 连接

GET:在发送请求时,浏览器会先将请求头和参数组装好,然后一次性发送给服务器。因为 GET 请求的参数通常在 URL 中,数据量相对较小,这种一次性发送的方式效率较高。一般可以复用

POST:浏览器会先发送请求头,服务器响应后再发送请求体。这是因为 POST 请求的请求体可能较大,分头发送可以让服务器先处理请求头中的信息,如验证用户身份等,然后再根据情况处理请求体。但在实际应用中,现代浏览器和服务器的优化机制可能会使这种差异不太明显。某些情况会启用新的tcp链接

数据发送

GET:适合发送少量的数据,因为 URL 长度有限制。一般来说,不同浏览器对 URL 长度的限制不同,但通常在几千字节左右。如果数据量过大,可能会导致请求失败。

POST:适合发送大量数据,因为请求体理论上没有大小限制。这使得 POST 请求在处理如文件上传、大量表单数据提交等场景时更为适用。

五:HTTP缓存技术

对于一些具有重复性的 HTTP 请求,比如每次请求得到的数据都一样的,我们可以把这对「请求-响应」的数据都缓存在本地,那么下次就直接读取本地的数据,不必在通过网络获取服务器的响应了 

强制缓存:
强缓存是利用下面这两个 HTTP 响应头部(Response Header)字段实现的,它们都用来表示资源在客户端缓存的有效期:Cache-Control, 是一个相对时间;Expires,是一个绝对时间;如果 HTTP 响应头部同时有 Cache-Control 和 Expires 字段的话,Cache-Control 的优先级高于 Expires 。

Cache-control 选项更多一些,设置更加精细,所以建议使用 Cache-Control 来实现强缓存。具体的实现流程如下:

当浏览器第一次请求访问服务器资源时,服务器会在返回这个资源的同时,在 Response 头部加上 Cache-Control,Cache-Control 中设置了过期时间大小

浏览器再次请求访问服务器中的该资源时,会先通过请求资源的时间与 Cache-Control 中设置的过期时间大小,来计算出该资源是否过期,如果没有,则使用该缓存,否则重新请求服务器;

服务器再次收到请求后,会再次更新 Response 头部的 Cache-Control。

协商缓存:

当我们在浏览器使用开发者工具的时候,你可能会看到过某些请求的响应码是 304,这个是告诉浏览器可以使用本地缓存的资源,通常这种通过服务端告知客户端是否可以使用缓存的方式被称为协商缓存。 

协商缓存可以基于两种头部来实现。

第一种:请求头部中的 If-Modified-Since 字段与响应头部中Last-Modified 字段实现,这两个字段的意思是:

响应头部中的 Last-Modified:标示这个响应资源的最后修改时间;

请求头部中的 If-Modified-Since:当资源过期了,发现响应头中具有Last-Modified 声明,则再次发起请求的时候带上 Last-Modified 的时间,服务器收到请求后发现有 If-Modified-Since 则与被请求资源的最后修改时间进行对比(Last-Modified),如果最后修改时间较新(大),说明资源又被改过,则返回最新资源,HTTP 200 OK;如果最后修改时间较旧(小),说明资源无新修改,响应 HTTP 304 走缓存。

第二种:请求头部中的 If-None-Match 字段与响应头部中的 ETag 字段,这两个字段的意思是:

响应头部中 Etag:唯一标识响应资源;

请求头部中的 If-None-Match:当资源过期时,浏览器发现响应头里有 Etag,则再次向服务器发起请求时,会将请求头 If-None-Match 值设置为 Etag 的值。服务器收到请求后进行比对,如果资源没有变化返回 304,如果资源变化了返回 200。

第一种实现方式是基于时间实现的,第二种实现方式是基于一个唯一标识实现的,相对来说后者可以更加准确地判断文件内容是否被修改,避免由于时间篡改导致的不可靠问题。

如果在第一次请求资源的时候,服务端返回的 HTTP 响应头部同时有 Etag 和 Last-Modified 字段,那么客户端再下一次请求的时候,如果带上了 ETag 和 Last-Modified 字段信息给服务端,这时 Etag 的优先级更高,也就是服务端先会判断 Etag 是否变化了,如果 Etag 有变化就不用在判断 Last-Modified 了,如果 Etag 没有变化,然后再看 Last-Modified。

**为什么 ETag 的优先级更高?**这是因为 ETag 主要能解决 Last-Modified 几个比较难以解决的问题:

在没有修改文件内容情况下文件的最后修改时间可能也会改变,这会导致客户端认为这文件被改动了,从而重新请求;

可能有些文件是在秒级以内修改的,If-Modified-Since 能检查到的粒度是秒级的,使用 Etag就能够保证这种需求下客户端在 1 秒内能刷新多次;

有些服务器不能精确获取文件的最后修改时间。

注意,协商缓存这两个字段都需要配合强制缓存中 Cache-Control 字段来使用,只有在未能命中强制缓存的时候,才能发起带有协商缓存字段的请求。

相关文章:

计算机网络-八股-学习摘要

一:HTTP的基本概念 全称: 超文本传输协议 从三个方面介绍HTTP协议 1,超文本:我们先来理解「文本」,在互联网早期的时候只是简单的字符文字,但现在「文本」的涵义已经可以扩展为图片、视频、压缩包等&am…...

编程速递-庆祝Delphi诞生30周年!

庆祝Delphi 30周年纪念是一个特别的时刻。 回到1995年,也就是30年前,在微软Windows和互联网时代的曙光初现之时,Borland Delphi的创建者们无法想象,当时使用Borland Delphi构建的应用程序至今仍在运行——为全世界数十亿人服务。…...

每天五分钟深度学习框架pytorch:搭建谷歌的Inception网络模块

本文重点 前面我们学习了VGG,从现在开始我们将学习谷歌公司推出的GoogLeNet。当年ImageNet竞赛的第二名是VGG,而第一名就是GoogLeNet,它的模型设计拥有很多的技巧,这个model证明了一件事:用更多的卷积,更深的层次可以得到更好的结构 GoogLeNet的网络结构 如图所示就是Go…...

性能测试流程、主流性能工具

性能测试流程 性能测试流程 测试测试需求分析 性能测试计划和方案 测什么: 测试背景 测试目的 测试范围 谁来测: 进度和分工 交付清单 怎么测: 测试策略 性能测试用例设计 性能测试测试执行 性能分析和调优 性能测试报告 测试报告是…...

DeepSeek4j 已开源,支持思维链,自定义参数,Spring Boot Starter 轻松集成,快速入门!建议收藏

DeepSeek4j Spring Boot Starter 快速入门 简介 DeepSeek4j 是一个专为 Spring Boot 设计的 AI 能力集成启动器,可快速接入 DeepSeek 大模型服务。通过简洁的配置和易用的 API,开发者可轻松实现对话交互功能。 环境要求 JDK 8Spring Boot 2.7Maven/Gr…...

无耳科技 Solon v3.0.8 发布,Java 企业级应用开发框架

Solon 框架! Solon 是新一代,Java 企业级应用开发框架。是杭州无耳科技有限公司的“根级”开源项目(最近“杭州六小龙”很火啊,我们也是杭州的哦)。从零开始构建(No Spring、No Java-EE、No Servlet&#…...

【吾爱出品】针对红警之类老游戏适用WIN10和11的补丁cnc-ddraw7.1汉化版

针对红警之类老游戏适用WIN10和11的补丁cnc-ddraw7.1汉化版 链接:https://pan.xunlei.com/s/VOJ8PZd4avMubnDzHQAeZDxWA1?pwdnjwm# 直接复制到游戏安装目录,保持与游戏主程序同目录下。...

使用 playwright 自定义 js 下载的路径和文件名

遇到一个问题,点击按钮自动下载文件,路径和文件名都不能自定义,可以用 playwright 来解决这个问题 from playwright.sync_api import sync_playwright import os import time class ExcelDownloader: def __init__(self, download_pat…...

Kafka分区管理大师指南:扩容、均衡、迁移与限流全解析

#作者:孙德新 文章目录 分区分配操作(kafka-reassign-partitions.sh)1.1 分区扩容、数据均衡、迁移(kafka-reassign-partitions.sh)1.2、修改topic分区partition的副本数(扩缩容副本)1.3、Partition Reassign场景限流1.4、节点内副本移动到不…...

3.从零开始学会Vue--{{生命周期,工程化,组件化}}

1.生命周期钩子 1.是什么 生命周期 概念:就是一个Vue实例从创建 到 销毁 的整个过程 生命周期包括:① 创建 ② 挂载 ③ 更新 ④ 销毁 四个阶段 1.创建阶段:创建响应式数据 2.挂载阶段:渲染模板 3.更新阶段:修改…...

Python--网络编程

3. 网络编程与Socket 3.1 Socket基础 创建Socket import socket# TCP Socket tcp_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# UDP Socket udp_socket socket.socket(socket.AF_INET, socket.SOCK_DGRAM)服务器端函数 函数描述​bind((host, port))​绑定…...

【java】方法的基本内存原理(栈和堆)

java内存主要分为栈和堆,方法相关的部分主要在栈内存里,每个方法调用时会在栈里创建一个栈帧,存放局部变量和方法执行的信息。执行完后栈帧被销毁,局部变量消失。而对象实例存在堆里,由垃圾回收器管理。 **Java方法内…...

SQLMesh 系列教程4- 详解模型特点及模型类型

SQLMesh 作为一款强大的数据建模工具,以其灵活的模型设计和高效的增量处理能力脱颖而出。本文将详细介绍 SQLMesh 模型的特点和类型,帮助读者快速了解其强大功能。我们将深入探讨不同模型类型(如增量模型、全量模型、SCD Type 2 等&#xff0…...

SpringBoot(接受参数相关注解)

文章目录 1.基本介绍2.PathVariable 路径参数获取信息 1.代码实例 1.index.html2.ParameterController.java3.测试 2.细节说明 3.RequestHeader 请求头获取信息 1.代码实例 1.index.html2.ParameterController.java3.测试 2.细节说明 4.RequestParameter 请求获取参数信息 1.…...

hbase合并队列超长问题分析

问题现象 hbase集群合并队列超长,有节点上合并任务已经运行超过1天未结束,合并队列总长不断增加。 问题分析 参数配置: 配置参数默认值含义hbase.hregion.memstore.flush.size128MMemStore达到该值会Flush成StoreFilehbase.hregion.memstore.block.multiplier4当region中…...

FPGA的星辰大海

编者按 时下风头正盛的DeepSeek,正值喜好宏大叙事的米国大统领二次上岗就业,OpenAI、软银、甲骨文等宣布投资高达5000亿美元“星际之门”之际,对比尤为强烈。 某种程度上,,是低成本创新理念的直接落地。 包括来自开源社区的诸多赞誉是,并非体现技术有多“超越”,而是…...

认识vue-admin

认识vue-admin **核心交付:** 为什么要基于现成架子二次开发 什么是二次开发:基于已有的代码(项目工程,脚手架)开进行新功能的开发 所以看懂已有的框架中的既有代码,变得很重要了 1. 背景知识 后台管理系统是一种最…...

STM32、GD32驱动TM1640原理图、源码分享

一、原理图分享 二、源码分享 /************************************************* * copyright: * author:Xupeng * date:2024-07-18 * description: **************************************************/ #include "smg.h"#define DBG_TAG "smg&…...

spring boot 对接aws 的S3 服务,实现上传和查询

1.aws S3介绍 AWS S3(Amazon Simple Storage Service)是亚马逊提供的一种对象存储服务,旨在提供可扩展、高可用性和安全的数据存储解决方案。以下是AWS S3的一些主要特点和功能: 1.1. 对象存储 对象存储模型:S3使用…...

PH热榜 | 2025-02-12

1. FirstHR 2.0 with HR Copilot 标语:小型企业的一站式人力资源平台 介绍:对小型企业来说,FirstHR是一个人力资源平台,专注于招聘和团队发展,并融合了一点人工智能技术。 产品网站: 立即访问 Product …...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

Java编程之桥接模式

定义 桥接模式&#xff08;Bridge Pattern&#xff09;属于结构型设计模式&#xff0c;它的核心意图是将抽象部分与实现部分分离&#xff0c;使它们可以独立地变化。这种模式通过组合关系来替代继承关系&#xff0c;从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...