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

秋招Java后端开发冲刺——关系型数据库篇(Mysql)

本文介绍关系型数据库及其代表Mysql数据库,并介常见面试题目。
在这里插入图片描述

一、数据库概述

1. 数据库(Database, DB):是长期储存在计算机内的、有组织的、可共享的数据集合
2. 数据库管理系统(Database Management System, DBMS):是一种操纵和管理数据库的大型软件
3. 数据库系统(Database System, DBS):是计算机系统、数据库(DB)、数据库管理系统(DBMS)、应用软件、数据库管理员(DBA)和用户的全体(集合)
三者之间的关系为:
在这里插入图片描述

二、关系数据库基础

1. 定义:采用了关系模型来组织数据的数据库,其以行和列的形式存储数据。
2. 特点

特点说明
固定的表结构使用预定义的表结构和关系模型,表中的每个列都有明确定义的数据类型和约束条件。
强一致性遵循ACID(原子性、一致性、隔离性、持久性)事务特性,保证事务的原子性和数据的一致性。
SQL 查询语言使用结构化查询语言(SQL)进行数据操作和管理,支持复杂的查询、连接和数据处理操作。
事务支持提供强大的事务支持,保证在事务中的操作要么全部提交成功,要么全部回滚,确保数据的完整性。
规范化通过规范化设计数据库模式,减少数据冗余,确保数据存储的一致性和节省存储空间。
复杂的关系支持复杂的表关系(一对一、一对多、多对多),通过外键保持数据之间的完整性和关联。
成熟稳定已经经过长时间的发展和优化,成熟的产品和广泛的使用基础,具备稳定性和可靠性。
ACID事务保证事务的原子性、一致性、隔离性和持久性,适合处理需要强一致性和事务控制的应用场景。
复杂查询优化通过索引和查询优化器优化复杂查询,提高查询效率,支持大规模数据处理和高性能应用。
数据完整性使用约束(如主键、外键、唯一约束)和触发器来保持数据的完整性和一致性。

3. 代表:Oracle、DB2、MySQL、Microsoft SQL Server、Microsoft Access

4. 候选码、主码、外码

  • 候选码:若关系中的某一属性或属性组的值能唯一的标识一个元组,而其任何、子集都不能再标识,则称该属性组为候选码。
  • 主码(主键):主码是从候选码中选出来的,一个实体集中只能有一个主码。
  • 外码(外键):一个关系中的一个属性是另外一个关系中的主码则这个属性为外码。
    :不推荐使用,建议在应用层建立外键约束,而不是在数据库中建立实际外键,降低开发复杂性。
  • 主属性:候选码中出现过的属性称为主属性。
  • 非主属性: 不包含在任何一个候选码中的属性称为非主属性。

5. ER图(实体关系图)
在这里插入图片描述

6. 数据库范式(某大厂数据工程一面)

范式定义与要求特点
第一范式 (1NF)要求每个字段都是不可再分的数据单元,确保数据表中的每一列保持原子性。消除了重复的列,确保每列都包含单一的数据类型。
第二范式 (2NF)在满足1NF的基础上,要求表中的非主属性完全依赖于主键,即不存在部分依赖。消除了非主属性对主键部分依赖的问题。
第三范式 (3NF)在满足2NF的基础上,要求表中的非主属性不依赖于其他非主属性,即不存在传递依赖。消除了非主属性之间的传递依赖。
巴斯-科得范式 (BCNF)在满足3NF的基础上,要求每一个非主属性都完全依赖于候选键的每一个超键,即不存在依赖关系的例外情况。强化了对主键的依赖关系,确保所有非主属性完全依赖于候选键。
第四范式 (4NF)在满足BCNF的基础上,要求消除表中的多值依赖关系,即一个属性依赖于另一个属性时,不能有多个独立的值。消除了多值依赖,确保一个属性不依赖于另一个属性的多个独立值。
第五范式 (5NF)在满足4NF的基础上,要求消除表中的连接依赖,即表中的数据在无损分解之后能够重新连接起来,且数据不发生丢失。消除了连接依赖,确保数据在分解后能够无损连接。
第六范式 (6NF)在满足5NF的基础上,进一步规范化数据结构,确保数据的最小冗余,适用于时间相关数据的规范化。在时间相关的数据处理中,提供了更高的规范化程度,确保数据的最小冗余。

7. 函数依赖

  • 若在一张表中,在属性(或属性组)X 的值确定的情况下,必定能确定属性 Y 的值,那么就可以说 Y 函数依赖于 X,写作 X → Y。
  • 部分函数依赖:如果 X→Y,并且存在 X 的一个真子集 X0,使得 X0→Y,则称 Y 对 X 部分函数依赖。
  • 完全函数依赖:在一个关系中,若某个非主属性的值依赖于全部关键字称之为完全函数依赖。
  • 传递函数依赖:在关系模式 R(U)中,设 X,Y,Z 是 U 的不同的属性子集,如果 X 确定 Y、Y 确定 Z,且有 X 不包含 Y,Y 不确定 X,(X∪Y)∩Z=空集合,则称 Z 传递函数依赖于 X。
    8. 存储过程:在其中增加了逻辑控制语句的SQL 语句的集合。
  • 优点:存储过程是预编译过,运行速度快,适合处理复杂业务
  • 缺点:难以调试和扩展,且没有移植性

三、SQL总结

1. 创建、展示、删除、切换、修改数据库

