数据库基础面试第四弹

1. Redis的数据结构有哪些

1. 字符串(String):
字符串是Redis最基本的数据结构。它可以存储任意类型的数据,包括文本、整数或二进制数据。字符串类型的值最大可以达到512MB。

1

2

3

4

SET name "John"

GET name

```

将字符串"John"存储在键名为"name"的字符串类型数据结构中,并通过GET命令获取它。

2. 列表(List):

列表是一个有序的字符串集合。它允许在列表的两端进行元素的插入和删除操作,支持按照索引获取元素,还提供了一些其他操作如获取子列表、插入元素等。

1

2

3

4

5

LPUSH fruits "apple"

LPUSH fruits "banana"

LRANGE fruits 0 -1

```

使用LPUSH命令将"apple""banana"两个字符串插入名为"fruits"的列表中,然后使用LRANGE命令获取整个列表的元素。

3. 集合(Set):
集合是一个无序的、唯一的元素集合。它支持添加、删除和检查元素的操作,还提供了集合的并、交、差等操作。

1

2

3

4

5

SADD tags "redis"

SADD tags "database"

SMEMBERS tags

```

使用SADD命令将"redis""database"两个字符串添加到名为"tags"的集合中,并使用SMEMBERS命令获取集合中的所有元素。

4. 有序集合(Sorted Set):

有序集合是一个有序的、唯一的元素集合。每个元素都会关联一个分数(score),用于排序。可以对有序集合中的元素按照分数范围或成员进行查询。

1

2

3

4

5

ZADD leaderboard 1000 "player1"

ZADD leaderboard 800 "player2"

ZRANGE leaderboard 0 -1 WITHSCORES

```

使用ZADD命令将"player1""player2"两个玩家以分数1000800的形式添加到名为"leaderboard"的有序集合中,并使用ZRANGE命令按照分数范围获取有序集合中的所有元素及其分数。  

5. 哈希(Hash):
哈希是一个键值对集合。在Redis中,每个哈希可以存储多个字段和对应的值。哈希适用于存储对象,可以像操作数据库中的行一样对哈希进行存取操作。

1

2

3

4

5

HSET user:id1 name "Alice"

HSET user:id1 age 25

HGETALL user:id1

