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

JDBC 数据库连接全解析:从驱动配置到工具类封装

目录

一. 将MySQL对应版本的jar包放入Java项目中

 1. 准备工作

2. 复制到Java项目

二. 获取数据库连接

1. 连接Mysql数据库的URL

2. 连接数据库的用户名

3. 连接数据库的密码

 4. 通过反射实例化

三. Properties文件用法

1. properties文件介绍

2. Properties工具类

a. load( InputStream is )

b. getProperty( String key )

3. 新建Properties文件

4. 解决文件中文问题

5. properties文件写法

四. 使用properties文件优化连接

1. 基本操作

a. 实例化Properties对象

b. 获取读取properties文件的输入流对象

c. 通过给定的输入流对象读取properties文件并解析

d. 获取properties文件中的内容

2. 优化获取数据库连接

a. properties文件内容

b. 获取连接

五. 封装JDBC工具类


前言

本文来讲解,如何获取Java与MySQL的连接以及如何优化数据库的连接并且JDBC的工具类

文章详解,通俗易懂,旨在帮助读者更好的理解和掌握JDBC数据库连接

个人主页:主页

一. 将MySQL对应版本的jar包放入Java项目中

 1. 准备工作

jar:数据库驱动
如果要和数据库通信,就要借助数据库驱动。数据库驱动本质上是一组 Java 类
先在官网下载对应的MySQL的jar包
这里用MySQL5.7版本来演示

可以先通过cmd里,输入mysql --help 来找到自己的MySQL版本

看这个表格,找到自己jdk版本对应的jar,再到官网里下载
 jar包官网传送门:官网

MySQL 版本推荐的 MySQL Connector/J 版本
5.15.1.x
5.55.1.x、5.2.x
5.65.1.x、5.2.x、5.6.x
5.75.1.x、5.2.x、5.6.x、5.7.x
8.05.1.x、5.2.x、5.6.x、5.7.x、8.0.x

5.7版本的,我是下载的5.1.48版本jar包

2. 复制到Java项目

复制对应的jar包

新建一个java项目
新建一个lib目录


单击lib,复制到lib目录


确定后,这个jar包只是放在目录里
现在就要开始将这个变成一个库
右击jar包 ---> 添加到库
这样就可以获取里面的类了

二. 获取数据库连接

1. 连接Mysql数据库的URL

URL格式:jdbc:mysql://[主机名]:[端口号]/[数据库名]?[参数名]=[参数值]
注:每个数据库的写法不一样,这里以MySQL为例

// 连接Mysql数据库的URL
// localhost 代表本机
// 如果没有修改端口号的话,MySQL默认是3360
// YiBeiGen 是数据库名字
String url = "jdbc:mysql//localhosost:3360/YiBeiGen"

2. 连接数据库的用户名

String name = "root";

3. 连接数据库的密码

连接数据库的密码
String passward = "8383";

 4. 通过反射实例化

Class.forName("com.mysql.jdbc.Driver");

这里是要理解的,为什么要反射实例化?
就是因为通过这个反射来加载这个Driver类,目的是为了出发static块
先来看看Driver类

5. 通过DriverManager对象获取数据库的连接对象

// 三个参数分别是
// 1. 连接Mysql数据库的URL
// 2. 连接数据库的用户名
// 3. 连接数据库的密码
// 我们在上面都实现过
Connection connection = DriverManager.getConnection(url, name, pwd);

完整代码

