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

【Rust光年纪】深入了解Rust语言的关键库:功能特点与使用场景分析

探索Rust语言下的重要库:硬件接口控制和数据库操作全解析

前言

随着Rust语言在嵌入式开发和数据库操作领域的不断发展,越来越多的优秀库和工具涌现出来。本文将介绍一些用于Rust语言的重要库,包括硬件接口库、嵌入式硬件抽象层、ORM和查询构建器,以及异步数据库驱动程序等,为读者提供全面的了解和指导。

欢迎订阅专栏:Rust光年纪

文章目录

  • 探索Rust语言下的重要库:硬件接口控制和数据库操作全解析
    • 前言
    • 1. rppal:一个用于Rust语言的Raspberry Pi硬件接口库
      • 1.1 简介
        • 1.1.1 核心功能
        • 1.1.2 使用场景
      • 1.2 安装与配置
        • 1.2.1 安装指南
        • 1.2.2 基本配置
      • 1.3 API 概览
        • 1.3.1 GPIO控制
        • 1.3.2 PWM输出
    • 2. embedded-hal:一个用于Rust语言的嵌入式硬件抽象层
      • 2.1 简介
        • 2.1.1 核心功能
        • 2.1.2 使用场景
      • 2.2 安装与配置
        • 2.2.1 安装指南
        • 2.2.2 基本配置
      • 2.3 API 概览
        • 2.3.1 数字输入输出
        • 2.3.2 时钟控制
    • 3. diesel:一个用于Rust语言的ORM和查询构建器
      • 3.1 简介
        • 3.1.1 核心功能
        • 3.1.2 使用场景
      • 3.2 安装与配置
        • 3.2.1 安装指南
        • 3.2.2 基本配置
      • 3.3 API 概览
        • 3.3.1 ORM操作
        • 3.3.2 查询构建
    • 4. sqlx:一个用于Rust语言的异步数据库驱动程序和查询构建器
      • 4.1 简介
        • 4.1.1 核心功能
        • 4.1.2 使用场景
      • 4.2 安装与配置
        • 4.2.1 安装指南
        • 4.2.2 基本配置
      • 4.3 API 概览
        • 4.3.1 异步数据库操作
        • 4.3.2 查询构建
    • 5. Redis-rs:一个用于Rust语言的Redis客户端
      • 5.1 简介
        • 5.1.1 核心功能
        • 5.1.2 使用场景
      • 5.2 安装与配置
        • 5.2.1 安装指南
        • 5.2.2 基本配置
      • 5.3 API 概览
        • 5.3.1 连接管理
        • 5.3.2 数据操作
    • 6. postgres:一个用于Rust语言的PostgreSQL客户端
      • 6.1 简介
        • 6.1.1 核心功能
        • 6.1.2 使用场景
      • 6.2 安装与配置
        • 6.2.1 安装指南
        • 6.2.2 基本配置
      • 6.3 API 概览
        • 6.3.1 连接管理
        • 6.3.2 数据操作
    • 总结

1. rppal:一个用于Rust语言的Raspberry Pi硬件接口库

1.1 简介

rppal是一个针对Rust语言的Raspberry Pi硬件接口库,它提供了丰富的功能,可以帮助开发者轻松地控制Raspberry Pi的GPIO、PWM等硬件接口。

1.1.1 核心功能

rppal库的核心功能包括对Raspberry Pi的GPIO控制和PWM输出。通过该库,用户可以方便地读取传感器数据、控制LED灯、驱动舵机等。

1.1.2 使用场景

rppal适用于各种嵌入式设备开发场景,特别是针对树莓派的项目。无论是物联网应用、智能家居还是机器人领域,rppal都能提供良好的支持。

1.2 安装与配置

要使用rppal库,首先需要在你的Raspberry Pi上安装Rust编程语言的环境,然后可以通过Cargo(Rust的包管理工具)来安装rppal。

1.2.1 安装指南

