软件测试|数据库常见面试题

news2024/9/30 12:18:17

在软件测试数据库的面试中,面试官通常会考察应聘者对数据库的理解、SQL语言的应用、数据库性能优化、以及数据库相关的技术栈和工具等方面的知识。以下是一些可能的面试问题及建议的回答思路:

图片

1、什么是关系型数据库,主键,外键,索引分别是什么?

  • 关系型数据库是由多张能互相联接的二维行列表格组成的数据库

  • 主关键字 (primary 是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。

  • 外键表示了 两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表,外键又称作外关键字。

  • 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单

2、表的连接查询方式有哪些,有什么区别?

  • 交叉连接即笛卡儿乘积,是指两个关系中所有元组的任意组合

  • 使用内连接时,如果两个表的相关字段满足连接条件,就从这两个表中提取数据并组合成新的记录

  • 自连接是一种特殊的内连接,它是指相互连接的表在物理上为同一张表,但可以在逻辑上分为两张表

  • 外连接是只限制一张表中的数据必须满足连接条件,而另一张表中的数据可以不满足连接条件的连接方式

3、SQL 的 select 语句完整的执行顺序

  • from 子句组装来自不同数据源的数据;

  • where 子句基于指定的条件对记录行进行筛选;

  • group by 子句将数据划分为多个分组;

  • 使用聚集函数进行计算;

  • 使用 having 子句筛选分组;

  • 计算所有的表达式;

  • select 的字段;

  • 使用 order by 对结果集进行排序。

4、说一下 Mysql 数据库存储的原理?

储存过程是一个可编程的函数,它在数据库中创建并保存。它可以有

SQL 语句和一些特殊的控制结构组成。

当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。存储过程通常有以下优点:

  • 存储过程能实现较快的执行速度

  • 存储过程允许标准组件是编程。

  • 存储过程可以用流程控制语句编写,有很强的灵活性,可以完成复杂的判断和较 复杂的运算。

  • 存储过程可被作为一种安全机制来充分利用。

  • 存储过程能够减少网络流量

5、事务的特性?

  • 原子性 ( Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。

  • 一致性 ( Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。

  • 隔离性 ( Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。

  • 持久性 ( Durability):对于任意已 提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障

6、数据库索引?

数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用 B_TREE 。B_TREE 索引加速了数据访问,因为存储引擎不会再去扫描整张表得到需要的数据;相反,它从根节点开始,根节点保存了子节点的指针,存储引擎会根据指针快速寻找数据。

7、数据库怎么优化查询效率?

  • 储存引擎选择:如果数据表需要事务处理,应该考虑使用 InnoDB ,因为它完全符合 ACID 特性。如果不需

  • 要事务处理,使用默认存储引擎 MyISAM 是比较明智的

  • 分表分库,主从。

  • 对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引

  • 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

  • 应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描

  • 应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎

  • 放弃使用索 引而进行全表扫描

  •  Update 语句,如果只更改 1 、 2 个字段,不要 Update 全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志

  • 对于多张大数据量(这里几百条就算大了)的表 JOIN ,要先分页再 JOIN ,否则逻辑读会很高,性能很差。

8、如何对查询命令进行优化?

  • 应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索。

  • 应尽量避免在 where 子句中对字段进行 null 值判断,避免使用 或 操作符,避免使用 or

  • 连接条件,或在where 子句中使用参数、对字段进行表达式或函数操作,否则会导致权标扫描

  • 不要在 where 子句中的“ “==”左边进行函数、算术运算或其他表达式运算,否则系统将可能无

  • 法正确使用索引。

  • 使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为

  • 条件时才能保证系统使用该索引,否则该索引将不会被使用。

  • 很多时候可考虑用 exists 代替 in 。

  • 尽量使用 数字型字段。

  • 尽可能的使用 varchar/nvarchar 代替 char/nchar 。

  • 任何地方都不要使用 select from t ,用具体的字段列表代替“”,不要返回用不到的任何字段。

  • 尽量使用表变量来代替临时表。

  • 避免频繁创建和删除临时表,以减少系统表资源的消耗。

  • 尽量避免使用游标,因为游标的效率较差。

  • 在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。

  • 尽量避免大事务操作,提高系统并发能力。

  • 尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

9、存储过程和函数的区别

相同点:存储过程和函数都是为了可重复的执行操作数据库的sql 语句的集合。

1)存储过程和函数都是一次编译,就会被缓存起来,下次使用就直接命中已经编译好的 sql 语句,不需要重复使用。减少网络交互,减少网络访问流量。

不同点:标识符不同,函数的标识符是function ,存储过程是 proceduce 。

1)函数中有返回值,且必须有返回值,而过程没有返回值,但是可以通过设置参数类型 in,out) 来实现多个参

数或者返回值。

2)存储函数使用 select 调用,存储过程需要使用 call 调用。

