SpringBoot基础概念介绍-数据源与数据库连接池


🌈个人首页: 神马都会亿点点的毛毛张

毛毛张今天介绍的SpringBoot中的基础概念-数据源与数据库连接池,同时介绍SpringBoot整合两种连接池的教程
文章目录
- 1 数据库与数据库管理系统
- 2 JDBC与数据库驱动
- 2.1 JDBC
- 2.2 数据库驱动
- 3 数据库连接池
- 3.1 什么是数据库连接池
- 3.2 常见数据库连接池介绍
- 3.3 常见数据库连接池对比
- 3.4 总结
- 4 数据源
- 4.1 数据源
- 4.2 数据库连接池与数据源的关系
- 5 承上启下
1 数据库与数据库管理系统
- 数据库:英文名是
DataBase
,简称DB
,它是存储和管理数据的仓库,数据在数据库中是有组织的进行存储。虽然我们通常会将MySQL
、Oracle
、PostgreSQL
等软件称为数据库,但它们实际上是一种可以操作和管理数据库的软件,而真正的数据库是指存储数据的仓库。 - 数据库管理系统:英文名是
DataBase Management System
,简称DBMS
,它是管理数据库的大型软件。我们平时所说的MySQL
数据库本质是MySQL
数据库管理系统,在电脑上安装了数据库管理系统后,就可以通过数据库管理系统创建数据库来存储数据,也可以通过该系统对数据库中的数据进行数据的增删改查相关的操作。
2 JDBC与数据库驱动
2.1 JDBC
-
JDBC:英文全称 Java Database Connectivity,中文名称为Java 数据库连接,是 Java 提供的一组用于操作关系型数据库的标准
API
;它是 由Java
官方(Sun 公司)制定的一种规范,旨在提供一种独立于具体数据库的统一接口,简化 Java 程序与数据库之间的交互;通过这种设计,Java
程序只需要面向JDBC
规范开发,而具体与数据库的通信细节由厂商提供的驱动程序实现。这种模式允许开发者使用同一套代码切换不同的关系型数据库,只需更换相应的驱动程序。 -
为什么需要JDBC?
- 在 Java 开发中,程序需要与关系型数据库(如 MySQL、Oracle 等)进行交互。然而,不同数据库的实现方式和底层细节各不相同。例如,同样的一段 Java 代码可能无法同时操作
MySQL
和Oracle
数据库。如果开发阶段使用的是 MySQL,而上线后公司选择了 Oracle 数据库,就需要对大量代码进行修改,这将带来巨大的工作量和维护成本。为了避免这种问题,Java 官方定义了一套标准接口——JDBC。这套接口规范化了操作关系型数据库的规则,使开发者无需关注底层实现细节,只需遵循统一的 API 即可,这大大提高了代码的可移植性和灵活性。
- 在 Java 开发中,程序需要与关系型数据库(如 MySQL、Oracle 等)进行交互。然而,不同数据库的实现方式和底层细节各不相同。例如,同样的一段 Java 代码可能无法同时操作
-
JDBC核心思想是将规范与实现分离:
- JDBC 接口(规范):Java 官方提供一组标准的接口,定义了与数据库交互的规则,例如连接数据库、执行 SQL 查询、获取结果等。
- 数据库驱动(实现):各个数据库厂商根据 JDBC 规范提供具体的实现类,并将这些实现类封装成
.jar
文件,这就是我们常说的 数据库驱动包
-
应用程序使用JDBC访问数据的方式如下图所示:
)
2.2 数据库驱动
- 数据库驱动是由不同数据库厂商(如 Oracle、MySQL 等)为特定开发语言(如 Java)提供的程序,用于实现统一的数据库调用。它相当于一个“翻译器”,将 Java 等语言的数据库操作请求翻译成具体数据库能够理解的专属语言,从而实现程序与数据库之间的通信。数据库驱动是基于统一的接口规范(如 JDBC)开发的,直接负责与数据库交互,完成连接、操作和数据传输等任务。
- 在实际使用中,数据库驱动通常以 驱动包 的形式提供,例如 MySQL 的
mysql-connector-java.jar
或 Oracle 的ojdbc.jar
。开发者只需将驱动包导入项目,配置数据库连接信息(如地址、用户名和密码),即可通过标准接口与数据库交互,完成高效的数据库操作。
3 数据库连接池
3.1 什么是数据库连接池
- 数据库连接池(Database Connection Pooling)是一种用于高效管理和复用数据库连接的技术,旨在解决传统 JDBC 操作中频繁创建和销毁连接所带来的资源浪费和性能开销问题。在传统的数据库操作中,每次访问数据库都需要加载驱动、建立连接、执行操作和关闭连接,尽管在低频访问场景下,这种方式影响较小,但在高频数据库访问中,频繁的连接创建和销毁会消耗大量的 CPU、内存和网络资源,同时增加操作的延迟,严重时甚至会导致系统崩溃。
- 数据库连接池通过池化技术,在应用程序启动时预先创建一定数量的数据库连接对象,并将其存储在池中;应用程序需要数据库连接时,可以直接从池中获取,操作完成后将连接归还,而不是每次都重新建立一个新的连接;这样,不仅能够避免频繁创建和销毁连接的高开销,还能大幅提升系统的性能和并发处理能力。
- 数据库连接池通常由连接管理器、连接对象和连接池组成。通过对连接池的参数配置,如初始连接数、最小连接数、最大连接数、最大空闲时间等,应用程序能够灵活控制数据库连接的使用,防止连接数过多导致系统资源耗尽,同时确保数据库访问的效率和稳定性。简而言之,数据库连接池的核心作用就是避免数据库连接的频繁创建和销毁,节省系统开销,优化并发处理能力,是现代应用开发中不可或缺的基础组件。
- 连接管理器负责管理和分配连接
- 连接对象表示具体的数据库连接
- 连接池则是存储多个连接对象的地方,确保高效的连接分配和复用
3.2 常见数据库连接池介绍
- C3P0(被淘汰:历史悠久,过于复杂,性能差)
- 特点:C3P0 是一个开源的 JDBC 连接池,支持 JDBC 3.0 和 2.0 的标准扩展。它能够通过 JNDI 进行数据源绑定,曾广泛应用于 Hibernate 和 Spring 等开源项目。
- 优缺点:C3P0 的设计较为简单,但性能较差,尤其是在高并发场景下容易出现瓶颈。它的代码较为复杂且不易维护,官方也已停止更新,逐渐被淘汰。
- DBCP (已淘汰:依赖 Commons-Pool,性能差)
- 特点:由 Apache 开发的 JDBC 连接池,基于 Jakarta commons-pool 对象池机制。它通过将数据库连接预先加载到内存中,应用程序可以直接从连接池申请连接。
- 优缺点:由于依赖 Commons-Pool,性能相对较差,尤其在高并发环境下表现不佳。没有自动回收空闲连接的功能,不适合要求较高的应用场景,逐步被淘汰。
- Tomcat JDBC Pool(不推荐,性能没有Druid和HicariCP好)
- 特点:Tomcat 从 7.0 版本开始引入的新连接池模块,兼容 DBCP,基于 Tomcat JULI 日志框架,支持异步连接获取,适用于高并发应用环境。
- 优缺点:相较于 DBCP,性能更加优秀,支持更高并发,设计简单,易于集成到现有 Tomcat 环境中。适合需要高性能和稳定性的大型系统,尤其是基于 Tomcat 的 Web 应用。虽然性能较好,但相较于更现代的 HikariCP,仍然略逊一筹,不是性能最优的选择。
- BoneCP(被淘汰:为解决C3P0/DBCP性能而生,后续出现了更高性能的hikariCP,BoneCP也不再更新)
- 特点:尽管 BoneCP 在性能上表现出色,并且曾在一定时期内广泛使用,但随着 HikariCP 的出现,BoneCP 的优势逐渐被超越。更重要的是,BoneCP 项目已经停止维护,因此不再推荐使用。它不再适应现代应用程序的需求,缺乏对高并发、大规模数据处理的优化,也没有像 HikariCP 那样活跃的社区支持。
- 优缺点:尽管 BoneCP 的性能非常好,但它的维护已经停止,并且现在被 HikariCP 所替代,因此不再推荐使用。
- Druid (德鲁伊) - 推荐
- 特点:Druid 是由阿里巴巴开源的高性能数据库连接池,支持包括 Oracle、MySQL、SQL Server 等常见数据库。Druid 提供了强大的监控功能,能够实时监控数据库连接的状态,支持 SQL 拦截、性能统计、连接泄漏检测以及长时间查询日志等功能。其设计理念注重大数据和高并发环境下的性能表现,尤其适合大规模的数据查询与分析。
- 优缺点:Druid 是目前国内使用最广泛的数据库连接池,尤其适用于需要对数据库性能进行实时监控和优化的复杂应用场景。它具有丰富的管理监控功能,如 SQL 执行监控、连接泄漏检测、慢查询日志等,方便开发者调优性能并定位问题。不过,虽然 Druid 提供了极为丰富的功能,但在高并发情况下,它的性能表现略逊于 HikariCP。因此,如果项目对性能有极高的要求,Druid 可能不是最佳选择。Druid 更适用于需要复杂监控和调优的应用,而对于追求极致性能的场景,HikariCP 会是更好的选择。
- HikariCP - 推荐
- 特点:HikariCP 是目前公认的高性能 JDBC 连接池,专注于极致的性能优化。基于 BoneCP 进行了一系列的优化,注重快速响应和高吞吐量。Spring Boot 2.0 之后,HikariCP 被默认作为连接池。HikariCP 采用了高效的内存管理和高性能的线程池技术,能够在极短的时间内完成数据库连接的获取和释放。
- 优缺点:HikariCP 在性能方面的表现无可挑剔,能够处理大量并发请求,吞吐量高,响应时间极短,特别适合高负载、高并发的生产环境。它的配置简单,易于与项目集成,并支持动态管理数据库连接。与 Druid 相比,HikariCP 更加专注于性能提升,虽然其功能相对较少,但对于大多数应用而言,简洁高效的设计是其最大的优势。HikariCP 不提供像 Druid 那样的 SQL 监控、日志统计等高级功能,因此如果项目需要这些功能,则需要额外考虑其他解决方案。对于绝大多数对性能要求较高的应用,HikariCP 是最佳选择。
3.3 常见数据库连接池对比
- 上面六个数据库的对比分析:
功能 | C3P0 | DBCP | Tomcat JDBC Pool | BoneCP | Druid | HikariCP |
---|---|---|---|---|---|---|
是否支持 PSCache | 是 | 是 | 否 | 否 | 是 | 否 |
监控功能 | 无 | JMX | JMX | JMX | JMX/log/http | JMX |
扩展性 | 差 | 差 | 较差 | 较差 | 好 | 较差 |
SQL 拦截及解析 | 无 | 无 | 无 | 无 | 支持 | 无 |
代码复杂度 | 复杂 | 中等 | 简单 | 简单 | 中等 | 简单 |
更新时间 | 2019.03 | 2019.02 | 7.0+ 引入 | - | 2019.05 | 2019.02 |
最新版本 | 0.9.5.4 | 2.60 | 8.5.42 | - | 1.1.17 | 3.3.1 |
连接池管理 | LinkedBlockingDeque | 数组 | FairBlockingQueue | - | 数组 | ThreadLocal + List |
特点 | 开源,适用于小型系统 | Apache开发,单线程 | 高并发,Tomcat兼容 | 高效但已淘汰 | 高性能,监控强大 | 性能极致,简单易用 |
- 常见的数据库连接池的性能从高到低的排序为:HikariCP(BoneCP的进阶版) > Druid > Tomcat JDBC Pool > DBCP > C3P0,下图为
HicariCP
官网给出的性能对比矩形图
3.4 总结
- Tomcat JDBC Pool:适用于基于 Tomcat 的高并发环境,性能上优于 DBCP,但功能相对简单,缺少一些现代连接池的高级特性。
- DBCP 和 C3P0:由于性能较差且维护较为困难,这两个连接池已经逐渐被 HikariCP 和 Druid 等新一代连接池所替代,因此不再推荐使用。
- HikariCP:目前性能最优,特别适用于对性能要求极高的应用,如高并发和大规模系统。Spring Boot 2.0 默认使用 HikariCP,它已经成为行业标准。
- Druid:功能丰富,适合需要复杂监控、SQL 拦截和数据分析的系统。尽管性能略逊于 HikariCP,但其在可扩展性和功能上的优势使其成为企业级应用的首选。
- Spring Boot 集成:在后续的
Spring Boot
整合教程中,将只介绍 HikariCP 和 Druid 这两种连接池。
4 数据源
4.1 数据源
- 在介绍完数据库连接池后,我们来了解一下数据源(Data Source)。顾名思义,数据源指的是数据的来源,通常用于指定数据存储的位置。在应用程序中,数据源的主要作用是管理与数据存储系统(如数据库)的连接。
- 在
Java
中,javax.sql.DataSource
接口提供了一种标准化的方式来获取数据库连接。该接口定义了getConnection()
方法,允许应用程序以一致的方式获取数据库连接。通过这种方式,应用程序不需要直接管理数据库连接,而是通过数据源来进行集中管理和分配。 - 不同类型的数据库(如 MySQL、PostgreSQL 等)会有不同的实现类来提供连接。为了提高性能,数据源通常与连接池结合使用,连接池管理多个数据库连接,避免每次请求时都需要重新建立连接,从而显著提升应用程序的效率。
- 使用数据源的好处包括:
- 简化连接管理:通过标准化接口,应用程序无需关心底层的数据库连接细节,降低了代码复杂度。
- 提高资源利用率:连接池能够复用数据库连接,避免频繁地建立和关闭连接,提高系统资源的利用率。
- 增强灵活性:通过数据源,应用程序可以更方便地切换不同的数据存储系统或数据库类型,而无需修改大量代码。
4.2 数据库连接池与数据源的关系
- 很多人常常将数据源与连接池混淆,但实际上,它们在概念上是有区别的:
- 数据源:数据源是指数据的来源,通常是数据库。它提供连接数据库所需的相关信息,如数据库地址、用户名、密码等。
- 连接池:连接池是一种用于缓存和管理数据库连接的技术,它通过池化的方式复用连接,避免频繁创建和销毁连接带来的性能开销。
- 为什么会出现这种混淆呢?这主要是因为在配置数据源时,通常会同时配置连接池的相关参数。因此,很多人误以为数据源就是连接池。实际上,数据源和连接池是紧密配合的,协同完成数据库连接的创建、管理和复用。
- 在 Java 中,许多开源连接池(如 HikariCP 和 Druid)都基于标准的
javax.sql.DataSource
接口实现,这意味着它们既具备数据源的功能,也提供了连接池的管理能力。例如,Druid 提供了com.alibaba.druid.pool.DruidDataSource
类,既是一个数据源实现,又包含了连接池的功能。通过配置 Druid 数据源,应用程序不仅能实现高效的数据库访问,还能利用 Druid 强大的监控和性能优化工具来管理数据库连接。 - 总结:数据源是数据库连接的入口,应用程序通过数据源获取数据库连接,而无需手动配置驱动和连接细节。数据源通常与数据库连接池结合使用,以实现高效的数据库操作。在现代开发中,数据源和连接池密切配合,尤其是在 Spring Boot 项目中,选择合适的连接池实现(如 HikariCP 或 Druid)并与数据源结合,能显著提高数据库性能和系统稳定性。
5 承上启下
- 在后端开发中,数据库作为核心数据存储介质,与其高效交互是每个后端工程师必须面对的重要任务。尤其是在基于 Spring Boot 的项目中,整合数据库更是项目初始化阶段的关键工作之一。
- 在 Spring Boot 中,整合数据库通常包含两大部分:数据库驱动 和 数据库连接池。
- 数据库驱动 是应用程序与数据库之间的桥梁,负责建立连接、执行 SQL 查询并返回结果。在 Spring Boot 中,为了与 MySQL 数据库进行交互,通常使用 MySQL 官方提供的 JDBC 驱动(
com.mysql.cj.jdbc.Driver
)。该驱动程序允许 Spring Boot 应用程序与 MySQL 数据库建立连接并执行数据操作。除此之外,Spring Boot 通过自动配置机制(Spring Boot Autoconfiguration),提供对 MySQL 数据源的默认支持。开发者只需在配置文件中提供必要的数据库连接信息(如数据库 URL、用户名和密码等),Spring Boot 即可自动创建和管理数据源实例,简化数据库访问的配置和使用。 - 数据库连接池则是优化数据库连接管理的工具,通过复用和管理数据库连接,减少频繁建立和销毁连接的性能开销,从而显著提升应用的响应效率。在 Spring Boot 项目中,数据库连接池的选择直接影响到应用的性能和稳定性。Spring Boot 提供了多种数据库连接池的选项,其中最常用的是 HikariCP 和 Druid。这两种连接池各有优缺点,开发者可以根据项目需求选择最合适的连接池。
- 数据库驱动 是应用程序与数据库之间的桥梁,负责建立连接、执行 SQL 查询并返回结果。在 Spring Boot 中,为了与 MySQL 数据库进行交互,通常使用 MySQL 官方提供的 JDBC 驱动(
- 下面是毛毛张关于SpringBoot配置两种常见的数据库连接池的教程:
- 【SpringBoot教程】SpringBoot整合MySQL驱动和HicariCP连接池
- 【SpringBoot教程】SpringBoot整合MySQL驱动和Druid连接池

🌈欢迎和毛毛张一起探讨和交流!
联系方式点击下方个人名片
相关文章:
SpringBoot基础概念介绍-数据源与数据库连接池
🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 毛毛张今天介绍的SpringBoot中的基础概念-数据源与数据库连接池,同时介绍SpringBoot整合两种连接池的教程 文章目录 1 数据库与数据库管理系统2 JDBC与数…...
MYSQL 商城系统设计 商品数据表的设计 商品 商品类别 商品选项卡 多表查询
介绍 在开发商品模块时,通常使用分表的方式进行查询以及关联。在通过表连接的方式进行查询。每个商品都有不同的分类,每个不同分类下面都有商品规格可以选择,每个商品分类对应商品规格都有自己的价格和库存。在实际的开发中应该给这些表进行…...
视频网站服务器为什么需要使用负载均衡?
随着视频网站等娱乐活动的逐渐增加,进行使用的用户数量也在不断上升,大量的用户会给视频网站行业带来一定的访问压力,需要处理大量的媒体资料,比如上传视频图片和数据保存发布等内容,会消耗大量的带宽资源,…...
Golang Gin系列-9:Gin 集成Swagger生成文档
文档一直是一项乏味的工作(以我个人的拙见),但也是编码过程中最重要的任务之一。在本文中,我们将学习如何将Swagger规范与Gin框架集成。我们将实现JWT认证,请求体作为表单数据和JSON。这里唯一的先决条件是Gin服务器。…...
docker中运行的MySQL怎么修改密码
1,进入MySQL容器 docker exec -it 容器名 bash 我运行了 docker ps命令查看。正在运行的容器名称。可以看到MySQL的我起名为db docker exec -it db bash 这样就成功的进入到容器中了。 2,登录MySQL中 mysql -u 用户名 -p 回车 密码 mysql -u root -p roo…...
智能汽车网络安全威胁报告
近年来随着智能汽车技术的快速发展,针对智能汽车的攻击也逐渐从传统的针对单一车辆控制器的攻击转变为针对整车智能化服务的攻击,包括但不限于对远程控制应用程序的操控、云服务的渗透、智能座舱系统的破解以及对第三方应用和智能服务的攻击。随着WP.29 …...
[EAI-026] DeepSeek-VL2 技术报告解读
Paper Card 论文标题:DeepSeek-VL2: Mixture-of-Experts Vision-Language Models for Advanced Multimodal Understanding 论文作者:Zhiyu Wu, Xiaokang Chen, Zizheng Pan, Xingchao Liu, Wen Liu, Damai Dai, Huazuo Gao, Yiyang Ma, Chengyue Wu, Bin…...
【腾讯云】腾讯云docker搭建单机hadoop
这里写目录标题 下载jdk hadoop修改hadoop配置编写Dockerfile构建镜像运行镜像创建客户端 下载jdk hadoop wget --no-check-certificate https://repo.huaweicloud.com/java/jdk/8u151-b12/jdk-8u151-linux-x64.tar.gz wget --no-check-certificate https://repo.huaweicloud.…...
【回溯+剪枝】电话号码的字母组合 括号生成
文章目录 17. 电话号码的字母组合解题思路:回溯 哈希表22. 括号生成解题思路:回溯 剪枝 17. 电话号码的字母组合 17. 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 …...
Day29(补)-【AI思考】-精准突围策略——从“时间贫困“到“效率自由“的逆袭方案
文章目录 精准突围策略——从"时间贫困"到"效率自由"的逆袭方案**第一步:目标熵减工程(建立四维坐标)** 与其他学习方法的结合**第二步:清华方法本土化移植** 与其他工具对比**~~第三步:游戏化改造…...
进程间通信
进程间通信 进程间通信介绍 进程间通信⽬的 数据传输:⼀个进程需要将它的数据发送给另⼀个进程 资源共享:多个进程之间共享同样的资源。 通知事件:⼀个进程需要向另⼀个或⼀组进程发送消息,通知它(它们)…...
【PyTorch】6.张量运算函数:一键开启!PyTorch 张量函数的宝藏工厂
目录 1. 常见运算函数 个人主页:Icomi 专栏地址:PyTorch入门 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架,为构建和训练神经网络提供了高效且灵活的平台。神经网络作为人工智能的核心技术&…...
2024年数据记录
笔者注册时间超过98.06%的用户 CSDN 原力是衡量一个用户在 CSDN 的贡献和影响力的系统,笔者原力值超过99.99%的用户 其他年度数据...
hot100(4)
31.437. 路径总和 III - 力扣(LeetCode) 方法一:递归、dfs 由树的结构想到使用递归解决,且路径相关问题容易考虑到使用dfs和bfs. 使用dfs解决,这里关键在于如何设计递归函数。 递归函数的参数:root,tar…...
海浪波高预测(背景调研)
#新星杯14天创作挑战营第7期# ps:图片由通义千问生成 历史工作: 针对更高细粒度、更高精度的波浪高度预测任务: Mumtaz Ali 等人提出了一种多元线性回归模型(MLR-CWLS),该模型利用协方差加权最小二乘法&a…...
C++ 3
delete 和 free 有什么区别? delete和free都是用来释放动态分配的内存,但它们有不同的使用方式: 语法: ○ delete是C中的关键字,用于释放由new分配的对象。 ○ free是C语言中的函数,通常包含在<stdlib…...
【逻辑学导论】1.4论证与说明
许多语段看起来好像是论证,实际上不是论证而是说明。即使有某些前提或结论指示词出现,例如“因为”“由于”“因”“所以”等,也不能解决问题,这些语词既可用在论证中也可用在说明中(虽然“因……”一词有时可以指时间…...
vue3+elementPlus之后台管理系统(从0到1)(day4-完结)
面包屑 创建一个面包屑组件 将路由导入然后格式化map对象 key-value 将当前路由的key和value获取然后存入list数组中 遍历list数据,渲染内容 <!--BreadcrumbCom.vue--> <template><el-breadcrumb separator">"><el-breadcrum…...
Python标准库 - os (2) 进程管理
文章目录 3 进程管理3.1 进程状态和控制3.2 进程优先级3.3 程序段控制3.4 其他 4 创建子进程4.1 创建子进程常见函数4.2 spawn*族函数4.3 exec*族函数 5 子进程管理5.1 创建子进程触发事件5.2 等待子进程执行完5.3 子进程的状态 os模块提供了各种操作系统接口。包括环境变量、进…...
单细胞-第四节 多样本数据分析,下游画图
文件在单细胞\5_GC_py\1_single_cell\2_plots.Rmd 1.细胞数量条形图 rm(list ls()) library(Seurat) load("seu.obj.Rdata")dat as.data.frame(table(Idents(seu.obj))) dat$label paste(dat$Var1,dat$Freq,sep ":") head(dat) library(ggplot2) lib…...
【2024年华为OD机试】(B卷,100分)- 热点网站统计(Java JS PythonC/C++)
一、问题描述 题目描述 企业路由器的统计页面需要动态统计公司访问最多的网页URL的Top N。设计一个算法,能够高效动态统计Top N的页面。 输入描述 每一行都是一个URL或一个数字: 如果是URL,代表一段时间内的网页访问。如果是数字N&#…...
脚本运行禁止:npm 无法加载文件,因为在此系统上禁止运行脚本
问题与处理策略 1、问题描述 npm install -D tailwindcss执行上述指令,报如下错误 npm : 无法加载文件 D:\nodejs\npm.ps1,因为在此系统上禁止运行脚本。 有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_…...
AI软件栈:LLVM分析(一)
文章目录 AI 软件栈后端编译LLVM IRLLVM的相关子项目AI 软件栈后端编译 AI软件栈的后端工作通常与硬件架构直接相关,为了实现一个既能适配现代编程语言、硬件架构发展的目标,所以提出了LLVM具备多阶段优化能力提供基础后端描述,便于进行编译器开发兼容标准编译器的行为LLVM …...
【Elasticsearch】 Intervals Query
Elasticsearch Intervals Query 返回基于匹配术语的顺序和接近度的文档。 intervals 查询使用 匹配规则,这些规则由一小组定义构建而成。这些规则然后应用于指定 field 中的术语。 这些定义生成覆盖文本中术语的最小间隔序列。这些间隔可以进一步由父源组合和过滤…...
Ansys Maxwell:采用对称性的双转子轴向磁通电机
轴向磁通电机因其功率密度高于相同重量的传统径向磁通电机而变得非常受欢迎,并且在电动汽车和航空应用中非常高效且具有成本效益。功率密度是输出功率与机器体积的比率。对于给定尺寸的机器,轴向磁通电机提供更大的扭矩和功率,或者对于给定的…...
你的连接不是专用连接
当你打开网站看到如下提示,说明SSL证书到期了。 攻击者可能试图www窃取你的信息(例如、密码、消息或信用卡)。详细了解此警告 NET::ERR_CERT_DATE_INVALID 此服务器无法证明它是WWW ;它的安全证书已于2天前到期。这可能是错误配置或攻击者…...
CSS核心
CSS的引入方式 内部样式表是在 html 页面内部写一个 style 标签,在标签内部编写 CSS 代码控制整个 HTML 页面的样式。<style> 标签理论上可以放在 HTML 文档的任何地方,但一般会放在文档的 <head> 标签中。 <style> div { color: r…...
AI常见的算法和例子
人工智能(AI)中常见的算法分为多个领域,如机器学习、深度学习、强化学习、自然语言处理和计算机视觉等。以下是一些常见的算法及其用途: 例子代码:纠结哥/pytorch_learn 1. 机器学习 (Machine Learning) 监督学习 (S…...
无公网IP 外网访问 本地部署夫人 hello-algo
hello-algo 是一个为帮助编程爱好者系统地学习数据结构和算法的开源项目。这款项目通过多种创新的方式,为学习者提供了一个直观、互动的学习平台。 本文将详细的介绍如何利用 Docker 在本地安装部署 hello-algo,并结合路由侠内网穿透实现外网访问本地部署…...
【QT】 控件 -- 显示类
🔥 目录 [TOC]( 🔥 目录) 1. 前言 2. 显示类控件2.1 Label 1、显示不同文本2、显示图片3、文本对齐、自动换行、缩进、边距4、设置伙伴 3.2 LCD Number 3.3 ProgressBar 3.4 Calendar Widget 3. 共勉 🔥 1. 前言 之前我在上一篇文章【QT】…...
AI语言模型竞争加剧:新秀崛起 格局生变
标题:AI语言模型竞争加剧:新秀崛起 格局生变 文章信息摘要: AI语言模型领域呈现加速发展和分化态势。在LMSYS排行榜上,Claude 3 Opus超越GPT-4 Turbo,DBRX超越Mixtral成为最佳开源模型,显示领先位置更替频…...
RK3568使用opencv(使用摄像头捕获图像数据显示)
文章目录 一、opencv相关的类1. **cv::VideoCapture**2. **cv::Mat**3. **cv::cvtColor**4. **QImage**5. **QPixmap**总结 二、代码实现 一、opencv相关的类 1. cv::VideoCapture cv::VideoCapture 是 OpenCV 中用于视频捕捉的类,常用于从摄像头、视频文件、或者…...
leetcode——排序链表(java)
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5] 示例 3: …...
Windows安装Miniconda和PySide6以及配置PyCharm
目录 1. 选择Miniconda 2. 下载Miniconda 3. 安装Miniconda 4. 在base环境下创建pyside6环境 5. 安装pyside6环境 6. 配置PyCharm环境 7. 运行第一个程序效果 1. 选择Miniconda 选择Miniconda而没有选择Anaconda,是因为它是一个更小的Anaconda发行版&#x…...
floodfill算法(6题)
本质就是找出性质相似的连通块 目录 1.图像渲染 2.岛屿数量 3.岛屿的最大面积 4.被围绕的区域 5.太平洋大西洋水流问题 6.扫雷游戏 1.图像渲染 733. 图像渲染 - 力扣(LeetCode) 我们使用深度优先遍历去遍历即可,也不需要返回值。 值得…...
Spring集成Redis|通用Redis工具类
一、基础使用 概述 在SpringBoot中一般使用RedisTemplate提供的方法来操作Redis。那么使用SpringBoot整合Redis需要 那些步骤呢。 1、 JedisPoolConfig (这个是配置连接池) 2、 RedisConnectionFactory 这个是配置连接信息,这里的RedisConnectionFactory是一个接 …...
python:洛伦兹变换
洛伦兹变换(Lorentz transformations)是相对论中的一个重要概念,特别是在讨论时空的变换时非常重要。在四维时空的背景下,洛伦兹变换描述了在不同惯性参考系之间如何变换时间和空间坐标。在狭义相对论中,洛伦兹变换通常…...
题单:插入排序
题目描述 给定 n 个元素的数组(下标从1开始计),请使用插入排序对其进行排序(升序)。 输入格式 两行,第一行为一个整数 n,表示元素的个数。 第二行 n 个空格分隔的整数,表示数组的…...
【Spring】Spring启示录
目录 前言 一、示例程序 二、OCP开闭原则 三、依赖倒置原则DIP 四、控制反转IOC 总结 前言 在软件开发的世界里,随着项目的增长和需求的变化,如何保持代码的灵活性、可维护性和扩展性成为了每个开发者必须面对的问题。传统的面向过程或基于类的设计…...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.30 性能巅峰:NumPy代码优化全攻略
1.30 性能巅峰:NumPy代码优化全攻略 目录 #mermaid-svg-CMVXy3CN2tNmW8RJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-CMVXy3CN2tNmW8RJ .error-icon{fill:#552222;}#mermaid-svg-CMVXy3CN2tNmW8RJ …...
C#方法(练习)
1.定义一个函数,输入三个值,找出三个数中的最小值 2.定义一个函数,输入三个值,找出三个数中的最大值 3.定义一个函数,输入三个值,找出三个数中的平均值 4.定义一个函数,计算一个数的 N 次方 Pow(2, 3)返回8 5.传入十一…...
Node.js 的底层原理
Node.js 的底层原理 1. 事件驱动和非阻塞 I/O Node.js 基于 Chrome V8 引擎,使用 JavaScript 作为开发语言。它采用事件驱动和非阻塞 I/O 模型,使其轻量且高效。通过 libuv 库实现跨平台的异步 I/O,包括文件操作、网络请求等。 2. 单线程事…...
react native在windows环境搭建并使用脚手架新建工程
截止到2024-1-11,使用的主要软件的版本如下: 软件实体版本react-native0.77.0react18.3.1react-native-community/cli15.0.1Android Studio2022.3.1 Patch3Android SDKAndroid SDK Platform 34 35Android SDKAndroid SDK Tools 34 35Android SDKIntel x…...
实战:如何快速让新网站被百度收录?
本文来自:百万收录网 原文链接:https://www.baiwanshoulu.com/22.html 要让新网站快速被百度收录,可以采取以下实战策略: 一、网站基础优化 网站结构清晰:确保网站的结构简洁清晰,符合百度的抓取规则。主…...
Nuxt:利用public-ip这个npm包来获取公网IP
目录 一、安装public-ip包1.在Vue组件中使用2.在Nuxt.js插件中使用public-ip 一、安装public-ip包 npm install public-ip1.在Vue组件中使用 你可以在Nuxt.js的任意组件或者插件中使用public-ip来获取公网IP。下面是在一个Vue组件中如何使用它的例子: <template…...
572. 另一棵树的子树
前导题:100. 相同的树 回顾一下 判断两棵二叉树相同,根结点相同 且 左子树相同 且 右子树相同。 于是判断如下: 根结点都为null,返回true根结点不都为null,返回false根结点都不为null,但是值不相同&#…...
LLMs之WebRAG:STORM/Co-STORM的简介、安装和使用方法、案例应用之详细攻略
LLMs之WebRAG:STORM/Co-STORM的简介、安装和使用方法、案例应用之详细攻略 目录 STORM系统简介 1、Co-STORM 2、更新新闻 STORM系统安装和使用方法 1、安装 pip安装 直接克隆GitHub仓库 2、模型和数据集 两个数据集 FreshWiki数据集 WildSeek数据集 支持…...
菜鸟之路Day11-12一一集合进阶(四)
菜鸟之路Day11-12一一集合进阶(四) 作者:blue 时间:2025.1.29-1.30 文章目录 菜鸟之路Day11-12一一集合进阶(四)0.概述1.可变参数2.Collections3.综合练习4.不可变的集合5.Stream流 0.概述 内容学习自黑…...
在Ubuntu下编译VLC
参考链接: https://blog.csdn.net/zyhse/article/details/113662686...
python开发,最好的环境是什么
目录 1. 集成开发环境(IDE) 1.1 PyCharm 1.2 Visual Studio Code (VSCode) 2. 文本编辑器 2.1 Sublime Text 2.2 Vim/NeoVim 3. 虚拟环境管理 4. 版本控制与协作 5. 容器化开发 6. 项目管理与依赖管理工具 7. 单元测试与调试 最佳组合推荐 …...