public class JdbcTest {public static void main(String[] args) throws ClassNotFoundException, SQLException {// 连接Mysql数据库的URLString url = "jdbc:mysql://localhost:3306/YiBeiGen";// 连接数据库的用户名String name = "root";// 连接数据库的密码String pwd = "8383";// 通过反射实现数据库驱动的加载与注册// 通过反射实例化// 添加数据库驱动的目的是翻译要执行的sql语句 // 只是加载这个类,目的是为了触发static块// 那么Driver类已经实例化出来了,并且放到了DriverManager当中Class.forName("com.mysql.jdbc.Driver");// 通过DriverManager对象获取数据库的连接对象Connection connection = DriverManager.getConnection(url, name, pwd);System.out.println(connection);}
}

 
输出结果类似这样没有报错就可以
如果报错了,就先检查密码以及数据库名称是否和MySQL的一致
如果一致都还报错,那么就可以在“连接数据库的URL”中再添加一个 “?useSSL=false"

url = "jdbc:mysql://localhost:3306/YiBeiGen?useSSL=false";

三. Properties文件用法

先讲作用:因为用刚刚这种原始的代码写,会出现一个问题,就是硬编码
硬编码:对于可变的内容,写死在代码中,就像刚刚的那个连接数据库的代码,就是一个死的,它的数据库库名字,连接数据库的URL以及密码都是写死的,这就是硬编码
硬编码的缺点就是,后序如果是另一个人用的这个代码,就要修改源代码,这就很麻烦
那么为了解决这个硬编码问题,就可以通过Properties文件来解决

property的英文意思:属性

1. properties文件介绍

后缀properties的文件是一种属性文件。这种文件以key=value格式存储内容
Java中可以使用Properties工具类来读取这个文件
项目中会将一些配置信息放到properties文件中,所以properties文件经常作为配置文件来使用

2. Properties工具类

Properties工具类,位于java.util包中,该工具类继承自Hashtable<Object,Object>
通过Properties工具类可以读取.properties类型的配置文件

Properties工具类中常用方法

a. load( InputStream is )

load英文意思:加载
通过给定的输入流对象读取properties文件并解析

b. getProperty( String key )

根据key获取对应的value

3. 新建Properties文件

右击包 ---> 新建 ---> 文件

在新建文件对话中,新建文件名字
注意:名字可以随意(最好见名知意),扩展名一定要是properties,扩展名都是小写!

4. 解决文件中文问题

我们创建好这个文件后,就可以在里面些内容了
但是因为文件默认编码的原因,里面写不了中文
如果要能写中文就要先做以下操作

a. 打开Idea的设置

a. 编辑器 ---> 文件编码 ---> 将编码改成GBK编码

修改成GBK中文编码就可以了

5. properties文件写法

这里我创建一个名为:test.properties 的文件
#号是注释

# 欢迎来到艺杯羹的阵地
key1 = 艺杯羹
key2 = LY

四. 使用properties文件优化连接

1. 基本操作

  • PropertiesTest:属性测试

  • class:类

  • getClassLoader:获取类加载器

  • getResourceAsStream:获取资源作为流

a. 实例化Properties对象

 Properties prop = new Proerties();

b. 获取读取properties文件的输入流对象

  • PropertiesTest:属性测试

  • class:类

  • getClassLoader:获取类加载器