首先,确保你的树莓派已经安装了Rust编程语言的环境。然后,在你的Rust项目中的Cargo.toml文件中添加以下依赖:

[dependencies]
rppal = "0.11.3"

接下来,在项目的代码中引入rppal库:

use rppal::gpio;
use rppal::pwm;

最后,通过Cargo进行构建和运行你的项目:

cargo build
cargo run
1.2.2 基本配置

在开始使用rppal之前,需要先对GPIO和PWM进行基本的配置初始化。下面是一个简单的示例代码:

use rppal::gpio::{Gpio, Level};
use rppal::pwm::{Channel, Pwm};fn main() {let gpio = Gpio::new().unwrap();let mut pin = gpio.get(18).unwrap();pin.set_mode(Mode::Output);let pwm = Pwm::with_frequency(Channel::Pwm0, 50.0, 0.5, Polarity::Normal);pwm.enable();// 控制GPIOpin.write(Level::High);// 控制PWMpwm.set_pwm(0.8);
}

1.3 API 概览

rppal提供了丰富的API,以下将介绍其中的GPIO控制和PWM输出两个重要功能。

1.3.1 GPIO控制

通过rppal库,你可以轻松地对Raspberry Pi的GPIO进行控制。例如,设置引脚为输入或输出模式、读取引脚状态、写入高低电平等。下面是一个简单的GPIO输出示例:

use rppal::gpio::{Gpio, Mode};fn main() {let gpio = Gpio::new().unwrap();let mut pin = gpio.get(18).unwrap();pin.set_mode(Mode::Output);pin.write(1);
}

更多GPIO相关的API及用法,请参考rppal文档。

1.3.2 PWM输出

除了 GPIO 控制,rppal 还支持 PWM 输出,以下是一个简单的示例代码,演示了如何使用 rppal 实现 PWM 输出:

use rppal::pwm::{Channel, Polarity, Pwm};
use std::thread;
use std::time::Duration;fn main() {let pwm = Pwm::with_frequency(Channel::Pwm0, 50.0, 0.5, Polarity::Normal).unwrap();loop {pwm.set_duty_cycle(0.5);thread::sleep(Duration::from_secs(2));pwm.set_duty_cycle(0.25);thread::sleep(Duration::from_secs(2));}
}

更多 PWM 输出相关的 API 详见 rppal PWM 文档

通过 rppal 库,开发者可以轻松地在 Rust 语言中实现对 Raspberry Pi 硬件接口的控制和使用,为树莓派项目的开发提供了便利。

2. embedded-hal:一个用于Rust语言的嵌入式硬件抽象层

2.1 简介

embedded-hal 是一个 Rust 语言的嵌入式硬件抽象层,它提供了一组 trait 和类型定义,用于描述与硬件相关的功能和行为。通过使用 embedded-hal,开发者可以编写可移植的嵌入式应用程序,而无需担心底层硬件的差异性。

2.1.1 核心功能
  • 提供了通用的硬件接口抽象,包括数字输入输出、时钟控制等功能
  • 支持不同硬件平台之间的可移植性
  • 使得嵌入式系统的代码更易于维护和重用
2.1.2 使用场景

embedded-hal 可以被广泛应用于各种嵌入式系统开发中,特别是对于那些需要跨不同硬件平台移植的项目来说,它具有非常重要的作用。

2.2 安装与配置

2.2.1 安装指南

首先,在 Cargo.toml 中添加 embedded-hal 依赖:

[dependencies]
embedded-hal = "0.2"
2.2.2 基本配置

在 Rust 项目中引入 embedded-hal 依赖后,就可以开始使用其中定义的 trait 和类型了。

2.3 API 概览

2.3.1 数字输入输出
// 导入 embedded-hal 中的 DigitalIO trait
use embedded_hal::digital::v2::OutputPin;fn main() {// 在代码中使用 OutputPin trait 来控制数字输出let mut led = // ...; // 实例化一个 OutputPin 对象// 设置为高电平led.set_high().unwrap();
}