3)select 语句可以在存储过程中调用,但是除了 select..into 之外的 select 语句都不能在函数中使用。

4)通过 in out 参数,过程相关函数更加灵活,可以返回多个结果。

10、Sql 注入是如何产生的,如何防止?

程序开发过程中不注意规范书写sql 语句和对特殊字符进行过滤,导致客户端可以通过全局变量 POST 和 GET提交一些 sql 语句正常执行。产生 Sql 注入。下面是防止办法:

  • 过滤掉一些常见的数据库操作关键字,或者通过系统函数来进行过滤。

  • 在 PHP 配置文件中将 Register_globals=off; 设置为关闭状态

  • SQL语句书写的时候尽量不要省略小引号 (tab 键上面那个 和单引号

  • 提高数据库命名技巧,对于一些重要的字段根据程序的特点命名,取不易被猜到的

  • 对于常用的方法加以封装,避免直接暴漏 SQL 语句

  • 开启 PHP 安全模式:Safe_mode=on;

  • 打开 magic_quotes_gpc 来防止 SQL 注入

  • 控制错误信息:关闭错误提示信息,将错误信息写到系统日志。

  • 使用 mysqli 或 pdo 预处理。

在软件测试数据库的面试中,面试官通常会考察应聘者对数据库的理解、SQL语言的应用、数据库性能优化、以及数据库相关的技术栈和工具等方面的知识。以下是一些可能的面试问题及建议的回答思路:

图片

1、什么是关系型数据库,主键,外键,索引分别是什么?

  • 关系型数据库是由多张能互相联接的二维行列表格组成的数据库

  • 主关键字 (primary 是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录。

  • 外键表示了 两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表,外键又称作外关键字。

  • 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单

2、表的连接查询方式有哪些,有什么区别?

  • 交叉连接即笛卡儿乘积,是指两个关系中所有元组的任意组合

  • 使用内连接时,如果两个表的相关字段满足连接条件,就从这两个表中提取数据并组合成新的记录

  • 自连接是一种特殊的内连接,它是指相互连接的表在物理上为同一张表,但可以在逻辑上分为两张表

  • 外连接是只限制一张表中的数据必须满足连接条件,而另一张表中的数据可以不满足连接条件的连接方式

3、SQL 的 select 语句完整的执行顺序

  • from 子句组装来自不同数据源的数据;

  • where 子句基于指定的条件对记录行进行筛选;

  • group by 子句将数据划分为多个分组;

  • 使用聚集函数进行计算;

  • 使用 having 子句筛选分组;

  • 计算所有的表达式;

  • select 的字段;

  • 使用 order by 对结果集进行排序。

4、说一下 Mysql 数据库存储的原理?

储存过程是一个可编程的函数,它在数据库中创建并保存。它可以有

SQL 语句和一些特殊的控制结构组成。

当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。存储过程通常有以下优点:

  • 存储过程能实现较快的执行速度

  • 存储过程允许标准组件是编程。

  • 存储过程可以用流程控制语句编写,有很强的灵活性,可以完成复杂的判断和较 复杂的运算。

  • 存储过程可被作为一种安全机制来充分利用。

  • 存储过程能够减少网络流量

5、事务的特性?

  • 原子性 ( Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。

  • 一致性 ( Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。

  • 隔离性 ( Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。

  • 持久性 ( Durability):对于任意已 提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障

6、数据库索引?

数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用 B_TREE 。B_TREE 索引加速了数据访问,因为存储引擎不会再去扫描整张表得到需要的数据;相反,它从根节点开始,根节点保存了子节点的指针,存储引擎会根据指针快速寻找数据。

7、数据库怎么优化查询效率?

  • 储存引擎选择:如果数据表需要事务处理,应该考虑使用 InnoDB ,因为它完全符合 ACID 特性。如果不需

  • 要事务处理,使用默认存储引擎 MyISAM 是比较明智的

  • 分表分库,主从。

  • 对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引

  • 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

  • 应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描

  • 应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎

  • 放弃使用索 引而进行全表扫描

  •  Update 语句,如果只更改 1 、 2 个字段,不要 Update 全部字段,否则频繁调用会引起明显的性能消耗,同时带来大量日志

  • 对于多张大数据量(这里几百条就算大了)的表 JOIN ,要先分页再 JOIN ,否则逻辑读会很高,性能很差。

8、如何对查询命令进行优化?

  • 应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索。

  • 应尽量避免在 where 子句中对字段进行 null 值判断,避免使用 或 操作符,避免使用 or

  • 连接条件,或在where 子句中使用参数、对字段进行表达式或函数操作,否则会导致权标扫描

  • 不要在 where 子句中的“ “==”左边进行函数、算术运算或其他表达式运算,否则系统将可能无

  • 法正确使用索引。

  • 使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为

  • 条件时才能保证系统使用该索引,否则该索引将不会被使用。

  • 很多时候可考虑用 exists 代替 in 。

  • 尽量使用 数字型字段。

  • 尽可能的使用 varchar/nvarchar 代替 char/nchar 。

  • 任何地方都不要使用 select from t ,用具体的字段列表代替“”,不要返回用不到的任何字段。

  • 尽量使用表变量来代替临时表。

  • 避免频繁创建和删除临时表,以减少系统表资源的消耗。

  • 尽量避免使用游标,因为游标的效率较差。

  • 在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。

  • 尽量避免大事务操作,提高系统并发能力。

  • 尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

9、存储过程和函数的区别

相同点:存储过程和函数都是为了可重复的执行操作数据库的sql 语句的集合。

1)存储过程和函数都是一次编译,就会被缓存起来,下次使用就直接命中已经编译好的 sql 语句,不需要重复使用。减少网络交互,减少网络访问流量。

不同点:标识符不同,函数的标识符是function ,存储过程是 proceduce 。

1)函数中有返回值,且必须有返回值,而过程没有返回值,但是可以通过设置参数类型 in,out) 来实现多个参

数或者返回值。

2)存储函数使用 select 调用,存储过程需要使用 call 调用。

3)select 语句可以在存储过程中调用,但是除了 select..into 之外的 select 语句都不能在函数中使用。

