国产数据库OceanBase从入门到放弃教程
1. 介绍
是由蚂蚁集团(Ant Group,原蚂蚁金服)自主研发的分布式关系型数据库。它旨在解决海量数据存储和高并发访问的问题,特别适合金融级应用场景,如支付宝等对数据一致性、可靠性和性能有极高要求的服务。以下是关于 OceanBase 数据库的一些关键特点和优势:
1.1 核心特性
1. 分布式架构
- 水平扩展:OceanBase 支持通过增加服务器节点来线性扩展系统容量,从而应对不断增长的数据量和用户请求。
- 多副本机制:为了保证数据的高可用性和容灾能力,OceanBase 实现了多副本策略,确保即使部分节点故障也不会影响整个系统的正常运行。
2. 高性能
- SQL 引擎优化:针对 SQL 查询进行了深度优化,支持复杂的事务处理和分析查询,能够在保证 ACID 特性的前提下提供高效的读写性能。
- 全局一致性:利用 Paxos 协议实现分布式事务的一致性管理,确保跨多个数据中心的数据同步和一致性。
3. 高可用性
- 自动故障转移:当主副本发生故障时,能够快速切换到备用副本继续服务,减少了业务中断时间。
- 异地多活:支持跨地域部署,使得不同地区的用户可以就近访问数据,降低了网络延迟,并增强了灾难恢复的能力。
4. 兼容 MySQL/Oracle
- MySQL 兼容性:提供了良好的 MySQL 协议兼容性,使得从传统 MySQL 数据库迁移到 OceanBase 变得更加容易。
- Oracle 兼容性:部分版本也增加了对 Oracle 数据库语法的支持,方便企业平滑迁移。
5. 低成本
- 硬件成本低:由于采用了普通的 X86 架构服务器作为集群节点,相比专用硬件设备大大降低了采购成本。
- 运维成本低:简化了管理和维护流程,减少了人工干预的需求,提高了自动化程度。
1.2 应用场景
OceanBase 广泛应用于支付清算、电子钱包、转账汇款、信贷风控等领域,尤其是在需要处理大量交易且对响应速度和数据安全有严格要求的地方表现优异。此外,随着云服务的发展,OceanBase 也开始向云端延伸,为更多中小企业提供灵活可靠的数据库解决方案。
1.3 社区与生态
OceanBase 不仅是一个商业产品,也有活跃的开源社区版(OceanBase Community Edition),鼓励开发者和技术爱好者参与到项目的开发和完善中来。同时,围绕 OceanBase 形成了丰富的工具链和服务体系,包括但不限于监控报警、备份恢复、性能调优等工具,以及专业的技术支持团队。
2. 安装
安装要求:需要6G内存,14G磁盘空间。
2.1 镜像下载
下载oceanbase-ce镜像,这里只体验社区兼容MySQL版本的,兼容Oracle版本是企业版,商用,一般接触不到。如果企业要用,也是由厂商技术支持直接安装,一般接触不到这个镜像源。
# 下载oceanbase-ce镜像
docker pull oceanbase/oceanbase-ce
2.2 启动容器
docker run -p 2881:2881 \--name oceanbase \--restart=always \-e MODE=MINI \-e OB_TENANT_PASSWORD=123456 \-d oceanbase/oceanbase-ce
2.3 安装监测
启动后可实时观察日志是否成功安装
docker logs -f oceanbase
2.4 连接数据库
oceanbase-ce 镜像安装了OceanBase数据库客户端obclient,所以可以使用obclient客户端或其他方式。
# 1. 进入容器
docker exec -it oceanbase bash# 无密码方式
obclient -uroot@sys -h127.0.0.1 -P2881# 有密码方式
obclient -uroot@sys -h127.1 -P2881 -p123456
3. SQL语句
SQL的英文是Structured Query Language,简称SQL,是一种操作关系型数据库的结构化查询语言。操作数据库,最经常使用就是查询操作。
1、OceanBase数据库也兼容Oracle语法,这个社区版不支持;
2、OceanBase数据库的SQL语句不区分大小写,关键字建议使用大写;
3、SQL语句可以使用单行或多行书写,以分号结尾
4、注释
单行注释
- 单行注释# 单行注释
多行注释
/*
多行注释
多行注释
*/
4. SQL分类
分类 | 说明 | 作用 | 备注 |
---|---|---|---|
DDL | 数据定义语言 | 用来对数据库、表、列的定义 | data definition language |
DML | 数据操作语言 | 用来对数据库中表的数据进行增、删、改操作 | data manipulation language |
DQL | 数据查询语言 | 用来对数据库中表的数据进行查询 | data query language |
DCL | 数据控制语言 | 用来对数据库的控制(用户创建、权限控制) | data control language |
5. DDL
5.1 库的DDL
一个功能,一般都是四个动作,增删改查。
展示所有的数据库
show databases;
创建数据库
create database 数据库名称 charset=utf8;
create database if not exists 数据库名称 charset=utf8; # 使得SQL语句更加强健、健壮。
示例:
create database db1 charset=utf8;
create database if not exists db1 charset=utf8;
删除数据库
drop database 数据库名称;
drop database if exists 数据库名称;
示例:
drop database test;
drop database if exists test;
使用数据库
use 数据库名称;
查询正在使用的数据库
select database();
小结:
命令 | 作用 | 示例 |
---|---|---|
show databases; | 查看所有数据库 | show databases; |
create database if not exists 数据库名 charset=utf8; | 创建数据库 | create database if not exists db1 charset=utf8; |
use 数据库名; | 使用数据库 | use db1; |
select database(); | 查看当前使用的数据库 | select database(); |
drop database if exists 数据库名; | 删除数据库 | drop database if exists db1; |
5.2 表、列的DDL
列的内容可以是数字、字符串、时间等,由数据类型约束
在满足业务需求的请求下,数据类型范围选择越小的。
数值数据类型
数据类型 | 字节数 | 有符号 | 无符号 |
---|---|---|---|
tinyint | 1个字节 | -128~127 | 0~255 |
smallint | 2个字节 | -32768~32767 | 0~65535 |
mediumint | 3个字节 | -8388608~8388607 | 0~16777215 |
int | 4个字节 | -2147483648~2147483647 | 0~4294967295 |
bigint | 8个字节 | -263~263-1 | 0~2^64-1 |
float | 单精度,4个字节 | -231~231-1 | 0~2^32-1 |
double | 双精度,8个字节 | ||
decimal[M, D] | 双精度,8个字节 |
decimal(5,2),表示共5位数字,其中2位是小数,比如:888.88
字符串数据类型
数据类型 | 长度 | 用途 |
---|---|---|
char(size) | 最大255个字符 | 数据是定长,如md5的密码,邮编,手机号,身份证号等 |
varchar(size) | 最大65535个字节 | 存放一般内容长度 |
tinytext | 最大255个字节 | |
text | 最大65535个字节 | |
mediumtext | 最大16777215个字节 | 大段文本时,如新闻、文章、论文等 |
longtext | 最大4294967295个字节 | 大段文本时,如新闻、文章、论文等 |
1、VARCHAR(size):0~65535字节 可变长度字符串,最大65532字节,1-3个字节用于记录大小【utf8编码size最大21844字符,gbk编码最大32766字符 】
2、查询速度:char > varchar
3、text与char、varchar不同的是,text不可以有默认值,能用varchar的地方不用text
日期+时间数据类型
数据类型 | 格式 |
---|---|
date | 年-月-日,如:2024-4-8 |
datetime | 年-月-日 时:分:秒,如:2024-4-8 16:17:40 |
timestamp | 年-月-日 时:分:秒,如:2024-4-8 16:17:40 |
time | 时:分:秒,如:16:17:40 |
year | 年,如:2024 |
datetime保存时间的范围: 1000-01-01 00:00:00
到 9999-12-31 23:59:59
timestamp保存时间的范围: 1970-01-01 00:00:01
到 2038-01-19 03:14:07
展示当前数据库所有表
show tables;
描述表结构
desc 表名;
查看表的创建语句
show create table 表名;show create table user;
创建表
create table 表名(字段名1 数据类型,字段名2 数据类型,...字段名n 数据类型 # 最后一个不需要逗号(,)
);示例:
create table if not exists user(id tinyint,username varchar(32),age tinyint
);
删除表
drop table 表名称;
drop table if exists 表名称;
修改表、列
# 修改表名
alter table 原来的表名 rename to 新的表名;示例:
alter table user rename to users;# 增加一列
alter table 表名 add 列名 数据类型;示例:
alter table users add height float;# 修改列数据类型
alter table 表名 modify 列名 新数据类型;示例:
alter table users modify id int;# 修改列名和数据类型
alter table 表名 change 列名 新列名 新数据类型;示例:
alter table users change id no tinyint;# 删除列
alter table 表名 drop 列名;示例:
alter table users drop height;
小结:
命令 | 作用 |
---|---|
show tables; | 查看当前数据库中所有表 |
desc 表名; | 查看表结构 |
show create table 表名; | 查看表的创建语句 |
alter table 表名 rename to 新的表名; | 修改表名 |
alter table 表名 add 列名 类型; | 添加字段 |
alter table 表名 modify 列名 类型及约束; | 修改字段数据类型 |
alter table 表名 change 原名 新名 类型及约束; | 修改字段名和数据类型 |
alter table 表名 drop 列名; | 删除字段 |
drop table 表名; | 删除表 |
6. DML
6.1 添加数据
添加指定列数据
insert into 表名(列名1,列名2...) values(值1,值2...);
添加全部列数据
insert into 表名 values(值1,值2...);示例:
insert into users values(1, 'zhangsan', 18);
批量添加指定列数据
insert into 表名(列名1,列名2...) values(值1,值2...),(值1,值2...)...;
批量添加全部列数据
insert into 表名 values(值1,值2...),(值1,值2...)...;示例:
insert into users values(1, 'lisi', 18),(1, 'wanger', 19);
6.2 修改数据
修改表数据
update 表名 set 列名1=值1 列名2=值2...[where条件];示例:
update users set no=2 where username='lisi';
注:如果不加where条件,就是对该表所有行内容进行修改
6.3 删除数据
删除表数据
delete from 表名 [where条件]示例:
delete from users where username='wanger';
注:如果不加where条件,就是对该表所有行内容进行删除
7. DQL
完整语法
SELECT字段列表
FROM表名列表
WHERE条件列表
GROUP BY分组字段
HAVING分组后条件
ORDER BY排序字段
LIMIT分页限定
- 创建数据库
create database if not exists db1- 创建数据库表
use db1;create table if not exists stu(id int(11),username varchar(32),sex tinyint(1),age tinyint(3),math tinyint(3),chinese tinyint(3)
);- 添加数据
insert into stu values(1,'小张',1,16,75,86),(2,'小李',1,16,76,86),(3,'小王',0,17,76,87),(4,'小胡',0,17,77,87),(5,'小丘',0,18,77,88),(6,'小刘',0,18,80,90);
7.1 基础查询
- 查询指定字段
select id,username from stu;- 查询表所有字段
select * from stu;- 去除重复记录
select distinct sex from stu;- 字段取别名
select id,sex as gender,math shuxue from stu;
7.2 条件查询
select 字段列表 from 表名 where条件
where后面支持多种运算符
运算符 | 功能描述 |
---|---|
比较运算符 | =、>、>=、<、<=、!=、<> |
逻辑运算符 | and、&&、or、||、not |
模糊查询 | like |
范围查询 | between…and…、in(…) |
空判断 | is null、is not null |
模糊查询使用like关键字,可以使用通配符进行占位
_:代表单个任意字符
%:代表任意个字符
正则表达式
select * from stu where class_id REGEXP '1|7';
7.3 排序查询
select 字段列表 from 表名 order by 排序字段名1 [,排序字段2]...;
注:排序方式有上序ASC,降序DESC,默认情况下是升序ASC
select * from stu order by math desc,chinese desc;
7.4 聚合函数
在进行查询操作时,往往需要对一整列进行运算,例如成绩的平均分
函数名 | 功能 |
---|---|
count(列名) | 统计数量(一般选用不为null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
select 聚合函数 from 表名;
注:NULL值不参与聚合函数运算
7.5 分组查询
select 字段列表 from 表名 [where分组前的条件限定] group by 分组字段名 [having 分组后的条件过滤];
注:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
select sex,max(math),max(chinese) from stu group by sex;
7.6 分页查询
select 字段列表 from 表名 limit 查询起始索引,查询条目数
注:limit关键字中,查询起始索引是从0开始的
8. 约束
约束是作用于数据库表中列上的规则,用于限制添加数据的行为。从而保证数据库中数据的正确性、有效性和完整性。
8.1 约束分类
约束类型 | 关键字 | 功能 |
---|---|---|
非空约束 | NOT NULL | 保证列中所有数据不能有NULL值 |
唯一约束 | UNIQUE | 保证列中所有数据各不相同 |
主键约束 | PRIMARY KEY | 主键是一行数据的唯一标识,要求非空且唯一 |
默认约束 | DEFAULT | 保存数据时,未指定值则采用默认值 |
外键约束 | FOREIGN KEY | 外键用来让两个表数据建立关联,保证数据的一致性和完整性 |
检查约束 | CHECK | 保证列中的值满足某一条件 |
create table if not exists stu(id int(11) unsigned auto_increment primary key not null,username varchar(32) not null unique,sex tinyint(1) default 1 not null,age tinyint(3) not null,math tinyint(3) default 0 not null,chinese tinyint(3) default 0 not null
);
9. 多表查询
一次性从多张表中查询需要的数据
create table class(class_id int(11) unsigned auto_increment primary key not null,class_name varchar(32) not null unique
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8;create table stu(stu_id int(11) unsigned auto_increment primary key not null,class_id int(11) not null,stu_name varchar(32) not null unique
)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=UTF8;insert into class(class_name) values('一班'),('二班');insert into stu(class_id,stu_name) values(1,'小张'),(1,'小李'),(2,'小孙'),(2,'小杨');
在MySQL中多表查询分为连接查询和子查询,连接查询又分为内连接和外连接,内连接又分为隐式内连接和显示内连接,外连接又分为左外连接和右外连接。
9.1 内连接查询
- 隐式内连接查询
select 字段列表 from 表1,表2... where 条件;- 显式内连接查询
select 字段列表 from 表1 [inner] join 表2 on 条件;
示例
- 隐式内连接查询
select * from class,stu where class.class_id=stu.class_id;- 显式内连接查询
select * from class inner join stu on class.class_id=stu.class_id;
9.2 外连接查询
左外连接查询:相当于查询A表所有数据和交集部分数据
右外连接查询:相当于查询B表所有数据和交集部分数据
- 左外连接查询
select 字段列表 from 表1 left [outer] join 表2 on 条件;- 右外连接查询
select 字段列表 from 表1 right [outer] join 表2 on 条件;
示例
select * from stu left outer join class on stu.class_id=class.class_id;select * from stu right outer join class on stu.class_id=class.class_id;
9.3 子查询
指查询中嵌套有查询
子查询语句结果是单行单列,子查询语句作为条件值,使用>、>=、<、<=、=、!=等进行条件判断。
# class_id 大于 1班的class_id的学生
select * from stu where class_id > (select class_id from class where class_name='一班');
子查询语句结果是多行单列,子查询语句作为条件值,使用in等关键字进行条件判断
# 查询存在班级的学生
select * from stu where class_id in (select class_id from class);
子查询语句结果是多行多列,子查询语句作为虚拟表
select * from stu,(select * from class) c where stu.class_id=c.class_id;
10. 事务
使用场景:转账、下单扣库存
语法:
# 开启事务
start transaction;
或
begin;-- 执行各种操作# 回滚事务
rollback;# 提交事务
commit;
事务特征:
1、原子性,事务是不可分割最小操作单位,要么同时成功,要么同时失败
2、一致性,事务完成时,必须使所有数据都保持一致状态
3、隔离性,多个事务之间,操作可见性
4、持久性,事务一旦提交或回滚,它对数据库中数据的改变是永久的
10.1 隔离级别
数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。在事务的并发操作中可能会出现脏读,不可重复读,幻读。
读未提交(Read uncommitted):
解释:
一个事务读到了另一个事务还没有提交的数据。
例如:
A给B转账,
A转给B,10万,点转账,但未点确认
B查账户看到10万
A及时发现,点撤回,修改为1万,再点转账,再点确认
分析:
A给B最终转账是1万,但是在过程中,B能看到过程数据。这就是脏读。
读已提交(Read committed):
解释:
一个事务要等另一个事务提交后才能读取数据。
例如:
父亲的银行卡有10万
儿子拿着这个银行卡去买单,同时父亲准备转款(开启事务)。此时儿子看到银行卡里有10万
等儿子看完有10万后,钱被父亲转走,并提交
收费系统准备在这个银行卡扣款,再次检测,发现卡里没有钱了
分析:
这就是读已提交,若有事务对数据进行更新操作时,读操作事务要等待这个更新操作事务提交后才能读取数据,可以解决脏读问题。
这个例子中,有读两次卡里的钱,一次是10万,一次是没有钱了,这就是不可重复读。
可重复读(Repeatable read):
解释:
同一事务下,事务在执行期间,多次读取同一数据时,能够保证读取到的数据是一致的。
例如:
父亲的银行卡有10万
儿子拿着这个银行卡去买单,此时儿子看到银行卡里有10万,这个时候父亲想转账,发现转不了
等儿子买完单,父亲才能够实行转账行为
分析:
读数据的时候,不允许该数据有写数据的事务。因为写数据会改变数据。这样子就解决了不可重复读的问题。但是可能还会有幻读问题。因为幻读问题对应的是插入INSERT操作,而不是UPDATE操作。
什么时候会出现幻读?
解释:
一个事务读取到了另一个事务新增的数据
例如:
儿子某一天去消费,花了8千元,然后他的父亲去查看他今天的消费记录(全表扫描,儿子事务开启),看到确实是花了8千元,就在这个时候,儿子花了1万买了一部电脑,即新增INSERT了一条消费记录,并提交。当父亲打印儿子的消费记录清单时(儿子事务提交),发现花了1.8万元,似乎出现了幻觉,这就是幻读。
串行化(Serializable):
解释:
它是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率最低,比较耗费数据库性能,一般不推荐使用。
小结:
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交 | 可能出现 | 可能出现 | 可能出现 |
读已提交 | 不会出现 | 可能出现 | 可能出现 |
可重复读 | 不会出现 | 不会出现 | 可能出现 |
串行化 | 不会出现 | 不会出现 | 不会出现 |
隔离级别查询
-- MySQL8以前
SELECT @@GLOBAL.tx_isolation, @@tx_isolation;-- MySQL8开始
SELECT @@GLOBAL.transaction_isolation, @@transaction_isolation;
修改隔离级别
-- 建议开发者在修改时,仅修改当前session隔离级别即可
-- REPEATABLE-READ,MySQL默认级别
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE-READ
11. 函数
11.1 数学函数
函数 | 含义 |
---|---|
abs(x) | 返回x的绝对值 |
rand() | 返回0到1的随机数 |
mod(x,y) | 返回x除以y以后的余数 |
power(x,y) | 返回x的y次方 |
round(x) | 返回离x最近的整数 |
round(x,y) | 保留x的y位小数四舍五入后的值 |
sqrt(x) | 返回x的平方根 |
truncate(x,y) | 返回数字 x 截断为 y 位小数的值 |
ceil(x) | 返回大于或等于 x 的最小整数 |
floor(x) | 返回小于或等于 x 的最大整数 |
greatest(x1,x2…) | 返回返回集合中最大的值 |
least(x1,x2…) | 返回返回集合中最小的值 |
11.2 字符串函数
函数 | 含义 |
---|---|
trim() | 返回去除指定格式的值 |
concat(x,y) | 将提供的参数 x 和 y 拼接成一个字符串 |
substr(x,y) | 获取从字符串 x 中的第 y 个位置开始的字符串,跟substring()函数作用相同 |
substr(x,y,z) | 获取从字符串 x 中的第 y 个位置开始长度为z 的字符串 |
length(x) | 返回字符串 x 的长度 |
replace(x,y,z) | 将字符串 z 替代字符串 x 中的字符串 y |
upper(x) | 将字符串 x 的所有字母变成大写字母 |
lower(x) | 将字符串 x 的所有字母变成小写字母 |
left(x,y) | 返回字符串 x 的前 y 个字符 |
right(x,y) | 返回字符串 x 的后 y 个字符 |
repeat(x,y) | 将字符串 x 重复 y 次 |
space(x) | 返回 x 个空格 |
strcmp(x,y) | 比较 x 和 y,返回的值可以为-1,0,1 |
reverse(x) | 将字符串 x 反转 |
11.3 日期函数
函数 | 含义 |
---|---|
current_date() | 当前日期 |
current_time() | 当前时间 |
current_timestamp() | 当前时间戳 |
12. DCL
12.1 用户管理
创建用户
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
-- 实例:
CREATE USER 'java'@'%' IDENTIFIED BY 'asd123crl';
删除用户
drop user 用户名@IP;
-- 实例:
drop user 'java'@'%';
修改密码
UPDATE `user` SET `Password` = PASSWORD('新密码') WHERE `User` = '用户名';
-- 实例:
UPDATE `user` SET `Password` = PASSWORD('asd123') WHERE `User` = 'java';
12.2 权限管理
常用权限:
- 表数据: select, update, delete, insert
- 表结构: create, alert, drop
- 外键: references
- 创建临时表: create temporary tables
- 操作索引: index
- 视图: create view, show view
- 存储过程: create routine, alert routine, execute
- 所有权限: all
查看用户权限命令
SHOW GRANTS FOR '用户名'@'主机名';
-- 实例:
SHOW GRANTS FOR 'root'@'%';
给用户授予权限
在MySQL中使用GRANT命令给用户授权,如果用户不存在,GRANT会自动创建用户,并进行授权。
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名'; -- 权限列表中如果有多个权限则用逗号,隔开-- 授权所有库的所有表的所有权限
GRANT ALL ON *.* TO '用户名'@'主机名';
-- 示例:给张三赋予db_test数据库students表的查询权限
GRANT SELECT ON db_test.students TO 'zhangsan'@'localhost';
-- 刷新权限
flush privileges
撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
-- 示例:撤销张三在db_test.students表的查询权限
REVOKE SELECT ON db_test.students FROM 'zhangsan'@'localhost';
-- 刷新权限
flush privileges
13. 备份与还原
备份语法:
mysqldump -h 服务器 -u 用户名 -p -B 数据库名1 数据库2 数据库n > 备份文件.sql
示例:
mysqldump -u root -p -B test > /backup/123.sql
还原语法:
mysqldump -h 服务器 -u 用户名 -p密码 --databases 数据库名 < 备份文件.sql# 进入数据库后
source 备份文件.sql;
示例:
mysqldump -u root -p --databases test < /backup/123.sql
一般系统推荐的字符集和排序规则
# 字符集
utf8mb4# 排序规则,不区分大小写
utf8mb4_general_cli
字符集(Character Set):utf8mb4
排序规则 | 字符序(Collate):utf8mb4_general_cli 或 utf8mb4_bin
相关文章:

国产数据库OceanBase从入门到放弃教程
1. 介绍 是由蚂蚁集团(Ant Group,原蚂蚁金服)自主研发的分布式关系型数据库。它旨在解决海量数据存储和高并发访问的问题,特别适合金融级应用场景,如支付宝等对数据一致性、可靠性和性能有极高要求的服务。以下是关于…...

风力涡轮机缺陷检测数据集,91.4%准确识别率,18912张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注
风力涡轮机缺陷检测数据集,91.4%准确识别率,18912张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注 数据集下载: yolo v&#…...

Rabbitmq追问2
分析rabbitmq 默认使用姿势是什么 direct fanout还是什么 public void convertAndSend(String exchange, String routingKey, Object object, CorrelationData correlationData) throws AmqpException { this.send(exchange, routingKey, this.convertMessageIfNecessary(obje…...

郑州时空-TMS运输管理系统 GetDataBase 信息泄露漏洞复现
0x01 产品简介 郑州时空-TMS运输管理系统是一款专为物流运输企业设计的综合性管理软件,旨在提高运输效率、降低运输成本,并实现供应链的协同运作。系统基于现代计算机技术和物流管理方法,结合了郑州时空公司的专业经验和技术优势,为物流运输企业提供了一套高效、智能的运输…...

如何使用React,透传各类组件能力/属性?
在23年的时候,我主要使用的框架还是Vue,当时写了一篇“如何二次封装一个Vue3组件库?”的文章,里面涉及了一些如何使用Vue透传组件能力的方法。在我24年接触React之后,我发现这种扩展组件能力的方式有一个专门的术语&am…...

汇编点灯练习
要求: 1、轮流将LED1、LED2、LED3及蜂鸣器点亮 2、基于STM32MP157AAA,阅读原理图和STM32MP157芯片手册 3、ARM汇编指令点灯 1、运行效果 汇编点灯 2、通过查询原理图和芯片手册,得到以下结论: 3、汇编源码 .text .global _start…...

数据结构与算法之动态规划: LeetCode 213. 打家劫舍 II (Ts版)
打家劫舍 II https://leetcode.cn/problems/house-robber-ii/description/ 描述 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的同时&#…...

Git工具
安装教程 详细安装教程 基本命令...

SpringBoot3.3.3+shardingsphere-jdbc5.5.0读写分离、自定义生成主键策略
最近在开发项目搭建框架时,考虑后期支付模块的订单数据量可能会比较大,于是使用现在主流的shardingsphere的读写分离、水平分表来解决后期数据量大影响查询效率的问题。 项目技术栈:jdk17Springboot3.3.3shardingsphere-jdbc5.5.0mybatis-pl…...

开发运维基本功:无需复杂配置快速实现本地Nginx的公网远程访问
文章目录 前言1. 本地连接测试2. 飞牛云安装Cpolar3. 配置公网连接地址4. 飞牛云APP连接测试5. 固定APP远程地址6. 固定APP地址测试 前言 现在生活和工作中的各种设备都变得越来越智能,而数据存储的需求也随之剧增。想象一下:你正在外地出差,…...

金融租赁系统助力企业转型与市场竞争力提升
内容概要 在现代商业环境中,金融租赁系统不仅是一个简单的工具,而是企业转型的重要推动力。通过优化业务流程,提升自动化水平,它帮助企业在复杂的市场中找到自己的立足之地。想象一下,一个企业在使用传统方法时&#…...
【漫话机器学习系列】028.CP
Mallows’ Cp:标准化公式解析与应用 Mallows’ Cp 是一种常用的模型选择工具,用于在一系列候选模型中权衡拟合度和复杂性,帮助我们选择性能最优的模型。本文将基于其标准化公式展开详细解析,并探讨其应用场景、实现方法、优点与局…...

软件测试——面试八股文(入门篇)
今天给大家分享软件测试面试题入门篇,看看大家能答对几题 一、 请你说一说测试用例的边界 参考回答: 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下ÿ…...

如何在不同工作场景下优化嵌入式系统的电源消耗
在不同工作场景下优化嵌入式系统的电源消耗是一个复杂但至关重要的任务,它涉及到硬件设计、软件编程以及系统级管理等多个方面。以下是一些具体的策略和方法: 1. 动态电压频率调节(DVFS) 原理:根据处理器的当前负载动…...

java - SpringBoot3.x接入Security6.x实现JWT认证
java - SpringBoot3.x接入Security6.x实现JWT认证 文章目录 java - SpringBoot3.x接入Security6.x实现JWT认证一、引言二、环境三、Maven依赖四、认识JWT1. JWT组成 五、认识Security6.x1. 和旧版本的区别(Security5.7以前的版本)2. Security6.x的默认筛…...

【每日学点鸿蒙知识】无障碍、getLastLocation、蓝牙问题、卡片大小、关系型数据库等
1、是否有类似无障碍辅助相关的API? 场景描述:锁机app,需要通过无障碍能力辅助检测当前正在打开的app,以及模拟用户操作, 关闭用户想要屏蔽的app 可参考:https://developer.huawei.com/consumer/cn/doc/h…...

[Linux] 服务器CPU信息
(1)查看CPU信息(型号) cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c输出:可以看到有128个虚拟CPU核心,型号是后面一串 128 Intel(R) Xeon(R) Platinum 8336C CPU 2.30GHz(2&…...

MySQL——数据类型
一、常见的数据类型及分类 其中上述的数值类型包含了整形和浮点型,文本、二进制类型主要是字符串类型。 整数类型(Integer Types): TINYINT:范围为-128到127或0到255(无符号),用于…...

《AI赋能自由职业:开启竞争力提升新征程》
在当今数字化时代,AI技术为自由职业者带来了前所未有的机遇,使其能够在激烈的市场竞争中脱颖而出。以下是自由职业者借助AI提升自身竞争力的几种方法。 利用AI优化工作流程,提高效率 自动化任务处理:自由职业者可以借助自动化工具…...

Excel转Json编辑器工具
功能说明:根据 .xlsx 文件生成对应的 JSON 文件,并自动创建脚本 注意事项 Excel 读取依赖 本功能依赖 EPPlus 库,只能读取 .xlsx 文件。请确保将该脚本放置在 Assets 目录下的 Editor 文件夹中。同时,在 Editor 下再创建一个 Exc…...

创建型设计模式、结构型设计模式与行为型设计模式 上下文任务通用方案 设计模式 大全
设计模式(Design Pattern)是一种面向对象编程的思想,分为创建型模式、结构型模式与行为型模式三大类,它们提供了在特定上下文中解决常见任务的通用方案,旨在让程序(软件)具有更好的特点…...

Mac 环境 VVenC 编译与编码命令行工具使用教程
VVenC VVenC 是一个开源的高效视频编码器,专门用于支持 H.266/VVC (Versatile Video Coding) 标准的编码。H.266/VVC 是继 HEVC (H.265) 之后的新一代视频编码标准,主要目的是提供比 HEVC 更高的压缩效率,同时保持或提高视频质量。H.266/VVC…...

如何在 Ubuntu 22.04 上部署 Nginx 并优化以应对高流量网站教程
简介 本教程将教你如何优化 Nginx,使其能够高效地处理高流量网站。 Nginx 是一个强大且高性能的 Web 服务器,以其高效处理大量并发连接的能力而闻名,这使得它成为高流量网站的流行选择。 正确优化 Nginx 可以显著提高服务器的性能࿰…...

springcloud各个组件介绍
Spring Cloud 是一系列框架的集合,它基于 Spring Boot 提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话和集群状态)中快速构建一些常见模式的工具。下面是对 Sprin…...

HTML5实现好看的喜庆圣诞节网站源码
HTML5实现好看的喜庆圣诞节网站源码 前言一、设计来源1.1 主界面1.2 圣诞介绍界面1.3 圣诞象征界面1.4 圣诞活动界面1.5 圣诞热度界面1.6 圣诞纪念界面1.7 联系我们界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现好看的喜庆圣诞节网站源码,圣…...

《学习之道》
《学习之道》主要讲述了以下内容: 学习的原理 大脑的两种认知模式:介绍了专注模式和发散模式。专注模式适合集中精力解决具体问题、进行深度理解和记忆推理,但长时间使用易疲惫和陷入思维定式;发散模式则让大脑在更广泛的认知网…...

【Unity3D】ECS入门学习(十一)ComponentSystem、JobComponentSystem
ComponentSystem:仅支持主线程执行,不支持多线程,并且无法使用SystemBase介绍的扩展方法。 using Unity.Entities; using Unity.Transforms; using Unity.Mathematics;/// <summary> /// 仅主线程执行,不支持多线程 /// &l…...

力扣刷题:栈和队列OJ篇(上)
大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 目录 1.用队列实现栈(1)题目…...

XGPT用户帮助手册
文章目录 2024 更新日志2024.12.272024.12.29 摘要 本文详细介绍了XGPT软件的功能及发展历程。XGPT是一款融合了当前最先进人工智能技术的多模态智能软件,专为国内用户优化设计。除了强大的智能问答功能外,XGPT还结合日常办公和科学研究的需求࿰…...

Oracle 数据库 dmp文件从高版本导入低版本的问题处理
当前有个需求是将oracle 19c上的数据备份恢复到oracle 11g上使用。我们通过exp命令远程进行备份,然后通过imp进行恢复时出现IMP-00010: not a valid export file, header failed verification报错。 这是数据库版本问题,在使用exp命令导出的时候使用的客…...