【Rust光年纪】超越ORM:探索Rust语言多款数据库客户端库的核心功能和使用场景
数据库操作新选择:从异步操作到连接管理,掌握Rust语言数据库客户端库的全貌
前言
在现代软件开发中,与数据库进行交互是一个常见的任务。Rust语言作为一种高性能、内存安全的编程语言,拥有丰富的生态系统来支持各种数据库操作。本文将介绍几个用于Rust语言的不同数据库客户端库,以及它们的核心功能、使用场景、安装配置和API概览。
欢迎订阅专栏:Rust光年纪
文章目录
- 数据库操作新选择:从异步操作到连接管理,掌握Rust语言数据库客户端库的全貌
- 前言
- 1. diesel:一个用于Rust语言的ORM和查询构建器
- 1.1 简介
- 1.1.1 核心功能
- 1.1.2 使用场景
- 1.2 安装与配置
- 1.2.1 安装指南
- 1.2.2 基本配置
- 1.3 API 概览
- 1.3.1 ORM操作
- 1.3.2 查询构建
- 2. sqlx:一个用于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. Redis-rs:一个用于Rust语言的Redis客户端
- 3.1 简介
- 3.1.1 核心功能
- 3.1.2 使用场景
- 3.2 安装与配置
- 3.2.1 安装指南
- 3.2.2 基本配置
- 3.3 API 概览
- 3.3.1 连接管理
- 3.3.2 数据操作
- 4. postgres:一个用于Rust语言的PostgreSQL客户端
- 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. rusqlite:一个用于Rust语言的SQLite客户端
- 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 数据操作
- 执行 SQL 查询
- 6. Clickhouse-rs:一个用于Rust语言的ClickHouse客户端
- 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. diesel:一个用于Rust语言的ORM和查询构建器
1.1 简介
diesel是一个用于Rust语言的ORM(对象关系映射)和查询构建器。它提供了一套强大的工具,帮助开发者在Rust中轻松地操作数据库,执行ORM操作,并构建复杂的查询。
1.1.1 核心功能
- 提供ORM功能,将数据库表映射为Rust结构体,方便进行对象级别的操作。
- 支持常见的数据库操作,如增删改查等。
- 提供类型安全的查询构建器,可以避免手写SQL语句,减少出错的可能性。
1.1.2 使用场景
diesel适合于需要使用Rust语言进行数据库操作的项目,特别是对类型安全和性能有较高要求的项目。由于其良好的文档和活跃的社区支持,diesel在Rust生态圈中得到了广泛的应用。
1.2 安装与配置
安装diesel之前,需要确保已经安装了Rust编程语言的开发环境。接下来,可以通过Cargo(Rust的包管理工具)来安装diesel。
1.2.1 安装指南
在项目的Cargo.toml文件中添加以下依赖:
[dependencies]
diesel = { version = "1.4", features = ["<数据库类型>"] }
其中<数据库类型>
需要替换为实际使用的数据库类型,比如sqlite
、mysql
或postgres
等。
然后运行以下命令安装diesel-cli工具:
cargo install diesel_cli --no-default-features --features "<数据库类型>"
1.2.2 基本配置
安装完成后,可以使用diesel setup
命令来配置数据库连接,并生成相应的目录结构和文件。
1.3 API 概览
diesel提供了丰富的API,涵盖了ORM操作和查询构建等功能。
1.3.1 ORM操作
下面是一个简单的示例,演示了如何使用diesel进行ORM操作,假设已经定义了名为User
的Rust结构体,用于映射数据库中的users
表:
use diesel::prelude::*;
use diesel::sqlite::SqliteConnection;// 定义 User 结构体
#[derive(Queryable)]
struct User {id: i32,name: String,
}fn main() {let connection = SqliteConnection::establish("test.db").unwrap();// 查询所有用户let all_users: Vec<User> = users.load(&connection).expect("Error loading users");
}
在上面的示例中,我们使用了diesel::prelude::*
导入了diesel的预定义符号,准备好了数据库连接之后,通过load
方法加载了所有用户信息。
1.3.2 查询构建
以下是一个简单的示例,展示了如何使用diesel的查询构建器进行查询操作:
use diesel::prelude::*;
use diesel::sqlite::SqliteConnection;
use schema::users::dsl::*;fn main() {let connection = SqliteConnection::establish("test.db").unwrap();// 查询名字为Alice的用户let alice = users.filter(name.eq("Alice")).first::<User>(&connection).expect("Error loading user");
}
2. sqlx:一个用于Rust语言的异步数据库驱动程序和查询构建器
2.1 简介
sqlx 是一个用于 Rust 语言的异步数据库驱动程序和查询构建器。它允许您连接到数据库并执行查询,同时提供了一套易于使用的 API。
2.1.1 核心功能
- 异步数据库操作
- 查询构建
- 支持多种主流数据库,如 PostgreSQL、MySQL、SQLite
2.1.2 使用场景
sqlx 适用于任何需要在 Rust 中处理异步数据库操作的项目。无论是构建 Web 服务、后台任务或其他类型的应用,sqlx 都能提供高效的数据库访问能力。
2.2 安装与配置
2.2.1 安装指南
您可以将 sqlx 添加到您的 Cargo.toml
文件中的依赖项部分:
[dependencies]
sqlx = "0.5"
2.2.2 基本配置
sqlx 不需要太多基本配置,但需要在项目中引入相应的模块来使用,例如:
use sqlx::postgres::PgPool;
2.3 API 概览
2.3.1 异步数据库操作
sqlx 提供了异步数据库操作的支持,下面是一个简单的示例代码,创建一个 PostgreSQL 连接池,并执行查询:
use sqlx::postgres::PgPoolOptions;#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {// 创建一个连接池let pool = PgPoolOptions::new().max_connections(5).connect("postgresql://username:password@localhost/database").await?;// 执行查询let count: i64 = sqlx::query_scalar("SELECT COUNT(*) FROM users").fetch_one(&pool).await?;println!("Total users: {}", count);Ok(())
}
官网链接:sqlx - Asynchronous Postgres
2.3.2 查询构建
sqlx 具有灵活而强大的查询构建能力,使得构建复杂的查询变得非常简单。以下是一个简单的示例,展示了如何执行 SELECT 查询:
use sqlx::{Pool, Postgres, Row};#[tokio::main]
async fn main() -> Result<(), sqlx::Error> {let pool = Pool::<Postgres>::connect("postgresql://username:password@localhost/database").await?;let account_id: i32 = 1;let rec = sqlx::query("SELECT * FROM accounts WHERE id = $1").bind(account_id).map(|row: sqlx::postgres::PgRow| {(row.get(0), row.get(1))}).fetch_one(&pool).await?;let (id, name): (i32, String) = rec;println!("Account {}: {}", id, name);Ok(())
}
官网链接:sqlx - Query Building
以上是关于 sqlx 的简要介绍和使用示例。希望可以帮助你更好地了解和使用这个在 Rust 生态圈中备受推崇的数据库驱动和查询构建工具。
3. Redis-rs:一个用于Rust语言的Redis客户端
3.1 简介
Redis-rs 是一个为 Rust 语言开发的 Redis 客户端库,它提供了连接管理、数据操作等核心功能,使得在 Rust 中操作 Redis 数据库变得更加便捷和高效。
3.1.1 核心功能
- 连接管理
- 数据操作
3.1.2 使用场景
Redis-rs 可以被广泛应用于需要使用 Redis 进行数据存储和缓存的 Rust 项目中,例如 Web 应用程序、分布式系统等。
3.2 安装与配置
3.2.1 安装指南
你可以在 Cargo.toml 文件中添加如下依赖来使用 redis-rs:
[dependencies]
redis = "0.23.0"
3.2.2 基本配置
暂无特殊基本配置要求。
3.3 API 概览
3.3.1 连接管理
通过 Redis-rs 连接 Redis 服务器非常简单。以下是一个建立连接并执行一些简单操作的示例代码:
use redis::Commands;fn main() -> redis::RedisResult<()> {let client = redis::Client::open("redis://127.0.0.1/")?;let mut con = client.get_connection()?;let _: () = con.set("my_key", 42)?;let result: i32 = con.get("my_key")?;println!("My key is: {}", result);Ok(())
}
官网链接:连接管理
3.3.2 数据操作
Redis-rs 提供了丰富的数据操作方法,包括字符串、哈希表、列表、集合等操作。以下是一个简单的示例,演示了如何在 Rust 中进行 Redis 数据操作:
use redis::Commands;fn main() -> redis::RedisResult<()> {let client = redis::Client::open("redis://127.0.0.1/")?;let mut con = client.get_connection()?;// String 操作示例let _: () = con.set("my_string_key", "Hello, Redis!")?;let result: String = con.get("my_string_key")?;println!("My string key is: {}", result);// 哈希表操作示例let _: () = con.hset("my_hash_key", "field1", 1)?;let _: () = con.hset("my_hash_key", "field2", 2)?;let result: Option<i32> = con.hget("my_hash_key", "field1")?;println!("Field1 in my hash key is: {:?}", result);// 列表操作示例let _: () = con.rpush("my_list_key", 1)?;let _: () = con.rpush("my_list_key", 2)?;let result: Vec<i32> = con.lrange("my_list_key", 0, -1)?;println!("My list key contains: {:?}", result);// 集合操作示例let _: () = con.sadd("my_set_key", 1)?;let _: () = con.sadd("my_set_key", 2)?;let result: Vec<i32> = con.smembers("my_set_key")?;println!("My set key contains: {:?}", result);Ok(())
}
官网链接:数据操作
通过以上示例,我们可以看到 Redis-rs 在 Rust 语言中提供了简洁而强大的 Redis 客户端功能,使得 Rust 开发者可以更加方便地与 Redis 进行交互。
4. postgres:一个用于Rust语言的PostgreSQL客户端
4.1 简介
postgres 是一个 Rust 语言下的 PostgreSQL 客户端库。它提供了连接管理、数据操作等核心功能,适用于各种使用场景。
4.1.1 核心功能
- 连接管理
- 数据操作
4.1.2 使用场景
- 数据库应用程序开发
- 数据分析与处理
4.2 安装与配置
安装 postgres 可以在 Cargo.toml 中添加相应的依赖。
4.2.1 安装指南
在 Cargo.toml 文件中添加以下依赖:
[dependencies]
postgres = "0.17.3"
更多安装和更新信息,请参考 postgres crate。
4.2.2 基本配置
在使用 postgres 之前,需要确保已经安装了 Rust 工具链,并且有可访问的 PostgreSQL 数据库实例。
4.3 API 概览
下面将介绍一些 postgres 的核心 API。
4.3.1 连接管理
使用 postgres 进行数据库连接管理的示例代码如下:
use postgres::{Client, NoTls};fn main() {let mut client = Client::connect("host=localhost user=postgres", NoTls).unwrap();// 更多连接管理操作
}
更多关于连接管理的详细内容,请参考 postgres Connection API。
4.3.2 数据操作
postgres 提供了丰富的数据操作方法,例如执行查询、插入、更新和删除等操作。
use postgres::{Client, NoTls};fn main() {let mut client = Client::connect("host=localhost user=postgres", NoTls).unwrap();client.execute("INSERT INTO person (name, age) VALUES ($1, $2)",&[&"Alice", &31],).expect("Error inserting into person");// 更多数据操作
}
更多关于数据操作的详细内容,请参考 postgres Query API。
通过以上示例,我们简要介绍了如何在 Rust 中使用 postgres 客户端库进行连接管理和数据操作。更多详细内容请参考官方文档。
5. rusqlite:一个用于Rust语言的SQLite客户端
5.1 简介
rusqlite 是一个用于 Rust 语言的 SQLite 客户端。它提供了与 SQLite 数据库进行交互的功能,包括连接管理、数据操作等。
5.1.1 核心功能
- 提供连接管理功能,包括打开数据库连接、关闭数据库连接等。
- 支持执行 SQL 命令,如查询、插入、更新和删除数据等操作。
5.1.2 使用场景
rusqlite 可以在 Rust 项目中用于访问和操作 SQLite 数据库,适用于需要使用轻量级嵌入式数据库的场景,例如移动应用程序和小型 Web 服务等。
5.2 安装与配置
使用 Rusqlite 需要先安装相应的依赖,并进行基本的配置。
5.2.1 安装指南
在 Cargo.toml 中添加 rusqlite 依赖:
[dependencies]
rusqlite = "0.26.0"
然后运行 cargo build
即可完成安装。
更多安装细节可以参考 rusqlite GitHub 页面。
5.2.2 基本配置
在 Rust 代码中引入 rusqlite 库:
extern crate rusqlite;use rusqlite::Connection;
5.3 API 概览
下面将介绍 rusqlite 的一些常用 API,包括连接管理和数据操作等。
5.3.1 连接管理
打开数据库连接
use rusqlite::Connection;fn main() {let conn = Connection::open("path_to_your_database.db").unwrap();
}
关闭数据库连接
conn.close().unwrap();
5.3.2 数据操作
执行 SQL 查询
use rusqlite::Connection;fn main() {let conn = Connection::open("path_to_your_database.db").unwrap();conn.execute("SELECT id, name FROM users", &[], |row| {let id: i32 = row.get(0);let name: String = row.get(1);println!("id = {}, name = {}", id, name);Ok(())}).unwrap();
}
这是一个简单的示例,更多关于 rusqlite 的 API 可以查阅官方文档:rusqlite.
通过上述介绍,我们了解了 rusqlite 的基本安装与配置,以及常用的 API 操作。在实际项目中,可以根据需要进一步深入学习和使用 rusqlite 来实现对 SQLite 数据库的灵活操作。
6. Clickhouse-rs:一个用于Rust语言的ClickHouse客户端
6.1 简介
Clickhouse-rs 是一个为 Rust 语言提供的 ClickHouse 客户端,能够快速方便地连接和操作 ClickHouse 数据库。
6.1.1 核心功能
- 支持连接到 ClickHouse 数据库
- 执行 SQL 查询
- 插入、更新和删除数据
- 支持异步操作
6.1.2 使用场景
Clickhouse-rs 可以用于在 Rust 项目中与 ClickHouse 数据库进行交互,例如进行大规模数据分析、实时数据处理等场景。
6.2 安装与配置
安装 Clickhouse-rs 可以通过 Cargo,在你的 Cargo.toml 文件中添加以下依赖:
[dependencies]
clickhouse = "0.1.7"
6.2.1 安装指南
点击 这里 查看 clickhouse crate 的最新版本和详细信息。
6.2.2 基本配置
接下来,配置 Clickhouse-rs 的基本信息,比如数据库连接地址、用户名和密码等。示例代码如下:
use clickhouse::client::Client;fn main() {let client = Client::default().with_url("clickhouse://host:port").with_user("username").with_password("password").with_database("database_name");// 其他操作
}
6.3 API 概览
Clickhouse-rs 提供了丰富的 API,用于管理连接并进行数据操作。
6.3.1 连接管理
点击 这里 查看关于连接管理的详细文档。下面是一个简单的连接示例:
use clickhouse::client::Client;fn main() {let client = Client::default().with_url("clickhouse://host:port");// 其他操作
}
6.3.2 数据操作
Clickhouse-rs 提供了对数据进行插入、查询、更新和删除的操作。下面是一个数据插入的示例:
use clickhouse::client::Client;
use clickhouse::types::options::InsertOptions;fn main() {let client = Client::default().with_url("clickhouse://host:port");let insert_query = r#"INSERT INTO test (a, b) VALUES (1, 'foo')"#;let insert_options = InsertOptions::default();let result = client.insert(insert_query, Some(insert_options));// 处理结果
}
以上是 Clickhouse-rs 的基本用法,更多操作请参考官方文档 clickhouse-rs.
总结
通过本文的介绍,我们了解了多个用于Rust语言的数据库客户端库,覆盖了关系型数据库例如PostgreSQL、SQLite以及非关系型数据库如Redis和ClickHouse。每个库都有其独特的特性和使用场景,例如diesel提供ORM操作,sqlx支持异步数据库操作,而Redis-rs则是专门针对Redis数据库的客户端库。通过选择适合的数据库客户端库,可以有效提升Rust语言项目与数据库进行交互的效率和性能。
相关文章:
【Rust光年纪】超越ORM:探索Rust语言多款数据库客户端库的核心功能和使用场景
数据库操作新选择:从异步操作到连接管理,掌握Rust语言数据库客户端库的全貌 前言 在现代软件开发中,与数据库进行交互是一个常见的任务。Rust语言作为一种高性能、内存安全的编程语言,拥有丰富的生态系统来支持各种数据库操作。…...
解决:事件监听器 addEventListener 被多次调用
背景: 给一个元素添加了事件监听,click 会触发 然而在实际场景中,点击一次,事件会被触发两次 阻止冒泡也没有用 解决: 使用API:event.stopImmediatePropagation() stopImmediatePropagation() 方法可防止…...
配置RIPv2的认证
目录 一、配置IP地址、默认网关、启用端口 1. 路由器R1 2. 路由器R2 3. 路由器R3 4. Server1 5. Server2 二、搭建RIPv2网络 1. R1配置RIPv2 2. R2配置RIPv2 3. Server1 ping Server2 4. Server2 ping Server1 三、模拟网络攻击,为R3配置RIPv2 四、在R…...
前端调试技巧:动态高亮渲染区域
效果: 前端界面的渲染过程、次数,会通过高亮变化来显示,通过这种效果排除一些BUG 高亮 打开方式 F12进入后点击ESC,进入rendering,选择前三个即可(如果没有rendering,点击橘色部分勾选上&…...
深克隆与浅克隆的区别与实现
在软件开发中,克隆对象是一个常见需求。克隆的方式主要有两种:深克隆(Deep Clone)和浅克隆(Shallow Clone)。了解它们的区别及其实现方法,对于编写高效、安全的代码非常重要。 深克隆与浅克隆的…...
【学习笔记】无人机系统(UAS)的连接、识别和跟踪(六)-无人机直接C2通信
目录 引言 5.4 直接C2通信 5.4.1 概述 5.4.2 A2X直接C2通信服务的授权策略 5.4.3 USS使用A2X直接C2通信服务的C2授权程序 5.4.4 直接C2通信建立程序 引言 3GPP TS 23.256 技术规范,主要定义了3GPP系统对无人机(UAV)的连接性、身份识别…...
认识和安装R的扩展包,什么是模糊搜索安装,工作目录和空间的区别与设置
R语言以其强大的功能和灵活的扩展性,成为了无数数据分析师和研究者的首选工具。R的丰富功能和海量扩展包直接相关,但如何高效管理这些扩展包,进而充分发挥R的强大潜力?本文将为您揭示这些问题的答案。 一、R的扩展包 R的包(packages)是由R函数、数据和预编译代码组成的一…...
解决STM32开启定时器时立即进入一次中断程序问题
转自 解决STM32开启定时器时立即进入一次中断程序问题_stm32f407定时器初始化自动进入一次-CSDN博客 配置STM32定时器时,定时器中断使能、定时器使能、清除更新中断标志位,三者不同顺序程序执行时有不同效果,具体如下: TIM_Clea…...
Unity UGUI 之EventSystem
本文仅作学习笔记与交流,不作任何商业用途 本文包括但不限于unity官方手册,唐老狮,麦扣教程知识,引用会标记,如有不足还请斧正 1.EventSystem是什么? 有需要请查看手册:Unity - 手册࿱…...
USB转多路UART - USB 基础
一、 前言 断断续续做了不少USB相关开发,但是没有系统去了解过,遇到问题就很被动了。做这个USB转UART的项目就是,于是专门花了一天的时间学习USB及CDC相关,到写这文章时估计也忘得差不多了,趁项目收尾阶段记录一下&am…...
接近50个实用编程相关学习资源网站
Date: 2024.07.17 09:45:10 author: lijianzhan 编程语言以及编程相关工具等实用性官方文档网站 C语言文档:https://learn.microsoft.com/zh-cn/cpp/c-languageMicrosoft C、C和汇编程序文档:https://learn.microsoft.com/zh-cn/cppJAVA官方文档&#…...
在数据操作中使用SELECT子句
目录 一、INSERT 语句中使用 SELECT子句 二、UPDATE 语句中使用 SELECT子句 三、DELETE 语句中使用 SELECT子句 一、INSERT 语句中使用 SELECT子句 在 INSERT 语句中使用 SELECT子句,可以将一个或多个表或视图中的数据添加到另外一个表中。使用 SELECT 子句还可以…...
Golang | Leetcode Golang题解之第274题H指数
题目: 题解: func hIndex(citations []int) int {// 答案最多只能到数组长度left,right:0,len(citations)var mid intfor left<right{// 1 防止死循环mid(leftright1)>>1cnt:0for _,v:range citations{if v>mid{cnt}}if cnt>mid{// 要找…...
区块链技术在智能家居中的创新应用探索
随着物联网技术的发展和智能家居市场的蓬勃发展,区块链技术作为一种去中心化的数据管理和安全保障技术,正在逐渐引入智能家居领域,并为其带来了新的创新应用。本文将探讨区块链技术在智能家居中的具体应用场景、优势以及未来发展方向。 智能家…...
无需业务改造,一套数据库满足 OLTP 和 OLAP,GaiaDB 发布并行查询能力
在企业中通常存在两类数据处理场景,一类是在线事务处理场景(OLTP),例如交易系统,另一类是在线分析处理场景(OLAP),例如业务报表。 OLTP 数据库擅长处理数据的增、删、改,…...
PHP 表单验证:邮件和URL
PHP 表单验证:邮件和URL 在Web开发中,表单验证是一个至关重要的环节,它确保了用户输入的数据的有效性和安全性。特别是在处理邮件地址和URL时,准确的验证尤为重要。本文将详细介绍如何使用PHP来验证表单中的邮件地址和URL。 邮件…...
前端八股文 路由的懒加载
为什么会有 路由的懒加载 在现代单页应用(SPA)的开发中,路由懒加载是一种提升应用性能的关键技术。通过按需加载组件,而非在应用启动时一次性加载所有模块,可以显著减少初次加载时间和资源消耗。本文旨在深入探讨前端…...
HarmonyOS Web组件(二)
1. HarmonyOS Web组件 官方文档 1.1. 混合开发的背景和好处 混合开发(Hybrid Development)是一种结合原生应用和Web应用的开发模式,旨在同时利用两者的优势。随着移动应用需求的多样化和复杂化,单一的开发方式往往难以满足所有…...
HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 单选题序号2
基础认证题库请移步:HarmonyOS应用开发者基础认证题库 注:有读者反馈,题库的代码块比较多,打开文章时会卡死。所以笔者将题库拆分,单选题20个为一组,多选题10个为一组,题库目录如下,…...
基于python深度学习遥感影像地物分类与目标识别、分割实践技术应用
目录 专题一、深度学习发展与机器学习 专题二、深度卷积网络基本原理 专题三、TensorFlow与Keras介绍与入门 专题四、PyTorch介绍与入门 专题五、卷积神经网络实践与遥感图像场景分类 专题六、深度学习与遥感图像检测 专题七、遥感图像检测案例 专题八、深度学习与遥感…...
叶再豪降龙精英课程总结
文章目录 1.思维认知1.1 稻盛和夫成功公式1.2 龙头主升模式1.3 龙头主升-两种路径1.4 股市新手的炒股思路1.5 龙头案例1.6 降龙心法 2.情绪周期2.1 情绪周期2.1 情绪演绎周期2.2 情绪的四个部分2.2.1 指数的情绪周期2.2.3 热点情绪周期2.2.4 热点情绪演绎周期2.2.5 大热点支线2…...
算法 - 查找算法(顺序、折半、红黑树、AVL树、B+树、散列)
查找 顺序查找 查找算法原理: 顺序查找是一种简单的查找方法,从数组的第一个元素开始,依次比较每个元素,直到找到目标元素或者数组结束为止。 实现步骤: 从数组的第一个元素开始。逐一比较数组中的元素与目标值。如…...
TCP与UDP网络编程
网络通信协议 java.net 包中提供了两种常见的网络协议的支持: UDP:用户数据报协议(User Datagram Protocol)TCP:传输控制协议(Transmission Control Protocol) TCP协议与UDP协议 TCP协议 TCP协议进行通信的两个应用进程:客户端、服务端 …...
媲美Midjourney-v6,Kolors最新文生图模型部署
Kolors模型是由快手团队开发的大型文本到图像生成模型,专门用于将文本描述转换成高质量的图像。 Kolors模型支持中英文双语输入,生成效果与Midjourney-v6相媲美,能够处理长达256个字符的文本输入,具备生成中英文文字的能力。 Ko…...
深度学习程序环境配置
深度学习环境配置 因为之前轻薄本没有显卡跑不起来,所以换了台电脑重新跑程序,故记录一下配置环境的步骤及常见错误 本人数学系,计算机部分知识比较匮乏,计算机专业同学可以略过部分内容 深度学习环境配置 深度学习环境配置 CUD…...
【STM32 HAL库】全双工I2S+双缓冲DMA的使用
1、配置I2S 我们的有效数据是32位的,使用飞利浦格式。 2、配置DMA **这里需要注意:**i2s的DR寄存器是16位的,如果需要发送32位的数据,是需要写两次DR寄存器的,所以DMA的外设数据宽度设置16位,而不是32位。…...
【Spring Boot】网页五子棋项目中遇到的困难及解决方法
目录 一、HikariPool-1 - Starting异常二、Invalid bound statement (not found)异常三、The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary异常四、The server time zone value时区报错异常五、补充知识点…...
营销策划方案模板
这应该是目前最详细最完整的营销策划方案模板,营销公司内部都在使用的标准版本,你可以根据自己的营销内容直接填入这个模板,很快就能写好一份至少80分的营销策划方案。 如果暂时用不到也可以先收藏,以备不时之需。 废话不多说&a…...
Python入门基础教程(非常详细)
现在找工作真的越来越难了!今年更是难上加难 前几天在网上刷到这样一条热搜: #23岁找工作因年龄大被HR拒绝了# 是这个世界疯了还是我疯了? 合着只想要有20年以上工作经验的应届毕业生是吧 这好像就是现在的就业市场现状:“35岁…...
LeetCode 常见题型汇总
前30 22 生成括号 剪枝 51 N皇后 37 解数独 二分查找 69 求平方根 字典树 位运算 191 求1的个数 231 2的N次方 338 求0到N的比特位为1的个数 动态规划 并查集 LRU缓存 布隆过滤器...
织梦wordpress帝国对比/市场调研流程
大浪淘沙的AI创业圈,触景无限正在这个技术浪潮中不断找寻自己的位置。 有人说,AI创业的大门已经慢慢关闭,场内的玩家也已基本定型,未来的战争将聚焦在头部几家,马太效应的收紧会使得一大波竞逐者生存艰难,…...
国内单页面网站/企业查询
token详解前言什么是token?为什么要使用token?那么如何使用token呢?使用Token进行身份验证和授权的过程具体步骤项目上如何运用的tokentoken过期了什么办?总结升华前言 本篇博客主要从什么是token?为什么要使用token&…...
北京网站制作一般多少钱/加盟
在802.11b/g网络标准中,无线网络的信道虽然可以有13个,但非重叠的信道,也就是不互相干扰的信道只有1、6、11(或13)这三个。是不是感觉很奇怪呢?不同的信道还能产生干扰或重叠?确实这样ÿ…...
标签管理wordpress/青岛seo服务
高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被…...
徐州建设网站/企业培训课程ppt
文章目录单体架构实例分析与比较单体架构优点单体架构缺点改进微服务服务注册服务访问分布式集群单体架构实例 在Idea里新建一个SpringBoot项目, 这里选择SpringBoot 的版本依赖是 2.0.3.RELEASE。 依赖 pom.xml如下: <?xml version"1.0&quo…...
单招网站开发/企业网站建设公司
eclipse插件的安装方法大体有以下三种:...