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

文章目录

  • 前言
  • 一、数据库的操作
    • 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。


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/463896.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Calendar类 --java学习笔记

Calendar 代表的是系统此刻时间对应的日历通过它可以单独获取、修改时间中的年、月、日、时、分、秒等 常见方法&#xff1a; 创建Calendar对象&#xff1a; 用Calendar.getInStance&#xff08;&#xff09;方法&#xff0c;返回一个此时此刻的日历&#xff08;Calendar&am…

关于IP地址证书的申请

对于直接通过IP地址访问的服务器&#xff0c;为其配置SSL证书同样至关重要。以下是一份详尽的指南&#xff0c;教你如何为你的IP地址申请SSL证书。 IP地址证书目前有DV验证和OV验证两种主流的验证方式&#xff0c;DV验证只需验证IP的所有权&#xff0c;OV的在此基础上&#xff…

换根dp,LeetCode310. 最小高度树

一、题目 1、题目描述 树是一个无向图&#xff0c;其中任何两个顶点只通过一条路径连接。 换句话说&#xff0c;一个任何没有简单环路的连通图都是一棵树。 给你一棵包含 n 个节点的树&#xff0c;标记为 0 到 n - 1 。给定数字 n 和一个有 n - 1 条无向边的 edges 列表&#…

自媒体人的超级宝典

这个10块钱的小报童还有谁没买&#xff1f; 你可别等到它涨到19.9的时候来问我有没有优惠 昨天正式发售就已经2300人了&#xff0c;之前可是几个小时就涨了400多人&#xff0c;照这个速度下去&#xff0c;明天就要涨价了。 说实话&#xff0c;我看了里面的内容&#xff0c;觉…

Linux网络编程: 以太网帧Frame/ARP/RARP详解

一、TCP/IP五层模型 物理层&#xff08;Physical Layer&#xff09;&#xff1a;物理层是最底层&#xff0c;负责传输比特流&#xff08;bitstream&#xff09;以及物理介质的传输方式。它定义了如何在物理媒介上传输原始的比特流&#xff0c;例如通过电缆、光纤或无线传输等。…

SAP Activate项目管理方法论路线图

SAP Activate 是 SAP 推出的一种基于敏捷方法论的灵活、快速且引导式的实施方法论&#xff0c;专为加速SAP S/4HANA和其他SAP解决方案的部署而设计。这个方法论结合了最佳实践、引导配置和方法论本身的强大能力&#xff0c;以确保项目的快速实施和成功部署。SAP Activate的核心…

ffmpeg 滤镜实现不同采样率多音频混音

音频混音在音视频开发中是十分重要的一个环节,所谓音频混音就是将所有需要混音的数据相加得到混音数据,然后通过某个算法进行非法数据的处理;例如相加数值超过最大值,最小值等! 在实际的音频开发中,要实现混音的流程如下: 因此我们的编码实现就分为五部分:寻找…

22-分支和循环语句_while语句(下)(初阶)

该代码输出什么&#xff1f; int main() {char ch \0;while ((ch getchar()) ! EOF){if (ch < 0 || ch>9){continue;}putchar(ch);}return 0; } 结果&#xff1a;该代码只打印数字字符 附&#xff1a;ASCII码表

Python基础入门 --- 5.函数

文章目录 Python基础入门5.函数5.1 基本定义5.2 传入参数5.3 返回值5.3.1 None类型 5.4 说明文档5.5 嵌套调用 Python基础入门 5.函数 定义&#xff1a;可重复使用&#xff0c;用来实现特定功能的代码段。 # 不使用内置函数len&#xff0c;统计字符串的长度 str "Hell…

南卡罗来纳州历史和文化经济地理和自然政治和社会教育1. 加州大学公布2024年秋季入学新生和转学申请数据2. 2024考研国家线公布路德会信徒核心信仰礼拜和

目录 南卡罗来纳州 历史和文化 经济 地理和自然 政治和社会 教育 1. 加州大学公布2024年秋季入学新生和转学申请数据 2. 2024考研国家线公布 路德会信徒 核心信仰 礼拜和实践 分布 社会和文化影响 约翰塞巴斯蒂安巴赫 生平简介 音乐风格和作品 遗产和影响 …

AXI Lite协议详解

AXI Lite协议详解 axi&#xff08;Advanced eXtensible Interface&#xff09;是一种总线协议&#xff0c;该协议是ARM公司提出的amba&#xff08;Advanced Microcontroller Bus Architecture&#xff09;3.0协议中最重要的部分&#xff0c;是一种面向高性能、高带宽、低延迟的…

C++17之std::variant

1. std::variant操作 如下列出了为std:: variable <>提供的所有操作。

Docker 学习笔记一

一、什么是docker Docker 是一个基于轻量级虚拟化技术的容器&#xff0c;整个项目基于Go语言开发&#xff1b;Docker是一个C/S架构&#xff0c;后端众多模块各司其职&#xff0c;docker的daemon是运行在主机上通过client可以进行通信。 docker 由三部分组成&#xff1a;镜像(…

Rust 构建开源 Pingora 框架可以与nginx媲美

一、概述 Cloudflare 为何弃用 Nginx&#xff0c;选择使用 Rust 重新构建新的代理 Pingora 框架。Cloudflare 成立于2010年&#xff0c;是一家领先的云服务提供商&#xff0c;专注于内容分发网络&#xff08;CDN&#xff09;和分布式域名解析。它提供一系列安全和性能优化服务…

Figure 01掀起了具身智能的崭新篇章

在人工智能的发展历程中&#xff0c;OpenAI始终扮演着创新的先锋角色。最近&#xff0c;他们与Figure公司的合作成果尤为引人注目&#xff0c;这一合作将多模态大模型技术成功应用于Figure 01机器人的开发中&#xff0c;为人类与机器的互动开辟了全新的时代。该机器人不仅能够与…

innovus中path group 的策略和应用(上)

在所有的后端工具里边&#xff0c;有三个重要的引擎&#xff1a;auto-place&#xff0c;CTS&#xff0c;auto-route三个。这里边的auto-place是决断了整个设计时序的基点。由于&#xff0c;auto-place的动作是在设计的preCTS阶段&#xff0c;所以这里的设计时序就是广义上说的&…

HDFSDATANODE数据传输详解

本文主要阐述datanode中一个socket连接接收字节流的构成&#xff0c;帮助datanode的接收与处理数据。注意hadoop版本为3.1.1。 写在前面 Datanode本质上也是TCPServer&#xff0c;一般的TCPServer接到客户端请求以后会分配一个线程处理&#xff0c;对于Datanode而言&#xff…

npm、nodejs和vue之间关系和区别介绍

本文讲解npm、Node.js和Vue.js这三者之间的关系和区别&#xff0c;以及它们各自的特点。 首先&#xff0c;让我们来了解一下Node.js。 **Node.js** 是一个开源的服务器端运行环境&#xff0c;它允许开发者使用JavaScript来编写服务器端的代码。在传统的Web开发中&#…

[ROS 系列学习教程] rosbag Python API

ROS 系列学习教程(总目录) 本文目录 1. 构造函数与关闭文件2. 属性值3. 写bag文件内容4. 读bag文件内容5. 将bag文件缓存写入磁盘6. 重建 bag 文件索引7. 获取bag文件的压缩信息8. 获取bag文件的消息数量9. 获取bag文件记录的起止时间10. 获取话题信息与消息类型 rosbag 的 Pyt…

【Java探索之旅】运算符解密 位运算,移位运算

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java入门到精通 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一、位运算符1.1 按位与 &1.2 按位或 |1.3 按位取反 ~1.4 按位异或^ 二、移位运…