create database 数据库名称;
show database 数据库名称;
drop database 数据库名称;
user 数据库名称;
alter database 数据库名称 character set gbk

2. 数据表操作
(1)创建、展示、删除数据表

create table 数据表名(字段名 数据类型,字段名 数据类型,字段名 数据类型,	
);
show table 数据表名;
drop table 数据表名;

(2)修改数据表(某大厂数据工程一面:如何添加字段)

##修改表名
alter table 数据表名 rename to 修改后数据表名;
##修改字段名
alter table 数据表名 change 字段名 修改后字段名 数据类型;
##修改字段类型
alter table 数据表名 modify 字段名 数据类型;
##增加字段
alter table 数据表名 add 字段名 数据类型;
##删除字段
alter table 数据表名 drop 字段名;

3. drop、delete 与 truncate 的联系与区别

特性DROPDELETETRUNCATE
作用对象整个表、数据库、视图、索引等表中的特定行整个表
是否删除表结构
数据恢复不能恢复(除非有备份)可以通过回滚恢复不能恢复(除非有备份)
触发器触发不触发触发不触发
事务控制无法回滚(在大多数数据库中)可以回滚无法回滚(在大多数数据库中)
自动增量 (AUTO_INCREMENT)移除表后重置不重置重置
删除速度最快最慢
删除条件无条件删除整个对象可以指定条件删除特定记录无条件删除整个表的数据
SQL 标准SQL 标准SQL 标准SQL 标准
空间释放释放所有关联的空间不一定释放空间释放大部分空间

4. 数据表约束

  • 主键约束(PRIMARY KEY):用于唯一标识对应的记录
  • 外键约束(FOREIGN KEY):用于关联两个表
  • 非空约束(NOT NULL):用于字段值规定
  • 唯一约束(UNIQUE):用于字段约束
  • 默认值约束(DEFAULT):设置字段默认值

5. 数据库查询

  • 普通查询
  • 多表连接查询
    (1)交叉连接查询:查询两个数据表的笛卡尔积(数据组合)
SELECT * FROM 表1 CROSS JOIN 表2;

(2)内连接查询:查询两个数据表满足连接条件的数据行

SELECT 查询字段1,查询字段2, ... FROM 表1 [INNER] JOIN 表2 ON 表1.关系字段=表2.关系字段

(3)左外连接查询:查询两个数据表中右表满足连接条件的数据行和左边数据表全部行

SELECT 查询字段1,查询字段2, ... FROM 表1 LEFT [OUTER] JOIN 表2 ON 表1.关系字段=表2.关系字段 WHERE 条件

(4)右外连接查询:查询两个数据表中左表满足连接条件的数据行和右边数据表全部行

SELECT 查询字段1,查询字段2, ... FROM 表1 RIGHT [OUTER] JOIN 表2 ON 表1.关系字段=表2.关系字段 WHERE 条件

:outer可省略

  • 子查询:在查询中嵌套查询(any,all,exist)

6. 视图

  • 视图是基于 SQL 语句的结果集的可视化的表,是虚拟的表,本身不包含数据,也就不能对其进行索引操作
  • 基本语法:
##创建
CREATE VIEW 视图名 AS
SELECT 列
FROM 表
WHERE 查询条件;
##删除
DROP VIEW 视图名;

7. 触发器

  • 当对表进行插入、更新、删除操作的时候会自动执行的特殊的存储过程
  • 作用:数据一致性维护、日志记录和审计、自动计算字段
  • 基本语法
create trigger 触发器的名字
<before|after>  #定义触发器的触发时机
<新增insert|删除delete|修改update> #定义数据操作语言DML类型
on 表名  #指定具体是哪张表
for each row  #声明为行级触发器(只要操作一条记录就能触发触发器执行一次)
具体的触发器操作

8. 事务:用于保证数据的一致性

  • START TRANSACTION - 指令用于标记事务的起始点。
  • SAVEPOINT - 指令用于创建保留点。
  • ROLLBACK TO - 指令用于回滚到指定的保留点;如果没有设置保留点,则回退到 START - TRANSACTION 语句处。
  • COMMIT - 提交事务。

四、Mysql数据库

Mysql最流行的关系型数据库管理系统之一,将数据以表的形式存储,体积小、速度快。(某大厂数据工程一面)

(一)基本数据类型

1. 整型:TINYINT(1字节)、SMALLINT(2字节)、MEDIUMINT(3字节)、INT(4字节,常用)和 BIGINT(8字节)
2. 浮点型:FLOAT(4字节)、DOUBLE(8字节)和DECIMAL(M,D)(M表示数据的长度,D表示的是小数点后的长度)
:FLOAT和DOUBLE存在浮点数精读丢失的问题,因此在存储金额等需要准确无误的数据时需要使用DECIMAL。
3. 字符串类型:CHAR(定长)和VARCHAR(变长,一般不确定长度的时候建议使用,节约资源)
4. 文本类型(存储一些描述性文字):TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
5. 日期与时间类型:YEAR、DATE、TIME、DATETIME 和 TIMESTAMP
6. 二进制类型(存储图片、文件等):TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB

(二)基本架构

在这里插入图片描述

