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

青少年编程与数学 02-011 MySQL数据库应用 20课题、连接与ORM

青少年编程与数学 02-011 MySQL数据库应用 20课题、连接与ORM

  • 一、数据库连接
      • 基本概念
      • 连接过程
      • 连接状态
      • 连接池技术
  • 二、Go语言连接MySQL数据库
      • 安装MySQL驱动
      • 导入相关包
      • 建立数据库连接
      • 检查连接状态
      • 执行SQL操作
        • 查询操作
        • 插入操作
        • 更新操作
        • 删除操作
      • 完整示例
  • 三、Python语言连接MySQL数据库
      • 使用`mysql-connector-python`库
        • 1. 安装库
        • 2. 导入库
        • 3. 建立连接
        • 4. 执行SQL操作
          • 查询操作
          • 插入操作
          • 更新操作
          • 删除操作
        • 5. 关闭连接
      • 使用`PyMySQL`库
        • 1. 安装库
        • 2. 导入库
        • 3. 建立连接
        • 4. 执行SQL操作
          • 查询操作
          • 插入操作
          • 更新操作
          • 删除操作
        • 5. 关闭连接
      • 完整示例(以`PyMySQL`为例)
  • 四、ORM
      • ORM 的作用
      • ORM 的优点
      • ORM 的缺点
      • ORM 的工作原理
      • 常见的 ORM 框架

课题摘要: 本文介绍了数据库连接和ORM(对象关系映射)的概念、作用、优缺点及工作原理。数据库连接是程序与数据库之间的通信通道,允许程序执行数据操作。连接过程包括加载驱动、建立连接、使用连接和关闭连接。连接池技术可提高连接复用率,提升性能。文章还详细介绍了Go语言和Python语言连接MySQL数据库的方法,包括安装驱动、导入包、建立连接、执行SQL操作和关闭连接。ORM技术简化了应用程序与数据库的交互,使开发者能以面向对象方式操作数据库,提高开发效率和代码可维护性,但可能带来性能开销和灵活性限制。常见的ORM框架包括Entity Framework、Hibernate、Django ORM、Sequelize和Laravel Eloquent。


一、数据库连接

在使用高级语言编程时,数据库连接是程序与数据库之间建立的一种通信通道,使程序能够与数据库进行交互,执行各种数据库操作。以下是数据库连接的详细解释:

基本概念

  • 定义:数据库连接是指程序通过特定的接口和协议,与数据库管理系统(DBMS)建立的一种会话连接。这种连接使得程序可以向数据库发送查询、更新等指令,并接收数据库返回的结果。
  • 作用:它是程序与数据库进行数据交互的桥梁。只有建立了数据库连接,程序才能对数据库中的数据进行读取、插入、更新、删除等操作,从而实现数据的存储、管理和分析等功能。

连接过程

  • 加载驱动:在程序中首先需要加载数据库驱动程序。驱动程序是数据库与程序之间的适配器,它为程序提供了一套与数据库进行交互的接口。例如,在使用Java语言连接MySQL数据库时,需要加载MySQL的JDBC驱动。
  • 建立连接:通过调用数据库连接函数或方法,并传入必要的连接参数,如数据库服务器地址、端口号、数据库名称、用户名和密码等,来建立与数据库的连接。例如,在Python中使用pymysql库连接MySQL数据库时,可以使用connect(host='localhost', user='root', password='123456', db='mydatabase')来建立连接。
  • 使用连接:连接建立成功后,就可以通过这个连接执行SQL语句,进行数据操作。比如执行查询操作,将查询结果集返回给程序;执行插入、更新或删除操作,对数据库中的数据进行修改。
  • 关闭连接:当数据操作完成后,需要及时关闭数据库连接,释放数据库资源。如果不关闭连接,可能会导致数据库资源被占用,影响数据库的性能,甚至可能导致数据库崩溃。

连接状态

  • 已连接:表示程序已经成功与数据库建立了连接,可以正常进行数据交互。此时,程序可以通过连接发送SQL命令,并接收数据库的响应。
  • 未连接:表示程序尚未与数据库建立连接,或者连接已经中断。在这种状态下,程序无法对数据库进行操作。如果在未连接状态下尝试执行数据库操作,通常会抛出异常或错误。

连接池技术

  • 概念:连接池是一种数据库连接管理技术。它预先创建并维护一定数量的数据库连接,当程序需要使用数据库连接时,从连接池中获取一个空闲的连接;当连接使用完毕后,将其归还到连接池中,而不是直接关闭连接。
  • 优势:可以减少频繁建立和关闭连接的开销,提高数据库连接的复用率,从而提升程序的性能和响应速度。特别是在高并发的场景下,连接池能够有效地管理数据库连接资源,避免因连接不足而导致的性能瓶颈。

