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

Tauri教程-基础篇-第二节 Tauri的核心概念下篇

请添加图片描述

“如果结果不如你所愿,就在尘埃落定前奋力一搏。”——《夏目友人帐》
“有些事不是看到了希望才去坚持,而是因为坚持才会看到希望。”——《十宗罪》
“维持现状意味着空耗你的努力和生命。”——纪伯伦

Tauri 技术教程 * 第四章 Tauri的基础教程
第二节 Tauri的核心概念(下篇)

前言

本章节阐述了Tauri技术中的核心概念内容,理解起来较为苦涩,但却为Taui应用的概念部分,了解这些概念后你将对Tauri的技术原理有一个较深的理解,为你后续开发应用和进行插件的开发奠定基础,初次理解较为困难,有一定的编语言程基础,可较为轻松,本章节分为上下2个部分,分别阐述了Tauri的五个核心部分

  • 结构
  • 进程模型
  • App size
  • IPC
  • 安全

上部分介绍了Tauri的骨架结构、进程模型、应用大小配置,下部分介绍了Tauri的ipc(通信模型)和安全相关的概念和配置。

学习和理解建议:咋一看,若隐若现,再回眸,两不相识,重逢时,原是弹丸之丘!

推荐

Koi技术教程-Tauri基础教程-第二节 Tauri的核心概念 上
Koi技术教程-Tauri-第二章 Tauri的业务架构
Koi技术教程-Tauri-第三章 Tauri的搭建环境

接上一篇 Koi技术教程-Tauri基础教程-第二节 Tauri的核心概念 上 内容

五. IPC (inter-process communication)

Tauri使用IPC (进程间通信) 来实现前端和Rust后端之间的通信,确保了性能和安全性。

1. 概述

进程间通信 (IPC) 允许隔离进程安全地通信,是构建更复杂应用程序的关键。它包含以下2个部分:

  • Brownfield Pattern
  • isolation Pattern

消息传递是一种比共享内存或直接函数访问更安全的技术,因为接收方可以根据自己的需要自由拒绝或丢弃请求。例如,如果 Tauri Core 进程确定某个请求是恶意的,它就会直接丢弃该请求,而不会执行相应的函数。在Tauri 有两个IPC内容 -Events和-。Commands

2. Events

事件是一次性的单向 IPC 消息,最适合用于传达生命周期事件和状态变化。与命令不同,事件可以由前端Tauri Core发出。

请添加图片描述

3. Commands

Tauri 还在IPC 消息1之上提供了类似外部函数接口的抽象。主要 API类似于浏览器的API,允许前端调用 Rust 函数、传递参数和接收数据。invoke``fetch

因为该机制在底层使用类似 JSON-RPC 的协议来序列化请求和响应,所以所有参数和返回数据都必须可序列化为 JSON.

请添加图片描述

3. Brownfield Pattern

是使用 Tauri 最简单、最直接的模式,因为它试图尽可能与现有的前端项目兼容。

Brownfield 软件开发,可以了解下

由于 Brownfield 模式是默认模式,因此不需要设置配置选项。要明确设置它,您可以使用配置文件tauri > pattern中的对象tauri.conf.json

{"tauri": {"pattern": {"use": "brownfield"}}
}

4. isolation Pattern

隔离模式是一种在前端发送的 Tauri API 消息到达 Tauri Core 之前拦截和修改它们的方法,所有操作都使用 JavaScript。隔离模式注入的安全 JavaScript 代码称为隔离应用程序。

隔离模式的目的是为开发人员提供一种机制,帮助保护他们的应用程序免受对 Tauri Core 的不必要或恶意前端调用的影响。

工作原理

隔离模式就是在前端和 Tauri Core 之间注入一个安全的应用程序,以拦截和修改传入的 IPC 消息。它通过使用<iframes>的沙盒功能与主前端应用程序一起安全地运行 JavaScript 来实现这一点。Tauri 在加载页面时强制执行隔离模式,强制所有对 Tauri Core 的 IPC 调用都首先通过沙盒隔离应用程序进行路由。一旦消息准备好传递给 Tauri Core,它就会使用浏览器的SubtleCrypto实现进行加密,然后传递回主前端应用程序。到达那里后,它会直接传递给 Tauri Core,然后像平常一样解密和读取。

