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

数据库基础知识超详细解析~‍(进阶/复习版)

文章目录

  • 前言
  • 一、数据库的操作
    • 1.登入数据库
    • 2.创建数据库
    • 3.显示当前数据库
    • 4.使用数据库
    • 5.删除数据库
  • 二、常用数据类型
  • 三、数据库的约束
    • 1约束类型
    • 2NULL约束
    • 3UNIQUE:唯一约束
    • 4DEFAULT:默认值约束
    • 5 PRIMARY KEY:主键约束
    • 6 FOREIGN KEY:外键约束
    • 7 CHECK约束(了解)
  • 四、表的设计
  • 五、表的增删改查
    • 1.查看表结构
    • 2.创建表
    • 3.新增
    • 4.查询
      • 4.1聚合查询
        • 4.1.1聚合函数
        • 4.1.2GROUP BY子句
        • 4.1.3HAVING
      • 4.2联合查询/多表查询(面试考察频率高)
        • 4.2.1内连接
        • 4.2.2 外连接
        • 4.2.3自连接
        • 4.2.4 子查询
        • 4.2.5 合并查询
  • 六、MySQL索引事务
    • 1.索引
      • 1.1概念
      • 1.2 作用
      • 1.3特点
      • 1.4适用场景
      • 1.5使用
    • 2.事务
      • 2.1事务的概念
      • 2.2事务的使用
      • 2.3事务的特性(ACID)
      • 2.4事务的隔离级别
  • 七、JDBC
    • 7.1JDBC优势
    • 7.2JDBC开发
    • 7.3JDBC使用步骤总结
    • 7.4面试问答


前言

数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

一、数据库的操作

1.登入数据库

mysql -u root -p

在这里插入图片描述

2.创建数据库

create database 表名 charset utf8;

3.显示当前数据库

show databases;

在这里插入图片描述

4.使用数据库

use 数据库名;

在这里插入图片描述

5.删除数据库

drop database 数据库名;

二、常用数据类型

数据类型大小(字节)
tinyint1
smallint2
int4
bigint8
float4
double8
decimal(M,D)M/D最大值+2
varchar0-65535
datetime8
timestamp4

三、数据库的约束

1约束类型

NOT NULL - 指示某列不能存储 NULL 值。
UNIQUE - 保证某列的每行必须有唯一的值。
DEFAULT - 规定没有给列赋值时的默认值。
PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标
识,有助于更容易更快速地找到表中的一个特定的记录。
FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。
CHECK - 保证列中的值符合指定的条件。对于MySQL数据库,对CHECK子句进行分析,但是忽略check字句.

2NULL约束

指定id不为空

 create table student(id int not null,name varchar(20));

在这里插入图片描述

3UNIQUE:唯一约束

指定class_id列为唯一的,不重复的

create table student(id int not null, class_id int unique,name varchar(20));

在这里插入图片描述

4DEFAULT:默认值约束

指定插入数据时,name列为空,默认值unkown

create table student(id int not null, class_id int unique,name varchar(20) default 'unknow');

在这里插入图片描述

5 PRIMARY KEY:主键约束

指定id列为主键

create table student(id int not null primary key , class_id int unique,name varchar(20) default 'unknow');

在这里插入图片描述
对于整数类型的主键,常配搭自增长auto_increment来使用。插入数据对应字段不给值时,使用最大
值+1。

--主键是 NOT NULL 和 UNIQUE 的结合,可以不用 NOT NULL
id int primary key auto_increment,

6 FOREIGN KEY:外键约束

创建班级表classes,id为主键

create table class(id int primary key auto_increment,name varchar(20));

创建学生表student,一个学生对应一个班级,一个班级对应多个学生。使用id为主键,classes_id为外键,关联班级表id

create table student(id int primary key auto_increment,name varchar(20),class_id int,foreign key(class_id) references class(id));

在这里插入图片描述

7 CHECK约束(了解)

MySQL使用时不报错,但忽略该约束

drop table if exists test_user;
create table test_user (id int,name varchar(20),sex varchar(1),check (sex ='男' or sex='女')
);

四、表的设计