二、Go语言连接MySQL数据库

在Go语言中,连接MySQL数据库通常使用database/sql标准库结合第三方驱动(如go-sql-driver/mysql)来实现。以下是详细的步骤和示例代码:

安装MySQL驱动

使用go get命令安装go-sql-driver/mysql驱动:

go get -u github.com/go-sql-driver/mysql

导入相关包

在Go程序中导入database/sql包和MySQL驱动包:

import ("database/sql"_ "github.com/go-sql-driver/mysql"
)

注意:导入MySQL驱动包时,前面加了下划线(_),表示只初始化该包,不直接使用包中的标识符。这是因为驱动包主要用于注册驱动,不需要直接调用其方法。

建立数据库连接

通过sql.Open函数建立数据库连接,该函数需要传入驱动名称和数据源名称(DSN)作为参数:

// 数据源名称格式:用户名:密码@协议(地址:端口)/数据库名称?参数
dsn := "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"// 建立连接
db, err := sql.Open("mysql", dsn)
if err != nil {panic(err.Error())
}
defer db.Close()  // 确保在函数结束时关闭数据库连接

其中,“username”和“password”是数据库的用户名和密码,“127.0.0.1:3306”是MySQL服务器的地址和端口,“dbname”是要连接的数据库名称。charset=utf8mb4指定了字符集,parseTime=True表示将数据库中的时间类型解析为Go的时间类型,loc=Local表示使用本地时区。

检查连接状态

虽然sql.Open函数会返回一个*sql.DB对象,但这并不意味着连接已经成功建立。它只是创建了一个数据库连接的句柄,实际的连接是在第一次执行查询或更新操作时建立的。因此,需要通过Ping方法检查连接状态:

err = db.Ping()
if err != nil {panic(err.Error())
}

执行SQL操作

连接建立成功后,就可以通过*sql.DB对象执行SQL语句了。以下是一些常见的SQL操作示例:

查询操作
// 查询单行数据
var id int
var name string
err = db.QueryRow("SELECT id, name FROM users WHERE id = ?", 1).Scan(&id, &name)
if err != nil {panic(err.Error())
}
fmt.Println(id, name)// 查询多行数据
rows, err := db.Query("SELECT id, name FROM users")
if err != nil {panic(err.Error())
}
defer rows.Close()for rows.Next() {var id intvar name stringerr = rows.Scan(&id, &name)if err != nil {panic(err.Error())}fmt.Println(id, name)
}
插入操作
result, err := db.Exec("INSERT INTO users(name, email) VALUES(?, ?)", "John Doe", "john@example.com")
if err != nil {panic(err.Error())
}
id, err := result.LastInsertId()
if err != nil {panic(err.Error())
}
fmt.Println("Inserted user with ID:", id)
更新操作
result, err := db.Exec("UPDATE users SET name = ? WHERE id = ?", "Jane Doe", 1)
if err != nil {panic(err.Error())
}
rowsAffected, err := result.RowsAffected()
if err != nil {panic(err.Error())
}
fmt.Println("Rows affected:", rowsAffected)
删除操作
result, err := db.Exec("DELETE FROM users WHERE id = ?", 1)
if err != nil {panic(err.Error())
}
rowsAffected, err := result.RowsAffected()
if err != nil {panic(err.Error())
}
fmt.Println("Rows affected:", rowsAffected)

完整示例

package mainimport ("database/sql""fmt""log"_ "github.com/go-sql-driver/mysql"
)func main() {dsn := "username:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"db, err := sql.Open("mysql", dsn)if err != nil {log.Fatal(err)}defer db.Close()err = db.Ping()if err != nil {log.Fatal(err)}// 查询操作var id intvar name stringerr = db.QueryRow("SELECT id, name FROM users WHERE id = ?", 1).Scan(&id, &name)if err != nil {log.Fatal(err)}fmt.Println(id, name)// 插入操作result, err := db.Exec("INSERT INTO users(name, email) VALUES(?, ?)", "John Doe", "john@example.com")if err != nil {log.Fatal(err)}id, err = result.LastInsertId()if err != nil {log.Fatal(err)}fmt.Println("Inserted user with ID:", id)// 更新操作result, err = db.Exec("UPDATE users SET name = ? WHERE id = ?", "Jane Doe", 1)if err != nil {log.Fatal(err)}rowsAffected, err := result.RowsAffected()if err != nil {log.Fatal(err)}fmt.Println("Rows affected:", rowsAffected)// 删除操作result, err = db.Exec("DELETE FROM users WHERE id = ?", 1)if err != nil {log.Fatal(err)}rowsAffected, err = result.RowsAffected()if err != nil {log.Fatal(err)}fmt.Println("Rows affected:", rowsAffected)
}