为了确保某人无法手动读取应用程序特定版本的密钥并在加密后使用该密钥修改消息,每次运行应用程序时都会生成新密钥。

大致步骤如下:

  1. Tauri 的 IPC 处理程序收到一条消息
  2. IPC处理器 -> 隔离应用程序
  3. [sandbox]隔离应用程序钩子运行并可能修改消息
  4. [sandbox]使用运行时生成的密钥通过 AES-GCM 加密消息
  5. [encrypted]隔离应用程序 -> IPC 处理程序
  6. [encrypted]IPC 处理程序 -> Tauri Core

请添加图片描述

缺点

  • 由于信息经过加密,所以隔离模式相比 Brownfield 模式而言存在额外开销。除去性能敏感的应用 (使用很少依赖来提升性能的应用) 之外,使用 AES-GCM 算法来加解密 IPC 信息会对大部分应用造成相对较小的性能影响。
  • Windows平台上,Webview限制了因为沙盒环境下加载 <iframe> 标签内的外部文件,Tauri在构建时实现一些步骤将脚本注入,但是ES Modules可能无法正常加载。

六. 安全 Security

信任边界是计算机科学和安全领域的一个术语,它描述了程序数据或执行改变其“信任”级别的边界,或者两个具有不同能力的主体交换数据或命令的边界

Tauri 的安全模型包含两个部分:

  • 应用程序核心编写的 Rust 代码
  • 用系统 WebView 理解的任何框架或语言编写的前端代码。

检查并严格定义边界间传递的所有数据对于防止信任边界违规非常重要。如果数据在这些边界间传递而没有访问控制,那么攻击者很容易提升和滥用特权。

IPC层是这两个信任组之间沟通的桥梁,确保边界不被破坏。

请添加图片描述

插件或应用程序核心执行的任何代码都可以完全访问所有可用的系统资源,并且不受限制。

1. 安全机制

1. 权限

权限是对命令的明确特权的描述。它可以使命令在 Tauri 应用程序的前端可访问。它可以将范围映射到命令并定义启用哪些命令。权限可以启用或拒绝某些命令、定义范围或将两者结合起来。

在Tauri的插件开发中应用。

2. 运行时权限

运行时权限是 Tauri Core 的一部分。它拥有运行时的所有权限、功能和范围,以强制执行哪个窗口可以访问哪个命令,并将范围传递给命令。

每当从 webview 调用 Tauri 命令时,运行时机构都会收到调用请求,确保来源被允许实际使用请求的命令,检查来源是否是功能的一部分,以及是否为命令定义了范围并且适用,然后将它们注入到调用请求中,然后传递给正确的 Tauri 命令。

如果不允许源调用该命令,则运行时权限将拒绝该请求,并且永远不会调用 Tauri 命令。

请添加图片描述

3. 功能

Tauri 为应用程序和插件开发人员提供了一个功能系统,以精细地启用和限制在系统 WebView 中运行的应用程序前端的核心暴露。

功能是一组通过相应标签映射到应用程序窗口和 Web 视图的权限。功能可以影响多个窗口和 Web 视图,并且可以在多个功能中引用这些窗口和 Web 视图。

功能文件在目录内定义为 JSON 或 TOML 文件src-tauri/capabilities

配置方式说明
  1. 默认情况下,capabilities 的配置是由 tauri.conf.json 中

    {"app": {"security": {"capabilities": ["my-capability", "main-capability"]}}
    }
    

    capabilities 配置来制定的,它的默认值是 [], 代表:src-tauri/capabilities 文件下的内容会全部加载。

  2. 内联配置方式,它可以和指定方式同时使用, src-tauri/tauri.conf.json 文件中

    {"app": {"security": {"capabilities": [{"identifier": "my-capability","description": "My application capability used for all windows","windows": ["*"],"permissions": ["fs:default", "allow-home-read-extended"]},"my-second-capability"]}}
    }
    
指定权限的目标平台

通过定义数组,功能可以特定于平台。默认情况下,platforms功能应用于所有目标,但您可以选择linuxmacOS、和目标的子集。windows``iOS``android

如:src-tauri/capabilities/desktop.json

