数据库系统概念
1. 绪论
数据库的基本概念:
数据(data): 数据库中存储的基本对象, 可以是文字, 声音, 图片, 视频等。
数据库(DB): 概括来说就是永久存储, 有组织, 可共享的大量数据的集合。
数据库管理系统(DBMS): 和操作系统一样是计算机基础软件, 主要有数据定义语言(DDL, 对数据对象的组成与结构进行定义)和数据操作语言(DML, 增删改查)等
数据库系统(DBS): 由数据库, 数据库管理系统(及其应用开发工具), 应用程序和数据库管理员(DBA)组成的存储、管理、处理和维护数据的系统。
引入数据库后计算机系统的层次结构:

1.1 数据模型
两类数据模型: 1) 概念模型 2) 逻辑模型+物理模型
数据模型=数据结构+ 数据操作+数据的完整性约束条件
客观对象的抽象过程:

概念模型:
1) 实体: 客观存在可互相区别的事物, 如学生, 职工, 部门, 选课等。
2) 属性: 实体所具有的某一特性, 如学生的学号, 姓名, 出生年月等。
3) 码: 唯一标识实体的属性集, 如学生的学号, 整个属性组是码, 则称为全码
4) 实体型: 实体名及其属性名集合, 如学生(学号, 姓名, 出生年月)就是一个实体型
5) 实体集: 同一类型实体的集合
6) 联系: 实体之间的联系, 如一对一, 一对多, 多对多。
逻辑模型:
1) 层次模型

优点: 数据结构清晰简单, 查询效率优
缺点: 多对多联系表示不自然, 对插入和删除限制多
2) 网状模型

优点: 具有良好性能
缺点: 结构比价复杂
3) 关系模型

4) 面向对象数据模型
5) 对象关系数据模型
6) 半结构化数据模型
相关概念:
关系: 一个关系对应一张表
元组: 表中的一行为一个元组
属性: 表中的一列即为一个属性
码: 可以唯一确定一个元组
域: 属性的取值范围, 如 {男, 女}
分量: 元组中的一个属性值
关系模式: 关系名(属性1, 属性2, ... , 属性n)
备注: 关系必须是规范化的, 每一个分量是一个不可分的数据项, 即不允许表中表。
数据库系统结构
模式: 逻辑模式, 数据库中全体数据的逻辑结构和特征的描述, 是所有用户的公共数据视图。
外模式: 称子模式或用户模式, 是数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述。
内模式: 存储模式, 数据物理结构和存储方式的描述。
1.2 数据库系统模式
数据库系统的三级模式结构:

数据库的二级映像:
1) 外模式/模式映像: 模式改变时, 可使外模式不变, 保证数据与程序的逻辑独立性
2) 模式/内模式映像: 数据库的结构改变时, 可使模式保持不变, 保证数据与程序的物理独立性
2 关系数据库
笛卡尔积: 域上的一种运算。
例图:

备注: 其中(刘逸, 计算机专业, 刘晨) 是元组(记录), 刘逸是分量。R(A1,A2 ...An), 即关系名(属性1, 属性2 ... 属性n) 称为关系模型
2.1 关系操作
关系的完整性:
实体完整性: 关系R中主属性不能取空值, 如学生(学号, 姓名, 年龄), 学号为主码不能是空值。
参照完整性: 外码取空值或取对应关系表中某个元组的值
用户定义的完整性: 如成绩只能取 0~100
关系代数运算符表:

示例表:

2.1.1 选择

2.1.2 投影

备注: 去重
2.1.3 连接


备注: 自然连接是两个关系的相同属性上的等值连接。结果中把重复的属性去掉, 而等值连接不必。
2.1.4 除

2.2 数据库标准语言SQL
SQL的基本概念:

