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

Api架构设计--- HTTP + RESTful

Api架构设计--- HTTP + RESTful

  • 什么是RESTful
  • RESTful 设计原则
    • RESTful 接口类型
    • RESTful 状态码
    • RESTful Uri设计原则
    • Api传参:QueryString 和 UriPath
  • RESTful和HTTP的区别
  • 注意事项

什么是RESTful

  • RESTful(Representational State Transfer)是一种基于HTTP协议设计网络应用程序接口(API)的架构风格,由Roy Fielding在2000年的博士论文中提出。其核心思想是以资源为中心,通过统一的接口对资源进行操作,实现客户端与服务器的解耦
  • 也就是RESTful是基于http定义了一组接口格式规范,用来规范所有http请求

RESTful 设计原则

核心原则

  • 资源导向(Resource-Based)
  • 所有事物抽象为资源(如用户、订单、文章),每个资源有唯一的标识符(URI,如 /users/123)。
  • 资源通过JSON与客户端交互。
  • 统一接口(Uniform Interface)
  • 定义了HTTP方法明确操作类型:
    GET:获取资源
    POST:创建资源
    PUT:更新资源(全量替换)
    PATCH:更新资源(部分修改)
    DELETE:删除资源
  • HTTP状态码标识结果
    如200 OK、404 Not Found等。
  • 无状态(Stateless)
  • 每个请求必须包含所有必要信息,服务器不保存客户端状态(如Session),提升扩展性和可靠性。
  • 可缓存(Cacheable)
  • 响应需明确是否可缓存(如通过Cache-Control头),减少重复请求
  • 客户端无需关注服务器架构细节(如负载均衡、代理层)
  • URI命名
  • 使用名词复数表示资源(如/users而非/getUser)。
  • 避免动词,用HTTP方法表达操作(如DELETE /users/123)。
  • 层级关系用/分隔(如/users/123/orders)。
  • URI中体现版本:/api/v1/users

RESTful 接口类型

GET

  • 用途:获取资源(查询数据)。
  • 特性:
    安全:不会修改服务器资源。
    幂等:多次请求结果相同。
    可缓存:响应可被浏览器或代理缓存。
  • 响应状态码:
    200 OK(成功)
    404 Not Found(资源不存在)
    304 Not Modified(缓存未更新)
GET /users/123         # 获取ID为123的用户信息
GET /users?role=admin  # 过滤角色为admin的用户

POST

  • 用途:创建新资源(或提交非幂等操作)。
  • 特性:
    非安全:会修改服务器资源。
    非幂等:多次调用可能产生不同结果(如重复提交订单)。
  • 响应状态码:
    201 Created(成功创建,响应头包含 Location: /users/456)
    400 Bad Request(请求数据不合法)
    409 Conflict(资源冲突,如重复创建)
POST /users  
Body: { "name": "Alice", "age": 30 }  # 创建新用户

PUT

  • 用途:全量更新资源(替换整个资源)。
  • 特性:
    幂等:多次调用结果一致(如重复更新同一数据,最终状态相同)。
    若资源不存在,可创建(需由服务端决定是否支持)。
  • 响应状态码:
    200 OK 或 204 No Content(更新成功)
    201 Created(资源被创建)
    404 Not Found(资源不存在且服务端不支持创建)
PUT /users/123  
Body: { "name": "Bob", "age": 25 }  # 替换用户123的所有字段

DELETE

  • 用途:删除资源。
  • 特性:
    幂等:删除后再次调用无效果。
  • 响应状态码:
    204 No Content(删除成功,无返回内容)
    404 Not Found(资源不存在)
    403 Forbidden(无权删除)
DELETE /users/123  # 删除ID为123的用户

PATCH

  • 用途:部分更新资源(仅修改指定字段)。
  • 特性:
    非幂等:连续相同请求可能导致不同结果(如递增计数器)。
    需明确传递修改的字段。
  • 响应状态码:
    200 OK 或 204 No Content
    400 Bad Request(修改格式错误)
    404 Not Found
PATCH /users/123  
Body: { "age": 26 }  # 仅更新用户123的年龄

RESTful 状态码