{"$schema": "../gen/schemas/desktop-schema.json","identifier": "desktop-capability","windows": ["main"],"platforms": ["linux", "macOS", "windows"],"permissions": ["global-shortcut:allow-register"]
}
远程API 访问

默认情况下,只有 Tauri App 附带的捆绑代码才能访问 API。若要允许远程源访问某些 Tauri 命令,可以在功能配置文件中定义这一点"remote"。 src-tauri/capabilities/remote-tags.json

{"$schema": "../gen/schemas/remote-schema.json","identifier": "remote-tag-capability","windows": ["main"],"remote": {"urls": ["https://*.tauri.app"]},"platforms": ["iOS", "android"],"permissions": ["nfc:allow-scan", "barcode-scanner:allow-scan"]
}

Tauri 生成一个 JSON 模式,包含应用程序可用的所有权限,这样你就可以在 IDE 中实现自动补全。 要使用模式,请将 $schema 属性设置为 capabilities/schemas 目录中的模式之一,这些模式是特定于平台的。 通常你会将其设置为 ../gen/schemas/desktop-schema.json../gen/schemas/mobile-schema.json,不过你也可以为特定的目标平台定义功能。

4. 作用域/范围

范围是定义 Tauri 命令允许或禁止行为的一种细粒度的方法。分为allowdeny,其中deny总是取代allow范围。

在插件开发中,卡发人员需要定义插件命令的操作范围,确保不存在任何绕行的操作,范围的验证要在程序中实现。简单的理解就是插件需要一些操作方面的授权,这些授权信息在程序执行时需要确保是允许的。

范围定义在插件的开发中是比较重要的,概念需要理解。

2. 通用安全功能

1. 内容安全隔离(CSP)

Tauri会对本地的HTML页面强制使用内容安全策略,本地脚本经过哈希处理,同时样式、外部脚本经由加密随机字符串引用,防止禁止内容被加载;减少或防止跨站点脚本 (XSS) 等常见 Web 漏洞的影响。

仅在 Tauri 配置文件中设置后,CSP 保护才会启用。您应该尽可能地限制它,只允许 Webview 从您信任的主机(最好是您自己的主机)加载资产。在编译时,Tauri 会自动将其 nonces 和 hashes 附加到捆绑代码和资产的相关 CSP 属性中

配置内容如下:tauri/examples/api/src-tauri/tauri.conf.json

  "csp": {"default-src": "'self' customprotocol: asset:","connect-src": "ipc: http://ipc.localhost","font-src": ["https://fonts.gstatic.com"],"img-src": "'self' asset: http://asset.localhost blob: data:","style-src": "'unsafe-inline' 'self' https://fonts.googleapis.com"},

2. 进程隔离模式

参见IPC

3. Http Headers

此项内容在Tauri@2.1.0之后

配置信息仅限于:

  • Access-Control-Allow-Credentials ↗
  • Access-Control-Allow-Headers ↗
  • Access-Control-Allow-Methods ↗
  • Access-Control-Expose-Headers ↗
  • Access-Control-Max-Age ↗
  • Cross-Origin-Embedder-Policy ↗
  • Cross-Origin-Opener-Policy ↗
  • Cross-Origin-Resource-Policy ↗
  • Permissions-Policy ↗
  • Timing-Allow-Origin ↗
  • X-Content-Type-Options ↗
  • Tauri-Custom-Header

配置信息如下:src-tauri/tauri.conf.json

{//..."app":{//..."security": {//..."headers": {"Cross-Origin-Opener-Policy": "same-origin","Cross-Origin-Embedder-Policy": "require-corp","Timing-Allow-Origin": ["https://developer.mozilla.org","https://example.com",],"X-Content-Type-Options": null, // gets ignored"Access-Control-Expose-Headers": "Tauri-Custom-Header","Tauri-Custom-Header": {"key1": "'value1' 'value2'","key2": "'value3'"}},// notice how the CSP is not defined under headers"csp": "default-src 'self'; connect-src ipc: http://ipc.localhost",}}
}

注意:

Tauri-Custom-Header不适用于生产用途。对于测试:请记住进行Access-Control-Expose-Headers相应设置。

vite.config.ts 的配置修改vite.config.ts