一对一:eg.一个学生只有一个学号,一个学号只能表示一个学生。
一对多:eg.一个学生对应一个班级,但一个班级有多个学生。
多对多:eg.一个学生可以选择多门课程,一门课程也能被多个学生选择。

五、表的增删改查

1.查看表结构

desc 表名;

在这里插入图片描述

2.创建表

create table 表名(字段1 类型1,字段2 类型2,...
);

在这里插入图片描述

3.新增

创建一个学生表student,插入两个学生信息,再将已有的学生信息复制到test表中。

 create table student(id int primary key auto_increment,name varchar(20));insert into student values (1,'张三'),(2,'李四');create table test(id int primary key auto_increment,name varchar(20));insert into test select * from student;select * from test;

在这里插入图片描述

4.查询

4.1聚合查询

4.1.1聚合函数

常见的统计总数、计算平局值等操作,可以使用聚合函数来实现,常见的聚合函数有

函数说明
count返回查询到的数据的 数量
sum返回查询到的数据的总和,不是数字没有意义
avg返回查询到的数据的平均值,不是数字没有意义
max返回查询到的数据的最大值,不是数字没有意义
min返回查询到的数据的最小值,不是数字没有意义
CREATE TABLE exam_result (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL COMMENT '同学姓名',
chinese float DEFAULT 0.0 COMMENT '语文成绩',
math float DEFAULT 0.0 COMMENT '数学成绩',
english float DEFAULT 0.0 COMMENT '英语成绩'
);
-- 插入测试数据
INSERT INTO exam_result (name, chinese, math, english) VALUES
('唐三藏', 67, 98, 56),
('孙悟空', 87, 78, 77),
('猪悟能', 88, 98, 90),
('曹孟德', 82, 84, 67),
('刘玄德', 55, 85, 45),
('孙权', 70, 73, 78),
('宋公明', 75, 65, 30);
select * from exam_result;

在这里插入图片描述

--统计有多少条数据select count(*) from exam_result;-- 统计数学成绩总分select sum(math) from exam_result;-- 统计平均总分select avg(chinese+math+english) as '平均分' from exam_result;-- 返回英语最高分select max(english) from exam_result;-- 返回 > 70 分以上的数学最低分select min(math) from exam_result where math>70;

在这里插入图片描述

4.1.2GROUP BY子句

SELECT 中使用 GROUP BY 子句可以对指定列进行分组查询。需要满足:使用 GROUP BY 进行分组查询时,SELECT 指定的字段必须是“分组依据字段”,其他字段若想出现在SELECT 中则必须包含在聚合函数中。

create table emp(id int primary key auto_increment,name varchar(20) not null,role varchar(20) not null,salary numeric(11,2)
);
insert into emp(name, role, salary) values
('zs','教师', 10000),
('ls','教师', 12000),
('ww','管理员', 8000),
('zl','管理员', 9500),
('yq','老板', 13500);

在这里插入图片描述

--查询每个角色的最高工资、最低工资和平均工资select role,max(salary),min(salary),avg(salary) from emp group by role;

在这里插入图片描述

4.1.3HAVING

GROUP BY 子句进行分组以后,需要对分组结果再进行条件过滤时,不能使用 WHERE 语句,而需要用 HAVING

--显示平均工资低于1500的角色和它的平均工资
select role,max(salary),min(salary),avg(salary) from emp group by role 
having avg(salary)<10000;

在这里插入图片描述

4.2联合查询/多表查询(面试考察频率高)

实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积:
实际开发中往往数据来自不同的表,所以需要多表联合查询。多表查询是对多张表的数据取笛卡尔积:
在这里插入图片描述

  1. 笛卡儿积:两个表之间的运算方式,本质就是进行排列组合,笛卡儿积的列数就是前两个表的列数之和,笛卡儿积的行数就是前两个表的行数之积。select * from 表1,表2;得到的结果绝大部分都是“无效数据”。
  2. 指定连接条件。
  3. 指定其他条件。
  4. 针对列进行精简、表达式运算、聚合查询。
