13.3 数据库
在软件测试行业中,产品展示的数据大部分来源于数据库,因此软件测试工程师对数据库的了解便是一个基本的要求。在测试工程师了解需求后,需求中涉及数据的内容,只有运用数据库相关知识才能构建合理的测试数据,编写出更加完善的测试用例。因此,在面试过程中数据库相关知识的考察便成为一个基本项。
13.3.1 数据库基础
数据库基础是对数据库的基本了解,通过来说考察的是一些概念性问题。
示例1:关系型数据库和非关系型数据库的区别是什么?
此题主要考察面试者对关系型数据库和非关系型数据库的理解。如果两种类型的数据库都在实际项目中使用过,则很好作出解答。常见的关系型数据库有MySQL、PostgreSQL和SQLite等,常见的非关系型数据库有MongoDB、CouchDB、Redis和Apache Cassandra等。
解答:
关系型数据库的优点:
容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解。
使用方便:支持SQL语句,可用于复杂的查询。通用的SQL语言使得操作关系型数据库非常方便。
易于维护:实体完整性、参照完整性和用户定义的完整性很大地降低了数据冗余和数据不一致的概率。
支持事务。
关系型数据库的缺点:
表结构固定。
不支持高并发读写需求。
不支持海量数据的高效率读写。
为了维护一致性所付出的巨大代价就是其读写性能比较差。
非关系型数据库的优点:
NoSQL的存储格式都是(key, value)。
数据没有耦合性,容易扩展存储数据的格式。
无须经过SQL层的解析,读写性能很多基于键值对。
非关系型数据库的缺点:不支持SQL语言。
综上特点,非关系型数据库适合需要大量写入的地方,例如日志记录或过渡数据,而非关系型数据库适合没有大量数据插入或偶尔插入数据的业务数据存储,例如报告、客户管理等。
示例2:主键、超键、候选键和外键分别是什么?
此题主要考察面试者对数据库中主键、超键、候选键和外键的基本概念知识,如果是面试官直接提问,则在回答时结合项目中的实际应用实例回答更能显示出自己在这方面的知识储备及其运用。
解答:
主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。
超键:在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。超键包含候选键和主键。
候选键:最小超键,即没有冗余元素的超键。
外键:在一个表中存在的另一个表的主键。
示例3:事务的四大特性是什么?
解答:事务的四大特性(ACID)是原子性、一致性、隔离性、持久性。
原子性:事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性:如果事务执行之前数据库是一个完整的状态,那么事务结束后,无论事务是否执行成功,数据库仍然是一个完整的状态。
隔离性:多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间的数据要相互隔离。
持久性:一个事务一旦被提交,它对数据库的影响就是永久性的。
示例4:什么是事务?MySQL如何支持事务?
解答:事务是由一步或几步数据库操作序列组成的逻辑执行单元,这一系列操作要么全部执行,要么全部放弃执行。MySQL的事务处理主要有两种方法:
(1)用begin、rollback、commit来实现。
begin:开始一个事务。
rollback:事务回滚。
commit:事务确认。
(2)直接用set来改变MySQL的自动提交模式。MySQL默认是自动提交的,也就是你提交一个语句就直接执行。可以通过下面两种设置来进行:
set autocommit = 0:禁止自动提交。
set autocommit = 1:开启自动提交。
示例5:什么叫视图?
解答:视图是一种虚拟的表,是一组数据的逻辑表示,通常是有一个表或者多个表的行或列的子集,具有和物理表相同的功能。视图本身并不包含任何数据,它只包含映射到基表的一个查询语句,当基表数据发生变化时,视图数据也会随之变化。
示例6:索引设计的原则?
解答:适合索引的列是出现在where子句中的列,或者连接子句中指定的列。基数较小的类,索引效果较差,没有必要在此列建立索引。使用短索引,如果对长字符串列进行索引,应该指定一个前缀长度,这样能够节省大量索引空间。不要过度索引,索引需要额外的磁盘空间,并降低写操作的性能。在修改表内容的时候,索引会进行更新甚至重构,索引列越多,这个时间就会越长。所以,只保持需要的索引有利于查询即可。
示例7:简单地说说Redis。
解答:Redis是一款NoSQL技术,面向Java Web。它就是一个简单的基于内存的数据库, 并提供持久化服务。Redis和MongoDB是当前使用最广泛的NoSQL,主要应对每秒几十万的读写操作,其性能远远超过数据库,并且在高并发下保证数据的一致性和安全性。Redis具有很多优势:性能优秀,数据在内存中,读写速度非常快,支持并发10W QPS;单进程单线程,是线程安全的,采用IO多路复用机制;丰富的数据类型,支持字符串(strings)、散列(hashes)、列表(lists)、集合(sets)、有序集合(sorted sets)等;支持数据持久化;可以将内存中数据保存在磁盘中,重启时加载;主从复制,哨兵,高可用;可以用作分布式锁;可以作为消息中间件使用,支持发布订阅。
版权声明:51Testing软件测试网获得作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。