import { defineConfig } from 'vite';export default defineConfig({// ...server: {// ...headers: {'Cross-Origin-Opener-Policy': 'same-origin','Cross-Origin-Embedder-Policy': 'require-corp','Timing-Allow-Origin': 'https://developer.mozilla.org, https://example.com','Access-Control-Expose-Headers': 'Tauri-Custom-Header','Tauri-Custom-Header': "key1 'value1' 'value2'; key2 'value3'"},},
})

相关文章:

Tauri教程-基础篇-第二节 Tauri的核心概念下篇

“如果结果不如你所愿&#xff0c;就在尘埃落定前奋力一搏。”——《夏目友人帐》 “有些事不是看到了希望才去坚持&#xff0c;而是因为坚持才会看到希望。”——《十宗罪》 “维持现状意味着空耗你的努力和生命。”——纪伯伦 Tauri 技术教程 * 第四章 Tauri的基础教程 第二节…...

直播预告|StarRocks 3.4,打造 AI 时代的智能数据基座,应用场景全面扩展

随着新年的到来&#xff0c;StarRocks 3.4 即将上线&#xff0c;为 AI Workload 和更多应用场景提供强大支持&#xff01;此次升级聚焦于提升 AI 场景支持&#xff0c;并扩展更多应用场景&#xff0c;全方位提升数据分析体验。 更强的 AI 场景支持&#xff1a; 引入 Vector In…...

Maven的基本使用

Maven apache 旗下的开源项目&#xff0c;是一款用于管理构建Java的项目的工具 一 作用 1依赖管理&#xff1a;管理jar包&#xff0c;避免依赖冲突 2统一项目结构 &#xff1a; 3项目构建&#xff1a; 二 安装 下面是全球唯一的中央仓库 https://repo1.maven.org/maven2…...

【深度学习入门_基础篇】线性代数本质

开坑本部分主要为基础知识复习&#xff0c;新开坑中&#xff0c;学习记录自用。 学习目标&#xff1a; 熟悉向量、线性组合、线性变换、基变换、矩阵运算、逆函数、秩、列空间、零空间、范式、特征指、特征向量等含义与应用。 强烈推荐此视频&#xff1a; 【官方双语/合集】…...

数据库模型全解析:从文档存储到搜索引擎

目录 前言1. 文档存储&#xff08;Document Store&#xff09;1.1 概念与特点1.2 典型应用1.3 代表性数据库 2. 图数据库&#xff08;Graph DBMS&#xff09;2.1 概念与特点2.2 典型应用2.3 代表性数据库 3. 原生 XML 数据库&#xff08;Native XML DBMS&#xff09;3.1 概念与…...

LED背光驱动芯片RT9293应用电路

一&#xff09;简介&#xff1a; RT9293 是一款高频、异步的 Boost 升压型 LED 定电流驱动控制器&#xff0c;其工作原理如下&#xff1a; 1&#xff09;基本电路结构及原理 RT9293的主要功能为上图的Q1. Boost 电路核心原理&#xff1a;基于电感和电容的特性实现升压功能。当…...

Ubuntu挂载云盘操作步骤

1. 查看磁盘分区情况 使用 fdisk -l 命令查看当前系统中所有磁盘的分区情况&#xff0c;找到需要挂载的云盘设备&#xff0c;例如/dev/vdc。 2. 创建新分区 使用 fdisk /dev/vdc 命令对云盘进行分区操作&#xff1a; 输入n创建新分区。 输入p选择创建主分区。 输入1指定分区…...

【中间件】docker+kafka单节点部署---zookeeper模式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言消息中间件介绍1. KRaft模式2. zookeeper模式2.1. 单节点部署安装验证 前言 最近生产环境上准备部署ELFK日志监控&#xff0c;先在测试环境部署单节点kafka验证…...

Arduino IDE刷微控制器并下载对应固件的原由

在使用Arduino IDE刷写某个微控制器时&#xff0c;下载对应的固件通常是为了确保微控制器能够正确识别和执行Arduino IDE中编写的代码。以下是对这一过程的详细解释&#xff1a; 一、固件的作用 固件是微控制器或嵌入式设备上运行的软件&#xff0c;它负责控制硬件设备的操作…...

深兰科技董事长陈海波应邀为华东师大心理学专业师生做AI专题讲座