--创建班级表
create table classes (id int primary key auto_increment,name varchar(20),`desc` varchar(100)
);--创建学生表
create table student (id int primary key auto_increment,sn varchar(20),name varchar(20),qq_mail varchar(20),classes_id int
);
-- 创建课程表
CREATE TABLE course (id int primary key auto_increment,name varchar(20)
);
-- 创建课程学生中间表:考试成绩表
create table score (score decimal(3, 1),student_id int,course_id int
);
insert into classes(name, `desc`) values
('计算机系2019级1班', '学习了计算机原理、C和Java语言、数据结构和算法'),
('中文系2019级3班','学习了中国传统文学'),
('自动化2019级5班','学习了机械自动化');
insert into student(sn, name, qq_mail, classes_id) values
('09982','黑旋风李逵','xuanfeng@qq.com',1),
('00835','菩提老祖',null,1),
('00391','白素贞',null,1),
('00031','许仙','xuxian@qq.com',1),
('00054','不想毕业',null,1),
('51234','好好说话','say@qq.com',2),
('83223','tellme',null,2),
('09527','老外学中文','foreigner@qq.com',2);
insert into course(name) values
('Java'),('中国传统文化'),('计算机原理'),('语文'),('高阶数学'),('英文');
insert into score(score, student_id, course_id) values
-- 黑旋风李逵
(70.5, 1, 1),(98.5, 1, 3),(33, 1, 5),(98, 1, 6),
-- 菩提老祖
(60, 2, 1),(59.5, 2, 5),
-- 白素贞
(33, 3, 1),(68, 3, 3),(99, 3, 5),
-- 许仙
(67, 4, 1),(23, 4, 3),(56, 4, 5),(72, 4, 6),
-- 不想毕业
(81, 5, 1),(37, 5, 5),
-- 好好说话
(56, 6, 2),(43, 6, 4),(79, 6, 6),
-- tellme
(80, 7, 2),(92, 7, 6);

在这里插入图片描述

在这里插入图片描述
(1)查询“许仙”同学的 成绩

  1. 笛卡儿积:两个表之间的运算方式,本质就是进行排列组合,笛卡儿积的列数就是前两个表的列数之和,笛卡儿积的行数就是前两个表的行数之积。select * from 表1,表2;得到的结果绝大部分都是“无效数据”
select * from student,score;

在这里插入图片描述

  1. 指定连接条件
select * from student,score where student.id=score.student_id;

在这里插入图片描述

  1. 根据需求给出其他条件
select * from student,score where student.id=score.student_id and student.name='许仙';

在这里插入图片描述

  1. 针对列进行精简/表达式运算/聚合查询
--写法一
select student.name,score.score from student,score where student.id=score.student_idand student.name='许仙';
--写法二select * from 表1 join 表2 on 连接条件;
select student.name,score.score from student join score on student.id=score.student_id and student.name='许仙';

在这里插入图片描述
在这里插入图片描述

(2)查询所有同学的总成绩,及同学的个人信息:

  1. 笛卡尔积
select * from student,score;

在这里插入图片描述

  1. 指定连接条件,对这里的有效记录进行筛选
select * from student,score where student.id=score.student_id;

在这里插入图片描述

  1. 补充一些其他条件
    由于此处是需要知道所有同学的总成绩,不需要对同学进行进一步筛选,这个步骤就没有啦~

  2. 针对列进行精简/表达式运算/聚合查询

select student.name,sum(score.score) as total from student join score on student.id=score.student_id group by student.name;

在这里插入图片描述

(3)查询所有同学的成绩及同学的个人信息

  1. 笛卡尔积
    在这里插入图片描述

  2. 指定连接条件,对这里的有效记录进行筛选
    此时三个表的笛卡儿积可以理解为student和score先算笛卡儿积,连接条件为student.id=score.student_id
    上诉结果再和course表计算笛卡儿积,连接条件score.course_id=course.id
    在这里插入图片描述

  3. 指定其他条件,此处和第二个例子一样也是不需要指定的。

  4. 针对列进行精简/表达式运算/聚合查询

 select student.name,course.name,score.score from student,course,score where student.id=score.student_id and course.id=score.course_id;

在这里插入图片描述

4.2.1内连接