以上就是在Go语言中连接MySQL数据库并进行基本操作的方法。在实际开发中,还可以根据需要使用事务、连接池等高级功能来优化数据库操作。

三、Python语言连接MySQL数据库

在Python中连接MySQL数据库主要有两种常用的方法,一种是使用mysql-connector-python库,另一种是使用PyMySQL库。以下是分别使用这两种库连接MySQL数据库的详细步骤和示例代码。

使用mysql-connector-python

1. 安装库

使用pip命令安装:

pip install mysql-connector-python
2. 导入库
import mysql.connector
3. 建立连接
# 创建连接
conn = mysql.connector.connect(host="localhost",       # 数据库服务器地址user="username",        # 数据库用户名password="password",    # 数据库密码database="dbname"       # 要连接的数据库名称
)# 创建游标对象
cursor = conn.cursor()
4. 执行SQL操作
查询操作
# 查询单条数据
cursor.execute("SELECT id, name FROM users WHERE id = %s", (1,))
result = cursor.fetchone()
print(result)# 查询多条数据
cursor.execute("SELECT id, name FROM users")
results = cursor.fetchall()
for row in results:print(row)
插入操作
cursor.execute("INSERT INTO users(name, email) VALUES(%s, %s)", ("John Doe", "john@example.com"))
conn.commit()  # 提交事务
print("Inserted user with ID:", cursor.lastrowid)
更新操作
cursor.execute("UPDATE users SET name = %s WHERE id = %s", ("Jane Doe", 1))
conn.commit()
print("Rows affected:", cursor.rowcount)
删除操作
cursor.execute("DELETE FROM users WHERE id = %s", (1,))
conn.commit()
print("Rows affected:", cursor.rowcount)
5. 关闭连接
cursor.close()
conn.close()

使用PyMySQL

1. 安装库

使用pip命令安装:

pip install pymysql
2. 导入库
import pymysql
3. 建立连接
# 创建连接
conn = pymysql.connect(host="localhost",       # 数据库服务器地址user="username",        # 数据库用户名password="password",    # 数据库密码database="dbname",      # 要连接的数据库名称charset='utf8mb4'       # 指定字符集
)# 创建游标对象
cursor = conn.cursor()
4. 执行SQL操作
查询操作
# 查询单条数据
cursor.execute("SELECT id, name FROM users WHERE id = %s", (1,))
result = cursor.fetchone()
print(result)# 查询多条数据
cursor.execute("SELECT id, name FROM users")
results = cursor.fetchall()
for row in results:print(row)
插入操作
cursor.execute("INSERT INTO users(name, email) VALUES(%s, %s)", ("John Doe", "john@example.com"))
conn.commit()  # 提交事务
print("Inserted user with ID:", cursor.lastrowid)
更新操作
cursor.execute("UPDATE users SET name = %s WHERE id = %s", ("Jane Doe", 1))
conn.commit()
print("Rows affected:", cursor.rowcount)
删除操作
cursor.execute("DELETE FROM users WHERE id = %s", (1,))
conn.commit()
print("Rows affected:", cursor.rowcount)
5. 关闭连接
cursor.close()
conn.close()

完整示例(以PyMySQL为例)

import pymysqldef connect_mysql():# 创建连接conn = pymysql.connect(host="localhost",user="username",password="password",database="dbname",charset='utf8mb4')# 创建游标对象cursor = conn.cursor()try:# 查询操作cursor.execute("SELECT id, name FROM users WHERE id = %s", (1,))result = cursor.fetchone()print("Query single result:", result)cursor.execute("SELECT id, name FROM users")results = cursor.fetchall()print("Query multiple results:")for row in results:print(row)# 插入操作cursor.execute("INSERT INTO users(name, email) VALUES(%s, %s)", ("John Doe", "john@example.com"))conn.commit()print("Inserted user with ID:", cursor.lastrowid)# 更新操作cursor.execute("UPDATE users SET name = %s WHERE id = %s", ("Jane Doe", 1))conn.commit()print("Rows affected in update:", cursor.rowcount)# 删除操作cursor.execute("DELETE FROM users WHERE id = %s", (1,))conn.commit()print("Rows affected in delete:", cursor.rowcount)finally:# 关闭游标和连接cursor.close()conn.close()if __name__ == "__main__":connect_mysql()