1. Mysql主要由两部分组成:存储引擎和Server层,server层又包括:连接器、查询缓存、分析器、优化器、执行器和一个日志模块(binlog)。各个部分的功能如下:

  • 连接器:身份认证和权限相关
  • 查询缓存: 执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除)
  • 分析器: 检查SQL语句语法是否正确
  • 优化器: 按照 MySQL 认为最优的方案去执行(分析索引)
  • 执行器: 执行语句,然后从存储引擎返回数据
  • binlog:记录数据库操作语句的原始逻辑,用于主从备份,数据一致性
  • 存储引擎:主要负责数据的存储和读取,采用的是插件式架构,支持 InnoDB、MyISAM、Memory 等多种存储引擎。(现在使用的基本上都是InnoDB)

2. SQL语句执行过程

  • 查询语句
    在这里插入图片描述
  • 增删改语句
    在这里插入图片描述
(三)Mysql存储引擎(某大厂数据工程一面)
  • Mysql存储引擎采用的是插件式架构,是基于表的,不是基于数据库的
  • MySQL 5.5.5 之前,MyISAM 是 默认存储引擎。之后,InnoDB 是 MySQL 的默认存储引擎(目前主流)。二者之间的区别为:
特性MyISAMInnoDB
锁粒度表级别行级别
事务支持不支持支持
隔离级别不支持支持 SQL 标准的四个隔离级别
外键支持不支持支持
MVCC 支持不支持支持
索引结构B+Tree,具体实现不同B+Tree,具体实现不同
崩溃恢复不支持支持
性能较弱更强大
(四)Mysql索引

1. 定义:索引是帮助mysql高效获取数据的数据结构
2. 索引分类

索引类型特点
B+Tree 索引默认索引类型,适用于大多数查询操作。支持范围查询、排序查询等。InnoDB 和 MyISAM 都使用 B+Tree 作为默认索引结构。
Hash 索引基于哈希表实现,适用于等值查询,不支持范围查询。Memory 存储引擎支持此索引。
全文索引适用于全文检索,用于查找文本数据中的关键词。MyISAM 和 InnoDB(从 MySQL 5.6 开始)支持全文索引。
空间索引用于地理数据类型的索引(如 GIS 数据),支持复杂的地理空间查询。MyISAM 和 InnoDB(从 MySQL 5.7 开始)支持空间索引。
唯一索引确保索引列的值唯一,可以有多个 NULL 值。适用于需要唯一性约束的列。
主键索引一种特殊的唯一索引,不允许 NULL 值。每个表只能有一个主键索引。
复合索引由多个列组成的索引,用于提高多列查询的性能。
前缀索引对字符列的前缀部分进行索引,适用于需要对长字符串列的前几部分进行索引的情况。
聚簇索引数据存储与索引顺序一致,每个表只能有一个聚簇索引。InnoDB 使用主键作为聚簇索引。如果没有定义主键,则选择一个唯一的非空索引。如果没有合适的唯一索引,InnoDB 会隐式创建一个行 ID。
非聚簇索引索引结构和数据存储分离,索引中存储指向数据行的指针,可以有多个非聚簇索引。MyISAM 和 InnoDB 都支持非聚簇索引。

3. 最左匹配原则(某大厂数据工程一面)

  • 使用联合索引查询时,索引的使用从最左边的列开始,必须依次匹配索引的列,不能跳过任何一列。
  • 违反最左匹配原则导致索引失效情况:查询条件不包含组合索引的最左列;在查询条件中跳过了组合索引中的某一列;使用了不支持索引的函数或运算符

4. 索引失效

  • 创建了组合索引,但查询条件未遵守最左匹配原则
  • 在索引列上进行计算、函数、类型转换等操作
  • 以 % 开头的 LIKE 查询比如 LIKE ‘%abc’;
  • 查询条件中使用 OR,且 OR 的前后条件中有一个列没有索引,涉及的索引都不会被使用到
  • N 的取值范围较大时会导致索引失效,走全表扫描(NOT IN 和 IN 的失效场景相同);
  • 发生隐式转换
(五) Mysql三大日志

1. binlog日志(server层)

  • 逻辑日志,记录内容是语句的原始逻辑;主要用于MySQL 数据库的数据备份、数据同步,保证数据一致性
  • 三种格式:statement、row(可能会产生数据不一致情况用,开销较大)、mixed

2. redo log(InnoDB 存储引擎独有)

  • 物理日志,记录数据页的物理修改,用于数据库的崩溃恢复,保证数据库的持久性
  • 每条 redo 记录由“表空间号+数据页号+偏移量+修改数据长度+具体修改的数据”组成
  • 刷盘时机:事务提交;log buffer 空间不足;事务日志缓冲区满;Checkpoint后台刷新线程;正常关闭服务器

3. undo log

  • 逻辑日志,记录内容与原始操作相反的 SQL 语句,用于事务回滚,保证数据库的原子性
    :redo log 在事务执行过程中可以不断写入,而 binlog 只有在提交事务时才写入
(六)Mysql事务

1. 事务特性(ACID)

  • 原子性(Atomicity):事务是最小的执行单位,不允许分割
  • 一致性(Consistency):执行事务前后,数据保持一致
  • 隔离性(Isolation):并发访问数据库时,各并发事务之间数据库是独立的
  • 持久性(Durability):一个事务被提交之后,它对数据库中数据的改变是持久的
    A + I + D → D A+I+D\rightarrow D A+I+DD

2. 并发事务导致的问题及解决方式