eg1.学生表和课程表的数据是一一对应的,学生表中的任何一个记录都能在分数表中体现出来,反之,分数表中的每个记录也能在学生表体现。此时,内连接和外连接结果是一样的。

create table student(id int,name varchar(20));
create table score(studentId int,score int);
insert into student values(1,'张三'),(2,'李四'),(3,'王五');
insert into score values(1,67),(2,90),(3,85);
select * from student;
select * from score;
--写法一
select * from student,score where student.id=score.studentId;
--写法二(可以省略inner)
select * from student inner join score on student.id=score.studentId;

在这里插入图片描述

4.2.2 外连接

外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接(left);右侧的表完全显示我们就说是右外连接(right)。

eg1.

--左外连接
select * from student left join score on student.id=score.studentId;
--右外连接
select * from student right join score on student.id=score.studentId;

在这里插入图片描述

eg2.如果对这两个表的数据进行修改,让这两个表的记录不再一一对应,此时内连接和外连接就不一样了(少数情况)

--更改id3为4
update score set studentID=4 where score = 85;
--内连接
select * from student join score on student.id=score.studentId;

在这里插入图片描述
在这里插入图片描述

--左外连接
select * from student left join score on student.id=score.studentId;
--右外连接
select * from student right join score on student.id=score.studentId;

左外连接:
在这里插入图片描述

在这里插入图片描述

右外连接

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.2.3自连接

在这里插入图片描述
eg.显示所有“计算机原理”成绩比“Java”成绩高的成绩信息[代码见4.2]
在这个例子中,要想完成不同科目的比较需要比较行之间的大小(sql中无法直接做到,就只能把行转成列)

  1. 笛卡尔积
--给表起别名
select * from score as s1,score as s2;

在这里插入图片描述

  1. 指定连接条件(由于此处要关注的是每个学生自己的两门课情况,按照学生id作为连接条件)
select * from score as s1,score as s2 where s1.student_id=s2.student_id;

在这里插入图片描述

  1. 根据需求给出其他条件
    需要筛选出所有左表为3,右表为1的学生记录
 select * from score as s1,score as s2 where s1.student_id=s2.student_id and s1.course_id=3 and s2.course_id=1;

在这里插入图片描述

 select * from score as s1,score as s2, student where s1.student_id=s2.student_id and s1.course_id=3 and s2.course_id=1 and s1.score>s2.score and student.id=s1.student_id;

在这里插入图片描述

  1. 针对列进行精简、表达式运算、聚合查询。
select student.name,s1.score as '计算机原理',s2.score as 'Java' from score as s1,score as s2, student where s1.student_id=s2.student_id and s1.course_id=3 and s2.course_id=1 and s1.score>s2.score and student.id=s1.student_id;

在这里插入图片描述

4.2.4 子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询

eg.查询与“不想毕业” 同学的同班同学[代码见4.2]

select name from student where name  != '不想毕业' and classes_id =(select classes_id from student where name = '不想毕业');

在这里插入图片描述

对于子查询非常不建议使用。

4.2.5 合并查询

在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all。使UNION 和UNION ALL时,前后查询的结果集中,字段需要一致。
union该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。

eg.查询id小于3,或者名字为“英文”的课程[代码见4.2]

select * from course where name ='英文' union select * from course where id <3;

在这里插入图片描述
在这里插入图片描述

六、MySQL索引事务

1.索引

1.1概念

索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现

1.2 作用

数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。 索引所起的作用类似书籍目录,可用于快速定位、检索数据。
索引对于提高数据库的性能有很大的帮助。

1.3特点

  • 加快查询的速度。
  • 索引自身是一定的数据结构,也要占据存储空间。
  • 当我们需要进行新增、删除、修改的时候,也需要对索引进行更新。(额外的开销)

1.4适用场景

1)对于存储空间,要求不高。(存储空间比较充裕)
2)应用场景中,查询较多,增加修改删除不多。

1.5使用

创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引。

  • 查看索引
show index from 表名;
  • 创建索引
    对于非主键、非唯一约束、非外键的字段,可以创建普通索引
create index 索引名 on 表名(字段名);

在这里插入图片描述

  • 删除索引
 drop index 索引名 on 表名;