以上就是在Python中使用mysql-connector-python库和PyMySQL库连接MySQL数据库并进行基本操作的方法。在实际开发中,可以根据项目需求和个人喜好选择合适的库。

四、ORM

ORM(Object-Relational Mapping,对象关系映射)是一种编程技术,用于将对象模型与关系型数据库模型之间进行转换。在 ORM 中,对象模型通常指的是面向对象编程语言中的类和对象,而关系型数据库模型则由表、字段、键等组成。

ORM 的作用

ORM 的主要目的是简化应用程序与数据库之间的交互,使开发者能够以面向对象的方式操作数据库,而无需直接编写 SQL 语句。ORM 可以自动处理数据的持久化和检索,使得开发者可以专注于业务逻辑而不是底层的数据访问细节。

ORM 的优点

  1. 提高生产力:ORM 抽象掉了底层的 SQL 语句编写,使得开发者可以直接操作对象,从而提高开发效率。
  2. 增强可维护性:由于 ORM 使得数据访问代码更加清晰和简洁,因此更容易理解和维护。
  3. 降低耦合度:ORM 可以隐藏数据库的细节,使得应用程序不必直接依赖于具体的数据库系统,从而提高了代码的可移植性。
  4. 自动处理事务:ORM 可以自动管理事务,简化了事务处理的代码。
  5. 提供高级功能:许多 ORM 提供了缓存、懒加载、延迟加载等功能,进一步优化了数据访问性能。

ORM 的缺点

  1. 性能损失:相比直接编写 SQL 语句,ORM 通常会有一定的性能开销,尤其是在大量数据处理的情况下。
  2. 灵活性受限:虽然 ORM 提供了便利,但在某些情况下,它可能无法满足复杂的 SQL 查询需求,这时可能需要手动编写 SQL。
  3. 学习曲线:对于初学者而言,掌握 ORM 的使用可能需要一定的时间和实践。

ORM 的工作原理

ORM 通过映射类和数据库表之间的关系来工作,主要涉及以下几个方面:

  1. 实体映射:类被映射为数据库表,类的属性被映射为表的字段。
  2. 对象实例化:当从数据库中检索数据时,ORM 会将查询结果转换为对象实例。
  3. 对象持久化:当对象的状态发生变化时,ORM 会将这些变化同步到数据库中。
  4. 查询映射:ORM 提供了一种方法来构建和执行数据库查询,通常通过 LINQ(Language Integrated Query)或其他类似的查询构造器来实现。

常见的 ORM 框架

  1. Entity Framework(EF):.NET 生态系统中最流行的 ORM,支持多种数据库。
  2. Hibernate:Java 生态系统中非常强大的 ORM 框架。
  3. Django ORM:Python Web 框架 Django 内置的 ORM。
  4. Sequelize:Node.js 生态系统中的 ORM,支持多种数据库。
  5. Laravel Eloquent:PHP Web 框架 Laravel 内置的 ORM。

通过使用 ORM,开发者可以更高效地开发应用程序,并且更容易地管理和维护数据库相关的代码。然而,在选择 ORM 时,需要权衡其带来的便利性和可能的性能损失,并根据项目的具体需求做出合适的选择。

相关文章:

青少年编程与数学 02-011 MySQL数据库应用 20课题、连接与ORM

青少年编程与数学 02-011 MySQL数据库应用 20课题、连接与ORM 一、数据库连接基本概念连接过程连接状态连接池技术 二、Go语言连接MySQL数据库安装MySQL驱动导入相关包建立数据库连接检查连接状态执行SQL操作查询操作插入操作更新操作删除操作 完整示例 三、Python语言连接MySQ…...

Java 大视界 -- 基于 Java 的大数据分布式系统的监控与运维实践(155)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...

三维空间中点、线、面的关系

三维空间中点、线、面的关系 点相对于平面的位置关系直线相对于平面的位置关系1.根据三点计算平面方程 //根据3点计算平面方程#include <iostream> #include <cmath> #include <vector>...

Spring JdbcTemplate 万字详解(通俗易懂)

目录 Δ前言 一、什么是JdbcTemplate&#xff1f; 1.定义&#xff1a; 2.作用&#xff1a; 3.环境搭建&#xff1a; 二、JdbcTemplate的简单使用 1.通过JdbcTemplate实现数据的添加&#xff1a; 2.通过JdbcTemplate实现数据的修改&#xff1a; 三、JdbcTemplate的进阶使用 …...

centos 7 搭建ftp 基于虚拟用户用shell脚本搭建

#!/bin/bash# 步骤1: 更新系统并安装vsftpd yum update -y yum install vsftpd -y# 步骤2: 创建虚拟用户信息文件并转换为数据库文件 cat << EOF > /etc/vsftpd/virtual_users.txt ftpvuser 123456 EOFdb_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsft…...