  • getResourceAsStream:获取资源作为流

InputStream is = PropertiesTest.class.getClassLoader().getResourceAsStream("test.properties");

c. 通过给定的输入流对象读取properties文件并解析

prop.load(is);

d. 获取properties文件中的内容

String value1 = prop.getProperty("key1");
String value2 = prop.getProperty("key2");
System.out.println(value1+" "+value2);


就能够得到key对应的value值

2. 优化获取数据库连接

将连接数据库时所需要的信息存放到properties文件中,可以解决硬编码的问题
所以可以将这些可变的内容,抽取出来放在一个文件中
之后获取数据时,就从文件里获取不就好了
本次就是使用properties文件来优化硬编码问题

可以将以下四处写入properties文件中

a. properties文件内容

#连接Mysql数据库的URL
#jdbc:mysql://连接主机:端口号/数据库名
url=jdbc:mysql://localhost:3306/student
#连接数据库的用户名
username=root
#连接数据库的密码
pwd=3057454077
#数据库驱动名称
driver=com.mysql.jdbc.Driver

b. 获取连接

public class Student {public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {// 实例化Properties对象Properties prop = new Properties();// 获取读取properties文件的字节输入流对象InputStream is = JdbcTest2.class.getClassLoader().getResourceAsStream("jdbc.properties");// 读取properties文件并解析prop.load(is);// 获取连接数据库的urlString url = prop.getProperty("url");// 获取连接数据库的用户名String name = prop.getProperty("username");// 获取连接数据库的密码String pwd = prop.getProperty("pwd");// 获取数据库驱动全名String drivername = prop.getProperty("driver");// 加载并注册驱动,获得DriverManagerClass.forName(drivername);// 通过驱动管理器对象获取连接对象Connection connection = DriverManager.getConnection(url, name, pwd);System.out.println(connection);}
}

五. 封装JDBC工具类

经过刚刚的学习,JDBC一次性的创建连接还是有点麻烦的,那么可以将这个连接的方法封装成一个JDBC工具类,这样之后用就能得心应手了,不会一遍又一遍的去做重复的连接

封装的工具类有两个要求要注意的

工具方法一般定义成静态的
因为直接可以通过类名点方法,这样就更快速,更好
工具类的方法不要抛出异常,直接try - catch

因为增强健壮来统一处理

JdbcUtil工具类

public class JdbcUtils {private static String url;private static String name;private static String pwd;static {try{// 实例化Properties对象Properties prop = new Properties();// 获取读取properties文件的字节输入流对象InputStream is = JdbcTest2.class.getClassLoader().getResourceAsStream("jdbc.properties");// 读取properties文件并解析prop.load(is);// 获取连接数据库的urlurl = prop.getProperty("url");// 获取连接数据库的用户名name = prop.getProperty("username");// 获取连接数据库的密码pwd = prop.getProperty("pwd");// 获取数据库驱动全名String drivername = prop.getProperty("driver");// 加载并注册驱动Class.forName(drivername);}catch(Exception e){e.printStackTrace();}}// 获取数据库连接对象public static Connection getConnection(){Connection connection = null;try {connection = DriverManager.getConnection(url,name,pwd);} catch (SQLException throwables) {throwables.printStackTrace();}return connection;}// 关闭连接对象public static void closeConnection(Connection connection){try {connection.close();} catch (SQLException throwables) {throwables.printStackTrace();}}// 提交事务public static void commit(Connection connection){try {connection.commit();} catch (SQLException throwables) {throwables.printStackTrace();}}// 事务回滚public static void rollback(Connection connection){try {connection.rollback();} catch (SQLException throwables) {throwables.printStackTrace();}}// 关闭Statement对象public static void closeStatement(Statement statement){try {statement.close();} catch (SQLException throwables) {throwables.printStackTrace();}}// 关闭ResultSetpublic static void closeResultSet(ResultSet resultSet) {try {resultSet.close();} catch (SQLException throwables) {throwables.printStackTrace();}}// DML操作时关闭资源public static void closeResource(Statement statement,Connection connection){// 先关闭Statement对象// 刚刚写的方法closeStatement(statement);//在关闭Connection对象closeConnection(connection);}// 查询时关闭资源public static void closeResource(ResultSet resultSet,Statement statement,Connection connection){// 先关闭ResultSetcloseResultSet(resultSet);// 再闭Statement对象closeStatement(statement);// 最后关闭Connection对象closeConnection(connection);}
}

为什么要将Properties的操作放在静态块中?
因为Properties文件是一开始就要使用的,那么只有静态块最符合他,当使用了这个类时,最先是执行Properties文件,先获取Properties文件中的值,这样就可以更好的创建连接

这里除了连接数据库的方法,还写出了提交事务、事务回滚、关闭等操作,这些在之后都是会用到的,所以先按这个方法封装一个JDBC工具类

到现在已经讲解完了JDBC获取数据库连接的方法和properties的使用以及JDBC封装的工具类
希望本文能够帮助到你😊

相关文章:

JDBC 数据库连接全解析:从驱动配置到工具类封装

目录 一. 将MySQL对应版本的jar包放入Java项目中 1. 准备工作 2. 复制到Java项目 二. 获取数据库连接 1. 连接Mysql数据库的URL 2. 连接数据库的用户名 3. 连接数据库的密码 4. 通过反射实例化 三. Properties文件用法 1. properties文件介绍 2. Properties工具类 a.…...

【图片识别分类】如何快速识别照片中的水印文字,对图片进行关键字分类,快速整理水印相机拍摄图片,基于WPF和腾讯OCR的技术实现

项目背景 在施工现场&#xff0c;施工人员通常会使用水印相机拍摄照片&#xff0c;这些照片带有时间、地点、施工阶段等水印信息。为了便于管理和归档&#xff0c;需要快速识别照片中的水印文字&#xff0c;并根据关键字对照片进行分类和整理。 界面设计 界面设计简洁直观&…...

第32讲:卫星遥感与深度学习融合 —— 让地球“读懂”算法的语言

目录 🔍 一、讲讲“遥感+深度学习”到底是干啥的? ✅ 能解决什么问题? 🧠 二、基础原理串讲:深度学习如何“看懂”遥感图? 🛰 遥感图像数据类型: 🧠 CNN的基本思路: 🧪 三、实战案例:用CNN对遥感图像做地类分类 📦 所需R包: 🗂️ 步骤一:构建训…...

Java 静态变量、静态方法及工具类介绍

目录 一、静态变量&#xff08;Static Variables&#xff09; 1. 基本概念 2. 核心特性 (1)类级别共享 (2)生命周期 (3)内存分配 3. 使用方法 (1)访问方式 (2)初始化时机 4. 典型应用场景 (1)共享常量 (2)计数器功能 (3)配置信息 二、静态方法&#xff08;Static …...

【win 1】win 右键菜单添加 idea pycharm vscode trae 打开文件夹

编程时经常需要通过 程序 打开文件夹&#xff0c;有时安装时没注意选上添加到右键菜单&#xff0c;又不想重新安装&#xff0c;有什么方法&#xff1f; 之前教程都是改注册表有点繁琐&#xff0c;这里利用开源的 windows 右键管理软件&#xff0c;可以快捷简单的添加。 右键菜…...

XSS跨站脚本攻击漏洞

目录 一、基本概念 二、XSS分类 1、反射型XSS 2、存储型XSS 3、DOM型XSS 三、手工测试 1、反射型XSS漏洞 &#xff08;1&#xff09;安全等级low &#xff08;2&#xff09;DOM的XSS &#xff08;3&#xff09;安全等级medium &#xff08;4&#xff09;安全等级hig…...

TensorFlow 实现 Mixture Density Network (MDN) 的完整说明

本文档详细解释了一段使用 TensorFlow 构建和训练混合密度网络&#xff08;Mixture Density Network, MDN&#xff09;的代码&#xff0c;涵盖数据生成、模型构建、自定义损失函数与预测可视化等各个环节。 1. 导入库与设置超参数 import numpy as np import tensorflow as t…...

servlet-服务器内部转发和客户端重定向

服务器内部转发以及客户端重定向 服务器内部转发以及客户端重定向1&#xff09;服务器内部转发&#xff1a;request.getRequestDispatcher("...").forward(request,response);--- 一次请求响应的过程&#xff0c;对于客户端而言&#xff0c;内部转发多少次&#xff…...

手动实现LinkedList

前言 大家好&#xff0c;我是Maybe。最近在学习数据结构中的链表&#xff0c;自己手动实现了一个LinkedList。我想与大家分享一下。 思维导图 代码部分 package Constant;public class constant {public static final String INDEX_IS_WRONG"输入的下标不合法"; }p…...

实现AWS Step Function安全地请求企业内部API返回数据

需要编写一个Step Function在AWS云上运行&#xff0c;它需要访问企业内部的API获取JSON格式的数据&#xff0c;企业有网关和防火墙&#xff0c;API有公司的okta身份认证&#xff0c;通过公司的域账号来授权访问&#xff0c;现在需要创建一个专用的域账号&#xff0c;让Step Fun…...

掌握 MySQL:从命令行操作到数据类型与字段管理

掌握 MySQL&#xff1a;从命令行操作到数据类型与字段管理 MySQL 作为全球最流行的开源关系型数据库管理系统&#xff0c;广泛应用于 Web 开发、数据分析和企业级应用中。无论是初学者还是资深开发者&#xff0c;掌握 MySQL 的基本命令行操作、了解其数据库类型、数据类型、字…...

基于大语言模型的自动化单元测试生成系统及测试套件评估方法

A System for Automated Unit Test Generation Using Large Language Models and Assessment of Generated Test Suites 翻译于上述论文 基于大语言模型的自动化单元测试生成系统及测试套件评估方法 摘要 单元测试是软件测试生命周期中最基础的测试层级&#xff0c;对确保软…...

使用vue2技术写了一个纯前端的静态网站商城-鲜花销售商城

先给大家看一下网站的整体效果截图&#xff1a; 这个前端静态网站项目主要实现了以下功能&#xff1a; 商城首页、商品分类页、登录注册页、个人中心页、我的收藏页、我的订单页、商品详情页等功能。 最近不是在学习前端开发嘛&#xff0c;肯定要做一些项目来练习以下自己学…...

PyTorch深度学习框架60天进阶学习计划 - 第46天:自动化模型设计(一)

PyTorch深度学习框架60天进阶学习计划 - 第46天&#xff1a;自动化模型设计&#xff08;一&#xff09; 第一部分&#xff1a;使用ENAS算法生成图像分类网络 大家好&#xff01;欢迎来到我们PyTorch深度学习框架60天进阶学习计划的第46天。今天我们要深入探讨一个话题——使用…...

【上海大学计算机系统结构实验报告】多机环境下MPI并行编程

实验目的 学习编制多进程并行程序实现如下功能&#xff1a; 创建多进程&#xff0c;输出进程号和进程数。运行多进程并行例子程序。编程实现大规模矩阵的并行计算。 实验过程及结果分析 实验环境 操作系统&#xff1a;Ubuntu 20.04开发工具&#xff1a;GCC 9.3.0、OpenMPI…...

实用电脑工具,轻松实现定时操作

软件介绍 如果你的电脑有时候需要像个听话的小助手一样&#xff0c;按照你的指令在特定时间做些事情&#xff0c;比如到了点就关机、开机&#xff0c;或者自动打开某个软件&#xff0c;那你可得了解下这个小帮手啦&#xff01; 小巧功能却不少 程序定时器是一款超实用的电脑…...

jQuery — 动画和事件

介绍 jQuery动画与事件是提升网页交互的核心工具。动画方面&#xff0c;jQuery通过简洁API实现平滑过渡效果&#xff0c;提供预设方法如slideUp()&#xff0c;支持.animate()自定义CSS属性动画&#xff0c;并内置队列系统实现动画链式执行。开发者可精准控制动画速度、回调时机…...

Kubernetes相关的名词解释kube-proxy插件(3)

什么是kube-proxy&#xff1f; kube-proxy 是一个网络代理组件&#xff0c;运行在每个节点&#xff08;Node&#xff09;上&#xff0c;是 Kubernetes 服务&#xff08;Service&#xff09;功能的核心实现之一。它的主要职责是通过维护网络规则&#xff0c;实现集群内服务&…...

第3章 垃圾收集器与内存分配策略《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》

第3章 垃圾收集器与内存分配策略 3.2 对象已死 Java世界中的所有对象实例&#xff0c;垃圾收集器进行回收前就是确定对象哪些是活着的&#xff0c;哪些已经死去。 3.2.1 引用计数算法 常见的回答是&#xff1a;给对象中添加一个引用计数器&#xff0c;有地方引用&#xff0…...

MCP是什么?为什么突然那么火?

什么是MCP? MCP全称为Model Context Protocol&#xff08;模型上下文协议&#xff09;&#xff0c;是由Anthropic公司在2024年11月推出的一个开源协议。Anthropic是一家以其开发的Claude大语言模型而闻名的公司。MCP旨在提供一个通用的开放标准&#xff0c;以简化大型语言模型…...

与终端同居日记:Linux指令の进阶撩拨手册

前情提要&#xff1a; 当你和终端的关系从「早安打卡」进阶到「深夜代码同居」&#xff0c;那些曾经高冷的指令开始展露致命の反差萌—— man 是那个永远在线的钢铁直男说明书&#xff0c;只会说&#xff1a;"想懂我&#xff1f;自己看文档&#xff01;"&#xff08…...

STM32单片机入门学习——第42节: [12-2] BKP备份寄存器RTC实时时钟

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.19 STM32开发板学习——第42节: [12-2] BKP备份寄存器&RTC实时时钟 前言开发板说…...

AI 驱动抗生素发现:从靶点到化合物测试

AI 驱动抗生素发现:从靶点到化合物测试 目录 基于 AI 驱动的研发流程发现抗生素,整合靶点选择和深度学习分子生成,显著提升了候选药物发现效率。结合数据平衡技术,机器学习和 AutoML 能有效提升不平衡数据集分类性能。RibbonFold 是一种新的 AI 模型,可以准确预测淀粉样蛋…...

群晖威联通飞牛等nas如何把宿主机硬盘挂接到可道云docker容器中

可道云系统是用户常用的一款面向个人用户的轻量级私有云存储工具&#xff0c;以高效管理和安全存储为核心&#xff0c;打造便捷的数字化办公体验。但是用户希望把原有其他磁盘中文件挂接到这个新系统中有很大的难度,主要是对linux文件系统理解有很大的误区,认为目录结构是固定的…...

用 R 语言打造交互式叙事地图:讲述黄河源区生态变化的故事

目录 🌟 项目背景:黄河源头的生态变迁 🧰 技术栈介绍 🗺️ 最终效果预览 💻 项目构建步骤 1️⃣ 数据准备 2️⃣ 构建 Leaflet 地图 3️⃣ 使用 scrollama 实现滚动触发事件 4️⃣ 使用 R Markdown / Quarto 打包发布 🎬 效果展示截图 📦 完整代码仓库 …...

opencv(双线性插值原理)

双线性插值是一种图像缩放、旋转或平移时进行像素值估计的插值方法。当需要对图像进行变换时&#xff0c;特别是尺寸变化时&#xff0c;原始图像的某些像素坐标可能不再是新图像中的整数位置&#xff0c;这时就需要使用插值算法来确定这些非整数坐标的像素值。 双线性插值的工…...

Flutter 弹窗队列管理:实现一个线程安全的通用弹窗队列系统

在开发复杂的 Flutter 应用时&#xff0c;弹窗的管理往往是一个令人头疼的问题。尤其是在多个弹窗需要按顺序显示&#xff0c;或者弹窗的显示需要满足特定条件时&#xff0c;手动管理弹窗的显示和隐藏不仅繁琐&#xff0c;还容易出错。为了解决这个问题&#xff0c;我们可以实现…...

Linux压缩与解压命令完全指南:tar.gz、zip等格式详解

Linux压缩与解压命令完全指南&#xff1a;tar.gz、zip等格式详解 在Linux系统中&#xff0c;文件压缩和解压是日常操作中不可或缺的一部分。本文将全面介绍Linux下常用的压缩和解压命令&#xff0c;包括tar.gz、tar、zip等格式的区别和使用方法&#xff0c;帮助你高效管理文件…...

doris/clickhouse常用sql

一、doris常用SQL 1、doris统计数据库的总大小&#xff08;单位&#xff1a;MB&#xff09; SELECT table_schema AS database_name,ROUND(SUM(data_length) / 1024 / 1024, 2) AS database_size_MB FROM information_schema.tables WHERE table_schema NOT IN (information…...

实现AWS Lambda函数安全地请求企业内部API返回数据

需要编写一个Lambda函数在AWS云上运行&#xff0c;它需要访问企业内部的API获取JSON格式的数据&#xff0c;企业有网关和防火墙&#xff0c;API有公司的okta身份认证&#xff0c;通过公司的域账号来授权访问&#xff0c;现在需要创建一个专用的域账号&#xff0c;让Lambda函数访…...

【Easylive】Interact与Web服务调用实例及网关安全拦截机制解析

【Easylive】项目常见问题解答&#xff08;自用&持续更新中…&#xff09; 汇总版 easylive-cloud-interacteasylive-cloud-web 1. 不同服务&#xff08;web和interact&#xff09;之间的调用方式 调用流程 • 角色分工&#xff1a; • easylive-cloud-web&#xff1a;作…...

【HDFS】EC重构过程中的校验功能:DecodingValidator

一、动机 DecodingValidator是在HDFS-15759中引入的一个用于校验EC数据重构正确性的组件。 先说下引入DecodingValidator的动机,据很多已知的ISSUE(如HDFS-14768, HDFS-15186, HDFS-15240,这些目前都已经fix了)反馈, EC在重构的时候可能会有各种各样的问题,导致数据错误…...

Chromium 134 编译指南 macOS篇:编译优化技巧(六)

1. 引言 在Chromium 134的开发过程中&#xff0c;优化编译速度是提升开发效率的关键因素。本文将重点介绍如何使用ccache工具来加速C/C代码的编译过程&#xff0c;特别是在频繁切换分支和修改代码时。通过合理配置和使用这些工具&#xff0c;您将能够显著减少编译时间&#xf…...

FPGA——基于DE2_115实现DDS信号发生器

FPGA——基于DE2_115实现DDS信号发生器 文章目录 FPGA——基于DE2_115实现DDS信号发生器一、实验要求二、实现过程&#xff08;1&#xff09;新建工程 二、波形存储器ROM&#xff08;1&#xff09;方波模块&#xff08;2&#xff09;正弦波形存储器&#xff08;3&#xff09;锁…...

PHP中的ReflectionClass讲解【详细版】

快餐&#xff1a; ReflectionClass精简版 在PHP中&#xff0c;ReflectionClass是一个功能强大的反射类&#xff0c;它就像是一个类的“X光透视镜”&#xff0c;能让我们在程序运行时深入了解类的内部结构和各种细节。 一、反射类的基本概念和重要性 反射是指在程序运行期间获…...

嵌入式面试题解析:常见基础知识点详解

在嵌入式领域的面试中&#xff0c;基础知识点的考察尤为重要。下面对一些常见面试题进行详细解析&#xff0c;帮助新手一步步理解。 一、原码、反码、补码及补码的好处 题目 什么叫原码、反码、补码&#xff1f;计算机学科引入补码有什么好处&#xff1f; 在计算机科学中&a…...

GPU渲染阶段介绍+Shader基础结构实现

GPU是什么 &#xff08;CPU&#xff09;Center Processing Unit:逻辑编程 &#xff08;GPU&#xff09;Graphics Processing Unit&#xff1a;图形处理&#xff08;矩阵运算&#xff0c;数据公式运算&#xff0c;光栅化&#xff09; 渲染管线 渲染管线也称为渲染流水线&#x…...

08-DevOps-向Harbor上传自定义镜像

harbor创建完成&#xff0c;往harbor镜像仓库中上传自定义的镜像&#xff0c;包括新建项目、docker配置镜像地址、镜像重命名、登录harbor、推送镜像这几个步骤&#xff0c;具体操作如下&#xff1a; harbor中新建项目 访问级别公开&#xff0c;代表任何人都可以拉取仓库中的镜…...

C++学习之路,从0到精通的征途:vector类的模拟实现

目录 一.vector的介绍 二.vector的接口实现 1.成员变量 2.迭代器 &#xff08;1&#xff09;begin &#xff08;2&#xff09;end 3.容量操作 &#xff08;1&#xff09;size&#xff0c;capacity &#xff08;2&#xff09;reserve &#xff08;3&#xff09;resize…...

嵌入式软件--stm32 DAY 2

大家学习嵌入式的时候&#xff0c;多多学习用KEIL写代码&#xff0c;虽然作为编译器&#xff0c;大家常用vscode等常用工具关联编码&#xff0c;但目前keil仍然是主流工具之一&#xff0c;学习掌握十分必要。 1.再次创建项目 1.1编译器自动生成文件 1.2初始文件 这样下次创建新…...

多模态大语言模型arxiv论文略读(二十九)

Temporal Insight Enhancement: Mitigating Temporal Hallucination in Multimodal Large Language Models ➡️ 论文标题&#xff1a;Temporal Insight Enhancement: Mitigating Temporal Hallucination in Multimodal Large Language Models ➡️ 论文作者&#xff1a;Li Su…...

【人工智能学习-01-01】20250419《数字图像处理》复习材料的word合并PDF,添加页码

前情提要 20250419今天是上师大继续教育人工智能专升本第一学期的第一次线下课。 三位老师把视频课的内容提炼重点再面授。&#xff08;我先看了一遍视频&#xff0c;但是算法和图像都看不懂&#xff0c;后来就直接挂分刷满时间&#xff0c;不看了&#xff09; 今天是面对面授…...

B端APP设计:打破传统限制,为企业开启便捷新通道

B端APP设计&#xff1a;打破传统限制&#xff0c;为企业开启便捷新通道 在数字化转型浪潮中&#xff0c;企业级移动应用正突破传统管理系统的功能边界&#xff0c;演变为连接产业链各环节的核心枢纽。本文从技术架构革新、交互模式进化、安全防护升级三个维度&#xff0c;系统…...

【多线程5】面试常考锁知识点

文章目录 悲观/乐观锁挂起等待锁/自旋锁偏向锁轻量级/重量级锁锁升级CASCAS引发的ABA问题解决方案 原子类 公平/不公平锁可重入锁ReentrantLock读写锁 Callable接口 这里的“悲观”“乐观”“挂起等待”“自旋”“轻量级”“重量级”“公平”“非公平”“可重入”仅代表某个锁的…...

Linux第一个系统程序——进度条

1.回车与换行 回车&#xff08;CR, \r&#xff09;&#xff1a; 作用&#xff1a;将光标移动到当前行的行首&#xff08;最左侧&#xff09;&#xff0c;但不换到下一行。 历史来源&#xff1a;源自打字机的“回车”操作——打字机的滑架&#xff08;Carriage&#xff09;需…...

C 语 言 --- 指 针 3

C 语 言 --- 指 针 3 函 数 指 针函 数 指 针 数 组代 码 解 释回 调 函 数 - - - qsort模 拟 实 现 qsort 函 数 总结 &#x1f4bb;作 者 简 介&#xff1a;曾 与 你 一 样 迷 茫&#xff0c;现 以 经 验 助 你 入 门 C 语 言 &#x1f4a1;个 人 主 页&#xff1a;笑口常开x…...

蓝桥杯之递归

1.数字三角形 题目描述 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径&#xff0c;把路径上面的数加起来可以得到一个和&#xff0c;你的任务就是找到最大的和&#xff08;路径上的每一步只可沿左斜线向下或右斜线向下走&#xff09;。 输…...

学习笔记十八——Rust 封装

&#x1f9f1; Rust 封装终极指南&#xff1a;结构体、模块、Trait、目录结构与模块引用 &#x1f9ed; 目录导航 什么是封装&#xff1f;Rust 的封装理念Rust 的封装工具总览模块&#xff08;mod&#xff09;和访问控制&#xff08;pub&#xff09;详解结构体和枚举&#xff…...

【面试向】点积与注意力机制,逐步编码理解自注意力机制

点积&#xff08;dot product&#xff09;两个向量点积的数学公式点积&#xff08;dot product&#xff09;与 Attention 注意力机制&#xff08;Attention&#xff09;注意力机制的核心思想注意力机制中的缩放点积自注意力机制中&#xff0c;谁注意谁&#xff1f; 逐步编码理解…...

基础数学知识-线性代数

1. 矩阵相乘 c i j = a i k ∗ b k j c_{ij} = a_{ik} * b_{kj} cij​=aik​∗bkj​ 1. 范数 1. 向量的范数 任意一组向量设为 x ⃗ = ( x 1 , x 2 , . . . , x N ) \vec{x}=(x_1,x_2,...,x_N) x =(x1​,x2​,...,xN​) 如下: 向量的1范数: 向量的各个元素的绝对值之和∥ …...