高级软件测试面试题大放送
本文总结了高级软件测试面试题,涵盖了软件测试的多个方面,包括数据类型、哈希算法、哈希冲突、内存管理和垃圾回收机制、拷贝机制、协程机制等。
一、列表和元组的区别
列表是动态的,长度可变,可以随意地增删改元素。列表的存储空间略大于元组,性能略逊于元组。元组是静态的,长度大小固定,不可以对元组元素进行增删改操作。元组对于列表更加轻量级,性能稍优。
二、字典的原理
Python 中的字典底层依靠哈希表(hash table)实现,使用开放寻址法解决冲突。哈希表是 key-value 类型的数据结构,可以理解为一个键值需要按照一定规则存放的数组,而哈希函数就是这个规则。字典本质上是一个散列表(总有空白元素的数组,Python 至少保证 1/3 的数组是空的),字典中的每个键都占用一个单元。一个单元分为两部分,分别是对键的引用和对值的引用,使用 hash 函数获得键的散列值,散列值对数组长度取余,取得的值就是存放位置的索引。
三、哈希算法与哈希冲突
哈希算法是根据设定的哈希函数 H(key)和处理冲突方法将一组关键字映象到一个有限的地址区间上的算法。哈希表是数据经过哈希算法之后得到的集合。哈希冲突是由于哈希算法被计算的数据是无限的,而计算后的结果范围有限,因此总会存在不同的数据经过计算后得到的值相同,这就是哈希冲突。
四、解决哈希冲突
解决哈希冲突的方法一般有开放定址法、链地址法(拉链法)、再哈希法、建立公共溢出区等方法。
五、Python 的内存管理和垃圾回收机制
Python 的内存管理机制有三种:引用计数、垃圾回收、内存池。引用计数是一种非常高效的内存管理手段,当一个 Python 对象被引用时其引用计数增加 1,当其不再被引用时引用计数减 1,当引用计数等于 0 的时候,对象就被删除了。垃圾回收是 Python 的一种内存管理机制,它将不用的内存放到内存池而不是返回给操作系统。
六、内存过大时的调优手段
当内存过大时,可以使用手动垃圾回收、避免循环引用(手动解循环引用和使用弱引用)、调高垃圾回收阈值等方法进行调优。
七、Python 的拷贝机制
Python 的拷贝机制有三种:赋值、浅拷贝、深拷贝。赋值只是复制了新对象的引用,不会开辟新的内存空间。浅拷贝创建新对象,其内容是原对象的引用。深拷贝拷贝了对象的所有元素,包括多层嵌套的元素。
八、协程机制
协程机制是异步 IO 的一种典型应用场景。所谓异步,是指一段程序在执行完成前有能力“暂停”,让其他程序段执行。从语法上来看,协程和生成器类似,都是定义体中包含 yield 关键字的函数,所以总体上在协程中把 yield 看做是控制流程的方式。