《Android低内存设备性能优化实战:深度解析Dalvik虚拟机参数调优》

1. 痛点分析&#xff1a;低内存设备的性能困局 现象描述&#xff1a;大应用运行时频繁GC导致卡顿 根本原因&#xff1a;Dalvik默认内存参数与硬件资源不匹配 解决方向&#xff1a;动态调整堆内存参数以平衡性能与资源消耗 2. 核心调优参数全景解析 关键参数矩阵&#xff1…...

【AI学习】概念了解

1,GPU 专门用于处理图形相关运算任务的微处理器,它起初主要聚焦于加速图形渲染,让计算机能够快速、流畅地显示高质量的图像、视频以及 3D 场景等内容,在电脑游戏、影视特效制作、动画设计等领域有着至关重要的作用。 与传统的中央处理器(CPU)相比,GPU 有着数量众多的核…...

WPF InkCanvas 控件详解

1. InkCanvas 是什么? InkCanvas 是 WPF 提供的一个手写绘图控件,它允许用户使用鼠标、触摸屏或手写笔在界面上进行绘图、标注等操作。 核心特点: ✅ 具备笔迹存储和管理功能。 ✅ 提供 Children 和 Strokes 两个集合,分别用于管理子控件和绘制的笔迹。 ✅ 通过 EditingM…...

数据库三级选择题(2)

C) 分布式数据库的事务管理包括恢复控制和并发控制&#xff0c;恢复控制一般采用的策略是基于两阶段提交协议 采用一定的计算方法定位数据的有 Ⅳ&#xff0e;散列&#xff08;哈希&#xff09;索引 下列提供逻辑独立性的是外模式/模式映像 UML所有活动有关判断的部分要用菱形表…...

ShapeCrawler:.NET开发者的PPTX操控魔法

引言 在当今的软件开发领域&#xff0c;随着数据可视化和信息展示需求的不断增长&#xff0c;处理 PPTX 文件的场景日益频繁。无论是自动化生成报告、批量制作演示文稿&#xff0c;还是对现有 PPT 进行内容更新与格式调整&#xff0c;开发者都需要高效的工具来完成这些任务。传…...

CAS(Compare And Swap)

CAS核心原理 操作流程 CAS 包含三个参数&#xff1a;内存值&#xff08;V&#xff09;、预期值&#xff08;E&#xff09;和新值&#xff08;N&#xff09;。执行步骤如下&#xff1a; 比较&#xff1a;检查当前内存值 V 是否等于预期值 E。 交换&#xff1a;如果相等&#…...

熔断降级(Sentinel解决)

问题概述 在微服务架构中一定要预防微服务雪崩问题&#xff0c;微服务雪崩问题就是指在微服务架构中&#xff0c;当一个服务出现故障时&#xff0c;由于服务之间的依赖关系&#xff0c;故障可能会传播到其他服务&#xff0c;从而导致了大规模的服务失败&#xff0c;系统无法正…...

Deepseek API+Python 测试用例一键生成与导出 V1.0.4 (接口文档生成接口测试用例保姆级教程)

接口文档生成接口测试用例保姆级教程 随着测试需求的复杂性增加,测试用例的设计和生成变得愈发重要。Deepseek API+Python 测试用例生成工具在 V1.0.4 中进行了全方位的优化和功能扩展,特别是对接口测试用例设计的支持和接口文档的智能解析处理。本文将详细介绍 V1.0.4 版本…...

git 基本操作命令

一、初始化本地git仓库 git init 二、将当前目录下所有文件加载到本地git仓库 git add .三、提交内容和备注 git commit -m 提交类容四、(复制仓库路径)然后提交到仓库 git remote add origin 提交的仓库路径五、提交到远程仓库&#xff0c;如果这里提交失败&#xff0c;在…...

学习本地部署DeepSeek的过程(基于LM Studio)

除了使用Ollama部署DeepSeek&#xff0c;还可以使用LM Studio部署DeepSeek&#xff0c;后者是一款允许用户在本地计算机上运行大型语言模型&#xff08;LLMs&#xff09;的桌面应用程序&#xff0c;旨在简化本地模型的使用&#xff0c;无需云端连接或复杂配置即可体验 AI 功能。…...

web爬虫笔记:js逆向案例十一 某数cookie(补环境流程)

web爬虫笔记:js逆向案例十一 某数cookie(补环境流程) 一、获取网页数据请求流程 二、目标网址、cookie生成(逐步分析) 1、目标网址:aHR0cHM6Ly9zdWdoLnN6dS5lZHUuY24vSHRtbC9OZXdzL0NvbHVtbnMvNy9JbmRleC5odG1s 2、快速定位入口方法 1、通过脚本监听、hook_cookie等操作可…...

