数据库期末复习资料

考纲

选择 10分
简答题 25分
ER图+建表 15分
建表以后的范式的分解、规范化 15分
Sql语句 35分 :关系代数,select,触发器

--------------------------------------数据库设计-----------------------------------
第一章:
1.数据库部分
2.三级结构、两级独立性

第二章:
1.ER图
2.三个世界
3.数据模型出选择
4.关系模型的基本概念
5.关键字的概念
6.简答:为什么要做规范化,原因是什么? 不规范增删改都会有异常。
8.PPT上的五类题型
------------------------------SQL 语句--------------------------------------------------

1.数据库完整性
2.sql的 组成:DDL、DML、DCL

1.视图定义
3.修改视图的限制

1.索引的概念
2.索引优点、缺点
3.簇索引和非簇索引的差别

1.存储过程和触发器、定义变量、常见数据类型(整数字符串)、ifelse语句、循环函数

1.可靠性安全性完整性必考其一(简答)
考如何实现
备份的方式,有什么差别
并发控制会造成什么,怎么做,死锁的解法
安全性不同的level

ER图难点(15)

注意三元关系

  1. 画图
  2. 转换为关系模式

函数依赖和范式难点(15)

  1. 判断范式
  2. 求候选码
  3. 求最小函数依赖
  4. 化简为第二范式
  5. 化简为第三范式

SQL语言(35)

存储过程和触发器、定义变量、常见数据类型(整数字符串)、ifelse语句、循环函数

1.关系代数写查询语句(2个)

连接、选择、投影

2.过程、触发器、视图(2个)

创建视图

视图:可以理解成虚拟表。

(1)编写视图实现查询出所有银行卡账户信息,显示卡号,身份证,姓名,余额。

create view CardAndAccount as
select CardNo 卡号,AccountCode 身份证,RealName 姓名,CardMoney 余额 from BankCard 
left join AccountInfo on BankCard.AccountId = AccountInfo.AccountId
go

如果要进行相应信息的查询,不需要编写复杂的SQL语句,直接使用视图,如下:

select * from CardAndAccount

创建存储过程

存储过程(Procedure)是SQL语句和流程控制语句的预编译集合。

(1)没有输入参数,没有输出参数的存储过程。

定义存储过程实现查询出账户余额最低的银行卡账户信息,显示银行卡号,姓名,账户余额

--方案一
create proc proc_MinMoneyCard
asselect top 1 CardNo 银行卡号,RealName 姓名,CardMoney 余额from BankCard inner join AccountInfo on BankCard.AccountId = AccountInfo.AccountIdorder by CardMoney asc
go--方案二:(余额最低,有多个人则显示结果是多个)
create proc proc_MinMoneyCard
asselect CardNo 银行卡号,RealName 姓名,CardMoney 余额from BankCard inner join AccountInfo on BankCard.AccountId = AccountInfo.AccountIdwhere CardMoney=(select MIN(CardMoney) from BankCard)
go

执行存储过程:

exec proc_MinMoneyCard

(2)有输入参数,没有输出参数的存储过程

模拟银行卡存钱操作,传入银行卡号,存钱金额,实现存钱操作

create proc proc_CunQian
@CardNo varchar(30),
@MoneyInBank money
asupdate BankCard set CardMoney = CardMoney + @MoneyInBank where CardNo = @CardNoinsert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime)values(@CardNo,@MoneyInBank,0,GETDATE())
--go

执行存储过程:

exec proc_CunQian '6225125478544587',3000

(3)有输入参数,没有输出参数,但是有返回值的存储过程(返回值必须整数)。

模拟银行卡取钱操作,传入银行卡号,取钱金额,实现取钱操作,取钱成功,返回1,取钱失败返回-1

create proc proc_QuQian
@CardNo varchar(30),
@MoneyOutBank money
asupdate BankCard set CardMoney = CardMoney - @MoneyOutBank where CardNo = @CardNoif @@ERROR <> 0return -1insert into CardExchange(CardNo,MoneyInBank,MoneyOutBank,ExchangeTime)values(@CardNo,0,@MoneyOutBank,GETDATE())return 1
go

执行存储过程:

declare @returnValue int
exec @returnValue = proc_QuQian '662018092100000002',1000000
print @returnValue

(4)有输入参数,有输出参数的存储过程

查询出某时间段的银行存取款信息以及存款总金额,取款总金额,传入开始时间,结束时间,显示存取款交易信息的同时,返回存款总金额,取款总金额。

