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

【JDBC】数据库连接的艺术:深入解析数据库连接池、Apache-DBUtils与BasicDAO

在这里插入图片描述

文章目录

    • 前言
    • 🌍 一.连接池
      • ❄️1. 传统获取Conntion问题分析
      • ❄️2. 数据库连接池
      • ❄️3.连接池之C3P0技术
        • 🍁3.1关键特性
        • 🍁3.2配置选项
        • 🍁3.3使用示例
      • ❄️4. 连接池之Druid技术
        • 🍁 4.1主要特性
        • 🍁 4.2 配置选项
        • 🍁 4.3 使用示例
    • 🌍 二.Apache-DBUtil
        • ❄️1. 关键特性
        • ❄️2. 主要类和方法
        • ❄️3. 使用示例
    • 🌍 三.BasicDAO
      • ❄️1. 引入
      • ❄️2. `BasicDAO` 类通常包含以下功能:
      • ❄️3. 以下是如何使用 `BasicDAO` 的示例:


🙋‍♂️ 作者:@whisperrr.🙋‍♂️

👀 专栏:JDBC 👀

🎉 其他专栏:零基础学Mysql 🎉

💥 标题:探索JDBC:Java数据库连接的艺术与魅力💥

❣️ 寄语:比较是偷走幸福的小偷❣️

前言

在当今信息时代的浪潮中,数据库作为信息存储和处理的核心,其重要性不言而喻。作为一名普通的软件开发者,我在数据库连接与操作的道路上摸索前行,积累了一些实践经验。在此,与大家分享关于数据库连接池、Apache-DBUtils和BasicDAO这三个技术的一些心得和体会。本文旨在抛砖引玉,希望能够为同行们在优化数据库操作、提高系统性能的征途上提供一点参考和帮助。让我们一起学习,共同进步。

🌍 一.连接池

在学习一个新技术的时候,我们先来看看传统的方式有哪些问题,新技术又能解决什么样的问题,通过什么方式解决问题.

❄️1. 传统获取Conntion问题分析

  1. 传统的JDBC数据库连接使用DriverManager来获取,每次向数据库建立连接的时候都要将 Connection 加载的内存中,再验证 IP 地址,用户名和密码,频繁的进行数据库的连接将要占用很多的系统资源,任意造成服务器崩溃.
  2. 每一次数据库连接,都要及时断开,如果程序出现异常而未能及时关闭,将导致数据库内存泄漏,最终将导致重启数据库
  3. 传统的获取连接的方式,不能控制连接的数量,如果连接过多,也可能导致数据库的内存泄漏

感情的自然流露,我们引出数据库连接池。

❄️2. 数据库连接池

数据库连接池(Database Connection Pool)是一种用于提高数据库操作性能和资源管理效率的技术。可以很好的解决上面的传统方式带来的问题.

2.1 数据库连接池的基本原理如下:

  1. 初始化: 在系统启动时,创建一定数量的数据库连接,并将这些连接放入连接池中。
  2. 使用: 当用户请求一个数据库连接时,连接池会提供一个空闲的连接。如果连接池中没有空闲连接,则会根据最大连接数限制决定是否创建新的连接。
  3. 释放: 当用户完成数据库操作后,不会直接关闭数据库连接,而是将连接返回给连接池,以便其他请求复用。
  4. 管理: 连接池负责维护连接的状态,如定期检查连接的有效性,根据需要创建或销毁连接,保证连接池中的连接数量在一个合理的范围内。

2.2 数据库连接池的优点包括:

  • 提高性能: 通过复用连接减少建立和关闭连接的次数,显著提高系统性能。
  • 资源利用: 有效管理数据库连接,避免连接泄漏,节省系统资源。
  • 响应速度: 减少等待建立连接的时间,提高系统的响应速度。
  • 可配置性: 可以根据系统负载动态调整连接池的大小,适应不同的应用场景。

2.3 数据库连接池的技术包括:JDBC的数据库连接池使用javax.sql.DataSource来表示,DataSource只是一个接口,该接口通常由第三方提供实现[提供.jar]

  • C3PO数据库连接池,速度相对较慢,稳定性不错(hibernate,spring)
  • DBCP数据库连接池,速度相对c3p0较快,但不稳定
  • Proxool数据库连接池,有监控连接池状态的功能,稳定性较c3p0差一点
  • BoneCP数据库连接池,速度快
  • Druid(德鲁伊)是阿里提供的数据库连接池,集DBCP、C3PO、Proxool优点于一身的数据库连接池