游戏引擎学习第180天

我们将在某个时候替换C标准库函数 今天我们要进行的工作是替换C标准库函数&#xff0c;这是因为目前我们仍然在使用C语言开发&#xff0c;并且在某些情况下会调用C标准库函数&#xff0c;例如一些数学函数和字符串格式化函数&#xff0c;尤其是在调试系统中&#xff0c;我们使…...

测试用例生成平台通过大模型升级查询功能,生成智能测试用例

在测试工作中&#xff0c;查询功能是各类系统的核心模块&#xff0c;传统的测试用例编写往往耗时且重复。如何让老旧平台焕发新活力&#xff1f;本文将结合大模型技术&#xff0c;通过用户输入的字段信息&#xff0c;自动化生成高效、精准的测试用例。同时&#xff0c;我们还将…...

kafka零拷贝技术的底层实现

什么是 Sendfile&#xff1f; sendfile 是一种操作系统提供的系统调用&#xff08;system call&#xff09;&#xff0c;用于在两个文件描述符&#xff08;file descriptor&#xff09;之间高效传输数据。它最初由 Linux 内核引入&#xff08;从 2.1 版本开始&#xff09;&…...

Win11+VS2022+CGAL5.6配置

1. CGAL库简介 CGAL&#xff08;Computational Geometry Algorithms Library&#xff09;是一个开源的计算几何算法库&#xff0c;主要用于处理几何问题和相关算法的实现。它提供了丰富的几何数据结构和高效算法&#xff0c;覆盖点、线、多边形、曲面等基本几何对象的表示与操…...

Linux编译器gcc/g++使用完全指南:从编译原理到动静态链接

一、gcc/g基础认知 在Linux开发环境中&#xff0c;gcc和g是我们最常用的编译器工具&#xff1a; gcc&#xff1a;GNU C Compiler&#xff0c;专门用于编译C语言程序g&#xff1a;GNU C Compiler&#xff0c;用于编译C程序&#xff08;也可编译C语言&#xff09; &#x1f4cc…...

Vue3项目中的.vscode文件夹

.vscode 文件夹主要用于存放与 Visual Studio Code&#xff08;VS Code&#xff09;编辑器相关的项目配置文件&#xff0c;这些文件能让项目在 VS Code 里的开发体验更加个性化和高效。 extensions.json 在 .vscode 文件夹中&#xff0c;extensions.json 文件的作用是列出项目…...

蓝桥杯嵌入式十六届模拟三

由硬件框图可以知道我们要配置LED 和按键 一.LED 先配置LED的八个引脚为GPIO_OutPut,锁存器PD2也是,然后都设置为起始高电平,生成代码时还要去解决引脚冲突问题 二.按键 按键配置,由原理图按键所对引脚要GPIO_Input 生成代码,在文件夹中添加code文件夹,code中添加fun.…...

造成服务器网络连接不稳定的原因是什么?

服务器的稳定性会影响到网络的响应速度和用户的体验感&#xff0c;当服务器网络连接不稳定时&#xff0c;会到时用户在浏览网站的过程中出现页面卡顿或页面消失等情况&#xff0c;给企业造成一定的经济损失&#xff0c;本文就来介绍一下造成服务器网络连接不稳定的因素都有哪些…...

[FPGA基础学习]加法器、三八译码器及DE2-115基本使用方法和数码管显示

软件安装&#xff1a;QuartusLite安装说明及驱动更新 DE2-115上电及程序烧录 1.用包装盒里的USB 电缆将PC的USB端口和DE2-115开发板的USB Blaster连接器连接 起来&#xff0c;为了实现主机和开发板之间的通讯&#xff0c;必须安装USB Blaster 驱动软件 鼠标右击“USB-Blaster…...

VSCode 市场发现恶意扩展正在传播勒索软件!

在VSCode 市场中发现了两个隐藏着勒索软件的恶意扩展。其中一个于去年 10 月出现在微软商店&#xff0c;但很长时间没有引起注意。 这些是扩展ahban.shiba 和 ahban.cychelloworld&#xff0c;目前已从商店中删除。 此外&#xff0c;ahban.cychelloworld 扩展于 2024 年 10 月…...

树状数组 3 :区间修改,区间查询

