数据库入门
基本概念
数据库:DataBase简称DB,是一个用于存储和管理数据的仓库。
就像我们每天访问的网站Bilibili,OA、ERP和CRM等内部管理系统,以及我们每天使用的腾讯新闻和Tiktok应用程序一样,我们看到的数据实际上存储在数据库中。最后,这些数据只显示在浏览器或应用程序中,最终数据的存储和管理由数据库负责。
数据存储在数据库中,那么我们如何操作数据库和存储在其中的数据呢?
这将涉及一个软件:数据库管理系统(DBMS)
DBMS是一种用于操作和管理数据库的大型软件。只需操作此软件即可操作和管理数据库。
但是DBMS如何知道要对哪个数据库和数据进行操作呢?是修改还是查询数据?
因此,我们需要向DBMS软件发送一条指令,告诉它我们想执行什么样的操作以及对哪些数据进行操作
在介绍 Mysql的数据模型之前,需要先了解以下概念。
关系数据库系统
概念:基于关系模型,由多个相互连接的二维表组成的数据库。
所谓二维表是指由行和列组成的表,如下所示:
二维表格的优点:
使用表以统一格式存储数据,便于维护。
使用SQL语言操作,标准化,易于使用,适用于复杂查询。
结论:基于二维表存储数据的数据库变成了关系数据库。如果它不是一个基于二维表存储数据的数据库,那么它就是一个非关系型数据库。
数据模型
在介绍了关系数据库之后,让我们来看看数据是如何存储在MySQL数据库中的,这就是MySQL数据模型。
MySQL是一个基于二维表存储数据的关系数据库。具体结构图如下:
通过MySQL客户端连接到数据库管理系统DBMS,然后通过DBMS操作数据库。
使用MySQL客户端,向数据库管理系统发送SQL语句,数据库管理系统将根据SQL语句指令对数据库中的表结构和数据进行操作。
可以在数据库服务器中创建多个数据库,数据库也可以包含多个表,每个表包含多行记录。
SQL
SQL:结构化查询语言。一种用于操作关系数据库的编程语言,它定义了操作所有关系数据库的统一标准。
在学习特定的SQL语句之前,让我们先了解SQL语言的语法。
SQL通用语法
1.SQL语句可以写在一行或多行上,并以分号结尾。
2.SQL语句可以使用空格/缩进来增强可读性。
3.MySQL数据库中的SQL语句不区分大小写。
4.注释:
单行注释:--注释内容或#注释内容(MySQL特定)
多行评论:/*评论内容*/
以上是SQL语句的一般语法。目前,每个人都清楚地了解这些通用语法。当我们稍后解释每种类型的SQL语句时,我们还将强调一般语法。
SQL分类
SQL语句根据其功能被分为四大类:DDL、DML、DQL、DCL
分类 全称 说明
DDL Data Definition Language 数据定义语言,用来定义数据库对象(数据库,表,字段)
DML Data Manipulation Language 数据操作语言,用来对数据库表中的数据进行增删改
DQL Data Query Language 数据查询语言,用来查询数据库中表的记录
DCL Data Control Language 数据控制语言,用来创建数据库用户、控制数据库的访问权限
项目开发流程
需求文件:
在我们开发项目或项目中的模块之前,我们将首先收到产品经理提供的页面原型和需求文档。
设计:
在收到产品原型和需求文档后,我们的第一步不是编码,而是设计项目,包括概要设计、详细设计、界面设计、数据库设计等。
基于产品原型和需求文档,数据库设计应分析每个模块中涉及的表结构、表结构之间的关系以及表结构的详细信息。最终,我们需要设计和创建数据库以及其中的表结构。
开发/测试:
根据页面原型和需求进行编码,以实现业务功能。在这个过程中,我们需要操作设计的数据库表结构来完成添加、删除、修改和查询等业务操作。
在线部署:
项目的功能开发和测试完成后,可以启动和运行项目。如果项目在后期遇到性能瓶颈,它仍然需要优化。优化的一个重要部分是数据库优化,包括在数据库中建立索引、优化SQL以及执行分区数据库和表等操作。
在上述过程中,对于数据库,主要包括三个阶段:
数据库设计阶段
基于页面原型和需求文档设计数据库表结构.
数据库操作阶段
根据业务功能的实现,编写SQL语句来执行数据表中的添加、删除、修改和查询数据等操作.
数据库优化阶段
通过数据库优化提高数据库访问性能。优化方法:索引、SQL优化、分片和表分区等。
数据库操作
我们在进行数据库设计,需要使用到刚才所介绍SQL分类中的DDL语句。
DDL英文全称是Data Definition Language(数据定义语言),用来定义数据库对象(数据库、表)。
DDL中数据库的常见操作:查询、创建、使用、删除。
查询数据库
查询所有数据库:
show databases;
查询当前数据库:
select database();
我们要操作某一个数据库,必须要切换到对应的数据库中。
通过指令:select database() ,就可以查询到当前所处的数据库.
创建数据库
语法:
create database [ if not exists ] 数据库名;
案例: 创建一个itcast数据库。
create database itcast;
注意:在同一个数据库服务器中,不能创建两个名称相同的数据库,否则将会报错。
可以使用if not exists来避免这个问题
数据库不存在,则创建该数据库;如果存在则不创建
create database if not extists itcast;
使用数据库
语法:
use 数据库名 ;
我们要操作某一个数据库下的表时,就需要通过该指令,切换到对应的数据库下,否则不能操作。
案例:切换到itcast数据
use itcast;
删除数据库
语法:
drop database [ if exists ] 数据库名 ;
如果删除一个不存在的数据库,将会报错。
可以加上参数 if exists ,如果数据库存在,再执行删除,否则不执行删除。
案例:删除itcast数据库
drop database if exists itcast;
itcast数据库存在时删除
说明:上述语法中的database,也可以替换成 schema
如:create schema db01;
如:show schemas;
图形化工具
介绍
先前我们解释了DDL中与数据库操作相关的SQL语句。当我们编写这些SQL语句时,它们都是在命令行上完成的。在实践中,可能还会在命令行上键入这些SQL语句非常不方便,主要有以下三个原因:
没有代码提示。(仅依靠内存,很容易输入错误的字母并导致执行错误)
操作繁琐,影响开发效率。(所有函数操作都是通过SQL语句完成的)
无法保存已编写的SQL代码。
在项目开发中,为了提高开发效率,通常使用现有的图形管理工具来操作数据库。
目前MySQL主流的图形化界面工具DataGrip。
连接数据库
1、打开IDEA自带的Database
2、配置MySQL
3、输入相关信息
4、下载MySQL连接驱动
5、测试数据库连接
6、保存配置
默认情况下,连接上了MySQL数据库之后, 数据库并没有全部展示出来。 需要选择要展示哪些数据库。具体操作如下:
创建数据库
有了图形化界面工具后,就可以方便的使用图形化工具:创建数据库,创建表、修改表等DDL操作。
其实工具底层也是通过DDL语句操作的数据库,只不过这些SQL语句是图形化界面工具帮我们自动完成的。
查看所有数据库
表操作
学习完了DDL语句当中关于数据库的操作之后,接下来我们继续学习DDL语句当中关于表结构的操作。
关于表结构的操作也是包含四个部分:创建表、查询表、修改表、删除表。
创建
语法
create table 表名(
字段1 字段1类型 [约束] [comment 字段1注释 ],
字段2 字段2类型 [约束] [comment 字段2注释 ],
......
字段n 字段n类型 [约束] [comment 字段n注释 ]
)
[ comment 表注释 ] ;
[ ] 中的内容为可选参数; 最后一个字段后面没有逗号
案例:创建tb_user表
对应的结构如下:
-
id 是一行数据的唯一标识
-
username 用户名字段是非空且唯一的
-
name 姓名字段是不允许存储空值的
-
gender 性别字段是有默认值,默认为男
-
建表语句:
-
create table tb_user (
id int comment 'ID,唯一标识', # id是一行数据的唯一标识(不能重复)
username varchar(20) comment '用户名',
name varchar(10) comment '姓名',
age int comment '年龄',
gender char(1) comment '性别'
) comment '用户表';
约束
概念:所谓约束就是作用在表中字段上的规则,用于限制存储在表中的数据。
作用:就是来保证数据库当中数据的正确性、有效性和完整性。
在MySQL数据库当中,提供了以下5种约束:
约束 描述 关键字
非空约束 限制该字段值不能为null not null
唯一约束 保证字段的所有数据都是唯一、不重复的 unique
主键约束 主键是一行数据的唯一标识,要求非空且唯一 primary key
默认约束 保存数据时,如果未指定该字段值,则采用默认值 default
外键约束 让两张表的数据建立连接,保证数据的一致性和完整性 foreign key
注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。
案例:创建tb_user表
在上述的表结构中:
id 是一行数据的唯一标识
username 用户名字段是非空且唯一的
name 姓名字段是不允许存储空值的
gender 性别字段是有默认值,默认为男
建表语句:
create table tb_user (id int primary key comment 'ID,唯一标识', username varchar(20) not null unique comment '用户名',name varchar(10) not null comment '姓名',age int comment '年龄',gender char(1) default '男' comment '性别'
) comment '用户表';
数据表创建完成,接下来测试一下表中字段上的约束是否生效
大家有没有发现一个问题:id字段下存储的值,如果由我们自己来维护会比较麻烦(必须保证值的唯一性)。MySQL数据库为了解决这个问题,给我们提供了一个关键字:auto_increment(自动增长)
主键自增:auto_increment
每次插入新的行记录时,数据库自动生成id字段(主键)下的值
具有auto_increment的数据列是一个正数序列开始增长(从1开始自增)
create table tb_user (
id int primary key auto_increment comment 'ID,唯一标识', #主键自动增长
username varchar(20) not null unique comment '用户名',
name varchar(10) not null comment '姓名',
age int comment '年龄',
gender char(1) default '男' comment '性别'
) comment '用户表';
测试:主键自增
数据类型
在上面建表语句中,我们在指定字段的数据类型时,用到了int 、varchar、char,那么在MySQL中除了以上的数据类型,还有哪些常见的数据类型呢? 接下来,我们就来详细介绍一下MySQL的数据类型。
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
数值类型
类型 大小 有符号(SIGNED)范围 无符号(UNSIGNED)范围 描述
TINYINT 1byte (-128,127) (0,255) 小整数值
SMALLINT 2bytes (-32768,32767) (0,65535) 大整数值
MEDIUMINT 3bytes (-8388608,8388607) (0,16777215) 大整数值
INT/INTEGER 4bytes (-2147483648,2147483647) (0,4294967295) 大整数值
BIGINT 8bytes (-2^63,2^63-1) (0,2^64-1) 极大整数值
FLOAT 4bytes (-3.402823466 E+38,3.402823466351 E+38) 0 和 (1.175494351 E-38,3.402823466 E+38) 单精度浮点数值
DOUBLE 8bytes (-1.7976931348623157 E+308,1.7976931348623157 E+308) 0 和 (2.2250738585072014 E-308,1.7976931348623157 E+308) 双精度浮点数值
DECIMAL 依赖于M(精度)和D(标度)的值 依赖于M(精度)和D(标度)的值 小数值(精确定点数)
示例:
年龄字段 ---不会出现负数, 而且人的年龄不会太大
age tinyint unsigned
分数 ---总分100分, 最多出现一位小数
score double(4,1)
字符串类型
类型 大小 描述
CHAR 0-255 bytes 定长字符串(需要指定长度)
VARCHAR 0-65535 bytes 变长字符串(需要指定长度)
TINYBLOB 0-255 bytes 不超过255个字符的二进制数据
TINYTEXT 0-255 bytes 短文本字符串
BLOB 0-65 535 bytes 二进制形式的长文本数据
TEXT 0-65 535 bytes 长文本数据
MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据
LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295 bytes 极大文本数据
char 与 varchar 都可以描述字符串,char是定长字符串,指定长度多长,就占用多少个字符,和字段值的长度无关 。而varchar是变长字符串,指定的长度为最大占用长度 。相对来说,char的性能会更高些。
示例:
用户名 username ---长度不定, 最长不会超过50
username varchar(50)
手机号 phone ---固定长度为11
phone char(11)
日期时间类型
类型 大小 范围 格式 描述
DATE 3 1000-01-01 至 9999-12-31 YYYY-MM-DD 日期值
TIME 3 -838:59:59 至 838:59:59 HH:MM:SS 时间值或持续时间
YEAR 1 1901 至 2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00 至 9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:01 至 2038-01-19 03:14:07 YYYY-MM-DD HH:MM:SS 混合日期和时间值,时间戳
示例:
生日字段 birthday ---生日只需要年月日
birthday date
创建时间 createtime --- 需要精确到时分秒
createtime datetime
2.3.1.5 设计表流程
通过上面的案例,我们明白了,设计一张表,基本的流程如下:
阅读页面原型及需求文档
基于页面原则和需求文档,确定原型字段(类型、长度限制、约束)
再增加表设计所需要的业务基础字段(id主键、插入时间、修改时间)
说明:
create_time:记录的是当前这条数据插入的时间。
update_time:记录当前这条数据最后更新的时间。
查询
关于表结构的查询操作,工作中一般都是直接基于图形化界面操作。
查询当前数据库所有表
show tables;
查看指定表结构
desc 表名 ;#可以查看指定表的字段、字段的类型、是否可以为NULL、是否存在默认值等信息
查询指定表的建表语句
show create table 表名 ;
修改
关于表结构的修改操作,工作中一般都是直接基于图形化界面操作。
添加字段
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
案例: 为tb_emp表添加字段qq,字段类型为 varchar(11)
alter table tb_emp add qq varchar(11) comment 'QQ号码';
图形化操作:添加字段
修改数据类型
alter table 表名 modify 字段名 新数据类型(长度);
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束];
案例:修改qq字段的字段类型,将其长度由11修改为13
alter table tb_emp modify qq varchar(13) comment 'QQ号码';
案例:修改qq字段名为 qq_num,字段类型varchar(13)
alter table tb_emp change qq qq_num varchar(13) comment 'QQ号码';
图形化操作:修改数据类型和字段名
删除字段
alter table 表名 drop 字段名;
案例:删除tb_emp表中的qq_num字段
alter table tb_emp drop qq_num;
图形化操作:删除字段
修改表名
rename table 表名 to 新表名;
案例:将当前的tb_emp表的表名修改为emp
rename table tb_emp to emp;
图形化操作:修改表名
删除
关于表结构的删除操作,工作中一般都是直接基于图形化界面操作。
删除表语法:
drop table [ if exists ] 表名;
if exists :只有表名存在时才会删除该表,表名不存在,则不执行删除操作(如果不加该参数项,删除一张不存在的表,执行将会报错)。
案例:如果tb_emp表存在,则删除tb_emp表
drop table if exists tb_emp; -- 在删除表时,表中的全部数据也会被删除。
图形化操作:删除表
数据库操作-DML
DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增、删、改操作。
添加数据(INSERT)
修改数据(UPDATE)
删除数据(DELETE)
增加
insert语法:
向指定字段添加数据:
insert into 表名 (字段名1, 字段名2) values (值1, 值2);
全部字段添加数据:
insert into 表名 values (值1, 值2, ...);
批量添加数据(指定字段):
insert into 表名 (字段名1, 字段名2) values (值1, 值2), (值1, 值2);
批量添加数据(全部字段):
insert into 表名 values (值1, 值2, ...), (值1, 值2, ...);
案例1:向tb_emp表的username、name、gender字段插入数据
因为设计表时create_time, update_time两个字段不能为NULL,所以也做为要插入的字段
insert into tb_emp(username, name, gender, create_time, update_time)
values ('san', '张三', 1, now(), now());
案例2:向tb_emp表的所有字段插入数据
insert into tb_emp(id, username, password, name, gender, image, job, entrydate, create_time, update_time)
values (null, 'si', '123', '李四', 2, '1.jpg', 1, '2010-01-01', now(), now());
Insert操作的注意事项:
插入数据时,指定的字段顺序需要与值的顺序是一一对应的。
字符串和日期型数据应该包含在引号中。
插入的数据大小,应该在字段的规定范围内。
修改
update语法:
update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , .... [where 条件] ;
案例1:将tb_emp表中id为1的员工,姓名name字段更新为'张三'
update tb_emp set name='张三',update_time=now() where id=1;
案例2:将tb_emp表的所有员工入职日期更新为'2010-01-01'
update tb_emp set entrydate='2010-01-01',update_time=now();
注意事项:
修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
在修改数据时,一般需要同时修改公共字段update_time,将其修改为当前操作时间。
删除
delete语法:
delete from 表名 [where 条件] ;
案例1:删除tb_emp表中id为1的员工
delete from tb_emp where id = 1;
案例2:删除tb_emp表中所有员工
delete from tb_emp;
相关文章:
数据库入门
基本概念 数据库:DataBase简称DB,是一个用于存储和管理数据的仓库。 就像我们每天访问的网站Bilibili,OA、ERP和CRM等内部管理系统,以及我们每天使用的腾讯新闻和Tiktok应用程序一样,我们看到的数据实际上存储在数据库…...
WebGIS城市停水及影响范围可视化实践
目录 前言 一、相关信息介绍 1、停水信息的来源 2、停水包含的相关信息 二、功能简介 1、基础小区的整理 2、停水计划的管理 三、WebGIS空间可视化 1、使用到的组件 2、停水计划的展示 3、影响小区的展示 4、实际效果 四、总结 前言 城市停水,一个看似…...
【Syncfusion系列】Diagram 杂谈 第三篇 序列化和反序列化
目录 序列化保存C# 代码示例, 方式1 :C# 代码示例, 方式2 : 反序列化加载C# 代码示例, 方式1:C# 代码示例, 方式2: **如何序列化自定义属性**序列化和反序列化都存在的一个问题解决方式 图表是否已修改&…...
#思科模拟器通过服务配置保障无线网络安全Radius
演示拓扑图: 搭建拓扑时要注意: 只能连接它的Ethernet接口,不然会不通 MAC地址绑定 要求 :通过配置MAC地址过滤禁止非内部员工连接WiFi 打开无线路由器GUI界面,点开下图页面,配置路由器无线网络MAC地址过…...
Repo管理
文章目录 前言Repo介绍清单仓库清单仓库的组成 初始化Repo同步远程仓库Repo实际应用 前言 我们知道,Git是用来管理某一个仓库,那当一个项目用到了多个仓库时,怎么来同步管理这些仓库呢?这个时候就可以引入Repo管理。 Repo介绍 …...
代码随想录算法训练营第四十八/九天 | 图 | 深度搜索 | 广度搜索
Day 48 49 总结 自己实现中遇到哪些困难今日收获,记录一下自己的学习时间 11:40 - 14:3012:30 - 13:30, 14:45 - 17:10 图论 深度收缩 & 广度搜索 并查集 最小生成树 拓扑排序 最短路径算法 图论基础 图 二维空间里,多个点之间相互连接图的…...
JavaEE初阶——多线程(线程安全-锁)
复习上节内容(部分-掌握程度不够的) 加锁,解决线程安全问题。 synchronized关键字,对锁对象进行加锁。 锁对象,可以是随便一个Object对象(或者其子类的对象),需要关注的是ÿ…...
搭建大语言模型
安装和配置Ollama 首先在官网上下载Ollama,同时支持window,linux,macos系统。 下载下来是一个压缩包,直接解压缩即可,然后点击安装程序开始安装。 linux下载 执行以下命令,即可自动下载安装,…...
QT6 Socket通讯封装(TCP/UDP)
为大家分享一下最近封装的以太网socket通讯接口 效果演示 如图,界面还没优化,后续更新 废话不多说直接上教程 添加库 如果为qmake项目中,在.pro文件添加 QT network QT core gui QT networkgreaterThan(QT_MAJOR_VERS…...
Linux中 vim 常用命令大全详细讲解
文章目录 前言一、Vim 基本操作 🕹️1.1 打开或创建1.2 退出编辑1.3 模式切换 二、Vim 光标移动命令 ↕️2.1 基本移动2.2 行内移动2.3. 单词移动2.4. 页面移动2.5. 行跳转 三、Vim 文本编辑命令 📋3.1 插入和删除3.2 复制、剪切与粘贴3.3 替换与修改 四…...
vs 调试
常用: 调试->窗口-> 断点 监视 自动窗口 局部变量 调用堆栈 内存 反汇编(也可以右键,转到反汇编) 寄存器 快捷键: F5:启用调试,经常用来跳到下一个断点处 F9创建断点和取消断点。断点的重要作用&…...
使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构(未做共享存储版)
文章目录 使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构Redis 主从架构部署 (1.yaml)Redis Sentinel 部署 (2.yaml)Sentinel 服务暴露 (3.yaml)部署步骤总结 使用 Kubernetes 部署 Redis 主从及 Sentinel 高可用架构 本文将详细介绍如何在 Kubernetes 中部署 Redis …...
PLC网关,plc远程通信 —— 跨越距离远程控制运维升级
在日新月异的工业4.0时代,智能化、网络化已成为制造业转型升级的关键词。其中,PLC(可编程逻辑控制器)作为工业自动化控制的核心设备,其远程通信技术的突破,正引领着一场前所未有的工业变革。今天࿰…...
MySQL的历史和地位
秋招之后,开始深入学习后端开发知识啦。把学到的东西分享给大家最开心啦。就从MySQL开始吧。 首先说一下MySQL的历史和地位。主要是看一下我们为什么要学习,而不是说让我们学什么我们就学什么。 地位 这张图是我从DB-Engines截取的2024年12月最新的数据…...
Day12 洛谷 1320+1152+1615
零基础洛谷刷题记录 Day01 2024.11.18 Day02 2024.11.25 Day03 2024.11.26 Day04 2024.11.28 Day05 2024.11.29 Day06 2024 12.02 Day07 2024.12.03 Day08 2024 12 05 Day09 2024.12.07 Day10 2024.12.09 Day11 2024.12.10 Day12 2024.12.14 文章目录 零基础洛谷刷题记录1320&…...
四十六:如何使用Wireshark解密TLS/SSL报文?
TLS/SSL是保护网络通信的重要协议,其加密机制可以有效地防止敏感信息被窃取。然而,在调试网络应用或分析安全问题时,解密TLS/SSL流量是不可避免的需求。本文将介绍如何使用Wireshark解密TLS/SSL报文。 前提条件 在解密TLS/SSL报文之前&…...
【网络安全设备系列】7、流量监控设备
0x00 定义: 网络流量控制是一种利用软件或硬件方式来实现对电脑网络流量的控制。它的最主要方法,是引入QoS的概念,从通过为不同类型的 网络数据包标记,从而决定数据包通行的优先次序。 0x01 类型: 流控技术分为两种: 一种是…...
SpringCloud无介绍快使用,sentinel注解@SentinelResource的基本使用(二十三)
TOC 问题背景 从零开始学springcloud微服务项目 注意事项: 约定 > 配置 > 编码IDEA版本2021.1这个项目,我分了很多篇章,每篇文章一个操作步骤,目的是显得更简单明了controller调service,service调dao默认安装ngi…...
vue3 父组件调用子组件 el-drawer 抽屉
之前 Vue3 只停留在理论,现在项目重构,刚好可以系统的实战一下,下面是封装了一个抽屉表单组件,直接在父组件中通过调用子组件的方法打开抽屉: 父组件: <template><div id"app"><…...
JVM运行时数据区内部结构
VM内部结构 对于jvm来说他的内部结构主要分成三个部分,分别是类加载阶段,运行时数据区,以及垃圾回收区域,类加载我们放到之后来总结,今天先复习一下类运行区域 首先这个区域主要是分成如下几个部分 下面举个例子来解释…...
luckysheet与superslide冲突解决
[现象]控制台报错、界面无法操作 $是jquery。查看源码,发现mousewheel方法来自插件mousewheel,luckysheet初始应该会将mousewheel挂载在jquery上。 在控制台打印jquery取dom及其方法,结果如下: 不存在mousewheel方法,…...
ubuntu环境调用onnxruntime找不到GPU的问题
问题: python安装好onnxruntime无法调用gpu。 通过如下代码测试,均为False。 import onnxruntime as ort# 检查ONNX Runtime是否支持CUDA def is_onnxruntime_cuda_supported():return ort.get_device() GPU# 检查ONNX Runtime是否使用CUDA def is_onn…...
【iOS】《Effective Objective-C 2.0》阅读笔记(一)
文章目录 前言了解OC语言的起源在类的头文件中尽量少引入其他头文件多用字面量语法,少用与之等价的方法字面量数值字面量数组字面量字典 多用类型常量,少用#define预处理指令用枚举法表示状态、选项、状态码 总结 前言 最近开始阅读一些iOS开发的相关书籍…...
linux在没网的情况下如何校验时间 超详细拿来即用
一、没有校时服务器的话 1、手动修改 sudo date --set"2024-06-17 13:44:00"二、有校时服务器的话 1、手动校时 ntpdate 14.193.73.22、自动校时 写一个校时服务脚本 14.193.73.2 是校验时间服务器 #!/bin/sh while true dontpdate 14.193.73.2sleep 5;hwclock…...
springBoot项目框架创建后缺少iml文件
springBoot项目创建好之后缺少iml文件 解决方案: 按两下ctrl出现一下内容 在右上角project的下拉框中选中缺少文件的项目 输入 mvn idea:module 回车执行重构...
【OJ题解】最长回文子串
个人主页: 起名字真南的CSDN博客 个人专栏: 【数据结构初阶】 📘 基础数据结构【C语言】 💻 C语言编程技巧【C】 🚀 进阶C【OJ题解】 📝 题解精讲 目录 **题目链接****解题思路****1. 初步判断****2. 回文子串性质****3. 判断是…...
kubeadm安装K8s高可用集群之集群初始化及master/node节点加入calico网络插件安装
系列文章目录 1.kubeadm安装K8s高可用集群之基础环境配置 2.kubeadm安装K8s集群之高可用组件keepalivednginx及kubeadm部署 3.kubeadm安装K8s高可用集群之集群初始化及master/node节点加入集群calico网络插件安装 kubeadm安装K8s高可用集群之集群初始化及master/node节点加入ca…...
动态设置路由标题title;动态设置路由配置meta;独享的守卫beforeEnter
案例:同一个页面即使新增,又是编辑、详情页。导致路由配置里的title无法固定 通过路由的独享的守卫beforeEnter解决配置;同时beforeEnter一定程度上可以帮助处理vue3缓存问题 {path: "methodApplicationFormOperate",name: "M…...
探秘UI自动化测试工具Playwright工作原理
相关文章:playwright系列教程 Playwright简介 微软出品的强大工具 Playwright是由微软推出的一款开源自动化测试工具,专门为Web测试和自动化场景而设计。在现代Web开发的快节奏环境下,其凭借出色的性能和丰富的功能,成为众多开…...
111.【C语言】数据结构之二叉树的销毁函数
目录 1.知识回顾 2.分析 3.代码 后序遍历销毁(最简洁) 前序遍历销毁(不推荐) 中序遍历销毁(不推荐) 4.将函数嵌入main函数中执行 1.知识回顾 106.【C语言】数据结构之二叉树的三种递归遍历方式 2.分析 销毁二叉树需要按照一定的顺序去销毁,例如:先销毁根还是先销毁根…...
WPF xaml 文件详解
<div id"content_views" class"htmledit_views"><h2><a name"t0"></a>1.总述</h2> 创建好了WPF项目后,最重要的是对 App和MainWindow的理解,在一开始的时候,极容易就直接在Main…...
win10配置免密ssh登录远程的ubuntu
为了在终端ssh远程和使用VScode远程我的VM上的ubuntu不需要设置密码,需要在win10配置免密ssh登录远程的ubuntu。 在win10打开cmd,执行下面的代码生成密钥对(会提示进行设置,按照默认的配置就行,一直回车)&…...
Android命令行工具--apksigner
使用 Android SDK Build Tools 修订版 24.0.3 及更高版本中提供的 apksigner 工具为 APK 签名,并确保 APK 的签名将在该 APK 支持的所有版本 Android 平台上成功通过验证。 注意:如果在使用 apksigner 为 APK 签名后又对 APK 做了更改,则 APK…...
Linux高性能服务器编程 | 读书笔记 |9.定时器
9. 定时器 网络程序需要处理定时事件,如定期检测一个客户连接的活动状态。服务器程序通常管理着众多定时事件,有效地组织这些定时事件,使其在预期的时间被触发且不影响服务器的主要逻辑,对于服务器的性能有至关重要的影响。为此&…...
UE5制作伤害浮动数字
效果演示: 首先创建一个控件UI 添加画布和文本 文本设置样式 添加伤害浮动动画,根据自己喜好调整,我设置了缩放和不透明度 添加绑定 转到事件图表,事件构造设置动画 创建actor蓝图类 添加widget 获取位置 设置位移 创建一个被击中…...
双亲委派机制是Java类加载器的一种工作模式
双亲委派机制是Java类加载器的一种工作模式,确保了类加载的一致性和安全性。以下是对双亲委派机制的详细解析: 一、定义与工作原理 双亲委派机制(Parent Delegation Model)要求除了顶层的启动类加载器外,其余的类加载…...
AI智算-k8s部署大语言模型管理工具Ollama
文章目录 简介k8s部署OllamaOpen WebUI访问Open-WebUI 简介 Github:https://github.com/ollama/ollama 官网:https://ollama.com/ API:https://github.com/ollama/ollama/blob/main/docs/api.md Ollama 是一个基于 Go 语言开发的可以本地运…...
百度23届秋招研发岗A卷
百度23届秋招研发岗A卷 2024/12/16 1.下面关于 SparkSQL 中 Catalyst 优化器的说法正确的是(ABC) A.Catalyst 优化器利用高级编程语言功能(例如 Scala 的模式匹配)来构建可扩展的查询优化器 B.Catalyst 包含树和操作树的规则集…...
米哈游大数据面试题及参考答案
怎么判断两个链表是否相交?怎么优化? 判断两个链表是否相交可以采用多种方法。 一种方法是使用双指针。首先分别遍历两个链表,得到两个链表的长度。然后让长链表的指针先走两个链表长度差的步数。之后,同时移动两个链表的指针,每次比较两个指针是否指向相同的节点。如果指…...
Android14 AOSP 允许system分区和vendor分区应用进行AIDL通信
在Android14上,出于种种原因,system分区的应用无法和vendor分区的应用直接通过AIDL的方法进行通信,但是项目的某个功能又需要如此。 好在Binder底层其实是支持的,只是在上层进行了屏蔽。 修改 frameworks/native/libs/binder/Bp…...
llm chat场景下的数据同步
背景 正常的chat/im通常是有单点登录或者利用类似广播的机制做多设备间内容同步的。而且由于长连接的存在,数据同步(想起来)相对简单。而llm的chat在缺失这两个机制的情况下,没见到特别好的做到了数据同步的产品。 llm chat主要两…...
视频去重原理及 Demo 示例
视频去重是一个常见的需求,主要用于视频库或平台管理中,通过判断视频是否相同(或相似)来移除冗余内容。实现视频去重可以通过多种方法,具体选择取决于业务场景和性能要求。 1. 视频去重的原理 1.1 基本原理 视频去重…...
【GIS教程】使用GDAL-Python将tif转为COG并在ArcGIS Js前端加载-附完整代码
目录 一、数据格式 二、COG特点 三、使用GDAL生成COG格式的数据 四、使用ArcGIS Maps SDK for JavaScript加载COG格式数据 一、数据格式 COG(Cloud optimized GeoTIFF)是一种GeoTiff格式的数据。托管在 HTTP 文件服务器上,可以代替geose…...
【ETCD】【源码阅读】深入解析 EtcdServer.applySnapshot方法
今天我们来一步步分析ETCD中applySnapshot函数 一、函数完整代码 函数的完整代码如下: func (s *EtcdServer) applySnapshot(ep *etcdProgress, apply *apply) {if raft.IsEmptySnap(apply.snapshot) {return}applySnapshotInProgress.Inc()lg : s.Logger()lg.In…...
C# 实现 10 位纯数字随机数
本文将介绍如何用 C# 实现一个生成 10 位纯数字随机数的功能。以下是完整的代码示例: using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace RandomTset {class Program{// 使用GUID作为种子来创建随机数生成器static…...
【热力学与工程流体力学】流体静力学实验,雷诺实验,沿程阻力实验,丘里流量计流量系数测定,局部阻力系数的测定,稳态平板法测定材料的导热系数λ
关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…...
黑盒白盒测试
任务1 黑盒测试之等价类划分法 【任务需求】 【问题】例:某报表处理系统要求用户输入处理报表的日期,日期限制在2003年1月至2008年12月,即系统只能对该段期间内的报表进行处理,如日期不在此范围内,则显示输入错误信息…...
D99【python 接口自动化学习】- pytest进阶之fixture用法
day99 pytest使用conftest管理fixture 学习日期:20241216 学习目标:pytest基础用法 -- pytest使用conftest管理fixture 学习笔记: fixture(scope"function") conftest.py为固定写法,不可修改名字,使用c…...
RFDiffusion 计算二面角函数解读
th_dih函数来自util.py包,get_dih函数来自kinematics.py包。th_dih函数计算输入向量定义的二面角的余弦值和正弦值,返回一个包含 (cos(ϕ),sin(ϕ)) 的张量。get_dih 函数计算的是传统意义上的二面角。 源代码: def th_dih_v(ab, bc, cd):def th_cross(a, b):a, b = t…...
卓易通:鸿蒙Next系统的蜜糖还是毒药?
哈喽,我是老刘 最近很多人都在问鸿蒙next系统新上线的卓易通和出境易两款应用。 老刘分析了一下这个软件的一些细节,觉得还是蛮有意思的,我觉得可以从使用体验、底层原理和对鸿蒙生态的影响这三个角度来分析一下。 使用体验 性能 看到了一些测…...