在这里插入图片描述
在这里插入图片描述

2.事务

2.1事务的概念

事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务。

2.2事务的使用

(1)开启事务:start transaction;
(2)执行多条SQL语句
(3)回滚或提交:rollback/commit;
说明:rollback即是全部失败,commit即是全部成功。

2.3事务的特性(ACID)

  • 原子性(Atomicity,或称不可分割性):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
    在这里插入图片描述
    在这里插入图片描述
    一致性(Consistency):相当于原子性的延伸,在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作(通过约束避免数据出现非法情况)。
    隔离性(Isolation,又称独立性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致(通过隔离性对问题进行权衡,希望数据尽量准确?/速度尽量快?)。
    在这里插入图片描述
    持久性(Durability):事务任何的修改,都是持久化存在(写入硬盘的),无论是重启主机,修改都不会丢失(数据库本身就是为了持久化存储)

关于隔离性的事务并发执行可能产生的bug----
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.4事务的隔离级别

读未提交【Read Uncommitted】: 在该隔离级别,所有的事务都可以看到其他事务没有提交的执行结果。(实际生产中不可能使用这种隔离级别的),但是相当于没有任何隔离性,也会有很多并发问题,如脏读,幻读,不可重复读等,我们上面为了做实验方便,用的就是这个隔离性。
读提交【Read Committed】:该隔离级别是大多数数据库的默认的隔离级别(不是 MySQL 默认的)。它满足了隔离的简单定义:一个事务只能看到其他的已经提交的事务所做的改变。这种隔离级别会引起不可重复读, 即一个事务执行时,如果多次select, 可能得到不同的结果。
可重复读【Repeatable Read】: 这是 MySQL默认的隔离级别,它确保同一个事务,在执行中,多次读取操 作数据时,会看到同样的数据行。但是会有幻读问题。
串行化【Serializable】: 这是事务的最高隔离级别,它通过强制事务排序,使之不可能相互冲突,从而解决了幻读的问题。它在每个读的数据行上面加上共享锁,。但是可能会导致超时和锁竞争(这种隔离级别太极端, 实际生产基本不使用)

在这里插入图片描述

七、JDBC

7.1JDBC优势

Java语言访问数据库操作完全面向抽象接口编程
开发数据库应用不用限定在特定数据库厂商的API
程序的可移植性大大增强

7.2JDBC开发

在这里插入图片描述

在这里插入图片描述

7.3JDBC使用步骤总结

1.创建数据库连接Connection
2. 创建操作命令Statement
3. 使用操作命令来执行SQL
4. 处理结果集ResultSet
5.释放资源

7.4面试问答

1)数据库连接有哪些方式?分别有什么区别?
数据库连接有三种方式:本地连接、远程连接和 socket连接。
本地连接:数据库和应用程序运行在同一台服务器上,通过本地主机IP地址或者localhost进行连接。这种方式速度快,安全性高,适合一些单机小型项目。
远程连接:数据库和应用程序运行在不同的服务器上,通过远程主机IP地址进行连接。这种方式适合分布式系统,但由于数据传输经过网络,可能会存在安全风险和连接速度较慢的问题。
socket连接:通过TCP/IP协议的socket连接进行数据库连接。这种连接方式相对于本地连接和远程连接来说更加灵活,更适用于大型分布式系统,但需要考虑网络环境的稳定性和安全性。

2) 数据库Statement和PreparedStatement有什么区别?
数据库中的Statement和PreparedStatement都是用来执行SQL语句的类,但是它们之间有一些区别。
Statement是一种普通的SQL执行方式,每次执行SQL语句时都会将SQL语句发送给数据库进行解析和编译,这样会增加数据库的负担。而PreparedStatement是一种预编译的SQL执行方式,它会在首次执行SQL语句时将SQL语句发送给数据库进行解析和编译,然后将编译结果缓存起来,之后再执行相同SQL语句时直接使用已经编译好的结果进行执行,从而提高执行效率。
使用Statement执行SQL语句时,如果SQL语句中存在变量,需要手动拼接SQL语句,这样存在SQL注入的风险。而PreparedStatement允许在SQL语句中设置占位符,然后通过set方法设置参数值,从而防止SQL注入。
PreparedStatement通常比Statement更安全,更快速,特别是在需要频繁执行相同SQL语句的情况下。所以在开发中一般推荐使用PreparedStatement而不是Statement。