【题目描述】 这是一道模板题。 给定数列 a[1],a[2],…,a[n]&#xff0c;你需要依次进行q个操作&#xff0c;操作有两类&#xff1a; 1lrx&#xff1a;给定 l,r,x对于所有 i∈[l,r]&#xff0c;将a[i]加上x&#xff08;换言之&#xff0c;将 a[l],a[l1],…a[r] 分别加上 x&a…...

C++的IO流

1. C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据&#xff0c;并将值存放在变量中。printf(): 将指定的文字/字符串输出到标准输出设备(屏幕)。 注意宽度输出和精度输出控制。C语言借助了相应的缓…...

QLoRA和LoRA 微调

QLoRA 其实是一种结合了量化和 LoRA 微调技术的统一方法&#xff0c;而不是同时使用两种不同的微调方式。换句话说&#xff0c;QLoRA 的意思就是&#xff1a;先把大模型的主权重用低精度&#xff08;例如 4-bit&#xff09;量化&#xff0c;从而大幅减少存储需求&#xff1b;然…...

Android电话监听器的设计与实现:深入解析Service与TelephonyManager

目录 一、引言 二、Service核心机制解析 1. Service的本质特性 2. 生命周期管理 3. 服务类型全景 三、Service实战开发 1. 启动式Service开发&#xff08;lesson1&#xff09; 2. 绑定式Service开发 四、电话监听器完整实现&#xff08;lesson3&#xff09; 1. 系统架…...

java学习笔记7——面向对象

关键字&#xff1a;static 类变量 静态变量的内存解析&#xff1a; 相关代码&#xff1a; public class ChineseTest {public static void main(String[] args) {System.out.println(Chinese.nation); //null 没赋值前System.out.println(Chinese.nation); //中国 静态变量赋值…...

java学习——函数式编程(1)

函数式编程 Java 的函数式编程是一种以函数为核心构建逻辑的编程范式,强调不可变性、声明式代码和无副作用的操作。它通过Lambda表达式、函数式接口(如Function、Predicate、Consumer等)和Stream API等特性实现,将计算过程抽象为函数的组合与转换,而非传统的命令式步骤。…...

java 批量下载doc\excle\pdf