create proc proc_SelectExchange@startTime varchar(20),  --开始时间@endTime varchar(20),    --结束时间@SumIn money output,     --存款总金额@SumOut money output    --取款总金额
as
select @SumIn = (select SUM(MoneyInBank) from CardExchange where ExchangeTime between @startTime+' 00:00:00' and @endTime+' 23:59:59')
select @SumOut = (select SUM(MoneyOutBank) from CardExchange where ExchangeTime between @startTime+' 00:00:00' and @endTime+' 23:59:59')
select * from CardExchange 
where ExchangeTime between @startTime+' 00:00:00' and @endTime+' 23:59:59'
go

执行存储过程:

declare @SumIn money     --存款总金额
declare @SumOut money   --取款总金额
exec proc_SelectExchange '2018-1-1','2018-12-31',@SumIn output,@SumOut output
select @SumIn
select @SumOut

(5)具有同时输入输出参数的存储过程

密码升级,传入用户名和密码,如果用户名密码正确,并且密码长度<8,自动升级成8位密码

--有输入输出参数(密码作为输入参数也作为输出参数)
--密码升级,传入用户名和密码,如果用户名密码正确,并且密码长度<8,自动升级成8位密码
select FLOOR(RAND()*10) --0-9之间随机数
create proc procPwdUpgrade
@cardno nvarchar(20),
@pwd nvarchar(20) output
asif not exists(select * from BankCard where CardNo=@cardno and CardPwd=@pwd)set @pwd = ''elsebeginif len(@pwd) < 8begindeclare @len int = 8- len(@pwd)declare @i int = 1while @i <= @lenbeginset @pwd = @pwd + convert(floor(rand()*10),nvarchar(1)) set @i = @i+1endupdate BankCard set CardPwd = @pwd where CardNo=@cardnoend3333end
go
declare @pwd nvarchar(20) = '123456'
exec procPwdUpgrade '6225547854125656',@pwd output
select @pwd

创建触发器

  • inserted
  • deleted
  • insert into语句后,可以从inserted表查到添加的信息
  • delete from语句之后,可以从deleted…
  • update 之后,同时可以查inserted(新)和deleted(旧)

(1)假设有部门表和员工表,在添加员工的时候,该员工的部门编号如果在部门表中找不到,则自动添加部门信息,部门名称为"新部门"。

编写触发器:

create trigger tri_InsertPeople on People
after insert
as
declare @departId varchar(20)
set @departId = (select DepartmentId from inserted)if not exists(select * from Department where DepartmentId = @departId)insert into Department(DepartmentId,DepartmentName)values(@departId,'新部门')
go

测试触发器:

insert People(DepartmentId,PeopleName,PeopleSex,PeoplePhone)
values('009','赵云','男','13854587456')

我们会发现,当插入赵云这个员工的时候会自动向部门表中添加数据。

(2)触发器实现,删除一个部门的时候将部门下所有员工全部删除。

编写触发器:

create trigger tri_DeleteDept on Department
after delete
as
delete from People where People.DepartmentId = 
(select DepartmentId from deleted)
go

测试触发器:

delete Department where DepartmentId = '001'

我们会发现当我们删除此部门的时候,同时会删除该部门下的所有员工

(3)创建一个触发器,删除一个部门的时候判断该部门下是否有员工,有则不删除,没有则删除。

编写触发器:

drop trigger tri_DeleteDept	--删除掉之前的触发器,因为当前触发器也叫这个名字
create trigger tri_DeleteDept on Department
Instead of delete
asif not exists(select * from People where DepartmentId = (select DepartmentId from deleted))begindelete from Department where DepartmentId = (select DepartmentId from deleted)end
go

测试触发器:

delete Department where DepartmentId = '001'
delete Department where DepartmentId = '002'
delete Department where DepartmentId = '003'

我们会发现,当部门下没有员工的部门信息可以成功删除,而部门下有员工的部门并没有被删除。

(4)修改一个部门编号之后,将该部门下所有员工的部门编号同步进行修改

编写触发器:

create trigger tri_UpdateDept on Department
after update
asupdate People set DepartmentId = (select DepartmentId from inserted)where DepartmentId = (select DepartmentId from deleted)
go

测试触发器:

update Department set DepartmentId = 'zjb001' where DepartmentId='001'

我们会发现不但部门信息表中的部门编号进行了修改,员工信息表中部门编号为001的信息也被一起修改了。