现象说明解决方法
脏读一个事务读到了另一个事务尚未提交的修改数据。设置事务隔离级别为 READ COMMITTED 或更高。
不可重复读一个事务在前后两次读取同一数据时,发现数据被另一个事务修改了,导致两次读取结果不一致。设置事务隔离级别为 REPEATABLE READ 或更高(对记录加锁)。
幻读一个事务在前后两次读取时,发现插入或删除了一些新的数据行,导致读取结果集的行数不一致。设置事务隔离级别为 SERIALIZABLE(对记录加锁和加GAP锁)。

3. 事务隔离级别
Mysql中有四种事务隔离级别:

  • READ-UNCOMMITTED(读取未提交) :最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复
  • READ-COMMITTED(读取已提交) :允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。(通过MVCC实现)
  • REPEATABLE-READ(可重复读) :对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。(通过MVCC实现)
  • SERIALIZABLE(可串行化) :最高的隔离级别,完全服从 ACID 的隔离级别。该级别可以防止脏读、不可重复读以及幻读。(通过加锁实现)

4. 并发事务控制
(1)锁(悲观)

  • 共享锁(S锁):允许多个事务同时获取(锁兼容),通常用于读取操作
  • 排他锁(X锁):不允许多个事务同时获取,通常用于写操作
  • 表级锁:针对非索引字段加的锁,对当前操作的整张表加锁
  • 行级锁(记录锁、间隙锁、临键锁):针对索引字段加的锁 ,只针对当前操作的行记录进行加锁
    :InnoDB 不光支持表级锁,还支持行级锁(默认);表级锁和行级锁都有X和S两种锁
    (2)MVCC(多版本并发控制):对一份数据会存储多个版本,通过事务的可见性来保证事务能看到自己应该看到的版本
    -通过创建数据的多个版本和使用快照读取来实现并发控制
  • 实现手段:隐藏字段、read view(用于控制版本可见性)、undo log(用于记录某行数据的多个版本的数据)
    (3)当前读和快照读
  • 当前读:一致性锁定读,就是给行记录加 X 锁或 S 锁
  • 快照读:一致性非锁定读,就是普通的 SELECT 语句

5. 分库分表
(1)垂直拆分

  • 垂直分库:以表为依据,根据业务将不同表拆分到不同库中
  • 垂直分表:以字段为依据,根据字段属性将不同字段拆分到不同表中
    (2)水平拆分
  • 水平分库:将一个库的数据拆分到多个库中
  • 水平分表:将一个表的数据拆分到多个表中(可以在同一个库内)
(七)Mysql优化

1. 优化方法

  • 表设计优化,可参考Mysql高性能优化
  • 索引优化:把握索引创建原则和失效注意事项(见上文)
  • 主从复制,读写分离
  • 分库分表

2. 定位慢查询
(1)方法

  • 开源工具:arthas、prometheus、skywalking
  • mysql自带的慢日志
    (2)sql执行很慢的分析方法:在sql查询语句前面加explain或desc,分析索引等的使用情况

3. 深度分页优化
(1)深度分页指查询偏移量过大的场景,会导致查询耗时多,响应慢。
(2)优化方案

  • 当可以保证 ID 的连续性时,根据 ID 范围进行分页
  • 先查询出 limit 第一个参数对应的主键值,再根据这个主键值再去过滤并 limit
  • 延迟关联的优化思路,跟子查询的优化思路其实是一样的:都是把条件转移到主键索引树,减少回表的次数,使用内连接包含子查询。
  • 建立覆盖索引,减少回表次数
    :回回表是指根据索引查询到的主键值再去访问主键索引,从而获取完整的数据记录。

相关文章:

秋招Java后端开发冲刺——关系型数据库篇(Mysql)

本文介绍关系型数据库及其代表Mysql数据库&#xff0c;并介常见面试题目。 一、数据库概述 1. 数据库&#xff08;Database, DB&#xff09;&#xff1a;是长期储存在计算机内的、有组织的、可共享的数据集合。 2. 数据库管理系统&#xff08;Database Management System, D…...

DHCP原理1-单个局域网出现多个DHCP服务器会发生什么

1. 背景 DHCP全称是Dynamic Host Configuration Protocol。其协议标准是RFC1541&#xff08;已被RFC2131取代&#xff09;&#xff0c;主要实现服务器向客户端动态分配IP地址&#xff08;如IP地址、子网掩码、网关、DNS&#xff09;和配置信息。其系统架构是标准的C/S架构。RFC…...

24/06/29(21.1205)程序的编译和链接

源文件 ---> 可执行文件,这一过程要执行的流程: 预处理 编译 汇编 链接 组成每一个程序的每个源文件通过编译过程分别转换成目标代码;每个目标代码由链接器捆绑在一起,形成一个单一而完整的可执行程序;链接器同时也会引入标准函数库中任何被该程序所用到的函数,而且它可以…...

使用Java Executors框架处理并发任务

一、并发与Java Executors框架简介 一、并发编程的重要性 并发编程是现代编程中最重要的概念之一。在更多的核心和更快的处理器出现的今天,如何充分利用这些资源就变得异常重要。并发编程允许你的程序同时处理多个任务,从而使程序更有效地利用系统资源,提高执行效率。 提…...

LeetCode:经典题之144、94、145、102题解及延伸|二叉树的遍历|前中后层序遍历|Morris算法

系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 …...

ONLYOFFICE 桌面编辑器 8.1全新发布,更强大的编辑工具

ONLYOFFICE 8.1 一、什么是ONLYOFFICE&#xff1f;二、怎么安装 ONLYOFFICE 8.1三、主要功能介绍四、总结 一、什么是ONLYOFFICE&#xff1f; ONLYOFFICE 是一款功能强大的办公套件&#xff0c;旨在提供全面的文档、表格和演示文稿编辑解决方案。它集成了文字处理、电子表格和演…...