12月28日&#xff0c;应上海华东师范大学的邀请&#xff0c;上海市科协常委、上海交通大学博士生导师、深兰科技创始人兼董事长陈海波专程到校&#xff0c;为该校心理学专业的全体师生做了一场关于人工智能推动个人数字化未来的专题讲座。 他在演讲中&#xff0c;首先详细讲述了…...

iOS - 引用计数(ARC)

1. 基本数据结构 // 对象结构 struct objc_object {isa_t isa; // isa 指针&#xff0c;包含引用计数信息 };// isa 的位域结构 union isa_t {uintptr_t bits;struct {uintptr_t nonpointer : 1; // 是否启用优化的 isa 指针uintptr_t has_assoc : 1; // 是…...

【物联网原理与运用】知识点总结(上)

目录 名词解释汇总 第一章 物联网概述 1.1物联网的基本概念及演进 1.2 物联网的内涵 1.3 物联网的特性——泛在性 1.4 物联网的基本特征与属性&#xff08;五大功能域&#xff09; 1.5 物联网的体系结构 1.6 物联网的关键技术 1.7 物联网的应用领域 第二章 感知与识别技术 2.1 …...

Flux“炼丹炉”——fluxgym安装教程

一、介绍 这个炼丹炉目前可以训练除了flux-dev之外的其它模型&#xff0c;只需更改一个配置文件内容即可。重要的是训练时不需要提前进行图片裁剪、打标等前置工作&#xff0c;只需下图的三个步骤即可开始训练。它就是——fluxgym。 fluxgym&#xff1a;用于训练具有低 VRAM &…...

【Jsoncpp】manipulating JSON data in C++

源代码 #include <iostream> // 引入输入输出流库&#xff0c;用于标准输入输出操作 #include <fstream> // 引入文件流库&#xff0c;用于文件读写操作 #include <json/json.h> // 引入JSON库&#xff0c;用于解析和操作JSON数据using namespace std; …...

Ardupilot开源无人机之Geek SDK进展2024

Ardupilot开源无人机之Geek SDK进展202501 1. 源由2. 状态3. TODO3.1 跟踪目标框3.2 onnxruntime版本3.3 CUDA 11.8版本3.4 pytorch v2.5.1版本3.5 Inference性能3.6 特定目标集Training 4. 参考资料 1. 源由 前期搭建《Ardupilot开源无人机之Geek SDK》&#xff0c;主要目的是…...

肝了半年,我整理出了这篇云计算学习路线(新手必备,从入门到精通)

大家好&#xff01;我是凯哥&#xff0c;今天给大家分享一下云计算学习路线图。这是我按照自己最开始学习云计算的时候的学习路线&#xff0c;并且结合自己从业多年所涉及的知识精心总结的云计算的思维导图。这是凯哥精心总结的&#xff0c;花费了不少精力哦&#xff0c;希望对…...

配置数据的抗辐照加固方法

SRAM 型FPGA 的配置存储器可以看成是由0 和1 组成的二维阵列&#xff0c;帧的高度为矩阵阵列的高度&#xff0c;相同结构的配置帧组成配置列&#xff0c;如CLB 列、IOB 列、输入输出互联(Input Output Interconnect,IOI)列、全局时钟(Global Clock, GCLK)列、BRAM 列和BRAM 互联…...

【linux系统之redis6】处理可视化工具无法连接服务器端的redis

redis跑在虚拟机上的linux系统是可以正常的&#xff0c;但是用宿主机的可视化工具链接就连不上 可视化工具无法连接 问题排查 确保配置文件开启了bind 0.0.0.0,允许外部任何终端的链接密码确保正确要关闭linux系统的防火墙(我的属于这种) systemctl stop firewalld.servic…...

云计算操作系统的核心-OpenStack框架全解析

文章目录 一、OpenStack简介二、OpenStack架构1.认证服务Keystone2.镜像服务Glance3.计算服务Nova4.块存储服务Clinder5.对象存储服务Swift6.网络服务Neutron7.计量服务Ceilometer 三、服务简介3.1 OpenStack界面管理3.2 Keystone 认证3.3 Glance3.3 Nova3.4 存储服务3.5 Neutr…...

【设计模式-2】23 种设计模式的分类和功能