3.各种查询操作(3个)

  • top
  • distinct
  • like
  • in
  • between

查询

=:等于,比较是否相等及赋值
!=:比较不等于 <>
>:比较大于
<:比较小于
>=:比较大于等于
<=:比较小于等于
IS NULL:比较为空
IS NOT NULL:比较不为空
in:比较是否在其中 in (select ...)
like:模糊查询 like 'computer%'
BETWEEN...AND...:比较是否在两者之间
and:逻辑与(两个条件同时成立表达式成立)
or:逻辑或(两个条件有一个成立表达式成立) 
not:逻辑非(条件成立,表达式则不成立;条件不成立,表达式则成立)

(10)查询工资最高的5个人的信息

select top 5 * from People order by PeopleSalary desc

(11)查询工资最高的10%的员工信息

select top 10 percent * from People order by PeopleSalary desc

(12)查询出地址没有填写的员工信息

select * from People where PeopleAddress is null

(13)查询出地址已经填写的员工信息

select * from People where PeopleAddress is not null

模糊查询

%:代表匹配0个字符、1个字符或多个字符。
_:代表匹配有且只有1个字符。
[]:代表匹配范围内
[^]:代表匹配不在范围内

(4)查询姓刘的员工,名字是2个字

--方案一:
select * from People  where PeopleName like '刘_'
--方案二:
select * from People where SUBSTRING(PeopleName,1,1) = '刘' and LEN(PeopleName) = 2

(6)查询出电话号码开头138的员工信息

select * from People  where PeoplePhone like '138%'

(7)查询出电话号码开头138的员工信息,第4位可能是7,可能8 ,最后一个号码是5

select * from People where PeoplePhone like '138[7,8]%5'

(8)查询出电话号码开头133的员工信息,第4位是2-5之间的数字 ,最后一个号码不是2和3

--方案一:
select * from People where PeoplePhone like '133[2,3,4,5]%[^2,3]'
--方案二:
select * from People where PeoplePhone like '133[2-5]%[^2-3]'

聚合查询

  • 只有count是对行的累加计数,其他聚合函数都是对某一列的计算

  • 只有count不忽略null,其他都会忽略

  • 聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(6)求数量,最大值,最小值,总和,平均值,在一行显示

select COUNT(*) 数量,MAX(PeopleSalary) 最高工资,MIN(PeopleSalary) 最低工资,SUM(PeopleSalary) 工资总和,AVG(PeopleSalary) 平均工资 from People

(7)查询出武汉地区的员工人数,总工资,最高工资,最低工资和平均工资

select '武汉' 地区,COUNT(*) 数量,MAX(PeopleSalary) 最高工资,MIN(PeopleSalary) 最低工资
,SUM(PeopleSalary) 工资总和,AVG(PeopleSalary) 平均工资 from People 
WHERE PEOPLEADDRESS = '武汉'

(8)求出工资比平均工资高的人员信息

declare @avgsalsary float
set @avgsalary = select AVG(PeopleSalary) 平均工资 from People
select * from People where PeopleSalary > @avgsalary and area in ('北京',‘上海’)

count中使用distinct去重,统计某一列上不同的值有几个

select count(distinct city) from authors

SELECT COUNT(DISTINCT C#) FROM SC

分组查询

为了保证完整性,系统约定俗成,在使用了聚合函数的查询语句中,除了聚合函数,可以在查询列表上,要出现其他字段,那么该字段就必须为分组字段,而且该字段一定要跟随在GROUP BY关键字后面。

与聚合函数一起出现在select后面进行查询的列,只有两种可能性:被聚合 、被分组

1)根据员工所在地区分组统计员工人数 ,员工工资总和 ,平均工资,最高工资和最低工资

select PeopleAddress 地区,COUNT(*) 人数,SUM(PeopleSalary) 工资总和,
AVG(PeopleSalary) 平均工资,MAX(PeopleSalary) 最高工资,MIN(PeopleSalary) 最低工资 
from People group by PeopleAddress

(2)根据员工所在地区分组统计员工人数,员工工资总和,平均工资,最高工资和最低工资,1985 年及以后出身的员工不参与统计。

select PeopleAddress 地区,COUNT(*) 人数,SUM(PeopleSalary) 工资总和,
AVG(PeopleSalary) 平均工资,MAX(PeopleSalary) 最高工资,MIN(PeopleSalary) 最低工资 
from People
where PeopleBirth < '1985-1-1'
group by PeopleAddress