百日筑基第六天-了解一下Dubbo

百日筑基第六天-了解一下Dubbo Dubbo 是一款高性能、轻量级的开源 WEB 和 RPC 框架。 Dubbo 提供了六大核心能力&#xff1a; 面向接口代理的高性能 RPC 调用。智能容错和负载均衡。服务自动注册和发现。高度可扩展能力。运行期流量调度。可视化的服务治理与运维。 简单来说…...

微机原理 复习

第一章导论 1.3 冯诺依曼体系结构 &#xff08;1&#xff09;以二进制形式表示指令和数据 &#xff08;2&#xff09;程序和数据事先放在存储器中&#xff08;预存储&#xff09; &#xff08;3&#xff09;由运算器、控制器、输入设备和输出设备五大部件组成 字长、主频…...

5年工作经验面试经验以及面试题分享

第一家面试题 评价 全是八股文 面试题 MySQL索引类型 索引结构 联合索引可以设置索引类型 不同索引性能差异巨大 基础索引有哪些 B Tree索引和Hash索引 Redis基本数据结构 List是原子的吗 原子性和可见性区别是什么 MySQL的存储过程和视图 MySQL性能优化有哪些 MySQL的存储…...

C# enum Enumeration Type 枚举

定义枚举使用枚举访问枚举值枚举与switch语句枚举特性枚举与位字段总结 在 C#中&#xff0c; enum 是一种特殊的值类型&#xff0c;它允许你为一组相关的常量定义一个名称。枚举提供了一种将一组整数值与更易读的名称关联起来的方法。 定义枚举 你可以使用 enum 关键字来定义…...

【ajax07基础】回调函数地狱

一&#xff1a;什么是回调函数地狱 在一个回调函数中嵌套另一个回调函数&#xff08;甚至一直嵌套下去&#xff09;&#xff0c;形成回调函数地狱 回调函数地狱存在问题&#xff1a; 可读性差异常捕获严重耦合性严重 // 1. 获取默认第一个省份的名字axios({url: http://hmaj…...

华为升腾显卡选型备忘

目录 1. 开发套件 2. 加速模块 3. 加速卡 4. 训练卡 官方地址&#xff1a;https://www.hiascend.com/ 备注&#xff1a; &#xff08;1&#xff09;V后缀的都是Video视频解析卡&#xff0c;本质是推理卡&#xff1b; &#xff08;2&#xff09;I后缀的都是推理卡&#…...

Interview preparation--elasticSearch正排索引原理

正排索引 ElastciSearch 适合做或者说擅长做全文检索&#xff0c;在做全文检索的时候&#xff0c;他会通过生成倒排索引的方式来辅助查询&#xff0c;生成一个词项到 文档id的一个倒排表&#xff0c;这样直接通过 词项可以快速找到所有的 稳定信息。 但是并不是所有的搜索都是…...

C++精解【10】

文章目录 constexpr函数GMP大整数codeblock环境配置数据类型函数类 EigenminCoeff 和maxCoeffArray类 constexpr函数 函数可能在编译时求值&#xff0c;则声明它为constexpr&#xff0c;以提高效率。需要使用constexpr告诉编译器允许编译时计算。 constexpr int min(int x, i…...

Linux高级编程——进程

1.进程的含义? 进程是一个程序执行的过程&#xff0c;会去分配内存资源&#xff0c;cpu的调度 PID, 进程标识符 当前工作路径 chdir umask 0002 进程打开的文件列表 文件IO中有提到 &#xff08;类似于标准输入 标准输出的编号&#xff0c;系统给0&#xff0c;1&#xf…...

手机数据恢复篇:如何在OPPO中恢复永久删除的视频?

说到丢失重要的记忆&#xff0c;如何在OPPO设备中恢复永久删除的视频是一个经常困扰许多用户的话题。意外删除重要视频的情况并不少见&#xff0c;对许多人来说&#xff0c;意识到它们已经消失可能很困难。但是&#xff0c;在正确的指导、方法和工具的帮助下&#xff0c;可以找…...

Obsidan插件开发

1 Obidian 开发 Obsidian 基于 Electron 框架开发&#xff0c;其前端主要使用了 HTML、CSS 和 JavaScript&#xff0c;而后端使用了 Node.js。Node.js 是基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;使 JavaScript 能在服务器端运行。 在开发 Obsidian 插件时&…...

【全球首个开源AI数字人】DUIX数字人-打造你的AI伴侣!

目录 1. 引言1.1 数字人技术的发展背景1.2 DUIX数字人项目的开源意义1.3 DUIX数字人技术的独特价值1.4 本文目的与结构 2. DUIX数字人概述2.1 定义与核心概念2.2 硅基智能与DUIX的关系2.3 技术架构2.4 开源优势2.5 应用场景2.6 安全与合规性 3. DUIX数字人技术特点3.1 开源性与…...

微信小程序服务器从腾讯云迁移到阿里云出现的坑

微信小程序服务器从腾讯云迁移到阿里云出现的坑 背景 原先小程序后台服务器到期&#xff0c;因为之前买的是腾讯云新用户&#xff0c;便宜&#xff0c;到期后续费金额懂的都懂。就在阿里云用新用户买了个新的&#xff0c;遂把服务全转到了阿里云服务器上。 此时&#xff0c;域…...