1xx(信息响应)

  • 100 Continue
    客户端应继续发送请求的剩余部分(用于大文件上传前的确认)。

2xx(成功)

  • 200 OK: 请求成功,
    返回响应数据(如 GET 或 PUT 请求成功)。
  • 201 Created
    资源创建成功(如 POST 请求后返回新资源的URI,响应头包含 Location: /users/123)。
  • 202 Accepted
    请求已接受但未处理完成(常用于异步任务)。
  • 204 No Content
    请求成功,但无返回内容(如 DELETE 成功或 PUT 更新后无需返回数据)。

3xx(重定向)

  • 301 Moved Permanently
    资源永久迁移到新URI(需更新书签)。
  • 302 Found
    资源临时重定向到新URI(浏览器默认行为是后续请求仍用原URI)。
  • 304 Not Modified
    资源未修改,客户端可使用缓存(配合 If-Modified-Since 头使用)。

4xx(客户端错误)

  • 400 Bad Request
    请求格式错误(如参数缺失或JSON语法错误)。
  • 401 Unauthorized
    未认证(需提供有效身份凭证,如JWT失效)。
  • 403 Forbidden
    已认证但无权限访问资源(如普通用户访问管理员接口)。
  • 404 Not Found
    资源不存在(URI无效或资源已删除)。
  • 405 Method Not Allowed
    HTTP方法不支持(如对只允许 GET 的URI发送 POST)。
  • 409 Conflict
    资源状态冲突(如重复创建同名用户)。
  • 429 Too Many Requests
    请求频率超出限制(常见于API限流)。

5xx(服务器错误)

  • 500 Internal Server Error
    服务器内部错误(通用兜底错误,需排查日志)。
  • 502 Bad Gateway
    网关或代理服务器收到无效响应(如后端服务崩溃)。
  • 503 Service Unavailable
    服务暂时不可用(如维护或过载,可配合 Retry-After 头提示重试时间)。
  • 504 Gateway Timeout
    网关或代理服务器超时(后端服务未及时响应)

RESTful Uri设计原则

对于Api的uri命名要遵守以下设计

  • 使用名词复数表示资源(如/users而非/getUser)。
  • 避免动词,用HTTP方法表达操作
  • 如DELETE /users/123,而不是DELETE /delete-users/123)。
  • 层级关系用/分隔
  • 如/users/123/orders, 而不是 /users/orders/123
  • URI中体现版本:/api/v1/users
  • 推荐使用小驼峰,比如/pet/petId
  • uri应该大小写敏感,并且推荐使用全小写
  • 以上只是建议,具体根据实际情况而定

Example: https://petstore.swagger.io/

  • 以下Api来住swagger官方例子,可以看到其实并没有严格遵守规范,比如Api里没有版本信息,命名里有动词等等
    在这里插入图片描述

Api传参:QueryString 和 UriPath

使用 URI Path(路径参数)的场景

  • URI Path 用于标识 资源的主键 或 资源间的层级关系,通常对应服务端的 核心数据模型。

适用场景:

  • 唯一资源标识
    通过路径参数直接定位唯一资源(如用户ID、订单ID)。
GET /users/{id}          # 获取指定ID的用户
DELETE /orders/{orderId} # 删除指定ID的订单
  • 资源层级关系
    表示资源之间的从属关系(如用户的所有订单)。
    示例:
GET /users/{userId}/orders  # 获取用户的订单列表

特点:

  • 必要性:路径参数通常是 必填 的(缺少会导致404)。
  • 语义明确:路径体现资源的唯一性和结构(如 /users/123 明确指向用户123)。
  • 缓存友好:路径参数不同的 URL 会被视为不同资源,适合缓存(如 CDN 缓存)

使用 Query String(查询参数)的场景

  • Query String 用于 过滤、排序、分页 或 附加操作,通常是 可选 的非核心参数。

适用场景:

  • 过滤数据
    筛选符合特定条件的资源列表。
示例:
GET /users?role=admin&status=active  # 获取角色为admin且状态为活跃的用户
  • 分页与排序
    控制返回数据的范围和顺序。