(3)根据员工所在地区分组统计员工人数,员工工资总和,平均工资,最高工资和最低工资,要求筛选出员工人数至少在2人及以上的记录,并且1985年及以后出身的员工不参与统计。

select PeopleAddress 地区,COUNT(*) 人数,SUM(PeopleSalary) 工资总和,
AVG(PeopleSalary) 平均工资,MAX(PeopleSalary) 最高工资,MIN(PeopleSalary) 最低工资 
from People
where PeopleBirth < '1985-1-1'
group by PeopleAddress
having COUNT(*) >= 2

多表查询

  • inner join TABLE on … 如果两表信息条数不匹配,则只显示匹配的信息

  • left join TABLE on… 如果两表信息条数不匹配,显示左的信息然后右边不匹配的信息显示NULL

  • 右外连接(right join):右外连接和左外连接类似,A left join B == B right join A

    全外连接(full join):两张表的所有数据无论是否符合主外键关系必须全部显示,不符合主外键关系的地方null取代。

  • where … in (select … where …) 只能显示主表数据,类似left join

  • from TABLE1,TABL2 where … = , , … = , 不推荐,笛卡尔积消耗内存

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

查询出没有转账交易记录的银行卡账户信息,显示卡号,身份证,姓名,余额。
select CardNo 卡号,AccountCode 身份证,RealName 姓名,CardMoney 余额 from BankCard 
left join AccountInfo on BankCard.AccountId = AccountInfo.AccountId
where BankCard.CardNo not in (select CardNoIn from CardTransfer)
and BankCard.CardNo not in (select CardNoOut from CardTransfer)select CardNo 卡号,AccountCode 身份证,RealName 姓名,CardMoney 余额 from BankCard 2left join AccountInfo on BankCard.AccountId = AccountInfo.AccountId3where CardNo not in4(select CardNo from CardExchange where MoneyInBank <> 0)select DepartmentName 部门名称,COUNT(*) 人数,SUM(PeopleSalary) 工资总和,
AVG(PeopleSalary) 平均工资,MAX(PeopleSalary) 最高工资,MIN(PeopleSalary) 最低工资 
from People left join DEPARTMENT on Department.DepartmentId = People.DepartmentId
group by Department.DepartmentId,DepartmentName
having AVG(PeopleSalary) >= 10000
order by AVG(PeopleSalary) desc

带循环、分支判断的查询

  • convert(类型,变量)
if exists(select * from CardTransfer where CardNoIn = '6225547858741263'
and convert(varchar(10),TransferTime, 120) = convert(varchar(10),getdate(), 120)
)print '有转账记录'
elseprint '没有转账记录'
declare @AccountId int
declare @count int
if exists(select * from AccountInfo where AccountCode = '420107199507104133')begin		select @AccountId = (select AccountId from AccountInfo where AccountCode = '420107199507104133')select @count = (select COUNT(*) from BankCard where AccountId = @AccountId)if @count <= 2begininsert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState)values('6225456875357898',@AccountId,'123456',0,1)	end	elsebeginprint '一个人最多只能办理三张银行卡'end		end
elsebegininsert into AccountInfo(AccountCode,AccountPhone,RealName,OpenTime)values('420107199507104133','13335645213','关羽',GETDATE())set @AccountId = @@identityinsert into BankCard(CardNo,AccountId,CardPwd,CardMoney,CardState)values('6225456875357898',@AccountId,'123456',0,1)		end
declare @i int = 1
declare @str varchar(1000)
while @i<=9
begindeclare @j int = 1set @str = ''while @j <= @ibegin--方案二set @str = @str + Convert(varchar(2),@i) + '*' + Convert(varchar(2),@j) + '=' + Convert(varchar(2),@i*@j) + CHAR(9)	--char(9)制表符;	set @j = @j + 1endprint @strset @i = @i + 1
end

带变量的查询

  1. 声明变量和赋值
declare @a int
declare @b char(10)
declare @c varchar(20)
declare @d nvarchar(20)
declare @e money-------------------------
set @a = 1
set @b = 'abcdefghi'
select @c = (select top 1 name from People where id = '8204200213') -- 如果查询出多条则赋值最后一条
declare @gyBalance money
select @gyBalance = (select CardMoney from BankCard where CardNo='6225547858741263')
select CardNo 卡号,AccountCode 身份证,RealName 姓名,CardMoney 余额 from BankCard 
left join AccountInfo on BankCard.AccountId = AccountInfo.AccountId
where CardMoney > @gyBalance