最后,码字不易,如果觉得对你有帮助的话请点个赞吧,关注我,一起学习,一起进步!

相关文章:

数据库基础知识超详细解析~‍(进阶/复习版)

文章目录 前言一、数据库的操作1.登入数据库2.创建数据库3.显示当前数据库4.使用数据库5.删除数据库 二、常用数据类型三、数据库的约束1约束类型2NULL约束3UNIQUE:唯一约束4DEFAULT&#xff1a;默认值约束5 PRIMARY KEY&#xff1a;主键约束6 FOREIGN KEY&#xff1a;外键约束…...

创建对象的方法有哪些

创建对象的方法主要取决于你使用的编程语言和上下文。下面我将列出一些主流编程语言中创建对象的方法&#xff1a; Python: 使用类定义和__init__方法&#xff1a; pythonclass MyClass: def __init__(self, name): self.name nameobj MyClass("Alice") 1.使用工厂…...

Oracle 10g字符编码

pl/sql developer查询数据时出现乱码&#xff0c;主要检查如下&#xff1a; 1、检查服务器编码 select * from v$nls_parameters;select * from nls_database_parameters;select userenv(language) from dual; 2、查看数据库可用字符集参数设置 select * from v$nls_valid_val…...

掌握抽象基础之20个必备原则,看完你还不会,你打我

抽象基础之20个必备原则 1. 面向对象编程&#xff08;OOP&#xff09;中抽象原则背后的基本思想是什么&#xff1f;2.抽象和封装的区别&#xff1f;3.提供一个现实生活中说明抽象的例子4.在编程语言中如何实现抽象&#xff1f;5.定义抽象类6.提供一个抽象类的真实世界场景7.解释…...

设计模式 -- 2:策略模式

目录 总结部分&#xff1a;策略模式的优点部分代码部分 总结部分&#xff1a; 策略模式和简单工厂模式很像 区别在于 简单工厂模式 需求的是由工程创造的类 去给客户直接答案 而策略模式在于 我有主体 一个主体 根据策略的不同来进行不同的计算 我的主体就负责收钱 然后调度相…...

【快速上手ProtoBuf】proto 3 语法详解

1 &#x1f351;字段规则&#x1f351; 消息的字段可以⽤下⾯⼏种规则来修饰&#xff1a; singular &#xff1a;消息中可以包含该字段零次或⼀次&#xff08;不超过⼀次&#xff09;。 proto3 语法中&#xff0c;字段默认使⽤该规则。repeated &#xff1a;消息中可以包含该…...

人工智能的幽默“失误”

人工智能迷惑行为大赏 随着ChatGPT热度的攀升&#xff0c;越来越多的公司也相继推出了自己的AI大模型&#xff0c;如文心一言、通义千问等。各大应用也开始内置AI玩法&#xff0c;如抖音的AI特效&#xff5e;在使用过程中往往会遇到一些问题&#xff0c;让你不得不怀疑&#x…...

js的异步请求?

在 JavaScript 中&#xff0c;进行异步请求通常涉及到使用 XMLHttpRequest 对象或者更现代的 Fetch API 或 Axios 库。这些工具可以帮助我们向服务器发送请求并在后台获取数据&#xff0c;而不会阻塞页面的其他操作。 下面是一个简单的示例&#xff0c;演示如何使用原生的 XML…...

华润对象存储(OBS)工具类

目录 一、备注二、工具类三、对象存储放在内网&#xff0c;如何实现外网访问 一、备注 1、ObjectBasicInfo、ObjectDetailInfo、ResultBody这三个类可自行替换或者去掉 二、工具类 package com.xxx.util;import com.amazonaws.HttpMethod; import com.amazonaws.auth.AWSStat…...

强缓存和协商缓存的区别?