在软件工程领域&#xff0c;设计模式是解决常见设计问题的经典方案。1994 年&#xff0c;Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides&#xff08;四人帮&#xff0c;GoF&#xff09;在《设计模式&#xff1a;可复用面向对象软件的基础》一书中系统性地总结了…...

记录一下Coding一直不能clone

配置 下载git客户端&#xff0c;进行配置 git config --list user.name姓名全称 user.emailIAM_xxxxxx.com ,这个就是你的邮箱地址 user.signingkey 注册coding平台的密码 一般不需要配置公钥私钥 下载TortoiseGit&#xff0c;配置这几个参数 配置凭据管理器 注意 这里用户名是…...

Backend - C# EF Core 执行迁移 Migrate

目录 一、创建Postgre数据库 二、安装包 &#xff08;一&#xff09;查看是否存在该安装包 &#xff08;二&#xff09;安装所需包 三、执行迁移命令 1. 作用 2. 操作位置 3. 执行&#xff08;针对visual studio&#xff09; 查看迁移功能的常用命令&#xff1a; 查看…...

检索增强生成 和思维链 结合: 如何创建检索增强思维链 (RAT)?

论文地址&#xff1a;https://arxiv.org/pdf/2403.05313 Github地址&#xff1a;https://github.com/CraftJarvis/RAT 想象一下&#xff0c;一个人工智能助手可以像莎士比亚一样写作&#xff0c;像专家一样推理。这听起来很了不起&#xff0c;对吧&#xff1f;但是&#xff0…...

第四届电子信息与通信工程国际学术会议(EICE 2025)

第四届电子信息与通信工程国际学术会议&#xff08;EICE 2025&#xff09;定于2025年1月10日至12日在中国广州举行。大会交流全球相关领域科技学术最新发展趋势&#xff0c;链接重点领域国内外顶尖、活跃、最新学术资源&#xff0c;通过经验分享和智慧碰撞&#xff0c;推动科研…...

Hbuilder ios 离线打包sdk版本4.36,HbuilderX 4.36生成打包资源 问题记录

1、打包文档地址https://nativesupport.dcloud.net.cn/AppDocs/usesdk/ios.html#%E9%85%8D%E7%BD%AE%E5%BA%94%E7%94%A8%E7%89%88%E6%9C%AC%E5%8F%B7 2、配置应用图标 如果没有appicon文件&#xff0c;此时找到 Assets.xcassets 或者 Images.xcassets(看你sdk引入的启动文件中…...

HarmonyOS开发:传参方式

一、父子组件传参 1、父传子&#xff08;Prop方式&#xff09; 父组件代码 Entry Component struct ParentComponent {State parentMessage: string Hello from Parent;build() {Column() {ChildComponent({ message: this.parentMessage });}} } 子组件代码 Component s…...

Tomcat(116) 如何在Tomcat中解决缓存问题?

在Tomcat中解决缓存问题涉及多个方面的优化和处理&#xff0c;包括优化缓存配置、监控缓存状态、处理缓存失效和一致性问题等。以下是详细的步骤和代码示例&#xff0c;帮助你在Tomcat中解决缓存问题。 1. 优化缓存配置 Tomcat内置了一些静态资源的缓存机制&#xff0c;可以通…...

2.STM32F407ZGT6-外部中断

参考&#xff1a; 1.正点原子。 前言&#xff1a; MCU最重要的一个领域–中断。总结下嵌套向量和外部中断的概念。达到&#xff1a; 1.NVIC是什么&#xff0c;了解中断的整体管理理念。 2.中断里面最简单的外部中断&#xff0c;怎么配置处理。 3.使用STM32CubeMX配置外部中断的…...

C# 之某度协议登录,JS逆向,手机号绑定,获取CK

.NET兼职社区 .NET兼职社区 .NET兼职社区 .NET兼职社区 有需要指导&#xff0c;请私信我留言V或者去社区找客服。...

0基础学前端-----CSS DAY12

视频参考&#xff1a;B站Pink老师 今天是CSS学习的第十二天&#xff0c;今天开始的笔记对应Pink老师课程中的CSS第七天的内容。 本节重点&#xff1a;CSS高级技巧 本章目录 本节目标1. 精灵图1.1 为什么需要精灵图1.2 精灵图使用案例&#xff1a;拼出自己的名字 2. 字体图标2.…...