简答题部分(25,4个)

  1. 数据库发展史(现阶段与之前对比)
image-20220621214445894
  1. 三级结构、两级独立性

三级结构:用户层、概念层、物理层;外模式、概念模式、内模式

两级独立性:物理独立性、逻辑独立性

分级好处:实现数据独立性;数据共享;便于用户操作;安全性

  1. 三个世界

现实世界-实际存在【用户级】

信息世界–抽象加工(不同人不一样,取决于设计者的看法)【概念级】

机器世界-实际存在0101【物理级】

  1. 规范化的原因

数据冗余;插入异常;删除异常;修改异常

  1. 函数依赖有什么,函数范式有什么

平凡、非平凡;完全、部分;传递

第一范式:必须满足,所有属性都不可分

第二范式:第一范式的基础上,所有非主属性完全依赖于主属性

第三范式:第二范式的基础上,所有非主属性不传递依赖主属性

  1. 数据库完整性、约束性条件

域完整性:列的值是有效的,check约束、null、default

实体完整性:行的标识是唯一的,唯一主键

参考(引用)完整性:表之间的关系是完整的,外键

用户自定义完整性:自定义规则,触发器、过程

  1. 视图的定义和优点修改视图的限制

定义:视图是用户级的虚拟表,其内容取决于定义时的查询操作。视图不是一个物理存放的表,当用户对视图查询时,本质上执行的是创建视图时的select语句。

优点:利于用户的个性化推荐,用户只需查找视图即可;安全性,限制了用户的权限,用户不能对基表操作;隔离变化,用户眼中的视图是不变的,其基表是可以动态变化的。

限制:不能同时修改基表的两个列;添加行是应该满足数据的合理性(null、default等);视图中的列的数据符合基表的数据完整性约束,对视图中列的修改也要符合基表中的约束;某些列不能修改,如计算列、聚合函数列等。

  1. 索引的概念和优点、缺点

概念:索引是为了方便查询而建立在一张表或一个视图的列集合上的,优点是加速查询、优化分组和排序等操作,缺点是占用额外的空间存放索引、需要创建时间、修改数据时间长。

  1. 簇索引和非簇索引的应用

簇索引:叶子结点存放数据本身, 一个表只能建立一个,适合分组和区间查询的情况。

非簇索引:叶子节点存放数据的指针,一个表可以建立多个非簇索引。

  1. 可靠性、安全性(必考其一) 如何实现

  2. 备份有几种方式,差异是什么

完整数据库备份

差异备份:备份自上一次完整数据库备份后修改过的数据库页。

事务日志备份:仅备份事务日志。事务日志是自上次备份后(不论这个备份是完全备份、差异备份还是事务日志备份)对数据库执行的所有事务的备份。可以使用事务日志备份将数据库恢复到特定的即时点。

文件或文件组备份:仅备份数据库中某个文件或文件组,用于恢复位于故障磁盘上的那部分,用于超大型数据库,不同时间备份不同的部分。

  1. 并发控制造成什么,怎么做,死锁

并发操作带来的数据不一致性:

丢失修改(lost update)

不可重复读(non-repeatable read)

读“脏”数据(dirty read)

是数据库中用来处理并发的一种对象,它允许事务用一定的方法锁定所需要的资源

  1. 安全性不同的level
image-20220621212909054

选择

sql的 组成:DDL、DML、DCL
数据对象的定义语句:创建是create、修改是alter不是update、删除是drop不是delete

delete 是DML,打标签而不真正释放空间,触发器

drop和truncate是DDL,直接释放空间

本质区别 :DDL代表数据定义语言,是一种有助于创建数据库模式的SQL命令。而,DML代表数据操作语言,是一种有助于检索和管理关系数据库中数据的SQL命令。

命令上的区别:DDL中常用的命令有:create,drop,alter,truncate和rename等等。而,DML中常用的命令有:insert,update,delete和select等等

img

志备份将数据库恢复到特定的即时点。

文件或文件组备份:仅备份数据库中某个文件或文件组,用于恢复位于故障磁盘上的那部分,用于超大型数据库,不同时间备份不同的部分。

  1. 并发控制造成什么,怎么做,死锁

并发操作带来的数据不一致性:

丢失修改(lost update)