官网链接:embedded-hal DigitalIO

2.3.2 时钟控制
// 导入 embedded-hal 中的 ClockControl trait
use embedded_hal::time::Clock;fn main() {// 在代码中使用 Clock trait 来进行时钟控制let clock = // ...; // 实例化一个 Clock 对象// 获取当前时间let now = clock.try_now();
}

官网链接:embedded-hal ClockControl


以上是关于 embedded-hal 的简要介绍和基本使用示例。希望对你有所帮助!

3. diesel:一个用于Rust语言的ORM和查询构建器

3.1 简介

3.1.1 核心功能

Diesel 是一个用于 Rust 语言的 ORM(对象关系映射) 和查询构建器。它提供了一种类型安全的方式来与数据库进行交互,允许开发者使用 Rust 语言来执行数据库操作。

Diesel 的核心功能包括:

  • 数据模型定义:通过 Rust 结构体和注解来定义数据模型,同时支持代码优先和数据库优先的开发方式。
  • 查询构建:使用 Rust 语言构建类型安全的数据库查询,避免了字符串拼接等潜在的错误。
  • 数据库操作:支持常见的数据库操作,如插入、更新、删除等,并提供事务支持。
3.1.2 使用场景

Diesel 适用于需要在 Rust 应用程序中与数据库交互的各种场景,包括但不限于:

  • Web 应用程序后端开发
  • 服务端应用程序开发
  • 数据处理和分析应用程序开发

3.2 安装与配置

3.2.1 安装指南

首先,您需要在 Cargo.toml 文件中添加 Diesel 作为项目的依赖:

[dependencies]
diesel = { version = "1.4", features = ["postgres", "chrono"] }

然后使用 Cargo 进行安装:

$ cargo build
3.2.2 基本配置

在 Rust 项目中使用 Diesel 需要进行一些基本配置,包括设置数据库连接和生成 Diesel 的 schema.rs 文件。详细的配置和初始化步骤可以参考 Diesel 官方文档。

3.3 API 概览

3.3.1 ORM操作

下面是一个使用 Diesel 进行简单 ORM 操作的示例。假设有一个名为 user 的数据表,对应的 Rust 结构体为 User

#[macro_use] extern crate diesel;use diesel::prelude::*;
use diesel::pg::PgConnection;
use dotenv::dotenv;
use std::env;table! {user (id) {id -> Integer,name -> VarChar,}
}#[derive(Queryable)]
struct User {id: i32,name: String,
}fn main() {dotenv().ok();let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");let connection = PgConnection::establish(&database_url).expect("Error connecting to database");let results = user::table.load::<User>(&connection).expect("Error loading users");for user in results {println!("ID: {}, Name: {}", user.id, user.name);}
}
3.3.2 查询构建

以下是一个简单的查询构建示例,假设我们需要从 user 表中选择名字为 “Alice” 的用户:

let alice_users = user::table.filter(user::name.eq("Alice")).load::<User>(&connection).expect("Error loading users");for user in alice_users {println!("ID: {}, Name: {}", user.id, user.name);
}

更多关于 Diesel 的使用方法和示例可以在 Diesel 官方文档 中找到。

希望这些信息对你有所帮助!

4. sqlx:一个用于Rust语言的异步数据库驱动程序和查询构建器

4.1 简介

sqlx 是一个用于 Rust 语言的异步数据库驱动程序和查询构建器。它提供了对数据库的访问以及查询构建的功能,使得在 Rust 中操作数据库变得更加便捷和高效。

4.1.1 核心功能
  • 提供异步数据库操作的功能
  • 支持多种主流数据库系统,如 PostgreSQL、MySQL、SQLite 等
  • 提供方便的查询构建器,简化了 SQL 查询的编写
4.1.2 使用场景