```

使用HSET命令将"name"字段设为"Alice""age"字段设为25,并使用HGETALL命令获取名为"user:id1"的哈希中的所有字段和对应的值。

2. Redis 中的缓存雪崩,击穿,穿透是什么

缓存雪崩(Cache Avalanche):

缓存雪崩指的是在某个时间点,缓存中大量的数据同时过期或失效,导致大量的请求直接访问后端数据库。这会导致数据库负载突然增加,引起数据库性能问题,甚至导致数据库崩溃。

原因:

  缓存数据设置了相同的过期时间,一旦这些数据同时过期,会导致大量请求直接访问数据库。

  缓存服务器宕机或发生故障,无法提供缓存服务。

解决方案:

  为缓存数据设置随机的过期时间,避免同时失效。

  使用多级缓存架构,如热点数据预热、使用本地缓存等。

  监控缓存的健康状况,及时发现故障并修复。

2. 缓存击穿(Cache Breakdown):

缓存击穿指的是某个热点数据失效时,恰好有大量并发请求同时访问该数据,导致请求直接访问数据库。与缓存雪崩不同的是,缓存击穿只是某个特定的数据失效,而不是所有的缓存数据。

原因:

  热点数据失效,导致并发请求直接访问数据库。

  恶意请求或异常情况,针对某个特定的缓存数据进行大量请求。

解决方案:

     使用互斥锁或分布式锁来控制并发请求,只有一个请求能够重新生成缓存数据。

    提前异步更新缓存,避免数据失效时的并发请求。

3. 缓存穿透(Cache Penetration):

缓存穿透指的是请求访问一个不存在于缓存中的数据,由于缓存无法命中,请求直接访问后端数据库。这可能是恶意请求或者查询不存在的数据。

原因:

  恶意请求:攻击者故意发送大量的请求,查询不存在的数据,以此来对系统造成压力。

  查询不存在的数据:应用程序中未对请求的数据进行有效的校验,导致查询不存在的数据。

解决方案:

  使用布隆过滤器(Bloom Filter)等技术来过滤掉不存在的数据请求。

  对请求的数据进行有效的校验,如校验请求的参数、ID等,避免查询不存在的数据。

3. 数据库的存储过程是什么

存储过程是一种非常有用的工具。它是一组预定义的数据库操作步骤,被封装在一个可重复使用的单元中,以便在需要时被调用执行。存储过程通常由SQL语句和控制结构(例如条件语句和循环)组成,可以接受输入参数并返回结果。

存储过程的设计思想类似于我们平时做的烹饪食谱。假设你想要做一道红烧肉,你可以编写一个详细的步骤清单,列出从准备食材到最后上桌的所有步骤。每次你想要做红烧肉时,只需按照清单上的步骤逐一执行即可。

在数据库中,存储过程的作用类似于这个烹饪食谱。它允许你定义一个包含一系列数据库操作的过程,例如插入、更新、删除或查询数据。一旦你定义了存储过程,你可以通过简单地调用存储过程的名称来执行其中的操作。

1

2

3

4

5

6

7

8

CREATE PROCEDURE GetUsersByAge

    @Age INT

AS

BEGIN

    SELECT Name, Age, Email

    FROM Users

    WHERE Age = @Age

END

在上面的代码中,我们首先使用CREATE PROCEDURE语句创建了一个名为"GetUsersByAge"的存储过程。它接受一个@Age参数,用于指定要查询的年龄。

在存储过程的主体部分,我们使用SELECT语句从"Users"表中选择满足指定年龄的用户信息,并将结果返回。

完成后,我们可以通过以下方式调用这个存储过程:

1

EXEC GetUsersByAge @Age 25

4. 视图和表的区别

  表是数据库中的实际对象,用于存储和组织数据,而视图是基于一个或多个表的查询结果构建而成的虚拟表。表存储了实际的数据,而视图仅存储了查询定义。

表可以直接进行数据的增删改查操作,而视图提供了对数据的抽象视图,可以进行筛选、排序、连接等操作,并以表的形式返回结果。此外,

视图还提供了更细粒度的数据安全性和权限控制。

5. count(*) 和count(1) 的区别

COUNT(*)是一种通用的写法,它用于计算满足条件的所有行的数量,包括那些具有NULL值的行。它会对表中的每一行进行计数,不考虑具体的列值。因此,COUNT(*)会扫描整个表,并返回表中的总行数。

COUNT(1)是一种优化的写法,它通过使用常量值1来进行计数。因为每一行都存在一个常量值1,所以COUNT(1)实际上是对每一行进行计数。与COUNT(*)相比,使用COUNT(1)可以稍微提高一点性能,因为它不会关心具体的列值或NULL值,只需简单地计算行的数量。

尽管在大多数情况下,COUNT(*)COUNT(1)的效果是相同的,但在某些特定数据库中,优化器可能对它们进行不同的优化处理,可能会有微小的性能差异。

6. 索引和主键的区别

  索引是一种用于提高数据库查询性能的数据结构,它可以加速数据的定位和访问。主键是一种用于标识表中唯一记录的约束,它保证表中每行的唯一性和非空性。索引可以是唯一或非唯一

的,而主键是一种特殊的唯一索引。索引和主键在数据库中起着不同的作用,并且可以根据具体需求和查询优化的需要来选择使用。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

云原生Kubernetes:K8S集群版本升级(v1.22.14 - v1.23.14)

目录 一、理论 1.K8S集群升级 2.环境 3.升级集群(v1.23.14) 4.验证集群(v1.23.14) 二、实验 1. 环境 2.升级集群(v1.23.14) 2.验证集群(v1.23.14) 一、理论 1.K8S集群升级 …

【Python_09】Python基础语法(数据容器之列表详解)

文章目录 概述Python中的数据容器列表1.1 定义列表1.2列表取值与修改1.3 列表遍历1.3.1 使用for循环遍历列表1.3.2 使用while循环遍历1.3.3 使用enumerate()函数获取索引和元素 1.4 列表常用方法 概述 数据容器是用来存储和组织数据的数据结构和对象。可以以不同的方式存储和操…

摇杆控制人物移动

摇杆控制人物移动 一、UI搭建二、3d模型搭建三、脚本JoyStickBar.csPlayerController.cs 工程在我资源里名字叫Joystickbar.unitypackage [连接](https://download.csdn.net/download/qq_42194657/12043019?spm1001.2014.3001.5503) 一、UI搭建 JoyStickBar是图片背景 JoySt…

功能问题:如何在H5中实现拍照功能?3步搞定!

大家好,我是大澈! 本文约2100字,整篇阅读大约需要4分钟。 感谢关注微信公众号:“程序员大澈”,免费领取"面试礼包"一份,然后免费加入问答群,从此让解决问题的你不再孤单&#xff01…

python 面试题第一弹

1. 如何理解Python中的深浅拷贝 浅拷贝(Shallow Copy)创建一个新的对象,该对象的内容是原始对象的引用。这意味着新对象与原始对象共享相同的内存地址,因此对于可变对象来说,如果修改了其中一个对象,另一个…

odoo17核心概念view7——listview总体框架分析

这是view系列的第七篇文章,今天主要介绍我们最常用的list视图。 1、先看list_view,这是主文件 /** odoo-module */import { registry } from "web/core/registry"; import { RelationalModel } from "web/model/relational_model/relational_mode…

Spring中常见的Bean后处理器

Bean后处理器的作用:为Bean生命周期各个阶段提供扩展。接下来我们查看一个案例 public class TestBeanPostProcessor {public static void main(String[] args) {//该容器不存在任何Spring中的bean对象,是一个干净的容器,且提供了正常容器中…

运动轨迹仿真

重型运载火箭轨迹/总体参数一体化优化方法 硬核推导火箭运动方程,并用python仿真实现 rocket-simulation:MATLAB-火箭仿真软件 MatRockSim:Matlab 火箭飞行模拟器 【开源】飞鹰一号探空火箭——箭体设计、制造回顾与仿真对比 偏航角,滚动角&#xf…

基于双闭环PI的SMO无速度控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于双闭环PI的SMO无速度控制系统simulink建模与仿真,基于双闭环PI的SMO无速度控制系统主要由两个闭环组成:一个是电流环,另一个是速度环。…

2024深入评测CleanMyMac X4.14.6破解版新的功能

随着时间的推移,我们的Mac电脑往往会变得越来越慢,存储空间变得越来越紧张,这时候一个优秀的清理工具就显得尤为重要。作为一款备受好评的Mac清理工具,它能够为你的Mac带来全方位的清理和优化。在本文中,我们将深入评测…

中科驭数与宽睿科技达成战略合作,共筑超低时延软硬一体技术底座

近日,中科驭数(北京)科技有限公司(简称“中科驭数”)和上海宽睿信息科技有限责任公司(简称“宽睿科技”)完成战略合作协议签署。双方将结合各自在超低时延软硬件领域的深厚业务积累和技术产品优…

晶振的起振温度对电子设备的影响

晶振,作为电子设备中的关键元件,其性能参数对设备的稳定性和可靠性具有重要影响。其中,晶振的起振温度是决定其工作性能的重要因素之一。晶发电子将探讨晶振起振温度对电子设备的影响以及如何应对这些影响。 首先,我们要了解什么…

2023/12/26中断作业

成果图&#xff1a; 代码&#xff1a; 函数层 key_it.c #include "key_init.h" void key1_it_config() { //RCC时钟RCC->MP_AHB4ENSETR |(0X1<<5);//设置PF9管脚为输入GPIOF->MODER &(~(0x3<<18));//设置PF9管脚为exti9输入EXTI->EXTI…

减小PAPR——DFT扩频

文章目录 前言一、DFT 扩频原理二、MATLAB 仿真1、核心代码2、仿真结果①、4QAM 调制时 IFDMA、LFDMA 和 OFDMA 的 DFT 扩频技术的 PAPR 性能②、16QAM 调制时 IFDMA、LFDMA 和 OFDMA 的 DFT 扩频技术的 PAPR 性能③、64QAM 调制时 IFDMA、LFDMA 和 OFDMA 的 DFT 扩频技术的 PA…

如何在Photoshop中创建色彩鲜艳的文本效果

如何在 Photoshop 中制作霓虹灯 1. 如何创建背景 步骤 1 学习如何在 Photoshop 中制作霓虹灯文本的第一步是背景。创建一个新的 1160 x 750 像素文档&#xff0c;并将分辨率设置为 300。 转到"文件">"嵌入位置"&#xff0c;然后打开"垃圾灰色砖…

tensorrt环境安装-可用于深度学习模型加速推理

安装python环境 在anaconda的命令行中输入conda create --name py38 python3.8 安装python环境 然后安装深度学习框架pytorch环境 Previous PyTorch Versions | PyTorch 在这里面选择合适的环境 conda install pytorch1.8.0 torchvision0.9.0 torchaudio0.8.0 cudatoolki…

汽车项目管理

项目节点&#xff1a; MR (Management Review)——管理层评审 KO (Kick Off)——项目正式启动 SI (Strategy Intent)——战略意图 SC (Strategy Confirmation)——战略确认 PA (Program Approval)——项目批准 PR (Product Readiness)——产品就绪 VP (Verification Prototype)…

kubernetes -pod 实践

一、资源与对象 1、pod 容器都是由镜像启动的,但在容器外面会包裹通过Pod将容器包裹起来这个是K8s的概念,在这个Pod里面可以有一个或多个容器,那这个Pod的有什么特征呢 Pod里的所有容器都会调度在同一个节点上运行0。Pod中的所有容器会共享同一网络,它们有一个唯一的IP,…

leetcode 75. 颜色分类(medium)(优质解法)

链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码&#xff1a; class Solution {public void sortColors(int[] nums) {int left-1,rightnums.length,i0;while(i<right){if(nums[i]0){left;swap(nums,left,i);i;}else if(nums…

大师计划1.0 - log2 CRTO笔记

CRTOⅠ笔记 log2 这个笔记是我在2023年11月23日-12月22日中&#xff0c;学习CRTO所做的一些笔记。 事实上TryHackMe的路径和htb学院包含了许多CRTO的知识并且甚至还超出了CRTO&#xff08;CS除外&#xff09;&#xff0c;所以很多东西在THM和htb学院学过&#xff0c;这次CRTO等…