协商缓存和强缓存是 HTTP 缓存机制中的两种不同的策略&#xff0c;用于减少网络请求并提高网页加载速度。它们之间的主要区别在于缓存的验证方式和服务器返回的响应头。 强缓存&#xff1a; 强缓存是基于过期时间&#xff08;Expires&#xff09;和缓存标识&#xff08;Cache…...

ChatGPT提问技巧——对抗性提示

ChatGPT提问技巧——对抗性提示 对抗性提示是一种允许模型生成能够抵御某些类型的攻击或偏差的文本的技术。这种技术可用于训练更健壮、更能抵御某些类型的攻击或偏差的模型。 要在 ChatGPT 中使用对抗性提示&#xff0c;应为模型提供一个提示&#xff0c;该提示的设计应使模…...

openGauss使用BenchmarkSQL进行性能测试(上)

一、前言 本文提供openGauss使用BenchmarkSQL进行性能测试的方法和测试数据报告。 BenchmarkSQL&#xff0c;一个JDBC基准测试工具&#xff0c;内嵌了TPC-C测试脚本&#xff0c;支持很多数据库&#xff0c;如PostgreSQL、Oracle和Mysql等。 TPC-C是专门针对联机交易处理系统…...

Java的线程池机制

Java的线程池机制是用来管理和调度多个线程的工具。通过线程池&#xff0c;可以避免频繁地创建和销毁线程&#xff0c;提高线程的复用率&#xff0c;减少资源消耗。 Java中提供了几种不同类型的线程池&#xff1a; 1、FixedThreadPool&#xff08;固定大小线程池&#xff09;…...

EasyCode 插件的具体使用

前言 EasyCode 是基于IntelliJ IDEA Ultimate版开发的一个代码生成插件&#xff0c;主要通过自定义模板&#xff08;基于velocity&#xff09;来生成各种你想要的代码。通常用于生成Entity、Dao、Service、Controller。如果你动手能力强还可以用于生成HTML、JS、PHP等代码。理…...

Ypay源支付6.9无授权聚合免签系统可运营源码

YPay是一款专为个人站长设计的聚合免签系统&#xff0c;YPay基于高性能的ThinkPHP 6.1.2 Layui PearAdmin架构&#xff0c;提供了实时监控和管理的功能&#xff0c;让您随时随地掌握系统运营情况。 说明 Ypay源支付6.9无授权聚合免签系统可运营源码 已搭建测试无加密版本…...

SpringBoot+Vue项目报错(问题已解决)

1、错误日志 2、分析原因&#xff1a; JWT strings must contain exactly 2 period characters. Found: 0 JWT字符串必须包含2个句号字符。发现:0 分析&#xff1a;可以判断出大概可能是token格式出现了问题 3、参考 http://t.csdnimg.cn/hfEiY 4、检查后端代码是否出现问…...

DEAP 自定义交叉操作

在遗传算法中&#xff0c;使用DEAP库来实现自定义的交叉操作可以非常灵活。如果你想模拟多个染色体的情况&#xff0c;通过在染色体的特定区间进行交叉&#xff0c;你需要自定义一个交叉函数。以下是一个示例&#xff0c;展示如何实现一个自定义的交叉函数&#xff0c;该函数允…...

ByText

getByText, queryByText, getAllByText, queryAllByText, findByText, findAllByText API​ getByText(// If youre using screen, then skip the container argument:container: HTMLElement,text: TextMatch,options?: {selector?: string *,exact?: boolean true,igno…...

Vcenter esxi web界面访问提示权限被拒绝

一、问题现象 原因 应该是在vCenter中添加主机的时候&#xff0c;将锁定模式设置成了严格。 二、解决过程 2.1 方式一 BMC登录主机&#xff0c;连接显示器和键盘。 输入账号密码&#xff0c;按F2进行设置&#xff0c;将会打开一个界面&#xff0c;第一个选项是设置密码&…...

掌握FilterOutputStream类!

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java IO相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

腾讯云V3签名

想要接入腾讯云的Api&#xff0c;必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口&#xff0c;但总是卡在签名这一步&#xff0c;最后放弃选择SDK&#xff0c;这次终于自己代码实现。 可能腾讯云翻新了接口文档&#xff0c;现在阅读起来&#xff0c;清晰了很多&…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...