视图: 数据库中只存放视图定义而不存放视图对应数据, 因此是一个虚表
2.2.1 SQL理论
数值类型:
bit[(m)] m制定位数,默认为1 tinyint 1字节
smallint 2字节 int 4字节
bigint 8字节 float(M,D) 4字节
double(M,D) 8字节 decimal(M,D) 相当于java BigDecimal
日期类型: datetime 8字节
运算符: and, or, not
2.2.2 SQL定义
约束:
NOT NULL: 不能为空 (用户定义的完整性)
unque: 数据唯一 (用户定义的完整性)
check+逻辑语句: 检查列值是否满足条件表达式 (用户定义的完整性)
default: 默认值
primary key auto_increment:限制列为自增主键 (实体完整性)
constraint 取外键名 foreign key(子表的列名) references父表名(列名) (参照完整性)
创建数据库:
create database 数据库名 default charset=字符集类型
创建表:
create table 表名(列名 类型,列名 类型)default charset=utf8
创建索引:
create unique (创建唯一索引) index 索引名 on 表名(列名asc/desc , 列名asc/desc)
创建断言:
略
创建视图:
1) create view 视图名 as select 语句 (whit check option 表示要符合创建视图时的where语句, 不符合where则不能修改视图)
2) create or replace view 视图名 as select 语句: 存在视图名则替换。
创建触发器:
create trigger 触发器名 before/after 增删查改关键字 on 表名 for each row 触发器事件
创建存储过程:
delimiter 符号:自定义结束标志符
create procedure 存储过程名 (in/out/inout 参数名,参数类型)
begin
…过程体…
end (自定义结束符)
存储的调用:
call 存储过程名();
创建函数: 只能用于查询
create function 函数名(参数 参数类型)
returns +返回值类型
begin
……函数体
return(xxx)
end (自定义结束符)
函数的调用:
select 函数名()
声明游标:
declare 游标名 cursor is +select语句
打开游标:
open 游标名
使用游标:
fetch 游标名into 变量1,变量2,…………
关闭游标:
close 游标名
创建会话变量:
set @变量名:=变量值
创建局部变量:
declare 变量名 变量类型 default 变量值
创建用户:
Create user ‘用户名’ identified by ‘密码’
多行插入:
insert into 表名 values(列的值),(列的值)
插入部分列数据:
insert into 表名 (列名) values(列的值)
新增查询的数据(列要对应):
insert into 表名 select 列名,列名 from 表名;
2.2.3 SQL 删除
删除数据库:
drop database 数据库名
删除表:
drop table 表名
删除数据:
delete from 表名 where
truncate table 表名:清空表
删除表索引:
drop index 索引名 on 表名
2.2.4 SQL查询
显示所有数据库:
show databases
查看表结构:
show create table 表名;
查看表(所有表名)
show tables;
查看表的列结构:
desc(describe) 表名;
查看表内容:
1) 查看全列:select * from 表名;
2) 查看某列并设别名:select 列名,列名 as 别名 from 表名 as 别名;
3) 查看某列(含去重):select distinct 列名 from 表名;
4) 排序查看:select 列名 from表名 order by 列名 asc(默认升序)/desc(降序)
5) 筛选查看:select 列名 from 表名 where 条件( NULL=NULL结果是NULL 为假 )
where条件:

模糊匹配like:
1) %: 匹配任意多个(包括 0 个)字符
2) _ : 匹配严格的一个任意字符
正则表达式示例:
select * from users where mail regexp '^[a-zA-Z][a-zA-Z0-9_.-]*\\@leetcode\\.com$';
^:这个符号表示字符串的开始。
[a-zA-Z]:匹配任何单个字母,无论大小写。
[a-zA-Z0-9_.-]*:匹配任何数量(包括零个)的字母,数字,下划线,点或破折号。星号表示前面的字符可以出现任意次数。
\@leetcode\.com: \用于转义特殊字符@和.,使它们被视为普通字符而不是正则表达式的特殊符号。
$:这个符号表示字符串的结束。
分页查询limit:
select xxx from 表名 [where ...] [order by ...] limit n offset s; ( s 始,选 n 条, 起始下标为0 )
聚合查询(行查询):
函数:
1) count(*): 对某列的查询,返回行数,为null的不记录当中
2) sum(列): 对数字进行累加求和
3) avg(): 求平均数
4) round(x,2): 对x精确到小数点后两位
5) min(): 最小值
6) max(): 最大值
7) DATEDIFF(end_date, start_date) BETWEEN 0 AND 29 : 用于计算两个日期之间的差距
8) DATE_FORMAT(order_date,'%Y%m') = '202002': 用于筛选为2020-02开头的日期
9) ifNull(xx, 默认值): xx为空则取默认值
分组操作:
1)select 列名,max(列名) from 表名 group by 列名(分组依据);
2)group by 列名:根据列名,将相同的值进行分组
筛选条件:
having 条件:分组之后进行的条件筛选(where是在分组前筛选)
备注: 分组查询后, 某列可能有多个不同值, 但查询显示只显示一个值
比如:
id p_id date
1 1 2018
2 2 2018
3 1 2017
用select * from x group by p_id 后, date只能显示一个值了
笛卡尔查询:
select * from 表1,表2;
多表查询:
select * from 表1,表2 where 表名.列名=表名.列名;
外连接:
select * from 表1 left/right join 表2 on 条件
自链接:
select * from 表1 as 别名,表1 as 别名;
说明: 对自己笛卡尔积后,将行问题变列问题
子查询:
略
集合查询:
1) union :去重
2) union all:不去重
4) intersect: 交集
5) minus: 差集
查看用户权限:
Show grants
2.2.5 SQL修改
修改列数据:
update 表名 set列名=值,列名=值 where 条件
alter修改表结构:
添加列:
alter table 表名 add 列名 类型
添加索引:
alter table 表名 add (fulltext)index 索引名(列名)
删除列:
alter table 表名 drop 列名
改变列的类型:
1)alter table 表名 modify 列名 类型 after 列名(可以after到某个列名后面)
2)alter table 表名 change 旧列名 新列名 类型
改变列的名字:
alter table 表名 change 就列名 新列名
改变表的名字:
alter table 旧表名 rename 新表名
删除约束:
alter table 表名drop 约束名 外键名
改变表的字符集:
alter table 表名 character set utf8;
更改数据库密码:
Set password=’新密码’
更改其他用户密码:
1)Alter user ‘用户名’@’主机名(或者%)’ identified by ‘新密码’
2)Revoke 权限 on 数据库.表名 from 用户
2.2.7 SQL 常用函数
Year(); month(); now(); day();
char_length(列名): 计算字符长度
substr(string,start,length): string是字符串, start是起始截取位置(从0开始), length是截取长度
concat()函数
举例:select concat (id, name, score) as 别名 from 表名;
group_concat()函数
语法:group_concat( [distinct] 要连接的字段 [order by字段 asc/desc ])
case when语法:
case 表达式
when 值1 then 结果1的语句
when 值2 then 结果2的语句
….
end(结束)
if语法:
if 表达式 then 执行语句
elseif 表达式2 then 执行语句
else 执行语句
end if;
举例:
SELECT id,
SUM(CASE WHEN month='Jan' THEN revenue END) AS Jan_Revenue,
SUM(CASE WHEN month='Feb' THEN revenue END) AS Feb_Revenue,
FROM department
GROUP BY id
说明: case when 只会匹配 数据库的第一个数据,如果不是它就返回空了 用sum 就可以去 数据里的每个值都匹配一次 ,返回匹配得上的值总和。
while语法:
while 表达式 do
循环体
end while
2.2.6 SQL其他
cmd登入:mysql -u root -p123456
source + 路径:导入数据库语句;
选中数据库:use 数据库名
注释: --
备份单个数据库:(不能加分号)
Mysqldump -uroot -p 数据库名>备份的路径
备份全部数据库:
Mysqldump -uroot -p -A>备份的路径
备份部分数据库:
Mysqldump -uroot -p –databases 数据库1 数据库2>备份的路径
备份表:
Mysqldump -uroot -p 数据库名 表名1 表名2>备份的路径
表的导出:
1) 先查看mysql允许的导出路径: show global variables like '%secure%'
2) select语句 into outfile “文件路径”
赋予用户权限:
Grant select/update/drop(或all privileges)等等 on 数据库名.表名(或*) to ‘用户名’@’主机名’
3 关系数据库理论
3.1 数据依赖
1) 函数依赖:

解释: 学号(Sno)决定学生所在的系(Sdept), 学号, 课程号(Cno)决定成绩(Grade)。
完全函数依赖: X→Y X的任意一个真子集X' 使得X' --/-> Y
部分函数依赖示例: (学号, 课程号)能决定学生信息, 但 (学号) 就可决定学生信息, (学号)是(学号, 课程号)的子集, 所以不满足完全函数依赖, 所以为部分函数依赖。
主属性: 包含在任何一个候选码中的属性称为主属性, 反之为非主属性。
2) 多值依赖:

3.2 范式
1NF: 每一个分量必须是不可分的数据项。
反例:

2NF: 满足1NF基础上, 每个非主属性完全依赖于任何一个候选码。即不存在部分函数依赖。
3NF: 在2NF的基础上, 消除了非主属性的传递依赖
BCNF: 在3NF基础上, 消除了主属性中的部分函数依赖, 如以下例子, 其中S, J, T都为主属性。
(S,J)-->T, (S,T)-->J T-->J
4NF: 解决多值依赖, 如上图的多值依赖WSC表, 将关系模式WSC(W,S,C) 分解为WS(W,S) 和WC(W,C)

规范化过程:

3.3 闭包
题目: 关系具有属性A,B,C,D,E,F, 函数依赖有{A->C, BC->DE, D->A, F->B}, 那么(AB)+
计算过程如下:
-
初始闭包:{A, B}
-
应用 A→C:闭包扩展为 {A, B, C}
-
应用 BC→DE:闭包扩展为 {A, B, C, D, E}
-
应用 D→A:A 已在闭包中,无需添加
-
F→B:F 不在闭包中,无法应用
-
最终闭包:{A, B, C, D, E}
4. 数据库设计
数据库设计的六个阶段:
1) 需求分析
2) 概念结构设计
3) 逻辑结构设计
4) 物理结构设计
5) 数据库实施
6) 数据库运行和维护
各个阶段的描述:

E-R图举例:

E-R图转化为关系模型(逻辑结构设计):

物理结构设计:
1) B+树索引适合: 某个属性(组)经常在查询条件中出现。或经常作为最大最小值等聚合函数的参数。经常在连接操作的连接条件中出现
2) hash索引适合: 一个关系的大小可预知且不变
3) 聚簇存取: 提高某个属性的查询速度, 把具有相同值的元组集中存放在连续的物理块中。适合: 经常一起进行连接操作的关系操作的关系。经常出现在相等比较条件中。属性上的值重复率很高。
5. 数据库恢复技术
5.1 事务
用户定义一个数据库操作序列, 这些操作要么全部做, 要么全不做
事务的ACID特性
1) 原子性(Atomicity): 诸操作要么都做, 要么都不做
2) 一致性(Consistency): 数据库只包含成功事物提交的结果, 与原子性密切相关
3) 隔离性(Isolation): 一个事物的执行不能被其他事务干扰, 即一个事物内部操作及使用的数据对其他并发事务是隔离的, 并发执行的各个事务之间不能互相干扰
4) 持续性(Durability): 也称永久性, 指事务一旦提交, 他对数据库中数据的改变就是永久的, 其他操作或故障对其执行结果不应该有任何影响。
数据不一致性示例:

封锁:
1)排它锁: 写锁, T事物对数据对象加上X锁, 则只允许T读和写, 其他事务不能加任何锁
2)共享锁: 读锁, T事物对数据对象加上S锁, 则事物T可读不可写, 其他事务只能加S锁
5.2 恢复技术
1)数据转储: 某个时期的整个数据库的备用数据(后备副本)。
2)登录日志文件: 用来记录事务对数据库的更新操作的文件。 严格按并发事务的时间次序; 先写日志文件, 后写数据库。
相关文章:
数据库系统概念
1. 绪论 数据库的基本概念: 数据(data): 数据库中存储的基本对象, 可以是文字, 声音, 图片, 视频等。 数据库(DB): 概括来说就是永久存储, 有组织, 可共享的大量数据的集合。 数据库管理系统(DBMS): 和操作系统一样是计算机基础软件, 主要有数据定义语言(DDL, 对数据对象的组…...
51单片机学习之旅——定时器
打开软件 1与其它等于其它,0与其它等于0 1或其它等于1,0或其它等于其它 TMODTMOD&0xF0;//0xF01111 0000进行与操作,高四位保持,低四位清零,高四位定时器1,低四位定时器0 TMODTMOD|0x01;//0x010000 0…...
一台服务器将docker image打包去另一天服务器安装这个镜像
一台服务器将docker image打到去另一天服务器安装这个镜像 1. 打包2.另一台服务器执行 1. 打包 docker save -o nebula-graph-studio.tar harbor1.vm.example.lan/dockerio/vesoft/nebula-graph-studioxxx.tar 是打包好的文件 后面的是 docker image 2.另一台服务器执行 docke…...
QT串口通信之二,实现单个温湿度传感器数据的采集(采用Qt-modbus实现)
接上 QT串口通信之一,实现单个温湿度传感器数据的采集 上述文章中用QSerialPort实现了温湿度传感器的采集,实际上比较麻烦的,因为需要自定义解析帧, 接下来,用Qt-modbus-封装度更高的协议,来实现温湿度的采集; #include "MainWindow.h" #include "ui_M…...
基于SpringBoot的校园消费点评管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
【小沐学Java】VSCode搭建Java开发环境
文章目录 1、简介2、安装VSCode2.1 简介2.2 安装 3、安装Java SDK3.1 简介3.2 安装3.3 配置 4、安装插件Java Extension Pack4.1 简介4.2 安装4.3 配置 结语 1、简介 2、安装VSCode 2.1 简介 Visual Studio Code 是一个轻量级但功能强大的源代码编辑器,可在桌面上…...
《操作系统 - 清华大学》8 -4:进程管理:进程控制结构
深度剖析进程控制块:操作系统进程管理的核心关键 在操作系统的复杂体系中,进程控制块(PCB)是实现高效进程管理的关键所在。接下来,将从多个维度深入剖析进程控制块,帮助更好地理解其在操作系统中的重要作用…...
RPC 框架项目剖析
RPC 框架项目剖析 说明 本文用于梳理一个 rpc项目的实现细节,此项目基于cpp语言 大概三千行左右,用于学习目的。 项目链接:rpc项目 项目底层类 1.抽象消息类 描述: 各种消息的基类 属性: 消息id,消息类型…...
C++ Boost面试题大全及参考答案
目录 boost::thread_group 如何实现批量线程管理? 解释 boost::asio 中 proactor 模式的设计原理 使用 boost::atomic 实现无锁环形缓冲区 boost::mutex 与 std::mutex 在异常安全上的差异 如何用 boost::condition_variable 实现生产者 - 消费者模型 当 boost::shared_p…...
关于Transparent native-to-ascii conversion
1、功能 自动转换ASCII编码,即在文件系统上,文件的编码格式为ascii编码,在编辑器(idea/pycharm)中,其展现结果为配置的编码格式,仅展现方便阅读 使用UTF-8并勾选自动转换ASCII编码结果&#x…...
js数据类型检测
JavaScript的数据类型检测 typeof操作符 适用场景 基本数据类型快速判断:适用于快速判断变量是否为number、string、boolean、undefined、function等基本数据类型。比如在函数参数检查中,若要求传入数字参数,可用typeof来初步判断。函数类型…...
go 模块管理
go version 查看版本 go version go1.21.12 windows/amd64 需要保证:go的版本升级为1.11以上,go mod依赖的最底版本 go env 查看go的环境变量 go env 开启go mod # 标识开启go的模块管理 set GO111MODULE=on GO111MODULE有三个值:off, on和auto(默认值)。 GO111M…...
记一次复杂分页查询的优化历程:从临时表到普通表的架构演进
1. 问题背景 在项目开发中,我们需要实现一个复杂的分页查询功能,涉及大量 IP 地址数据的处理和多表关联。在我接手这个项目的时候,代码是这样的 要知道代码里面的 ipsList 数据可能几万条甚至更多,这样拼接的sql,必然是要内存溢出的,一味地扩大jvm参数不…...
基于 Python 的项目管理系统开发
基于 Python 的项目管理系统开发 一、引言 在当今快节奏的工作环境中,有效的项目管理对于项目的成功至关重要。借助信息技术手段开发项目管理系统,能够显著提升项目管理的效率和质量。Python 作为一种功能强大、易于学习且具有丰富库支持的编程语言&…...
java面试场景问题
还在补充,这几天工作忙,闲了会把答案附上去,也欢迎各位大佬评论区讨论 1.不用分布式锁如何防重复提交 方法 1:基于唯一请求 ID(幂等 Token) 思路:前端生成 一个唯一的 requestId(…...
JS宏实例:数据透视工具的制作(四)
上一节中,我们完成了核心的计算代码部分,本节中将完善事件代码 一、创建所有需求的事件函数 1、窗体初始化 // 窗体初始化 function pivotForm_Initialize(){} function typeSet_Initialize(){} function valueSet_Initialize(){} function allCol…...
5. Go 方法(结构体的方法成员)
Go语言没有传统的 class ,为了让函数和结构体能够关联,Go引入了“方法”的概念。 当普通函数添加了接收者(receiver)后,就变成了方法。 一、函数和方法示例 // 普通函数 func Check(s string) string {return s }//…...
20250223学习记录
之前HDFview查看.hdf5文件的时候,看到土壤湿度数据是分为AM和PM,当时我有一个这样的疑问 但是后来用Python处理的时候,直接就是对整个的.hdf5文件处理,当时没有注意这一块,所以就没有这个疑问了。 今天突然看到一篇论…...
WPS携手DeepSeek:开启智能办公新时代
在数字化办公的浪潮中,效率与智能成为了人们追求的核心目标。近年来,人工智能技术的飞速发展为办公领域带来了前所未有的变革契机。DeepSeek作为一款备受瞩目的人工智能工具,以其强大的功能吸引了众多用户,然而在使用过程中&#…...
无需服务器,浏览器跑700+AI模型?!
Transformers.js 是一个创新的网络机器学习库,它将先进的 Transformer 模型直接带入浏览器,无需服务器端支持。这个库与 Hugging Face 的 Python transformers 库功能对等,提供相似的 API 接口来运行预训练模型,涵盖了自然语言处理…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
【QT控件】显示类控件
目录 一、Label 二、LCD Number 三、ProgressBar 四、Calendar Widget QT专栏:QT_uyeonashi的博客-CSDN博客 一、Label QLabel 可以用来显示文本和图片. 核心属性如下 代码示例: 显示不同格式的文本 1) 在界面上创建三个 QLabel 尺寸放大一些. objectName 分别…...
篇章一 论坛系统——前置知识
目录 1.软件开发 1.1 软件的生命周期 1.2 面向对象 1.3 CS、BS架构 1.CS架构编辑 2.BS架构 1.4 软件需求 1.需求分类 2.需求获取 1.5 需求分析 1. 工作内容 1.6 面向对象分析 1.OOA的任务 2.统一建模语言UML 3. 用例模型 3.1 用例图的元素 3.2 建立用例模型 …...
解密鸿蒙系统的隐私护城河:从权限动态管控到生物数据加密的全链路防护
摘要 本文以健康管理应用为例,展示鸿蒙系统如何通过细粒度权限控制、动态权限授予、数据隔离和加密存储四大核心机制,实现复杂场景下的用户隐私保护。我们将通过完整的权限请求流程和敏感数据处理代码,演示鸿蒙系统如何平衡功能需求与隐私安…...
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术点解析
Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术点解析 第一轮:基础概念问题 请解释Spring框架的核心容器是什么?它的作用是什么? 程序员JY回答:Spring框架的核心容器是IoC容器(控制反转…...
Three.js进阶之粒子系统(一)
一些特定模糊现象,经常使用粒子系统模拟,如火焰、爆炸等。Three.js提供了多种粒子系统,下面介绍粒子系统 一、Sprite粒子系统 使用场景:下雨、下雪、烟花 ce使用代码: var materialnew THRESS.SpriteMaterial();//…...