不可重复读(non-repeatable read)

读“脏”数据(dirty read)

是数据库中用来处理并发的一种对象,它允许事务用一定的方法锁定所需要的资源

  1. 安全性不同的level
image-20220621212909054

选择

sql的 组成:DDL、DML、DCL
数据对象的定义语句:创建是create、修改是alter不是update、删除是drop不是delete

delete 是DML,打标签而不真正释放空间,触发器

drop和truncate是DDL,直接释放空间

本质区别 :DDL代表数据定义语言,是一种有助于创建数据库模式的SQL命令。而,DML代表数据操作语言,是一种有助于检索和管理关系数据库中数据的SQL命令。

命令上的区别:DDL中常用的命令有:create,drop,alter,truncate和rename等等。而,DML中常用的命令有:insert,update,delete和select等等

[外链图片转存中…(img-ifGnVVnh-1714924159510)]

影响上的区别:DDL命令会影响整个数据库或表,但DML命令会影响表中的一个或多个记录。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我在洛杉矶采访到了亚马逊云全球首席信息官CISO(L11)!

在本次洛杉矶举办的亚马逊云Re:Inforce全球安全大会中&#xff0c;小李哥作为亚马逊大中华区开发者社区和自媒体代表&#xff0c;跟着亚马逊云安全产品团队采访了亚马逊云首席信息安全官(CISO)CJ Moses、亚马逊副总裁Eric Brandwine和亚马逊云首席高级安全工程师Becky Weiss。 …

安装docker镜像nginx1.26.0版本,与删除docker容器【灵异事件】

为了http3 的这个模块&#xff0c;所以需要升级nginx的版本&#xff0c;需要nginx1.26.0才有 –with-http_v3_module 这个模块 为什么记录一下&#xff1f;因为觉得奇怪 1&#xff1a;删除nginx镜像&#xff0c;显示镜像还被某个容器在使用 luichunluichun:~$ docker rmi ng…

文心一言 VS 讯飞星火 VS chatgpt (255)-- 算法导论18.3 1题

一、请说明依次从图18-8(f)中删除C、P和V后的结果。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 首先&#xff0c;让我们明确一点&#xff1a;由于您没有提供具体的图18-8(f)的内容&#xff0c;我只能假设它是一个数据结构&#xff08;可能是图、树或列表等&…

AI模型:windows本地运行下载安装ollama运行Google CodeGemma、gemma等可离线运行数据模型【自留记录】

AI模型&#xff1a;windows本地运行下载安装ollama运行Google CodeGemma可离线运行数据模型【自留记录】 CodeGemma 没法直接运行&#xff0c;需要中间软件。下载安装ollama后&#xff0c;使用ollama运行CodeGemma。 类似 前端本地需要安装 node.js 才可能跑vue、react项目 1…

应用层协议之 DNS 协议

DNS 就是一个域名解析系统。域名就是网址&#xff0c;类似于 www.baidu.com。网络上的服务器想要访问它&#xff0c;就得需要它对应的 IP 地址&#xff0c;同时&#xff0c;每个域名对对应着一个 / N个 IP 地址&#xff08;即对应多台服务器&#xff09;。 因此&#xff0c;为了…

会话劫持攻击就在我们身边,我们要如何防范

会话劫持攻击&#xff08;Session Hijacking&#xff09;是一种网络攻击方式&#xff0c;攻击者通过某种手段获取到用户的会话标识&#xff08;Session ID&#xff09;&#xff0c;然后使用这个会话标识冒充合法用户进行恶意操作。这种攻击方式允许攻击者以合法用户的身份访问受…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-15.4讲--ARM异常中断返回

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

智慧公厕解决什么问题?实现了什么样的价值?

公共厕所一直是城市管理的难题&#xff0c;常常面临着卫生条件不佳、管理不善以及使用体验差等问题。为了解决这些困扰城市的难题&#xff0c;智慧公厕应运而生。智慧公厕不仅应用了信息化和数字化技术&#xff0c;还通过全方位的智能化应用&#xff0c;彻底改变了传统公厕的面…

iframe的替代方案有吗?做页面嵌套界面套娃

UIOTOS可以了解下&#xff0c;uiotos.net&#xff0c;通过连线来代替脚本逻辑开发&#xff0c;复杂的交互界面&#xff0c;通过页面嵌套轻松解决&#xff0c;是个很新颖的思路&#xff0c;前端零代码&#xff01; 蓝图连线尤其是独创的页面嵌套和属性继承技术&#xff0c;好家…