STM32——系统滴答定时器(SysTick寄存器详解)

文章目录 1.SysTick简介2.工作原理3.SysTick寄存器4.代码延时逻辑5.附上整体代码6.一些重要解释 1.SysTick简介 Cortex-M处理器内集成了一个小型的名为SysTick(系统节拍)的定时器,它属于NVIC的一部分,且可以产生 SysTick异常(异常类型#15)。SysTick为简单的向下计数的24位计数…...

HTML5 弹跳动画(Bounce Animation)详解

HTML5 弹跳动画&#xff08;Bounce Animation&#xff09;详解 弹跳动画是一种动态效果&#xff0c;使元素在出现或消失时看起来像是在跳动。这种效果可以通过 CSS 动画或 JavaScript 来实现&#xff0c;增强用户体验。 1. 使用 CSS 实现弹跳动画 可以使用 CSS 的 keyframes…...

Python 模拟登录网页,或者编写爬虫时模拟登录的详细总结

参考 Python模拟登陆网页的三种方法_python模拟登录-CSDN博客 python-模拟登陆多种方法总结_python模拟登录-CSDN博客 Python模拟登录的几种方法_实现模拟登录的方式有哪些?-CSDN博客 Python爬虫——模拟登录_python 模拟登录-CSDN博客 Python3 爬虫 模拟登录_python模拟登录网…...

若依框架简介

若依&#xff08;RuoYi&#xff09;框架是一个基于Java语言的后台管理系统快速开发框架&#xff0c;它结合了多种前端和后端技术&#xff0c;提供了高效的开发工具。以下是对若依框架的详细解析&#xff1a; 一、技术架构 后端&#xff1a;若依框架后端采用了Spring Boot、My…...

Linux中rsync命令使用

一、rsync简介 rsync 是一种高效的文件复制和同步工具&#xff0c;常用于在本地或远程计算机之间同步文件和目录 主要特性增量同步&#xff1a;rsync 会检测源和目标文件之间的差异&#xff0c;只传输发生变化的部分&#xff0c;而不是重新传输整个文件。这样就能有效减少数据…...

opencv 学习(1)

文章目录 opencv导学部分opencv的作用ffmpeg和 opencv的关系opencv的未来 计算机视觉是什么&#xff1f; opencv导学部分 opencv的作用 1 : 目标识别 人脸识别 车辆识别 2 : 自动驾驶技术 – 计算机视觉 进行车道的检测 3 : 医学图像分析 通过分析光片 来分析人到底得了什么病…...

中高级运维工程师运维面试题(十一)之 Docker

目录 往期回顾前言基础知识1. 什么是 Docker&#xff1f;2. Docker 的核心组件有哪些&#xff1f;3. Docker 镜像和容器有什么区别&#xff1f;4. 什么是 Dockerfile&#xff1f; 高级知识5. 什么是多阶段构建&#xff1f;如何使用&#xff1f;6. Docker 网络有哪些模式&#x…...

Kafka如何实现顺序消费?

Kafka的消息是存储在指定的topic中的某个partition中的。并且一个topic是可以有多个partition的。同一个partition中的消息是有序的&#xff0c;但是跨partition&#xff0c;或者跨topic的消息就是无序的了。 为什么同一个partition的消息是有序的? 因为当生产者向某个parti…...

通过 ulimit 和 sysctl 调整Linux系统性能

目录 一&#xff1a;资源限制管理工具&#xff1a;ulimit1、ulimit 作用介绍2、ulimit 常用选项3、ulimit 配置文件 二&#xff1a;内核参数调整工具&#xff1a;sysctl1、sysctl 作用介绍2、sysctl 常用选项3、sysctl 配置文件 一&#xff1a;资源限制管理工具&#xff1a;uli…...

pandas基础使用

pandas基础使用 基本介绍 类似于字典形式的numpy&#xff0c;可以给它的不同行和不同列进行重命名。 import numpy as np import pandas as pd # 创建一个序列 s pd.Series([1,4,True,np.nan,55.0])创建date format日期矩阵 import numpy as np import pandas as pd dates…...

2024.1.5总结

今日不开心:这周本来想花点时间学习的&#xff0c;没想到全都花在刷视频&#xff0c;外出消费去了。 今日思考: 1.找对象这件事确实不能强求&#xff0c;顺其自然吧&#xff0c;单身和不单身&#xff0c;其实&#xff0c;各有各的利弊。在一次坐地铁的过程中&#xff0c;我一…...

解释一下:运放的输入偏置电流

输入偏置电流 首先看基础部分:这就是同相比例放大器 按照理论计算,输入VIN=0时,输出VOUT应为0,对吧 仿真与理论差距较大,有200多毫伏的偏差,这就是输入偏置电流IBIAS引起的,接着看它的定义 同向和反向输入电流的平均值,也就是Ib1、Ib2求平均,即(Ib1+Ib2)/2 按照下面…...

Federation机制的实现

1.关闭Hadoop的HDFS和YARN&#xff0c;依次执行“stop-yarn.sh”和“stop-dfs.sh”命令关闭Hadoop的YARN和HDFS。 2.删除3台虚拟机上的临时文件&#xff1a; 3.修改hdfs-site.xml配置文件&#xff0c;进入虚拟机liumengting1的/export/servers/hadoop-3.3.4/etc/hadoop目录&…...

120.Jenkins里的Pipeline Script

目录 1. **Declarative Pipeline** 主要部分 示例 2. **Scripted Pipeline** 主要部分 示例 3. **常用指令和功能** 环境变量 工具管理 文件操作 构建触发器 并行执行 异常处理 用户交互 4.**两种类型的特点** 1. **声明式 Pipeline (Declarative Pipeline)** 中…...

SpringBoot3-整合WebSocket指南

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞&#x1f44d;收藏⭐评论✍ SpringBoot3-整合WebSocket指南 1. 什么是WebSocket?2. 环境准备2.1 项目依赖 3. WebSocket配置3.1 WebSocket配置类3.2 自定义WebSocket处理器 4. 控制器5. 前端实现5.…...

【npm依赖包介绍】借助rimraf依赖包,在用npm run build构建项目时,清空dist目录,避免新旧混合

文章目录 背景如何使用附上rimraf的介绍和说明主要作用使用场景安装使用示例异步删除同步删除 参考资料 背景 在npm run build时&#xff0c;一般都会清空项目中已有的dist目录再构建&#xff0c;避免新旧混合。 如何使用 可以简单使用rimraf这个npm依赖包。 目前rimraf的最…...

python学opencv|读取图像(二十四)使用cv2.putText()绘制文字进阶-倾斜文字

【1】引言 前述学习进程中&#xff0c;我们已经掌握了pythonopencv绘制文字的基本技能&#xff0c;相关链接为&#xff1a; python学opencv|读取图像&#xff08;二十三&#xff09;使用cv2.putText()绘制文字-CSDN博客 在这里&#xff0c;我们使用不同的字体、线条颜色和线…...

【简博士统计学习方法】第1章:3. 统计学习方法的三要素

3. 统计学习方法的三要素 3.1 监督学习的三要素 3.1.1 模型 假设空间&#xff08;Hypothesis Space&#xff09;&#xff1a;所有可能的条件概率分布或决策函数&#xff0c;用 F \mathcal{F} F表示。 若定义为决策函数的集合&#xff1a; F { f ∣ Y f ( X ) } \mathcal{F…...

“AI智慧语言训练系统:让语言学习变得更简单有趣

大家好&#xff0c;我是你们的老朋友&#xff0c;一个热衷于探讨科技与教育结合的产品经理。今天&#xff0c;我想和大家聊聊一个让语言学习变得不再头疼的话题——AI智慧语言训练系统。这个系统可是我们语言学习者的福音&#xff0c;让我们一起来揭开它的神秘面纱吧&#xff0…...

机器学习笔记 - 单幅图像深度估计的最新技术

1、深度估计简述 单眼深度估计是一项计算机视觉任务,AI 模型从单个图像中预测场景的深度信息。模型估计场景中对象从一个照相机视点的距离。单目深度估计已广泛用于自动驾驶、机器人等领域。深度估计被认为是最困难的计算机视觉任务之一,因为它要求模型理解对象及其深度信息之…...