SQL Server触发器深度解析:数据完整性的守护者

标题&#xff1a;SQL Server触发器深度解析&#xff1a;数据完整性的守护者 摘要 在SQL Server中&#xff0c;触发器是一种特殊的存储过程&#xff0c;它在特定数据库事件发生时自动执行。触发器主要用于维护数据的完整性和实施复杂的业务规则。本文将详细介绍SQL Server中触…...

Qt信号槽的坑

1、重载的信号&#xff08;以QSpinBox为例&#xff09; 像是点击按钮之类的信号槽很好连接&#xff0c;这是因为它的信号没有重载&#xff0c;如果像SpinBox那样有重载信号的话&#xff08;Qt5.12的见下图&#xff0c;不过Qt5.15LTS开始就不再重载而是换信号名了&#xff09;&…...

昇思MindSpore学习笔记1--基本介绍

昇思MindSpore是一个全场景深度学习框架。 一、框架组成 1. 模型库ModelZoo 提供深度学习算法网络。 2. 扩展库MindSpore Extend 拓展领域场景&#xff0c;如GNN/深度概率编程/强化学习等。 3. 科学计算MindSpore Science 科学计算套件。 包含数据集、基础模型、预置高精度模…...

Github Page 使用手册(保姆级教程!)

搭建个人网站&#xff1f;没有服务器&#xff1f;那不如尝试一下 Github Page &#xff01; 最近我正好在搭建个人网站&#xff0c;于是就写一篇博客来详细介绍 Github Page 的使用、部署方式吧&#xff01; 一、进入 Github 访问&#xff1a;github.com 如果你没有 github…...

zram压缩机制看swapon系统调用

1.swapon开启zram交换分区 swapon /dev/block/zram0 mkswap /dev/block/zram0 上面命令调用了linux的swapon系统调用启动zram0交换分区;mkswap命令向块设备文件/dev/block/zram0写入了swap_header信息 问题&#xff1a;实际安卓平台是哪里触发swapon和mkswap调用的&#xff…...

SpringBoot2+Vue3开发博客管理系统

项目介绍 博客管理系统&#xff0c;可以帮助使用者管理自己的经验文章、学习心得、知识文章、技术文章&#xff0c;以及对文章进行分类&#xff0c;打标签等功能。便于日后的复习和回忆。 架构介绍 博客管理系统采用前后端分离模式进行开发。前端主要使用技术&#xff1a;Vu…...

JS【详解】Symbol (含Symbol 作为属性名,静态方法for 和 keyFor,11 个内置的 Symbol 值)

ES6 语法&#xff0c;表示唯一且不可变的值&#xff0c;常用作属性键值或者唯一标识符。 let a Symbol() let a Symbol(atomic symbol)console.log(Symbol() Symbol()) // false console.log(Symbol(atom) Symbol(atom)) // falseSymbol 作为属性名 let key Symbol(); le…...

Vue 项目运行时,报错Error: Cannot find module ‘node:path‘

Vue 项目运行时&#xff0c;报错Error: Cannot find module ‘node:path’ internal/modules/cjs/loader.js:883throw err;^Error: Cannot find module node:path Require stack: - D:\nodejs\node_modules\npm\node_modules\node_modules\npm\lib\cli.js - D:\nodejs\node_mo…...