示例:
GET /articles?page=2&limit=20&sort=-created_at  # 获取第二页文章,按创建时间倒序
  • 附加操作
    触发特定功能(如统计、导出格式)。
示例:
GET /reports/sales?format=csv     # 导出CSV格式的销售报表
GET /products?fields=name,price  # 仅返回名称和价格字段(字段选择)
  • 非资源标识参数
    不影响资源定位,仅修饰响应结果。
示例:
GET /search?q=restful&lang=en  # 搜索关键词"restful",语言为英文

特点:

  • 可选性:缺少查询参数时,通常返回默认结果(如不分页)。
  • 灵活性:参数组合自由,适合动态需求(如多种过滤条件)。
  • 幂等性:同一 Query String 的 GET 请求是幂等的(结果可缓存)

RESTful和HTTP的区别

  • RESTful并不等于HTTP,它只是基于HTTP的一些特性设定了一组设计规范
  • 类似的还有GraphQL,也是基于HTTP的特性设定了一组规范

注意事项

  • 以上只是标准的设计规范,并没有技术上的限制,开发者完全可以POST当PUT用,PUT当POST用,甚至POST当GET用等等,只是这样不规范,会导致程序可维护性降低
  • 现实开发中需要根据实际情况调整,最好和以前的开发风格保持一致
  • 大部分Api的设计都没有严格的遵守以上规则,比如Api的uri里没有版本信息,返回的状态码用的不准确等,使用动词等等

相关文章:

Api架构设计--- HTTP + RESTful

Api架构设计--- HTTP RESTful 什么是RESTfulRESTful 设计原则RESTful 接口类型RESTful 状态码RESTful Uri设计原则Api传参:QueryString 和 UriPath RESTful和HTTP的区别注意事项 什么是RESTful RESTful(Representational State Transfer)是一…...

设计模式-适配器模式

适配器模式是一种结构型设计模式,用于将一个类的接口转换为客户端期望的另一个接口,使得原本不兼容的类可以协同工作。它的核心思想是通过中间层(适配器)解决接口不匹配的问题,类似于电源插头转换器。 核心思想 适配…...

MacBook部署达梦V8手记

背景 使用Java SpringBootDM开发Web应用,框架有License,OSX加载dll失败,安装了Windows 11,只有一个C盘,达梦安装后因为C盘权限问题,创建数据库失败,遂采用Docker容器方式部署。 下载介质 官网在…...

MySQL程序