❄️3.连接池之C3P0技术

c3p0 是一个 Java 编程语言中的数据库连接池库,它实现了数据源和 JNDI 适配器,用于提高数据库操作的效率和性能。c3p0 旨在提供一个高效、可靠的解决方案,用于管理数据库连接,减少创建和销毁连接的开销。
以下是 c3p0 的一些关键特性和配置选项:

🍁3.1关键特性
  1. 自动连接池管理: c3p0 能够自动管理数据库连接池,无需手动干预。
  2. 配置灵活: 提供了丰富的配置选项,可以通过 XML 文件、属性文件或直接在代码中进行配置。
  3. 支持多种数据库: c3p0 支持多种关系型数据库,如 MySQL、PostgreSQL、Oracle、SQL Server 等。
  4. 数据源和 JNDI 支持: c3p0 可以配置为数据源,并且可以与 JNDI 一起使用,便于在应用服务器环境中集成。
  5. 扩展性: c3p0 设计上考虑了扩展性,允许开发者根据需要定制连接池的行为。
🍁3.2配置选项

以下是一些常用的 c3p0 配置参数:

  • initialPoolSize: 初始化时创建的连接数。
  • maxPoolSize: 连接池中保留的最大连接数。
  • minPoolSize: 连接池中保留的最小连接数。
  • maxIdleTime: 连接的最大空闲时间,超过这个时间未使用的连接将被关闭。
  • acquireIncrement: 当连接池中的连接耗尽时,一次性创建的连接数。
  • idleConnectionTestPeriod: 空闲连接测试周期,用于验证空闲连接是否仍然有效。
  • checkoutTimeout: 当没有可用连接时,从连接池中获取连接的最大等待时间。
  • maxStatements: 缓存的最大 SQL 语句数。
  • maxStatementsPerConnection: 每个连接可以缓存的最大 SQL 语句数。
🍁3.3使用示例

以下是一个简单的 c3p0 配置和使用示例:

import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class C3P0Example {private static DataSource dataSource;static {ComboPooledDataSource cpds = new ComboPooledDataSource();cpds.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");cpds.setUser("username");cpds.setPassword("password");cpds.setInitialPoolSize(5);cpds.setMaxPoolSize(20);// 其他配置...dataSource = cpds;}public static Connection getConnection() throws SQLException {return dataSource.getConnection();}public static void main(String[] args) {try (Connection conn = getConnection()) {// 使用连接进行数据库操作} catch (SQLException e) {e.printStackTrace();}}
}

在使用 c3p0 时,建议仔细阅读官方文档,并根据实际应用场景调整配置参数,以达到最佳性能。随着技术的发展,新的连接池技术(如 HikariCP)提供了更好的性能和更简单的配置,因此在选择连接池时,可以考虑比较不同库的性能和特性。

❄️4. 连接池之Druid技术

Druid 是一个用于数据库连接池和SQL监控的Java开源库,由阿里巴巴开源。它不仅提供了数据库连接池的功能,还包含了许多其他特性,如数据库加密、SQL执行日志、PSCache、慢SQL记录、SQL注入攻击防护等。Druid 广泛应用于各种需要数据库操作的Java应用程序中,特别是在大数据和高并发的场景下。
以下是 Druid 的一些主要特性和优势:

🍁 4.1主要特性
  1. 强大的连接池管理: Druid 提供了高效的连接池管理,支持多种数据库,并且能够处理大量并发连接。
  2. 监控功能: Druid 能够监控数据库访问性能,包括执行时间、并发数、慢查询等,有助于优化数据库性能。
  3. SQL防火墙: Druid 可以防止SQL注入攻击,确保数据库的安全性。
  4. 数据库加密: 支持对数据库密码进行加密,提高安全性。
  5. 多种配置方式: Druid 支持多种配置方式,包括XML、properties文件、编程方式等。
  6. 扩展性: Druid 设计灵活,可以通过编写插件来扩展其功能。
🍁 4.2 配置选项

Druid 的配置选项非常丰富,以下是一些常用的配置参数:

  • initialSize: 初始化时建立物理连接的个数。
  • minIdle: 最小连接池数量。
  • maxActive 最大连接池数量。
  • maxWait: 获取连接时最大等待时间,单位毫秒。
  • timeBetweenEvictionRunsMillis 间隔多久进行一次检测,检测需要关闭的空闲连接。
  • minEvictableIdleTimeMillis: 连接在池中最小生存的时间。
  • validationQuery: 用来检测连接是否有效的SQL语句。
  • testWhileIdle: 建议配置为true,不影响性能,并且保证安全性。
  • estOnBorrow: 申请连接时执行validationQuery检测连接是否有效。
  • testOnReturn: 归还连接时执行validationQuery检测连接是否有效。
🍁 4.3 使用示例

以下是一个简单的 Druid 配置和使用示例:

import com.alibaba.druid.pool.DruidDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class DruidExample {private static DataSource dataSource;static {DruidDataSource dds = new DruidDataSource();dds.setUrl("jdbc:mysql://localhost:3306/mydb");dds.setUsername("username");dds.setPassword("password");dds.setInitialSize(5);dds.setMinIdle(5);dds.setMaxActive(20);// 其他配置...dataSource = dds;}public static Connection getConnection() throws SQLException {return dataSource.getConnection();}public static void main(String[] args) {try (Connection conn = getConnection()) {// 使用连接进行数据库操作} catch (SQLException e) {e.printStackTrace();}}
}

在使用 Druid 时,可以通过其提供的监控界面来查看数据库连接池的状态、SQL执行情况等,这对于诊断和优化数据库性能非常有帮助。Druid 的监控功能是其一大亮点,使得它在众多数据库连接池技术中脱颖而出。

🌍 二.Apache-DBUtil

Apache DBUtils 是 Apache 软件基金会下的一个开源 Java 库,它提供了一套简单的 JDBC helper 类,用于简化数据库操作。DBUtils 主要包含两个核心类:QueryRunnerResultSetHandler。这些类可以帮助开发者执行 SQL 查询和更新,并且处理查询结果,而无需编写大量的样板代码。

为什么学习这个技术:
1.关闭connection后,resultSet结果集无法使用
2.resultSet不利于数据的管理
3.示意图

在这里插入图片描述

以下是 Apache DBUtils 的一些关键特性和用法:

❄️1. 关键特性
  1. 简化 JDBC 操作: DBUtils 封装了 JDBC 的基本操作,使得数据库操作更加简洁。
  2. 结果集处理: 提供了多种 ResultSetHandler 实现来处理查询结果,例如将结果集转换为对象列表、单个对象、数组等。
  3. 批处理支持: 支持批处理操作,可以一次性执行多个 SQL 语句。
  4. 异常处理: 提供了异常转换功能,将 SQLException 转换为未经检查的异常(如 java.lang.RuntimeException 的子类),简化异常处理。
❄️2. 主要类和方法
  • QueryRunner: 用于执行 SQL 查询和更新操作。
    • query(String sql, ResultSetHandler rsh, Object... params):执行查询操作。
    • update(String sql, Object... params):执行更新操作(INSERT、UPDATE、DELETE)。
  • ResultSetHandler: 接口,用于处理 ResultSet 对象。
    • ArrayHandler:将结果集的第一行数据转换为对象数组。
    • BeanHandler:将结果集的第一行数据转换为指定的 JavaBean 对象。
    • BeanListHandler:将结果集的所有行转换为指定 JavaBean 对象的列表。
    • ScalarHandler:用于处理单个值的结果,例如 COUNT、MAX、MIN 等。
❄️3. 使用示例

以下是一个使用 Apache DBUtils 的简单示例:

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
public class DBUtilsExample {public static void main(String[] args) {QueryRunner runner = new QueryRunner();Connection conn = null;try {conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");List<User> users = runner.query(conn, "SELECT * FROM users", new BeanListHandler<>(User.class));users.forEach(user -> System.out.println(user.getUsername()));} catch (SQLException e) {e.printStackTrace();} finally {if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}
}
class User {private int id;private String username;// getters and setters
}

在这个例子中,我们使用 QueryRunner 来执行一个查询,并将结果集转换为 User 对象的列表。我们使用了 BeanListHandler 来处理结果集。
Apache DBUtils 是一个轻量级的库,非常适合于简单的数据库操作,特别是当你不想引入更复杂的 ORM 框架时。然而,对于更复杂的数据库操作和业务逻辑,可能需要考虑使用更全面的 ORM 框架,如 Hibernate 或 MyBatis。

🌍 三.BasicDAO

❄️1. 引入

apache-dbutils+Druid简化了JDBC开发,但还有不足:
1.SQL语句是固定,不能通过参数传入,通用性不好,需要进行改进,更方便执行增删改查
2.对于select操作,如果有返回值,返回类型不能固定,需要使用泛型
3.将来的表很多,业务需求复杂,不可能只靠一个Java类完成
4.引出=》BasicDAO画出示意图,看看在实际开发中,应该如何处理
在这里插入图片描述在这里插入图片描述

BasicDAO 是一个通用的数据访问对象(DAO)抽象层的实现,它通常用于简化数据库操作。在Java中,DAO层的主要目的是将数据库操作代码与业务逻辑代码分离,使得业务逻辑更加清晰,同时也便于数据库迁移和维护。

❄️2. BasicDAO 类通常包含以下功能:

  1. 连接管理: 管理数据库连接的创建和关闭。
  2. CRUD操作: 提供创建(Create)、读取(Read)、更新(Update)和删除(Delete)操作的通用实现。
  3. 查询执行: 执行各种SQL查询,并处理结果集。
  4. 事务管理: 管理事务的开始、提交和回滚。
    以下是一个简单的 BasicDAO 类的示例实现,它使用了 Apache Commons DBUtils 来简化操作:
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.List;
public abstract class BasicDAO<T> {private QueryRunner queryRunner = new QueryRunner();private Class<T> type;public BasicDAO(Class<T> type) {this.type = type;}protected Connection getConnection() throws SQLException {// 这里应该根据实际情况来获取数据库连接// 例如,从数据源(DataSource)获取连接return DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");}public T queryForObject(String sql, Object... params) throws SQLException {try (Connection conn = getConnection()) {return queryRunner.query(conn, sql, new BeanHandler<>(type), params);}}public List<T> queryForList(String sql, Object... params) throws SQLException {try (Connection conn = getConnection()) {return queryRunner.query(conn, sql, new BeanListHandler<>(type), params);}}public <V> V queryForScalar(String sql, Object... params) throws SQLException {try (Connection conn = getConnection()) {return queryRunner.query(conn, sql, new ScalarHandler<V>(), params);}}public int update(String sql, Object... params) throws SQLException {try (Connection conn = getConnection()) {return queryRunner.update(conn, sql, params);}}
}

在这个 BasicDAO 类中,我们定义了几个方法来执行常见的数据库操作。这个类是泛型的,可以用于任何类型的实体类。使用时,你需要为你的实体类创建一个继承自 BasicDAO 的具体实现。

❄️3. 以下是如何使用 BasicDAO 的示例:

public class UserDao extends BasicDAO<User> {public UserDao() {super(User.class);}// 这里可以添加特定于User的数据库操作方法
}
// 使用UserDao
UserDao userDao = new UserDao();
User user = userDao.queryForObject("SELECT * FROM users WHERE id = ?", 1);
List<User> users = userDao.queryForList("SELECT * FROM users");
int updatedRows = userDao.update("UPDATE users SET username = ? WHERE id = ?", "newUsername", 1);

在这个例子中,UserDao 继承自 BasicDAO 并指定了实体类 User。然后,你可以使用 UserDao 来执行针对 User 表的数据库操作。
请注意,这个 BasicDAO 示例是一个简化版本,实际应用中可能需要更多的功能和错误处理。此外,直接使用 JDBC 和 DBUtils 可能不是最佳实践,特别是在大型或复杂的项目中,通常会使用更高级的框架如 Hibernate、MyBatis 或 Spring Data JPA 来处理数据访问层。

相关文章:

【JDBC】数据库连接的艺术:深入解析数据库连接池、Apache-DBUtils与BasicDAO

文章目录 前言&#x1f30d; 一.连接池❄️1. 传统获取Conntion问题分析❄️2. 数据库连接池❄️3.连接池之C3P0技术&#x1f341;3.1关键特性&#x1f341;3.2配置选项&#x1f341;3.3使用示例 ❄️4. 连接池之Druid技术&#x1f341; 4.1主要特性&#x1f341; 4.2 配置选项…...

【Envi遥感图像处理】006:影像融合(高光谱+多光谱)的方法

文章目录 一、图像融合概述二、加载数据三、图像融合操作四、结果比对五、高光谱与多光谱一、图像融合概述 图像融合是指将不同类型传感器的影像进行融合,既能使图向具有较高的空间分辨率,又具有多光谱的特性。 二、加载数据 三、图像融合操作 在ENvi中,图像融合使用的工具…...

C语言内存之旅:从静态到动态的跨越

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文一 动态内存管理的必要性二 动态…...

Git本地搭建

Git本地搭建 &#xff08;项目突然不给创建仓库了&#xff0c;为了方便管理项目只能自己本地搭建git服务&#xff09; 为了在本地搭建Git环境并实现基本的Git操作&#xff0c;步骤如下&#xff1a; 安装Git软件 ‌Windows‌&#xff1a;从Git官方网站下载并安装适用于Windows…...

电商|基于java的农业电商系统(源码+数据库+文档)

农业电商系统 目录 基于java的农业电商系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 前台&#xff1a; 后台&#xff1a; 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️…...

c语言分支和循环

文章目录 前言 一、分支结构 if语句 switch语句 三目运算符 二、循环结构 while循环 do-while循环 for循环 循环嵌套 循环控制语句 总结 前言 分支和循环是C语言中非常重要的控制结…...

大象机器人发布首款穿戴式数据采集器myController S570,助力具身智能数据收集!

myController S570 具有较高的数据采集速度和远程控制能力&#xff0c;大大简化了人形机器人的编程。 myController S570 是一款可移动的轻量级外骨骼&#xff0c;具有 14 个关节、2 个操纵杆和 2 个按钮&#xff0c;它提供高数据采集速度&#xff0c;出色的兼容性&#xff0c…...

【HarmonyOS NEXT】华为分享-碰一碰开发分享

关键词&#xff1a;鸿蒙、碰一碰、systemShare、harmonyShare、Share Kit 华为分享新推出碰一碰分享&#xff0c;支持用户通过手机碰一碰发起跨端分享&#xff0c;可实现传输图片、共享wifi等。我们只需调用系统 api 传入所需参数拉起对应分享卡片模板即可&#xff0c;无需对 U…...

基于python+Django+mysql鲜花水果销售商城网站系统设计与实现

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育、辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…...

Linux C\C++方式下的文件I/O编程

【图书推荐】《Linux C与C一线开发实践&#xff08;第2版&#xff09;》_linux c与c一线开发实践pdf-CSDN博客 《Linux C与C一线开发实践&#xff08;第2版&#xff09;&#xff08;Linux技术丛书&#xff09;》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 Lin…...

2025寒假备战蓝桥杯01---朴素二分查找的学习

文章目录 1.暴力方法的引入2.暴力解法的思考 与改进3.朴素二分查找的引入4.朴素二分查找的流程5.朴素二分查找的细节6.朴素二分查找的题目 1.暴力方法的引入 对于下面的这个有序的数据元素的组合&#xff0c;我们的暴力解法就是挨个进行遍历操作&#xff0c;一直找到和我们的这…...

AI时代:弯道超车的新思维与实践路径

大家好&#xff0c;我是herosunly。985院校硕士毕业&#xff0c;现担任算法研究员一职&#xff0c;热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名&#xff0c;CCF比赛第二名&#xff0c;科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的…...

HunyuanDiT代码笔记

HunyuanDiT 是由腾讯发布的文生图模型&#xff0c;适配中英双语。 在模型方面的改进&#xff0c;主要包括&#xff1a; transformer结构text encoderpositional encoding Improving Training Stability To stabilize training, we present three techniques: We add layer nor…...

C++: Dtrees:load(constg String filepath, const String nodeName)中nodeName参数含义

1. nodeName 的作用 当你保存模型时&#xff0c;整个决策树会被序列化到一个 XML 或 YAML 文件中。nodeName 是加载时指定的一个逻辑路径&#xff0c;用于从文件中找到某个节点或子结构&#xff0c;而不是存储在文件中的字段。如果你不指定 nodeName&#xff0c;OpenCV 默认会…...

项目练习:若依后台管理系统-后端服务开发步骤(springboot单节点版本)

文章目录 1、用Maven搭建项目脚手架&#xff0c;父子工程依赖。2、引入SpringBoot Web容器依赖3、引入Mybatisdruid依赖4、实现接口查询数据5、整合logback日志功能 1、用Maven搭建项目脚手架&#xff0c;父子工程依赖。 root模块的pom添加plugin配置 <build><plugins…...

Ubuntu安装docker

snap install docker # version 27.2.0, or apt install podman-docker # version 3.4.4ds1-1ubuntu1.22.04.2 apt install docker.io # version 24.0.7-0ubuntu2~22.04.1 我应该安装哪一个&#xff0c;部署企业级应用? 在部署企业级应用时&#xff0c;选择合适的容器化…...

windows11下 podman-desktop 复制插件文件 到 RabbitMQ 容器内,并启用

目的&#xff1a; 刚启用的 RabbitMQ 容器&#xff0c;发现没有rabbitmq_delayed_message_exchange 插件&#xff0c;开始手动安装 官网 https://www.rabbitmq.com/community-plugins 或 https://github.com/rabbitmq/rabbitmq-delayed-message-exchange 下载rabbitmq_delay…...

Quickstart C++ with cmake, visualstudio | CPP

本文属于 C 系列文章&#xff0c;下一篇文章见 Quick get started with vcpkg, windows visual studio | CPP 目录 cmake-visualstudio-quickstartDepsConfigureBuild with CLILINKS cmake-visualstudio-quickstart https://github.com/hailiang-wang/cmake-visualstudio-quic…...

惊叹数据结构之美,品味排序算法之妙:对四大排序的详细介绍

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 正文一、冒泡排序&#xff08;Bubble Sor…...

机器学习——什么是代价函数? 下

“上次课讲了机器学习的模型表示,讲了一个线性模型的例子,那怎样在可能的拟合直线里选择一条最合适的呢?有没有数学的方法让这个直线合适还是不合适变得可以量化呢?这就要说代价函数了。” 本次课前半段内容非常简单,带领我们一起复习初中平面几何的知识,后半段给出了代价…...

Ubuntu本地部署网站

目录 1.介绍 2.安装apache 3.网页升级 1.介绍 网站其实就相当于一个文件夹&#xff0c;用域名访问一个网页&#xff0c;就相当于访问了一台电脑的某一个文件夹&#xff0c;在网页中看见的视频&#xff0c;视频和音乐其实就是文件夹里面的文件。为什么网页看起来不像电脑文件夹…...

hydra破解密码

hydra九头蛇是常用的密码破解工具 1、破解centos ssh密码 hydra -l root -P password.txt ssh://192.168.1.107:2222 hydra -l root -P password.txt -s 2222 192.168.1.107 ssh2、破解ftp hydra -l allen -P e:\aa.txt ftp://127.0.0.1 hydra -l allen -P e:\aa.txt ftp:…...

华为OD机试E卷 --字符串变换最小字符串 --24年OD统一考试(Java JS Python C C++)

文章目录 题目描述输入描述输出描述用例题目解析JS算法源码java算法源码python算法源码c算法源码c算法源码 题目描述 给定一个字符串s&#xff0c;最多只能进行一次变换&#xff0c;返回变换后能得到的最小字符串&#xff08;按照字典序进行比较&#xff09;。 变换规则&#…...

用户中心项目教程(二)---umi3的使用出现的错误

目录 1.情况的说明 2.遇到的问题 1&#xff09;第一个问题-关于npx的使用 2&#xff09;第二个问题--unsupport问题 3&#xff09;第三个收获--nodejs安装问题 4&#xff09;第四个收获---nvm下载问题 5&#xff09;第五个问题--尚未解决的问题 3.个人总结 1.情况的说明…...

具身智能新突破!Physical Intelligence推出机器人动作tokenizer,训练提速5倍

具身智能&#xff0c;是人工智能&#xff08;AI&#xff09;行业的下一个浪潮。如何有效训练 Transformers 模型来控制具身机器人&#xff0c;是当前亟需要解决的难题&#xff0c;尤其是对于更复杂、需要精确和高频控制的精巧技能&#xff0c;现有的视觉-语言-动作&#xff08;…...

Unity 学习指南与资料分享

Unity学习资料 Unity学习资料 Unity学习资料 Unity 作为一款强大的跨平台游戏开发引擎&#xff0c;在游戏开发及实时 3D 内容创作领域占据着重要地位。它功能丰富、易于上手&#xff0c;支持多平台发布&#xff0c;为开发者提供了广阔的创作空间。下面为你带来全面的 Unity 学…...

react什么时候用箭头函数,什么时候不需要

最近从vue项目转到react&#xff0c;太久没写了。遇到了一些卡住的问题&#xff0c;记录一下。 在 JavaScript 和 React 开发中&#xff0c;箭头函数&#xff08;Arrow Functions&#xff09;的使用主要取决于上下文、代码简洁性和特定需求。以下是关于何时使用箭头函数以及何时…...

软考中级复习篇章:数据结构部分的复习

软考中级快速通过篇章&#xff1a;数据结构部分的复习 一、引言 在软考中级的备考过程中&#xff0c;数据结构是极为重要的一个部分。它不仅是计算机科学的基础&#xff0c;也是软考中考查的重点知识领域。扎实掌握数据结构相关内容&#xff0c;对于顺利通过软考中级考试起着…...

【Vim Masterclass 笔记22】S09L40 + L41:同步练习11:Vim 的配置与 vimrc 文件的相关操作(含点评课内容)

文章目录 S09L40 Exercise 11 - Vim Settings and the Vimrc File1 训练目标2 操作指令2.1. 打开 vimrc-sample 文件2.2. 尝试各种选项与设置2.3. 将更改内容保存到 vimrc-sample 文件2.4. 将文件 vimrc-sample 的内容复制到寄存器2.5. 创建专属 vimrc 文件2.6. 对于 Mac、Linu…...

Spring Boot 整合 PageHelper 实现分页功能

在开发 Web 应用时&#xff0c;分页功能几乎是必不可少的。Spring Boot 提供了强大的功能来简化开发&#xff0c;而 PageHelper 则是一个优秀的 MyBatis 分页插件&#xff0c;可以极大地简化分页查询的代码。本文将介绍如何在 Spring Boot 项目中整合 PageHelper&#xff0c;并…...

Redis和MongoDB的区别

前言 在项目选型阶段&#xff0c;MongoDB被选中主要是基于其处理大规模数据集的能力&#xff0c;而当时并未深入探讨其他替代方案。此前&#xff0c;Redis被用于管理少量但访问频繁的热数据。目前&#xff0c;项目采用MongoDB存储百万级数据&#xff0c;预计未来数据量将增长至…...

Java基础(2)

博客&#xff1a;深入理解浮点型数据、计算机视觉信息存储与类型转换 四、浮点型数据 在编程语言中&#xff0c;浮点型数据主要包括float&#xff08;单精度&#xff09;和double&#xff08;双精度&#xff09;。计算机默认使用double类型存储小数&#xff0c;这会引发一些特…...

D3.js及实例应用

文章目录 D3.jsd3.js 应用实例图标展示点击选择拖拉拽应用 D3.js D3.js是一个功能强大的JavaScript库&#xff0c;除了图标展示&#xff0c;还能实现多种类型的交互效果&#xff1a; 数据可视化交互 动态更新图表&#xff1a;根据用户操作&#xff08;如点击按钮、选择下拉菜…...

管理权限特权

管理权限 Oracle 用户权限分为两种类型&#xff1a; 系统权限&#xff1a;允许用户在数据库中执行特定的操作。 对象权限&#xff1a;允许用户访问和操作特定的对象。 系统权限 Oracle 数据库中有超过100种不同的系统权限。权限中的 “ANY” 关键字表示用户在任何模式&#x…...

基于海思soc的智能产品开发(视频的后续开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们讨论了camera&#xff0c;也讨论了屏幕驱动&#xff0c;这些都是基础的部分。关键是&#xff0c;我们拿到了这些视频数据之后&#xff0c;…...

为什么相关性不是因果关系?人工智能中的因果推理探秘

目录 一、背景 &#xff08;一&#xff09;聚焦当下人工智能 &#xff08;二&#xff09;基于关联框架的人工智能 &#xff08;三&#xff09;基于因果框架的人工智能 二、因果推理的基本理论 &#xff08;一&#xff09;因果推理基本范式&#xff1a;因果模型&#xff0…...

【QT】已解决:Qt4.11.0无法使用MSVC编译器问题

目录 一、背景 1.本机环境 2.问题描述 3.问题解决前后对比图 二、详细操作 1.下载项目二所需qt环境 2.解决思路 3.安装VS2017 4.安装MSVC调试器 5.打开qtCreator查看编译器 5.编译运行项目二 三、参考 一、背景 1.本机环境 windows11 qtCreator4.11.0 minGW 64位…...

python如何解析word文件格式(.docx)

python如何解析word文件格式&#xff08;.docx&#xff09; .docx文件遵从开源的“Office Open XML标准”&#xff0c;这意味着我们能用python的文本操作对它进行操作&#xff08;实际上PPT和Excel也是&#xff09;。而且这并不是重复造轮子&#xff0c;因为市面上操作.docx的…...

点云目标检测训练数据预处理---平面拟合与坐标转换(python实现)

在做centerpoint训练之前&#xff0c;需要先对点云数据进行标注&#xff0c;然后制作kittti数据集。不用nuScenes或者waymo数据集的理由也很简单&#xff0c;因为麻烦&#xff0c;没有kitti数据集直观。 kitti数据集的格式如下&#xff0c;可以看到数据集中只有航向角&#xff…...

Debezium日常分享系列之:对于从Oracle数据库进行快照的性能优化

Debezium日常分享系列之&#xff1a;对于从Oracle数据库进行快照的性能优化 源数据库Kafka Connect监控测试结果 源数据库 Oracle 19c&#xff0c;本地&#xff0c;CDB数据库主机的I/O带宽为6 GB/s&#xff0c;由此主机上运行的所有数据库共享临时表空间由42个文件组成&#x…...

logback日志自定义占位符

前言 在大型系统运维中&#xff0c;很大程度上是需要依赖日志的。在java大型web工程中&#xff0c;一般都会使用slf4jlogback这一个组合来实现日志的管理。 logback中很多现成的占位符可以可以直接使用&#xff0c;比如线程号【%t】、时间【%d】、日志等级【%p】&#xff0c;…...

【Red Hat8】:搭建FTP服务器

目录 一、匿名FTP访问 1、新建挂载文件 2、挂载 3、关闭防火墙 4、搭建yum源 5、安装VSFTPD 6、 打开配置文件 7、设置配置文件如下几个参数 8、重启vsftpd服务 9、进入图形化界面配置网络 10、查看IP地址 11、安装ftp服务 12、遇到拒绝连接 13、测试 二、本地…...

华为AI培训-NLP实验

中文分词、命名实体识别、语义词性标注、语句逻辑推理、文本摘要、机器翻译、文本情感分析、内容创作 1 实验介绍 1.1 实验背景 中文分词、命名实体识别、语义词性标注、语句逻辑推理是自然语言处理领域中的重要任务。中文分词是将连续的汉字序列切分成有意义的词语序列…...

goodreads书籍评论爬取NRC Emotion Lexicon分析

文章目录 目标网站数据获取评论情感分析对爬虫、逆向感兴趣的同学可以查看文章,一对一小班教学:https://blog.csdn.net/weixin_35770067/article/details/142514698 目标网站 https://www.goodreads.com/book/show/3656.The_Sea 就是针对一本书进行3000+评论抓取和情感分析…...

【vitePress】基于github快速添加评论功能(giscus)

一.添加评论插件 使用giscus来做vitepress 的评论模块&#xff0c;使用也非常的简单&#xff0c;具体可以参考&#xff1a;giscus 文档&#xff0c;首先安装giscus npm i giscus/vue 二.giscus操作 打开giscus 文档&#xff0c;如下图所示&#xff0c;填入你的 github 用户…...

论文笔记(六十二)Diffusion Reward Learning Rewards via Conditional Video Diffusion

Diffusion Reward Learning Rewards via Conditional Video Diffusion 文章概括摘要1 引言2 相关工作3 前言4 方法4.1 基于扩散模型的专家视频建模4.2 条件熵作为奖励4.3 训练细节 5 实验5.1 实验设置5.2 主要结果5.3 零样本奖励泛化5.4 真实机器人评估5.5 消融研究 6 结论 文章…...

电梯系统的UML文档07

从这个类中得到的类图&#xff0c;构划出了软件的大部分设计。 系统结构视图提供软件和整个系统结构最复杂的也是最优雅的描述。和通常的软件系统相比&#xff0c;在分布式嵌入系统中了解系统组件如何协同工作是非常重要的。毕竟&#xff0c;每个类图仅仅是一个系统的静态设计…...

【Python】综合案例--人生重开模拟器

1. 设置初始属性 在游戏中我们设定四个属性.: 颜值 (face) 体质 (strong) 智力 (iq) 家境 (home)我们约定每个属性的范围为 [1, 10], 并且总和不能超过 20. 如果玩家输入的初始属性不合理, 就提示输入有误, 重新输入. print("-----------------------------------------…...

vue+高德API搭建前端3D交通页面

1. 模板部分 (<template>) <template><div class"content"><div><div id"container"></div></div></div> </template> 功能&#xff1a;定义了组件的HTML结构。分析&#xff1a; div.content 是最…...

2024年博客之星主题创作|猫头虎分享AI技术洞察:2025年AI发展趋势前瞻与展望

2025年AI发展趋势前瞻&#xff1a;猫头虎深度解析未来科技与商业机遇 摘要 2024年&#xff0c;AI技术迎来爆发式增长&#xff0c;AIGC、智能体、AIRPA、AI搜索、推理模型等技术不断突破&#xff0c;AI应用场景持续扩展。2025年&#xff0c;AI将进入全新发展阶段&#xff0c;W…...