sqlx 可以被广泛应用于需要使用 Rust 语言进行数据库操作的项目中,特别是那些需要异步操作支持的项目。它能够简化数据库操作的复杂性,使得开发者可以专注于业务逻辑的实现。

4.2 安装与配置

4.2.1 安装指南

你可以通过在你的 Cargo.toml 文件中添加以下依赖来安装 sqlx:

[dependencies]
sqlx = "0.5"

更多安装信息可以参考 sqlx 官方文档

4.2.2 基本配置

sqlx 不需要额外的配置,默认即可使用。你只需在代码中引入相应的模块,并根据具体数据库连接信息创建连接池即可开始使用。

4.3 API 概览

4.3.1 异步数据库操作

以下是一个简单的示例,演示如何使用 sqlx 进行异步数据库操作:

use sqlx::postgres::PgPool;
use sqlx::Row;#[tokio::main]
async fn main() -> Result<(), sqlx::Error> {let pool = PgPool::connect("postgresql://username:password@localhost/database").await?;let row = sqlx::query("SELECT * FROM users WHERE id = $1").bind(1).map(|row: PgRow| {let id: i32 = row.get("id");let name: &str = row.get("name");(id, name)}).fetch_one(&pool).await?;println!("User ID: {}, Name: {}", row.0, row.1);Ok(())
}
4.3.2 查询构建

以下是一个简单的示例,演示如何使用 sqlx 的查询构建器:

use sqlx::prelude::*;#[tokio::main]
async fn main() -> Result<(), sqlx::Error> {let mut conn = sqlx::PgConnection::connect("postgresql://username:password@localhost/database").await?;let account = sqlx::query_as!(Account, "SELECT id, name FROM accounts WHERE id = $1", 1).fetch_one(&mut conn).await?;println!("Account ID: {}, Name: {}", account.id, account.name);Ok(())
}

更多关于 sqlx 的查询构建器的信息可以参考 sqlx 查询构建器官方文档

5. Redis-rs:一个用于Rust语言的Redis客户端

5.1 简介

Redis-rs是一个用于Rust语言的Redis客户端,它提供了与Redis服务器进行通信的接口和功能。通过Redis-rs,开发人员可以在他们的Rust应用程序中轻松地使用Redis数据库,并利用其强大的功能。

5.1.1 核心功能

Redis-rs允许用户执行各种操作,包括连接到Redis服务器、执行命令以及处理返回的数据。它还提供了异步和同步操作的支持,使得开发者能够根据其应用程序的需求选择合适的操作模式。

5.1.2 使用场景

Redis-rs适用于任何需要在Rust应用程序中与Redis数据库进行交互的情况。无论是简单的键值对存储,还是复杂的数据结构操作,Redis-rs都能满足开发者的需求。

5.2 安装与配置

5.2.1 安装指南

要在Rust项目中使用Redis-rs,首先需要在Cargo.toml文件中添加对Redis-rs crate的依赖:

[dependencies]
redis = "0.26.0"

然后在Rust代码中引入Redis crate:

extern crate redis;
5.2.2 基本配置

基本的配置包括连接到Redis服务器所需的信息,比如主机地址、端口号等。下面是一个简单的示例:

use redis::Client;fn main() {let client = Client::open("redis://127.0.0.1/").unwrap();
}

5.3 API 概览

5.3.1 连接管理

Redis-rs提供了连接到Redis服务器的功能,开发者可以使用redis::Client来创建一个新的客户端实例。以下示例展示了如何连接到Redis服务器:

use redis::Client;fn main() {let client = Client::open("redis://127.0.0.1/").unwrap();
}
5.3.2 数据操作

Redis-rs支持多种数据操作,包括字符串、列表、哈希等。以下是一个简单的示例,展示了如何向Redis数据库中写入和读取数据:

use redis::{Commands, ConnectionLike};fn main() {let client = redis::Client::open("redis://127.0.0.1/").unwrap();let con = client.get_connection().unwrap();let _: () = con.set("my_key", 42).unwrap();let result: i32 = con.get("my_key").unwrap();println!("Got value: {}", result);
}

更多关于Redis-rs的信息,可以参考官方文档:https://docs.rs/redis

6. postgres:一个用于Rust语言的PostgreSQL客户端

6.1 简介

postgres是一个为Rust语言设计的PostgreSQL客户端,它提供了连接管理和数据操作等核心功能,使得在Rust项目中使用PostgreSQL数据库变得非常便捷。

6.1.1 核心功能
  • 提供简单易用的API,方便进行数据库连接、查询和数据操作。
  • 支持异步和同步操作,适用于不同的应用场景。
  • 提供错误处理和连接池等功能,保证稳定的数据库交互体验。
6.1.2 使用场景

postgres适用于任何需要在Rust项目中与PostgreSQL数据库进行交互的场景,包括但不限于Web应用、后端服务和数据分析等领域。

6.2 安装与配置

为了使用postgres,首先需要添加对应的crate依赖到Rust项目中,并进行基本的配置。

6.2.1 安装指南

在Cargo.toml文件中添加以下依赖:

[dependencies]
postgres = "0.17"

然后运行cargo build命令来安装依赖。

6.2.2 基本配置

在代码中引入postgres crate:

extern crate postgres;

6.3 API 概览

下面将介绍postgres的一些核心API,包括连接管理和数据操作。

6.3.1 连接管理

使用postgres建立数据库连接,并执行简单的查询操作:

use std::env;
use tokio_postgres::{NoTls, Error};
use tokio_postgres::Config;#[tokio::main]
async fn main() -> Result<(), Error> {let config = Config::from_str(&env::var("DATABASE_URL")?)?.connect(NoTls).await?;let rows = config.query("SELECT id, name FROM users", &[]).await?;for row in rows {let id: i32 = row.get(0);let name: &str = row.get(1);println!("id: {}, name: {}", id, name);}Ok(())
}

通过上述代码可以实现与PostgreSQL数据库的连接和查询操作。更多连接管理的详细内容可参考官方文档:连接管理

6.3.2 数据操作

使用postgres进行数据增删改查操作示例:

use std::error::Error;
use postgres::{Client, NoTls};fn main() -> Result<(), Box<dyn Error>> {let mut client = Client::connect("host=localhost user=postgres", NoTls)?;// 创建表client.batch_execute("CREATE TABLE person (id SERIAL PRIMARY KEY,name VARCHAR NOT NULL,age INTEGER NOT NULL)")?;// 插入数据client.execute("INSERT INTO person (name, age) VALUES ($1, $2)",&["John Doe", &30],)?;// 查询数据for row in client.query("SELECT id, name, age FROM person", &[])? {let id: i32 = row.get(0);let name: &str = row.get(1);let age: i32 = row.get(2);println!("Found person: {} {} {}", id, name, age);}// 其他操作...Ok(())
}

以上代码实现了创建表、插入数据和查询数据的过程。更多数据操作的详细内容可参考官方文档:数据操作

通过以上的介绍,我们可以清晰地了解到如何在Rust语言中使用postgres进行与PostgreSQL数据库的交互,从连接管理到数据操作,都有相应的API支持。

总结

本文详细介绍了一些用于Rust语言的重要库和工具,涵盖了硬件接口、嵌入式开发、数据库操作等多个领域。通过学习本文,读者可以对这些工具有一个全面的了解,为实际开发中的应用提供参考和指导。

相关文章:

【Rust光年纪】深入了解Rust语言的关键库:功能特点与使用场景分析

探索Rust语言下的重要库&#xff1a;硬件接口控制和数据库操作全解析 前言 随着Rust语言在嵌入式开发和数据库操作领域的不断发展&#xff0c;越来越多的优秀库和工具涌现出来。本文将介绍一些用于Rust语言的重要库&#xff0c;包括硬件接口库、嵌入式硬件抽象层、ORM和查询构…...