指定图片集合 下载到指定文件夹 import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.util.Arrays; import java.util.List;public class OfficeFileDownloader {/*** 需要下载的Office文档URL列表*/private static final List<Strin…...

Python爬虫:Feapder 的详细使用和案例

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. Feapder 概述1.1 Feapder介绍1.2 Feapder 核心特点1.3 Feapder 主要组件1.4 Feapder的安装2. 基础爬虫编写2.1 创建爬虫2.2 运行爬虫3. 数据采集案例3.1 新闻网站采集3.2 电商商品采集3.3 使用 Spider 类创建更强大爬…...

【江协科技STM32】读写备份寄存器RTC实时时钟(学习笔记)

参考相关文章理解&#xff1a; 【江协科技STM32】Unix时间戳&#xff08;学习笔记&#xff09;-CSDN博客 【江协科技STM32】BKP备寄存器&RTC实时时钟&#xff08;学习笔记&#xff09;_stm32断电保存时钟-CSDN博客 读写备份寄存器 接线图&#xff1a;VBAT是从STLINK的…...

Linux touch命令

参考资料 Linux 常用命令 - touch 【创建空文件与修改时间戳】 目录 一. 用法简介二. 配合扩展字符&#xff0c;批量创建文件三. 修改文件的时间戳3.1 -t 配置项3.2 -d 配置项3.3 配合find命令实现批量时间戳修改 四. 结合 find 批量创建相同时间的新文件 一. 用法简介 ⏹当指…...

PyTorch图像预处理--Compose

torchvision.transforms.Compose 是 PyTorch 中用于图像预处理的核心工具&#xff0c;可将多个图像变换操作组合成一个顺序执行的流水线。 ‌1. 定义与作用‌ ‌功能‌&#xff1a;将多个图像处理步骤&#xff08;如缩放、裁剪、归一化等&#xff09;串联为一个整体&#xff…...

CSP历年题解

CSP历年题解 csp历年题解&#xff0c;csp.cpp内容涵盖从2023年12月开始一直持续到第一次认证的所有前4题。所有的题解均为满分&#xff0c;在其中&#xff0c;有四道题非本人编写&#xff0c;而从网上搜集优质解答&#xff0c;并且已在文中附上了来源链接。其余则为自己编写&a…...

《索引江湖:B树索引与哈希索引的风云对决》

在数据库的神秘世界里&#xff0c;索引宛如一把把神奇的钥匙&#xff0c;帮助我们在海量数据中快速找到所需信息。而B树索引与哈希索引&#xff0c;则是其中两把最为耀眼的利刃&#xff0c;各自凭借独特的“武功秘籍”&#xff0c;在不同的应用场景中大放异彩。今天&#xff0c…...

java八股文之JVM

1.什么是程序计数器 程序计数器是 JVM 管理线程执行的“定位器”&#xff0c;记录每个线程当前执行的指令位置&#xff0c;确保程序流程的连续性和线程切换的准确性。线程私有的&#xff0c;每个线程一份&#xff0c;内部保存的字节码的行号。用于记录正在执行的字节码指令的地…...

学习爬虫的第二天——分页爬取并存入表中

阅读提示&#xff1a;我现在还在尝试爬静态页面 一、分页爬取模式 以豆瓣Top250为例&#xff1a; 基础url:豆瓣电影 Top 250https://movie.douban.com/top250 分页参数:?start0&#xff08;第一页&#xff09;、?start25&#xff08;第二页&#xff09;等 每页显示25条数…...

Ubuntu与Windows之间相互复制粘贴的方法

一、打开Ubuntu终端 二、卸载已有的工具 sudo apt-get autoremove open-vm-tools 三、安装工具 sudo apt-get install open-vm-tools-desktop 四、重启 直接输入reboot 注&#xff1a;有任何问题欢迎评论区交流讨论或者私信&#xff01;...

docker安装hyperf环境,连接本机redis问题处理

错误信息显示“Connection refused”&#xff0c;这通常说明 Docker 容器内的 Hyperf 项目无法连接到你本机的 Redis 服务。 1. 容器内的 127.0.0.1 指向问题 在 Docker 容器中&#xff0c;127.0.0.1 指的是容器本身&#xff0c;而不是宿主机&#xff08;你的 Mac&#xff09;…...

第12章:优化并发_《C++性能优化指南》notes

优化并发 一、并发基础与优化核心知识点二、关键代码示例与测试三、关键优化策略总结四、性能测试方法论多选题设计题答案与详解多选题答案&#xff1a; 设计题答案示例 一、并发基础与优化核心知识点 线程 vs 异步任务 核心区别&#xff1a;std::thread直接管理线程&#xf…...

Linux操作系统7- 线程同步与互斥7(RingQueue环形队列生产者消费者模型改进)

上篇文章&#xff1a;Linux操作系统7- 线程同步与互斥6&#xff08;POSIX信号量与环形队列生产者消费者模型&#xff09;-CSDN博客 本篇代码仓库&#xff1a;myLerningCode/l36 橘子真甜/Linux操作系统与网络编程学习 - 码云 - 开源中国 (gitee.com) 目录 一. 单生产单消费单保…...

学有所记——初探向量数据库Weaviate

目标&#xff1a; 了解向量数据库的连接、建库、插入数据、查询数据等基本用法以及关于语义相似度的一些基本概念。 背景&#xff1a; 前段时间尝试在自己的电脑上搭建OllamaDify平台&#xff0c;体验并探索大模型的强大功能。在使用过程中&#xff0c;尤其是在搭建RAG知识库…...

Ardupilot开源无人机之Geek SDK进展2025Q2

Ardupilot开源无人机之Geek SDK进展2025Q2 1. 源由2. 内容汇总2.1 【jetson-fpv】“Caution - Hot surface. Dont touch.”2.2 【jetson-fpv】1080P/720P显示设备配置 3. 遗留问题3.1 高优先级3.1.1 【jetson-fpv】1080P60FPS AI分析视频卡顿&#xff0c;丢包3.1.2 【jetson-fp…...

深入理解K8s与Docker的关系:容器化技术的双雄

友情提示&#xff1a;本文内容由银河易创&#xff08;https://ai.eaigx.com&#xff09;AI创作平台gpt-4-turbo模型生成&#xff0c;仅供参考。 在现代云计算及微服务架构的发展中&#xff0c;Docker与Kubernetes&#xff08;K8s&#xff09;作为两大核心技术&#xff0c;被广泛…...

QT高效文件I/O编程--实用指南与最佳实践

概述 在软件开发过程中,文件输入输出(I/O)操作是数据持久化和交换的核心部分。无论是简单的日志记录还是复杂的数据集处理,高效的文件I/O操作对于应用的整体性能至关重要 最佳实践 一、选择合适的文件模式 正确选择文件打开模式是确保操作意图明确且安全的第一步。不同…...

QT记事本

记事本应用程序提供了基本的文本编辑功能&#xff0c;支持文件的新建、打开、保存和另存为操作&#xff0c;同时具备修改提示和关闭窗口时的保存确认功能。使用 UTF - 8 编码确保了对多语言文本的支持。 1. 项目整体结构 main.cpp&#xff1a;程序的入口点&#xff0c;负责初…...