博主主页: 码农派大星. 数据结构专栏:Java数据结构 数据库专栏:数据库 JavaEE专栏:JavaEE 软件测试专栏:软件测试 关注博主带你了解更多知识 1. mysqld (MySQL服务器) mysqld也被称为MySQL服务器,是⼀个多线程程序,对数据⽬录进⾏访问管理(包含数据库…...

APB-清华联合腾讯等机构推出的分布式长上下文推理框架

APB (Accelerating Distributed Long-Context Inference by Passing Compressed Context Blocks acrossGPUs)是清华大学等机构联合提出的分布式长上下文推理框架。通过稀疏注意力机制和序列并行推理方式,有效解决了大模型处理长文本时的效率瓶颈。APB采用更小的Anch…...

python爬虫笔记(一)

文章目录 html基础标签和下划线无序列表和有序列表表格加边框 html的属性a标签(网站)target属性换行线和水平分割线 图片设置宽高width,height html区块——块元素与行内元素块元素与行内元素块元素举例行内元素举例 表单from标签type属性pla…...

Pycharm接入DeepSeek,提升自动化脚本的写作效率

一.效果展示: 二.实施步骤: 1.DeepSeek官网创建API key: 创建成功后,会生成一个API key: 2. PyCharm工具,打开文件->设置->插件,搜索“Continue”,点击安装 3.安装完成后&…...

spring boot 过滤器简单demo

1. 过滤器(Filter)的概念 过滤器是 Java Web 应用中的一种组件,它可以在请求到达目标资源(如 Controller)之前或响应返回客户端之后,对请求和响应进行统一处理。它的核心作用是对 HTTP 请求和响应进行拦截…...

3.8 Spring Boot监控:Actuator+Prometheus+Grafana可视化

在Spring Boot应用中,通过整合Actuator、Prometheus和Grafana可以构建完整的监控体系,实现指标采集、存储和可视化。以下是具体实现步骤: 一、Spring Boot Actuator 配置 作用:暴露应用健康指标、性能数据等监控端点。 1. 添加依…...

C++中的单例模式及具体应用示例

AI 摘要 本文深入探讨了C中的单例模式及其在机器人自主导航中的应用,特别是如何通过单例模式来管理地图数据。文章详细介绍了单例模式的基本结构、优缺点以及在多线程环境中的应用,强调了其在保证数据一致性和资源管理中的重要性。 接着,文章…...

网络编程——套接字、创建服务器、创建客户端

一、套接字 1.1什么是套接字 套接字文件,原本就是一个和管道文件类似,用来实现进程间通信的一个文件 既然有了管道文件,当时为什么还要开发套接字文件,去实现进程的通信 因为管道文件是半双工模式的 套接字文件是全双工模式的…...

【设计模式】3W 学习法深入剖析创建型模式:原理、实战与开源框架应用(含 Java 代码)

3W 学习法总结创建型模式(附 Java 代码实战及开源框架应用) 创建型模式主要关注 对象的创建,旨在提高代码的可复用性、可扩展性和灵活性。本文采用 3W 学习法(What、Why、How),深入分析 五大创建型模式&am…...

软考系统架构师考试目录(2023新版)

论文 2023下半年 开发:论面向对象设计的应用与实现大数据:论多数据源集成的应用与实现测试:论软件可靠性评价的设计与实现运维:论边云协同的设计与实现 2024上半年 大数据:Lambda架构,分层批处理层、加…...

Apifox Helper 自动生成API接口文档

在我们开发过程中我们在编写请求地址和编写请求参数的时候特别花费时间耗费了我们很多时间,作为一个程序员,更应该把精力时间集中在开发上, Apifox Helper 是 Apifox 团队针对 IntelliJ IDEA 环境所推出的插件,可以在 IDEA 环境中…...

MySQL开发陷阱与最佳实践:第1章:MySQL开发基础概述-1.1 MySQL简介与应用场景

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 MySQL开发陷阱与最佳实践:第1章:MySQL开发基础概述-1.1 MySQL简介与应用场景1.1.1 MySQL的发展历程与市场地位1.1.2 MySQL的核心特性与技术优势1.1.2…...

电鱼智能EFISH-RK3576-SBC工控板已适配Android 14系统

EFISH-RK3576-SBC工控板此前已提供了Linux 6.1.57系统,为了满足更多客户的需求,电鱼智能近日又为其成功适配了Android 14系统——硬件性能卓越的核心板与Android 14的深度组合,将为用户带来更加流畅、开放、智能的使用体验。 一、高性能处理器…...

C++ 语法之函数和函数指针

在上一章中 C 语法之 指针的一些应用说明-CSDN博客 我们了解了指针变量&#xff0c;int *p;取变量a的地址这些。 那么函数同样也有个地址&#xff0c;直接输出函数名就可以得到地址&#xff0c;如下&#xff1a; #include<iostream> using namespace std; void fun() …...

LabVIEW生成EXE文件错误提示

在LabVIEW生成EXE时弹出 “The build is missing one or more source files or items the source files reference on disk”&#xff0c;表明项目中引用的某些文件&#xff08;如VI、子模块、依赖库或配置文件&#xff09;未被正确包含或路径丢失。以下是具体原因及解决方案&a…...

HTML,CSS,JavaScript

HTML:负责网页的结构(页面元素和内容)。 CSS:负责网页的表现(页面元素的外观、位置等页面样式&#xff0c;如:颜色、大小等)。 Javascript:负责网页的行为(交互效果)。 MDN前端开发文档(MDN Web Docs) HTML HTML(HyperText Markup Language):超文本标记语言超文本:超越了文本的…...

SpringCloud 学习笔记2(Nacos)

Nacos Nacos 下载 Nacos Server 下载 | Nacos 官网 下载、解压、打开文件&#xff1a; 更改 Nacos 的启动方式 Nacos 的启动模式默认是集群模式。在学习时需要把他改为单机模式。 把 cluster 改为 standalone&#xff0c;记得保存&#xff01; 启动startup.cmd Ubuntu 启动…...

Qt5.15.2实现Qt for WebAssembly与示例

目录 1.什么是Qt for WebAssembly&#xff1f; 1.1 什么是 WebAssembly&#xff1f; 1.2 WebAssembly 的优势 1.3 什么是 Qt for WebAssembly&#xff1f; 1.4 Qt for WebAssembly 的特点 1.5 编译过程 1.6 运行时环境 注意&#xff01;&#xff01;&#xff01;注意&am…...

荣耀手机怎么录制屏幕?屏幕录制后为视频加水印更有“安全感”

在数字时代&#xff0c;屏幕录制已经成为记录和分享信息的重要方式之一。无论是记录游戏的高光时刻&#xff0c;还是制作教学视频&#xff0c;亦或是保存重要的线上会议内容&#xff0c;屏幕录制都能轻松搞定。 荣耀手机作为一款功能强大的设备&#xff0c;自然也提供了便捷的…...

3DXML 与 SOLIDWORKS 格式转换:技术协同及迪威模型方案

一、引言 在产品设计的前沿领域&#xff0c;3DXML 与 SOLIDWORKS 作为主流格式&#xff0c;虽各有所长&#xff0c;但因格式差异&#xff0c;常成为数据流通与协作的阻碍。对于技术人员和学生党而言&#xff0c;掌握二者间的转换技术&#xff0c;不仅能提升设计效率&#xff0…...

CH347使用笔记:CH347结合STM32CubeIDE实现单片机下载与调试

目录 基于 STM32CubeIDE的 CH347 JTAG/SWD调试器使用说明1. CH347驱动安装与配置2. STM32CubeIDE调试器配置2.1 打开相关工程后&#xff0c;进行以下操作2.2 openocd.exe替换2.3 脚本添加2.4 更改调试器选择 3. 下载程序4. 使用过程中可能遇到的问题4.1 CH347未插入4.2 Openocd…...

JS—基本数据类型和引用数据类型:1分钟掌握两者的区别

个人博客&#xff1a;haichenyi.com。感谢关注 一. 目录 一–目录二–分类三–核心区别四–实际场景中的问题五–总结对比 二. 分类 前面说过这么判断数据类型&#xff0c;今天来说说基本数据类型和引用数据类型的区别。 基本数据类型引用数据类型StringObjectNumberFunct…...

使用 CryptoJS 实现 AES 解密:动态数据解密示例

在现代加密应用中,AES(高级加密标准)是一种广泛使用的对称加密算法。它的安全性高、效率好,适合用于各种加密任务。今天,我们将通过一个实际的示例,展示如何使用 CryptoJS 实现 AES 解密,解密动态数据。CryptoJS 是一个基于 JavaScript 的加密库,它支持 AES、DES 等多种…...

[设计模式与源码]1_Spring三级缓存中的单例模式

欢迎来到啾啾的博客&#x1f431;&#xff0c;一个致力于构建完善的Java程序员知识体系的博客&#x1f4da;&#xff0c;记录学习的点滴&#xff0c;分享工作的思考、实用的技巧&#xff0c;偶尔分享一些杂谈&#x1f4ac;。 欢迎评论交流&#xff0c;感谢您的阅读&#x1f604…...

使用React和google gemini api 打造一个google gemini应用

实现一个简单的聊天应用&#xff0c;用户可以通过输入问题或点击“Surprise me”按钮获取随机问题&#xff0c;并从后端API获取回答。 import { useState } from "react"; function App() {const [ value, setValue] useState(""); // 存储用户输入的问题…...

为什么Django能有效防御CSRF攻击?

在当今这个互联网高度发达的时代&#xff0c;Web安全问题层出不穷&#xff0c;其中跨站请求伪造&#xff08;CSRF&#xff0c;Cross-Site Request Forgery&#xff09;就是一个比较常见的威胁。攻击者利用用户的身份信息&#xff0c;发送恶意请求&#xff0c;改变用户的属性或执…...

Oracle常见系统函数

一、字符类函数 1&#xff0c;ASCII(c)和CHR(i)字符串和ascii码互转换 SQL> select ascii(Z) ,ascii(H),ascii( A) from dual;ASCII(Z) ASCII(H) ASCII(A) ---------- ---------- ----------90 72 32SQL> select chr(90),chr(72),chr(65) from dual;C…...

【Visio使用教程】

Visio使用教程 1. Visio 的基本介绍1.1 Visio 是什么&#xff1f;核心特点&#xff1a; 1.2 主要功能与应用场景典型用途&#xff1a;行业应用&#xff1a; 1.3 版本与兼容性1.4 Visio下载1.5 安装 2. Visio 的界面与基础操作2.1 界面布局详解2.2 创建新文档与模板选择2.3 形状…...

蓝桥杯 修剪灌木

问题描述 爱丽丝要完成一项修剪灌木的工作。 有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晩会修剪一棵灌 木, 让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始, 每天向右修剪一棵灌木。当修剪了最右侧的灌木后, 她会调转方向, 下一天开 始向左修…...

HTML中滚动加载的实现

设置div的overflow属性&#xff0c;可以使得该div具有滚动效果&#xff0c;下面以div中包含的是table来举例。 当table的元素较多&#xff0c;以至于超出div的显示范围的话&#xff0c;观察下该div元素的以下3个属性&#xff1a; clientHeight是div的显示高度&#xff0c;scrol…...

bbbbb

import java.util.ArrayList; import java.util.List; public class KthPermutation { public static String getPermutation(int n, int k) { // 计算阶乘 int[] factorial new int[n]; factorial[0] 1; for (int i 1; i < n; i) …...

Linux文件

1.Open函数 高频使用的Linux系统调用&#xff1a;open write read close Linux自带的工具&#xff1a;man手册&#xff1a; man 1是普通的shell命令&#xff0c;比如ls man 2是系统调用函数&#xff0c;比如open&#xff0c;write说明 在Linux系统库的定义&#xff1a; int o…...

kafka指北

为自己总结一下kafka指北&#xff0c;会持续更新。创作不易&#xff0c;转载请注明出处。 目录 集群controller选举过程broker启动流程 主题创建副本分布ISRleader副本选举机制LEO 生产数据流程同步发送和异步发送 分区策略ack应答生产者发送消息的幂等性跨分区幂等性问题&…...

Linux安装部署Elasticsearch8 全过程记录

一、安装 Elasticsearch8 1、下载 访问 Elasticsearch 官方网站&#xff08;Download Elasticsearch | Elastic&#xff09;。 在下载页面找到 Elasticsearch 8 的 Linux 版本&#xff08;.tar.gz 格式&#xff09;下载链接&#xff0c;点击下载。 下载Elasticsearch8&…...

ESP32(3)UDP通信

对于 lwIP 的 Socket 的使用方式&#xff0c;它与文件操作非常相似。在文件操作中&#xff0c;我们首先打开文件&#xff0c;然后进行读/写操作&#xff0c;最后关闭文件。在TCP/IP网络通信中&#xff0c;也存在着相同的操作流程&#xff0c;但所使用的接口不再是文件描述符或 …...

汽车机械钥匙升级一键启动的优点

汽车机械钥匙升级一键启动的优点主要包括&#xff1a; 便捷性&#xff1a;一键启动功能的引入极大地提升了用车便捷性。车主无需翻找钥匙&#xff0c;只需在车辆感应范围内轻触启动键&#xff0c;即可轻松发动汽车。 安全性&#xff1a;移动管家专车专用一键启动系统配备了防…...

【matlab例程】三维下的TDOA定位和EKF轨迹滤波例程,TDOA的锚点数量可自定义(订阅专栏后可获得完整代码)

本文所述的MATLAB例程实现了TDOA定位和扩展卡尔曼滤波(EKF)来提高位置估计的准确性,并通过可视化结果进行分析。 文章目录 运行结果MATLAB代码程序讲解关键步骤和功能步骤解释注意事项总结运行结果 三维轨迹: 三维误差曲线: RMSE曲线: 命令行输出内容:...

个人blog系统 前后端分离 前端js后端go

系统设计&#xff1a; 1.使用语言&#xff1a;前端使用vue&#xff0c;并使用axios向后端发送数据。后端使用的是go的gin框架&#xff0c;并使用grom连接数据库实现数据存储读取。 2.设计结构&#xff1a; 最终展示&#xff1a;仅展示添加模块&#xff0c;其他模块基本相似 前…...

OSG简介

OSG OpenSceneGraph (简称 OSG) 是一个开源的高性能3D图形库。 作用 它为开发者提供了一个强大的API&#xff0c;处理和渲染复杂的3D图形。 特点 OSG基于OpenGL构建&#xff0c;提供了对现代图形技术的支持&#xff0c;如着色器、纹理映射、光照模型等高级特性。 跨平台支…...

社区版Uos20.9从源码编译QT5.15.2

主要是在这个文章上学的究极保姆式教你如何在Ubuntu上源码安装Qt5.15.2_ubuntu安装qt5.15.2-CSDN博客 但原文上在环境变量的配置上真用在 uso上好像不行&#xff0c;要加一些引号和$号。原文的测试编译代码也有些问题&#xff0c;include上少了类。略作修改&#xff0c;在UOS社…...

AI学习第二天--大模型压缩(量化、剪枝、蒸馏、低秩分解)

目录 1. 量化&#xff1a;压缩大象的“脂肪” 比喻 技术逻辑 2. 剪枝&#xff1a;修剪大象的“无效毛发” 比喻 技术逻辑 3. 知识蒸馏&#xff1a;让大象“师从巨象” 比喻 技术逻辑 4. 低秩分解&#xff1a;把大象“折叠成纸偶” 比喻 技术逻辑 5. 推理优化&#…...

C++ —— 线程同步(互斥锁)

C —— 线程同步&#xff08;互斥锁&#xff09; 线程同步互斥锁&#xff08;互斥量&#xff09;测试代码mutex互斥锁 线程同步 线程同步&#xff1a;多线程协同工作&#xff0c;协商如何使用共享资源。 C11线程同步包含三部分内容&#xff1a; 互斥锁&#xff08;互斥量&…...

相对路径跳转和绝对路径跳转有什么区别?

在 Vue 3 中使用路由跳转时&#xff0c;相对路径跳转和绝对路径跳转在使用方式、适用场景等方面存在明显区别&#xff0c;以下为你详细介绍&#xff1a; 定义 绝对路径跳转&#xff1a;指的是使用完整的路径来进行路由导航&#xff0c;路径以 / 开头&#xff0c;无论当前处于…...

Flume详解——介绍、部署与使用

1. Flume 简介 Apache Flume 是一个专门用于高效地 收集、聚合、传输 大量日志数据的 分布式、可靠 的系统。它特别擅长将数据从各种数据源&#xff08;如日志文件、消息队列等&#xff09;传输到 HDFS、HBase、Kafka 等大数据存储系统。 特点&#xff1a; 可扩展&#xff1…...

笔记类AI应用体验

笔记类AI应用体验 叮当好记视频一键转笔记&#xff0c; 祝你学习效率起飞 IMAGet笔记印象笔记&#xff08;Evernote&#xff09;&#xff1a;Notion&#xff1a;Trilium Notes&#xff1a;二、开始搭建三、搭建步骤四、创建博客 Obsidian&#xff1a;案例让ai帮我执行大模型学习…...

Mysql篇——SQL优化

本篇将带领各位了解一些常见的sql优化方法&#xff0c;学到就是赚到&#xff0c;一起跟着练习吧~ SQL优化 准备工作 准备的话我们肯定是需要一张表的&#xff0c;什么表都可以&#xff0c;这里先给出我的表结构&#xff08;表名&#xff1a;userinfo&#xff09; 通过sql查看…...

【css酷炫效果】纯CSS实现故障文字特效

【css酷炫效果】纯CSS实现故障文字特效 缘创作背景html结构css样式完整代码基础版进阶版(3D效果) 效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90492053 缘 创作随缘&#xff0c;不定时更新。 创作背景 刚…...