韩顺平0基础学Java——第8天

p155-168 数组&#xff08;第六章&#xff09; 数组可以存放多个同一类型的数据&#xff0c;数组也是一种数据类型&#xff08;引用类型&#xff09;。 即&#xff0c;数组就是一组数据~ 例&#xff1a;double [] hens {1,2,3,4,5,6}; 新建了一组鸡&#xff0c;里面有6个。…

车载电子电器架构 —— 应用软件开发(上)

车载电子电器架构 —— 应用软件开发(上) 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明…

学习记录:AUTOSAR R20-11的阅读记录(五)【CP(5.11-5.19)】完

接上回&#xff1a;学习记录&#xff1a;AUTOSAR R20-11的阅读记录&#xff08;四&#xff09;【CP&#xff08;5.6-5.10&#xff09;】 五、CP 11、General&#xff08;4个&#xff09; 5.11 File Name 说明 1 AUTOSAR_EXP_ LayeredSoftwareArchitecture.pdf 描述了AUTO…

【HMWeb】HTML使用Leaflet实现本地离线地图Gis应用

下载Leaflet 官网下载&#xff1a;https://leafletjs.com/reference.html CSDN&#xff1a;https://download.csdn.net/download/hmxm6/89291989 选择版本号 添加html文件 加入代码 <!DOCTYPE html> <html lang"en"> <head><meta charset&qu…

记一次DNS故障导致用户无法充值的问题(下)

上一篇说到DNS故障导致无法充值&#xff0c;后来我们通过拨测发现业务域名的解析目标地址被解析到了【127.0.0.1】IP。 1、联系阿里云厂商&#xff0c;通过沟通&#xff0c;阿里云反馈我们的域名被XX省通管单位封禁了&#xff0c;导致解析到了不正确的地址。 2、为了解决用户问…

【hackmyvm】 Animetronic靶机

靶机测试 arp-scanporturl枚举exiftool套中套passwordsudo 提权 arp-scan arp-scan 检测局域网中活动的主机 192.168.9.203 靶机IP地址port 通过nmap扫描&#xff0c;获取目标主机的端口信息 ┌──(root㉿kali)-[/usr/share/seclists] └─# nmap -sT -sV -O 192.16…

如何在JavaScript/Vue中获取当前时间并格式化输出(精确到时分秒)

如何在JavaScript/Vue中获取当前时间并格式化输出&#xff08;精确到时分秒&#xff09; 不只是树&#xff0c;人也是一样&#xff0c;在不确定中生活的人&#xff0c;能比较经得起生活的考验&#xff0c;会锻炼出一颗独立自主的心。在不确定中&#xff0c;就能学会把很少的养分…

CTF例题和知识点

[ACTF2020 新生赛]Include 打开靶机发现一个超链接&#xff0c;点击之后出现一段话 “Can you find out the flag?” 查看源码注入&#xff0c;无果 仔细看url&#xff0c;发现有flag.php 根据题目提示&#xff0c;该题应该是文件包含漏洞&#xff0c;因此可以判断出此题是PH…

基于SpringBoot的全国风景区WebGIS按省展示实践

目录 前言 一、全国风景区信息介绍 1、全国范围内数据分布 2、全国风景区分布 3、PostGIS空间关联查询 二、后台查询的设计与实现 1、Model和Mapper层 2、业务层和控制层设计 三、WebGIS可视化 1、省份范围可视化 2、省级风景区可视化展示 3、成果展示 总结 前…

P9420 [蓝桥杯 2023 国 B] 子 2023 / 双子数

蓝桥杯2023国B A、B题 A题 分析 dp问题 根据子序列&#xff1a;2&#xff0c;20&#xff0c;202&#xff0c;2023分为4个状态&#xff1b; 当前数字为2时&#xff0c;处于dp[0]&#xff0c;或者和dp[1]结合成dp[2]&#xff1b; 当前数字为0时&#xff0c;和dp[0]结合成dp[…

keil5软件安装教程(MDKv5.39)

keil5软件安装分为三部分&#xff1a; 目录 1.安装mdk 2.激活mdk 3.安装STM32芯片包 1.安装mdk 安装包链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1PZoGhzI5Y19ROv7xe9QJKA?pwdgt3s 提取码&#xff1a;gt3s 1、下载keil5的压缩包并解压&#xff0c;鼠…