综合评价 | 基于组合博弈赋权的物流系统综合评价(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 综合评价 | 基于组合博弈赋权的物流系统综合评价&#xff08;Matlab&#xff09; 组合博弈赋权&#xff08;Weighted Sum&#xff09;是一种常见的多目标决策方法&#xff0c;用于将多个目标指标进行综合评估和权衡…...

国标GB28181视频汇聚平台EasyCVR安防监控系统常见播放问题分析及解决方法

国标GB28181安防综合管理系统EasyCVR视频汇聚平台能在复杂的网络环境中&#xff0c;将前端设备统一集中接入与汇聚管理。平台支持多协议接入&#xff0c;包括&#xff1a;国标GB/T 28181协议、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视…...

30 哈希的应用

位图 概念 题目 给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何判断一个数是否在这40亿个整数中 1.遍历&#xff0c;时间复杂度O(N) 2.二分查找&#xff0c;需要先排序&#xff0c;排序(N*logN)&#xff0c;二分查找&#xff0c;logN。…...

(笔记)Error: qemu-virgl: Failed to download resource “qemu-virgl--test-image“解决方法

错误&#xff1a; > Downloading https://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.2/FD12FLOPPY.zip curl: (22) The requested URL returned error: 404Error: qemu-virgl: Failed to download resource "qemu-virgl--test-image" D…...

IntelliJ IDEA介绍

IntelliJ IDEA 是由 JetBrains 开发的一个集成开发环境 (IDE),专门为 Java 开发设计,同时也支持多种其他编程语言和框架。IntelliJ IDEA 以其智能代码分析、强大的重构功能以及丰富的插件生态系统而闻名,是许多开发者的首选 IDE。 IntelliJ IDEA介绍 IntelliJ IDEA 的主要…...

【office技巧】如何合并pdf并且添加目录页

所用工具&#xff1a;wps&#xff0c;acrobat reader 1.制作目录页 在wps里设置一级标题&#xff0c;二级标题&#xff0c;然后自动生成目录页&#xff0c;保存为pdf。 在acrobat reader里删除除了目录页之外的其他页面。 2.pdf合并 在acrobat reader里合并pdf。 注意有可能…...

Spring Boot中的安全性配置详解

Spring Boot中的安全性配置详解 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨如何在Spring Boot应用中实现全面的安全性配置&#xff0c;保…...

数据权限和字段权限设计指南

数据权限和字段权限的设计是信息系统安全的基础。随着数据量的增加和用户需求的多样化&#xff0c;合理的权限设计变得愈加重要。本文将介绍数据权限和字段权限的基本概念、设计思路和实际应用&#xff0c;帮助读者建立全面的权限管理体系。 2. 数据权限设计 2.1 数据权限的定…...

Linux 常用命令之 RZ和SZ 简介

一、引言 在Linux系统管理中&#xff0c;尤其是在远程操作时&#xff0c;文件的上传与下载是常见的需求。对于CentOS用户而言&#xff0c;rz和sz这两个命令提供了简单而高效的文件传输方式&#xff0c;尤其在SSH终端环境中更为便利。本文将详细介绍rz和sz命令的基本概念、如何…...

Docker Compose:简化多容器管理的利器

在现代的应用开发和部署过程中&#xff0c;Docker已经成为不可或缺的工具。它通过容器化技术&#xff0c;使得应用的部署变得更加轻松和高效。然而&#xff0c;当我们需要管理和运行多个容器时&#xff0c;单纯依赖Docker命令行工具可能会显得繁琐且复杂。这时&#xff0c;Dock…...

深度解析:机器学习如何助力GPT-5实现语言理解的飞跃

文章目录 文章前言机器学习在GPT-5中的具体应用模型训练与优化机器翻译与跨语言交流&#xff1a;情感分析与问答系统&#xff1a;集成机器学习功能&#xff1a;文本生成语言理解任务适应 机器学习对GPT-5性能的影响存在的挑战及解决方案技术细节与示例 文章前言 GPT-5是OpenAI公…...

Springcloud-消息总线-Bus

1.消息总线在微服务中的应用 BUS- 消息总线-将消息变更发送给所有的服务节点。 在微服务架构的系统中&#xff0c;通常我们会使用消息代理来构建一个Topic&#xff0c;让所有 服务节点监听这个主题&#xff0c;当生产者向topic中发送变更时&#xff0c;这个主题产生的消息会被…...

js 接收回调函数 转换为promise

下面是一个示例代码&#xff0c;展示如何编写一个接收回调函数并将其转换为 Promise 的 JavaScript 函数&#xff1a; // 定义一个接收回调函数并转换为 Promise 的函数 function convertCallbackToPromise(callbackFunction) {// 返回一个新的 Promise 对象return new Promis…...

Python 面试【★★★】

欢迎莅临我的博客 &#x1f49d;&#x1f49d;&#x1f49d;&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...

计算机网络(物理层)

物理层 物理层最核心的工作内容就是解决比特流在线路上传输的问题 基本概念 何为物理层&#xff1f;笼统的讲&#xff0c;就是传输比特流的。 可以着重看一下物理层主要任务的特性 传输媒体 传输媒体举例&#xff1a; 引导型传输媒体 引导型传输媒体指的是信号通过某种…...

OpenGL-ES 学习(6)---- 立方体绘制

目录 立方体绘制基本原理立方体的顶点坐标和绘制顺序立方体颜色和着色器实现效果和参考代码 立方体绘制基本原理 一个立方体是由8个顶点组成&#xff0c;共6个面&#xff0c;所以绘制立方体本质上就是绘制这6个面共12个三角形 顶点的坐标体系如下图所示&#xff0c;三维坐标…...

《数据结构与算法基础 by王卓老师》学习笔记——类C语言有关操作补充

1.元素类型说明 2.数组定义 3.C语言的内存动态分配 4..C中的参数传递 5.传值方式 6.传地址方式 例子...

高频面试题基本总结回顾2(含笔试高频算法整理)

干货分享&#xff0c;感谢您的阅读&#xff01; &#xff08;暂存篇---后续会删除&#xff0c;完整版和持续更新见高频面试题基本总结回顾&#xff08;含笔试高频算法整理&#xff09;&#xff09; 备注&#xff1a;引用请标注出处&#xff0c;同时存在的问题请在相关博客留言…...

《深入浅出MySQL:数据库开发、优化与管理维护(第3版)》

深入浅出MySQL sql执行流程第一步&#xff1a;通过连接器进行连接第二步&#xff1a;解析器解析 SQL第三步&#xff1a;执行SQL 行记录存储格式行溢出日志数据库三大范式第一范式第二范式第三范式 索引索引分类B树索引BTree vs Hash需要索引1、字段需要频繁的查询操作2、字段用…...

VBA技术资料MF171:创建指定工作表数的工作簿

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…...

【效率提升】新一代效率工具平台utools

下载地址&#xff1a;utools uTools这款软件&#xff0c;是一款功能强大且高度可定制的效率神器&#xff0c;使用快捷键alt space(空格) 随时调用&#xff0c;支持调用系统应用、用户安装应用和市场插件等。 utools可以调用系统设置和内置应用&#xff0c;这样可以方便快捷的…...

Jmeter插件管理器,websocket协议,Jmeter连接数据库,测试报告的查看

目录 1、Jmeter插件管理器 1、Jmeter插件管理器用处&#xff1a;Jmeter发展并产生大量优秀的插件&#xff0c;比如取样器、性能监控的插件工具等。但要安装这些优秀的插件&#xff0c;需要先安装插件管理器。 2、插件的下载&#xff0c;从Availabale Plugins中选择&#xff…...

Android中ViewModel+LiveData+DataBinding的配合使用(kotlin)

Android 中 ViewModel、LiveData 和 Data Binding 的配合使用&#xff08;Kotlin&#xff09; 摘要 本文将介绍如何在 Android 开发中结合使用 ViewModel、LiveData 和 Data Binding 进行数据绑定和状态更新。我们将详细探讨这三者之间的关系&#xff0c;并展示如何在 Kotlin…...

uni-app组件 子组件onLoad、onReady事件无效

文章目录 导文解决方法 导文 突然发现在项目中&#xff0c;组件 子组件的onLoad、onReady事件无效 打印也出不来值 怎么处理呢&#xff1f; 解决方法 mounted() {console.log(onLoad, this.dateList);//有效// this.checkinDetails()},onReady() {console.log(onReady, this.da…...

SQLyog脚本无限试用重置脚本

文章目录 引言脚本(win)必要操作、说明 引言 SQLyog 需要po jie&#xff0c;但是网上的没看到很好使的&#xff0c;直接下的官方。能处理14天试用也是很ok的。 脚本(win) echo offREM SQLyog注册表key&#xff0c;可能跟你的不一样&#xff0c;如果不一样&#xff0c;请替换…...

【代码随想录——图论——图论理论基础】

1. 图论理论基础 1.1 图的基本概念 二维坐标中&#xff0c;两点可以连成线&#xff0c;多个点连成的线就构成了图。 当然图也可以就一个节点&#xff0c;甚至没有节点&#xff08;空图&#xff09; 1.1.1 图的种类 有向图 加权有向图无权有向图 无向图 加权无向图无权无向…...

Vue 爬坑

都是基于最新的Vue3版本 "vue": "^3.4.29" 1 vue组建样式设置 <script setup lang"ts"> import HelloWorld from ./components/HelloWorld.vue </script><template><div><a href"https://vitejs.dev" tar…...

电气-伺服(6)脉冲控制

一、脉冲模式原理&#xff1a; 运动控制器输出脉冲信号给伺服驱动器 伺服驱动器工作于位置模式 伺服驱动器内部要完成三闭环&#xff08;位置闭环 、速度闭环、电流环&#xff09; 脉冲和伺服控制环&#xff1a;脉冲的个数作用于位置环。脉冲的频率作用于速度环 二、脉冲的两…...

Python逻辑控制语句 之 循环语句--死循环无限循环

1.死循环和无限循环的异同 死循环无限循环 相同点 在程序执⾏层⾯上看起来是⼀样的, 都是代码⼀直执行不能停止 不同点 是由于 写代码的人 不小心造成bug 是写代码的⼈ 故意这么写⽆限循环中,⼀般会存在⼀个 if 判断语句, 当这个判断语句的条件成⽴, 执⾏ break 语句,来终止循…...

城市通勤神器!奔腾小马2.89万元火爆预售

上下班高峰期的通勤,总是让人头疼。坐公交人挤人,路上的耗时更是无法计算;乘地铁相对省时间,但车厢里依然像是“沙丁鱼罐头”。如果遇到刮风下雨等恶劣天气,就更加令人恼火。在这种情况下,很多人都希望能拥有一辆价格便宜、配置够用的代步小车,虽无奢华体验,但求遮风挡…...

北京车展丨纯血敞篷越野车国产福特烈马正式上市

车主必读4月25日北京报道今日,以“放马去野”为主题,福特品牌集结旗下多款 “野”性十足的传奇明星车型亮相2024北京车展,从道路性能到硬核越野,进一步诠释“放天性 去野行”的品牌主张,致力与中国消费者玩在一起、野在一起。2024北京车展W207福特展台发布会现场,福特中国…...

惊爆价!荣威D7EV限时优惠至12.98万起,B级纯电轿车新选择!

在新能源汽车市如火如荼的竞争中,上汽荣威凭借其一系列策略性的优惠活动,再次引发了市场的热烈讨论。4月2日,一场涵盖多个车型、针对不同需求的优惠派对拉开帷幕,呈现在消费者眼前的是诸如轿车荣威D7 EV、全新荣威i5,SUV车型eRX5以及MPV车型iMAX8等价位更亲民、品质不减的…...

Element-UI 入门指南:从安装到自定义主题的详细教程

Element-UI 是一个基于 Vue.js 的前端组件库&#xff0c;它提供了丰富的 UI 组件&#xff0c;可以帮助开发者快速构建高质量的用户界面。以下是使用 Element-UI 的快速入门指南&#xff1a; 安装 Element-UI Element-UI 是一个基于 Vue.js 的组件库&#xff0c;它提供了丰富的…...

Flutter 中的 NestedScrollViewViewport 小部件:全面指南

Flutter 中的 NestedScrollViewViewport 小部件&#xff1a;全面指南 Flutter 是一个功能丰富的 UI 工具集&#xff0c;它提供了多种布局和控件来帮助开发者构建美观且功能强大的应用。在 Flutter 的滚动控件中&#xff0c;NestedScrollView 是一个特别的存在&#xff0c;它允…...

微前端(无界)入门

主应用通过props给子应用传值 父子应用通过eventBus通信 通过路由同步实现记录子应用的路由状态 主应用 main.ts: import ./assets/main.cssimport { createApp } from vue import { createPinia } from pinia import WujieVue from wujie-vue3import App from ./App.vue impo…...