4)通过 in out 参数,过程相关函数更加灵活,可以返回多个结果。

10、Sql 注入是如何产生的,如何防止?

程序开发过程中不注意规范书写sql 语句和对特殊字符进行过滤,导致客户端可以通过全局变量 POST 和 GET提交一些 sql 语句正常执行。产生 Sql 注入。下面是防止办法:

  • 过滤掉一些常见的数据库操作关键字,或者通过系统函数来进行过滤。

  • 在 PHP 配置文件中将 Register_globals=off; 设置为关闭状态

  • SQL语句书写的时候尽量不要省略小引号 (tab 键上面那个 和单引号

  • 提高数据库命名技巧,对于一些重要的字段根据程序的特点命名,取不易被猜到的

  • 对于常用的方法加以封装,避免直接暴漏 SQL 语句

  • 开启 PHP 安全模式:Safe_mode=on;

  • 打开 magic_quotes_gpc 来防止 SQL 注入

  • 控制错误信息:关闭错误提示信息,将错误信息写到系统日志。

  • 使用 mysqli 或 pdo 预处理。

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

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

相关文章

揭秘网络钓鱼:如何识破并防范这场数字时代的诈骗游戏

网络钓鱼是一种网络攻击&#xff0c;它利用伪装的电子邮件欺骗收件人提供信息、下载恶意软件或采取其他期望的行动。 网络钓鱼是网络害虫&#xff0c;自20世纪90年代初从暗网出现以来&#xff0c;至今仍危害全球。根据SlashNext的报告&#xff0c;2023年平均每天有31,000次网络…

SpringCloudAlibaba的nacos启动注册实现

首先安装nacos&#xff0c;注意看清楚版本号码&#xff0c;后面设置pom依赖的时候有用。 安装地址&#xff1a;Nacos 快速开始 | Nacos 官网 选择这里&#xff1a; 然后在这个跳转的页面中&#xff0c;找到你需要的版本&#xff0c;比如选择2.0.4 进入之后&#xff0c;选择你…

软考题-数据库2-数据模型/ER图/关系模式规范化

一、概念数据模型-ER图 1.概念数据模型-ER图的构件-属性的分类 属性分多值属性和单值属性&#xff0c;题目已经给出联系方式的值有手机电话和办公室电话&#xff0c;所以是多值属性 派生属性是由其他属性而来&#xff0c;年龄来自于出生年月 部门号是EMP表的外键二、关系模式 …

vue-element 表格组合查询 - fc-table-search 组件封装

开发目的 解决搜索form参数读取&#xff0c;配合异步请求&#xff0c;更新渲染数据&#xff1b;支持自适应高度&#xff0c;分页查询&#xff0c;搜索查询/重置。 额外提供formater类型&#xff1a;标签定义&#xff0c;金额&#xff0c;时间格式化&#xff0c;跨页勾选&#x…

Minstrel自动生成结构化提示,让AI为AI写提示词的多代理提示生成框架

在人工智能快速发展的今天&#xff0c;如何有效利用大型语言模型&#xff08;LLMs&#xff09;成为了一个普遍关注的话题。这是9月份的一篇论文&#xff0c;提出了LangGPT结构化提示框架和Minstrel多代理提示生成系统&#xff0c;为非AI专家使用LLMs提供了强大支持。 对于非人…

PHP人才机遇桥梁招聘求职全能系统小程序源码

人才机遇桥梁 —— 招聘求职全能系统全解析 &#x1f4bc;&#x1f680; &#x1f309; 搭建人才与机遇的桥梁 在这个竞争激烈的职场环境中&#xff0c;找到一份心仪的工作或招募到合适的人才&#xff0c;往往不是一件容易的事。但幸运的是&#xff0c;我们有了“人才机遇桥梁…

Hello-Java-Sec靶场搭建

安装环境&#xff1a;宝塔Linux面板 1.将靶场克隆到本地 git clone https://github.com/j3ers3/Hello-Java-Sec 2.安装maven yum install maven &#xff08;kali&#xff1a;apt install maven&#xff09; 3.安装成功后 mvn -v验证⼀下 4. 配置数据库连接&#xff0c;数据…

SysML图例-悬架作动器(Suspension Aactuator)

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>>

【Android】获取备案所需的公钥以及签名MD5值

目录 重要前提 获取签名MD5值 获取公钥 重要前提 生成jks文件以及gradle配置应用该文件。具体步骤请参考我这篇文章&#xff1a;【Android】配置Gradle打包apk的环境_generate signed bundle or apk-CSDN博客 你只需要从头看到该文章的配置build.gradle&#xff08;app&…

【议题征集 】上海站 nMeetup 将于十月份开启!

上海&#xff0c;作为我国的经济和金融中心&#xff0c;正迅速发展成为全球领先的科技创新城市。这座城市不仅拥有深厚的文化底蕴&#xff0c;还积极拥抱数字化转型&#xff0c;推动着数据库和人工智能基础设施的快速发展。第三站 nMeetup 我们将走进上海&#xff0c;本次活动由…

面向未来的设计:数字化转型时代的企业架构与建模革新

在数字化转型浪潮席卷全球的今天&#xff0c;企业架构&#xff08;Enterprise Architecture, EA&#xff09;与建模技术正成为引领未来业务发展的核心工具。企业如何设计面向未来的架构&#xff0c;不仅关乎技术的部署&#xff0c;更直接影响业务的战略定位和市场竞争力。《面向…

【PCL】Ubuntu22.04 安装 PCL 库

文章目录 前言一、更新系统软件包二、安装依赖项三、下载 PCL 源码四、编译和安装 PCL五、测试安装成功1、 pcd_write.cpp2、CMakeLists.txt3、build 前言 PCL&#xff08;Point Cloud Library&#xff09;是一个开源的大型项目&#xff0c;专注于2D/3D图像和点云处理。PCL为点…

创客匠人第二期“老蒋面对面”交流会圆满收官!

磅礴的大雨浇不灭奋斗的激情。9月24日&#xff0c;创客匠人第二期老蒋面对面—“创客匠人让知识变现不走弯路”内部大会在集美隆重举行。 本次内部大会旨在传递公司战略精神&#xff0c;深度探讨公司品牌传播的价值、方向和策略。这不仅是一次内部的交流与分享&#xff0c;更是…

详解 JDBC和连接池

目录 一.JDBC概述 1.介绍 2.好处 3.JDBC API 二.数据库连接 1.前置工作 2.方法一 3.方法二 4.方法三 5.方法四 6.方式五(配置文件) 三.ResultSet&#xff08;结果集&#xff09; 1.介绍 2.代码演示 3.底层原理 四.预处理 1.SQL注入 2.PreparedStatement 接口 …

一个很好的例子说明均值平滑滤波器有旁瓣泄漏效应

禹晶、肖创柏、廖庆敏《数字图像处理&#xff08;面向新工科的电工电子信息基础课程系列教材&#xff09;》P89

【C/C++】错题记录(二)

题目一 题目二 x是int型&#xff0c;当x被赋值为1.2浮点型时&#xff0c;x实际赋值为1&#xff0c;所以4.8/5.0由于/是整除&#xff0c;结果为小于1的小数&#xff0c;所以y被赋值为0。 题目三 题目四 题目五 题目六 在这段代码中&#xff0c;定义了一个联合体union X&#xf…

创建Vue项目的时出现:无法加载文件 E:\software\node\node_global\vue.ps1,因为在此系统上禁止运行脚本

创建Vue项目的时出现的问题:出现&#xff1a;无法加载文件 E:\software\node\node_global\vue.ps1&#xff0c;因为在此系统上禁止运行脚本 解决方法&#xff1a; .PowerShelll的执行政策阻止了该操作,用 get-ExecutionPolicy 查看执行策略的状态为受限 输入Set-ExecutionPo…

中关村环球时尚产业联盟 东晟时尚产业创新中心成立

2024年9月6日&#xff0c;中关村环球时尚产业联盟与东晟时尚创新科技&#xff08;北京&#xff09;有限公司于中关村科技园东城园举行了隆重的战略合作签约仪式。 中关村科技园东城园领导发表了致辞&#xff0c;并表示东城区作为首都北京的核心区域&#xff0c;拥有深厚的历史…

书生大模型实战训练营 第三期 入门岛

1.Linux 任务一 完成SSH连接与端口映射并运行hello_world.py vscode自带的端口设置功能很方便 2.Python 任务一 实现wordcount函数 任务二 vscode 单步调试

Android开发 使用platform.pk8和platform.x509.pem文件生成platform.jks文件

文章目录 Android开发 使用platform.pk8和platform.x509.pem文件生成platform.jks文件环境准备使用OpenSSL工具进行格式转换1.将platform.pk8转换为PEM格式&#xff1a;2.使用platform.pem和platform.x509.pem生成PKCS#12格式的PFX文件&#xff08;platform.p12&#xff09;&am…