矩估计与最大似然估计的通俗理解

点估计与区间估计 矩估计与最大似然估计都属于点估计&#xff0c;也就是估计出来的结果是一个具体的值。对比区间估计&#xff0c;通过样本得出的估计值是一个范围区间。例如估计馒头店每天卖出的馒头个数&#xff0c;点估计就是最终直接估计每天卖出10个&#xff0c;而区间估…...

性能调优本质:如何精准定位瓶颈并实现系统极致优化

目录 先入为主的反例 性能调优的本质 性能调优实操案例 性能调优相关文章 先入为主的反例 在典型的 ETL 场景中,我们经常需要对数据进行各式各样的转换,有的时候,因为业务需求太复杂,我们往往还需要自定义 UDF(User Defined Functions)来实现特定的转换逻辑。 但是…...

Git的命令

git add . 添加到暂存区 git commit -m 备注 提交 git branch 查看所有分支 git branch -d 分支名 删除分支 git push origin --delete 分支名 远程分支删除 git branch -a 查看删除后的分支 git clone 地址 例如https://gitee.com/whale456/demo.git git push origin m…...

WPF中使用定时器更新元素-DispatcherTimer

在WPF中使用定时器来更新UI元素是一种常见且有用的做法&#xff0c;特别是当你需要基于时间间隔来刷新数据或执行某些操作时。DispatcherTimer是WPF中用于在UI线程上执行周期性任务的理想选择&#xff0c;因为它确保了对UI元素的更新是线程安全的 例子程序 每隔0.5s 界面中的…...

计算机网络 - 理解HTTP与HTTPS协议的关键区别与安全性

作者&#xff1a;逍遥Sean 简介&#xff1a;一个主修Java的Web网站\游戏服务器后端开发者 主页&#xff1a;https://blog.csdn.net/Ureliable 觉得博主文章不错的话&#xff0c;可以三连支持一下~ 如有疑问和建议&#xff0c;请私信或评论留言&#xff01; 前言 在今天的互联网…...

【Spring Framework】使用XML配置文件配置Bean的实例化方式

在 Spring Framework 中&#xff0c;实例化 bean 的方式非常灵活&#xff0c;允许开发人员根据需求选择不同的方法。以下是几种常见的实例化 bean 的方式及其示例&#xff1a; 1. 通过无参构造函数实例化 这是最常见的方式&#xff0c;Spring 会使用 bean 的默认无参构造函数…...

模拟电子技术-实验四 二极管电路仿真

实验四 二极管电路仿真 一&#xff0e;实验类型 验证性实验 二&#xff0e;实验目的 1、验证二极管的单向导电性 2、验证二极管的稳压特性。 三&#xff0e;实验原理 二极管的单向导电性&#xff1a; 四、实验内容 1、二极管参数测试仿真实验 1&#xff09;仪表仿真…...

Git 子仓(Git Submodule)学习

Git 子仓学习 Git 子仓&#xff08;Submodule&#xff09;是 Git 提供的一种功能&#xff0c;用于在一个 Git 仓库&#xff08;称为主仓库或 superproject&#xff09;中嵌入另一个 Git 仓库&#xff08;称为子仓或 submodule&#xff09;。这种功能在管理大型项目或依赖关系较…...

JavaSE基础 (认识String类)

一&#xff0c;什么是String类 在C语言中已经涉及到字符串了&#xff0c;但是在C语言中要表示字符串只能使用字符数组或者字符指针&#xff0c;可以使用标准库提 供的字符串系列函数完成大部分操作&#xff0c;但是这种将数据和操作数据方法分离开的方式不符合面相对象的思想&…...

学习大数据DAY25 Shell脚本的书写2与Shell工具的使用

目录 自定义函数 递归-自己调用自己 上机练习 12 Shell 工具 sort sed awk 上机练习 13 自定义函数 name(){ action; } function name { Action; } name 因为 shell 脚本是从上到下逐行运行&#xff0c;不会像其它语言一样先编译&#xff0c;所以函数必 须在调…...

Java学习Day19:基础篇9

包 final 权限修饰符 空着不写是default&#xff01; 代码块 1.静态代码块 1.静态代码块优于空参构造方法 2.静态调用只被加载一次&#xff1b; 静态代码块在Java中是一个重要的特性&#xff0c;它主要用于类的初始化操作&#xff0c;并且随着类的加载而执行&#xff0c;且只…...

如何撤销git add ,git commit 的提交记录

一、撤销git commit ,但是没有push到远程的记录 git reset --hard HEAD~1 销最近的一次提交&#xff0c;并且丢弃所有未提交的更改 二、撤销git add ,但是没有提交到本地仓库的记录 git reset 三、原理 Git 工作流程的简要说明&#xff1a; 工作目录&#xff08;Working …...

Postman环境变量的高级应用:复杂条件逻辑的实现

Postman环境变量的高级应用&#xff1a;复杂条件逻辑的实现 在Postman中&#xff0c;环境变量是管理和定制API请求的强大工具。通过使用环境变量&#xff0c;可以轻松地在不同环境之间切换&#xff0c;如开发、测试和生产环境。然而&#xff0c;环境变量的真正威力在于它们能够…...

AI问答-供应链管理:理解医疗耗材供应链SPD板块

医疗耗材供应链SPD板块是一个专注于医用耗材供应链管理的关键领域&#xff0c;它融合了供应链管理理论、物流信息技术以及环节专业化管理手段&#xff0c;旨在保证院内医用耗材的质量安全、满足临床需求&#xff0c;并提升医院的整体运营效率。以下是对医疗耗材供应链SPD板块的…...

科普文:分布式数据一致性协议Paxos

1 什么是Paxos Paxos协议其实说的就是Paxos算法, Paxos算法是基于消息传递且具有高度容错特性的一致性算 法&#xff0c;是目前公认的解决分布式一致性问题最有效的算法之一。 Paxos由 莱斯利兰伯特(Leslie Lamport)于1998年在《The Part-Time Parliament》论文中首次公 开&…...

Vue3 + js-echarts 实现前端大屏可视化

1、前言 此文章作为本人大屏可视化项目的入门学习笔记&#xff0c;以此作为记录&#xff0c;记录一下我的大屏适配解决方案&#xff0c;本项目是基于vite Vue3 js less 实现的&#xff0c;首先看ui&#xff0c;ui是网上随便找的&#xff0c;代码是自己实现的&#xff0c;后面…...

知乎信息流广告怎么投?一文读懂知乎广告开户及投放!

作为中国领先的问答社区&#xff0c;知乎以其高质量的内容和活跃的用户群体成为了众多品牌青睐的营销阵地。为了帮助企业更高效地利用知乎平台进行品牌推广&#xff0c;云衔科技提供了全方位的知乎广告开户及代运营服务&#xff0c;助力您的品牌在知乎上实现快速增长。 一、知…...

TikTok达人合作:AI与大数据如何提升跨境电商营销效果

在当今数字时代&#xff0c;跨境电商与TikTok达人的合作已成为推动品牌增长和市场拓展的重要力量。随着AI、大数据等先进技术的不断发展和应用&#xff0c;这种合作模式正变得更加高效和精准。本文Nox聚星将和大家探讨在TikTok达人合作中&#xff0c;AI、大数据等技术的具体运用…...

win11管理员账户为啥不能改?win11怎么更改管理员账户名称?

文章目录 亲测有效&#xff01;&#xff01;&#xff01;&#xff01;...

Spring Security学习笔记(三)Spring Security+JWT认证授权流程代码实例

前言&#xff1a;本系列博客基于Spring Boot 2.6.x依赖的Spring Security5.6.x版本 上两篇文章介绍了Spring Security的整体架构以及认证和鉴权模块原理。本篇文章就是基于Spring Security和JWT的一个demo 一、JWT简介 JWT&#xff08;JSON Web Token&#xff09;&#xff0c…...

精装房、旧房改造智能家居,单火线也有“救”了单火模块 零线发生器

精装房、旧房改造智能家居&#xff0c;单火线也有“救”了单火模块 零线发生器 史新华 以前写过关于智能家居没有预留零线&#xff0c;导致无法安装零火开关&#xff0c;也没办法装触控屏&#xff0c;主要原因还是无法通过零火线给设备供电。今年最火的一款思万奇零线发生器救…...

使用URLSearchParams获取url地址后面的参数(window.location.href)

function getUrlParams(url) {const urlStr url.split(?)[1];const urlSearchParams new URLSearchParams(urlStr);return Object.fromEntries(urlSearchParams.entries()); }const info getUrlParams(window.location.href); // info是一个对象&#xff0c;包含url携带参数…...

计算机网络03

文章目录 重传机制超时重传快速重传SACK 方法Duplicate SACK 滑动窗口流量控制操作系统缓冲区与滑动窗口的关系窗口关闭糊涂窗口综合症 拥塞控制慢启动拥塞避免算法拥塞发生快速恢复 如何理解是 TCP 面向字节流协议&#xff1f;如何理解字节流&#xff1f;如何解决粘包&#xf…...

linux每个目录都是干啥的???linux目录说明

很全&#xff0c;没事看看&#xff0c;记住 / 虚拟目录的根目录。通常不会在这里存储文件 /bin 二进制目录,存放许多用户级的GNU工具启动目录,存放启动文件 /etc 系统配置目录 /dev 设备目录,Linux在这里创建设备节点系统配置文件目录 /home 主目录,Linux在…...

DB2-Db2StreamingChangeEventSource

提示&#xff1a;Db2StreamingChangeEventSource 类主要用于从 IBM Db2 数据库中读取变更数据捕获 (CDC, Change Data Capture) 信息。CDC 是一种技术&#xff0c;允许系统跟踪数据库表中数据的更改&#xff0c;这些更改可以是插入、更新或删除操作。在大数据和实时数据处理场景…...

在当前的数字化时代,Cobol 语言如何与新兴技术(如云计算、大数据、人工智能)进行融合和交互?

Cobol语言作为一种古老的编程语言&#xff0c;与新兴技术的融合和交互需要一些额外的工作和技术支持。以下是一些将Cobol与新兴技术结合的方法&#xff1a; 云计算&#xff1a;Cobol程序可以迁移到云平台上运行&#xff0c;通过云提供的弹性和可扩展性&#xff0c;为Cobol应用程…...

使用SDL库以及C++实现的简单的贪吃蛇:AI Fitten生成

简单使用AI代码生成器做了一个贪吃蛇游戏 设计的基本逻辑都是正确的&#xff0c;能流畅运行 免费准确率高&#xff0c;非常不错&#xff01;支持Visual Studio系列 Fitten&#xff1a;https://codewebchat.fittenlab.cn/ SDL 入门指南&#xff1a;安装配置https://blog.csdn.n…...

【C++标准库】模拟实现string类

模拟实现string类 一.命名空间与类成员变量二.构造函数1.无参&#xff08;默认&#xff09;构造2.有参构造3.兼容无参和有参构造4.拷贝构造1.传统写法2.现代写法 三.析构函数四.string类对象的容量操作1.size2.capacity3.clear4.empty5.reserve6.resize 五.string类对象的访问及…...

ArcGIS for js 标记(vue代码)

一、引入依赖 import Graphic from "arcgis/core/Graphic"; import GraphicsLayer from "arcgis/core/layers/GraphicsLayer"; import Color from "arcgis/core/Color"; import TextSymbol from "arcgis/core/symbols/TextSymbol.js"…...