腾讯+测试+一面

QwQ确实都是没有想到过的问题呢
测试一个数据库应该怎么测试

数据库测试的测试点

1.数据库备份

内容正确性、不同介质与空间的备份,备份异常处理、大数据量的备份、部分or全部备份

2.数据库恢复

备份恢复操作是否正常、恢复过程中对异常情况的处理,不同环境下的恢复

3.数据库权限管理

权限设备、各权限分配功能实现

4.视图测试

测试数据库视图定义是否反映了用户的需求

5.数据库功能测试

通过测试用例运行数据库,以验证该数据库功能的正确和无遗漏。数据库功能测试的内容包括数据定义、数据操纵、数据库安全性、并发处理等的测试

6.数据操作和更新

增、删、改、查等操作

7.数据的完整性

实体完整性、参照完整性、用户定义的完整性等测试

8.数据的有效性

确保数据库存储信息的正确性

9.数据库安全测试

测试数据库的安全措施是否发挥作用并达到预期效果,有无漏洞

10.并发处理测试

为了找出数据库系统并发处理机制的可能缺陷,进行并发处理测试

11.数据库性能测试

数据库性能测试分为平均性能测试、压力测试、负载测试和强度测试4种类型

12.空数据库测试

将数据库表中所有的内容全部清空,只留下一个管理员账户信息,检查系统的所有功能操作是否能够正常实现

13.SQL语句优化

14.存储过程的接口测试

15.触发器的接口测试

16.结合业务逻辑做关联表的接口测试

析构函数和构造函数的差别
Python中,构造函数(constructor)和析构函数(destructor)同为类中默认存在的无初始内容函数(可写入内容),且都在会在对对象执行操作时调用。

不同的是构造函数在创建对象后自动被调用,而析构函数在对象被销毁前(作为垃圾被收集)自动被调用。

Python里面的构造函数是什么?
Python中的构造函数是__init__函数。在Python中,子类如果定义了构造函数,而没有调用父类的,那么Python不会自动调用,也就是说父类的构造函数不会执行。

.pyc是什么,作用
pyc文件,其实是PyCodeObject,是Python编译后的结果。当python程序运行时,编译的结果是保存于PyCodeObject,程序运行结束后,Python就将PyCodeObject写入到pyc文件中,这是个字节码文件。

所以当你下一次运行这个程序时,程序会现在_pycache_文件夹里找pyc文件,而如果找到了,就省去了编译的过程,节省了时间。
来运行这个程序,这可能适用于你不想给别人看到源码的情况

init.py是什么,作用

__init__.py 文件的作用是将文件夹变为一个Python模块,Python 中的每个模块的包中,都有__init__.py 文件。

通常__init__.py 文件为空,但是我们还可以为它增加其他的功能。我们在导入一个包时,实际上是导入了它的__init__.py文件。这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入。


拥塞控制是怎么实现的
TCP拥塞控制算法包括三个主要部分:



慢启动
拥塞避免
快速恢复
其中慢启动和拥塞避免是TCP的强制部分,而快速恢复是推荐部分,对TCP的发送方并非是必须的。

2.1 慢启动
当一条TCP连接开始时,cwnd的值通常设置为一个MSS(较小值),这就使得初始发送速率大约为MSS/RTT。由于对于TCP的发送方而言,可用带宽可能比MSS/RTT大得多,TCP发送方希望迅速找到可用带宽的数量。因此,在慢启动状态,cwnd的值以1个MSS开始并且每当运输的报文段首次被确认就增加一个MSS。如下图的例子所示:

有几种结束指数增长的方式:

如果存在一个由超时指示的丢包事件(拥塞),TCP发送方将cwnd设置为1并重新开始慢启动过程。它还将第二个状态变量的值ssthresh(“慢启动阈值”的速记)设置为cwnd/2,即当检测到拥塞时将ssthresh设置为拥塞窗口值的一半。
第二种方式是直接与ssthresh的值相关联。因为当检测到拥塞时ssthresh设置为cwnd值的一半,每当达到或超过ssthresh的值时,继续使cwnd翻番可能有些鲁莽。因此,当cwnd的值等于ssthresh时,结束慢启动并且TCP转移到拥塞避免模式。
最后一种结束慢启动的方式是,如果检测到3个冗余ACK,这时TCP执行一种快速重传并进入快速恢复状态。
2.2 拥塞避免
一旦进入拥塞避免状态,cwnd的值大约是上次遇到拥塞时的值的一半。因此,TCP不应该再每过一个RTT就将cwnd的值翻番,此时TCP采用了一种较为保守的方法,每个rtt只将cwnd的值增加一个MSS。

在拥塞避免状态下,每个丢包事件(由超时或者三个冗余ACK来指示)都指示了应该结束拥塞避免的现性增长:

当出现超时时,cwnd的值被设置为1个MSS,同时ssthresh的值被更新为cwnd值的一半
当出现三个冗余ACK时,因为网络能继续从发送方向接收方交付报文段,因此TCP对这种丢包事件的行为,相比于超时应该更“宽容”:此时TCP将cwnd的值减半,将ssthresh的值记录为cwnd值的一半,接下来进入快速恢复状态。
下图指示了出现超时事件时cwnd的变化:


2.3 快速恢复
发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段,于是不启动慢开始算法,而执行快速恢复算法。

快速恢复是TCP推荐的而非必须的构件。一种称为TCP Tahoe的TCP早期版本,不管是发生超时指示的丢包事件,还是发生3个冗余的ACK指示的丢包事件,都无条件地将其拥塞窗口减至1个MSS,并进入慢启动阶段。TCP的较新版本TCP Reno,则引入了快速恢复的机制。

快速恢复有两种实现方式,第一种是发送方将ssthresh值和拥塞窗口cwnd调整为当前窗口的一半,并开始执行拥塞避免算法;第二种实现方式是把快速恢复开始时的拥塞窗口cwnd的值再增大一些,即等于新的ssthresh+3,这是因为既然发送方收到三个重复的确认,就表明有三个数据报文已经离开了网络;这三个报文段不再消耗网络资源而是停留在接收方的接收缓存中;可见现在网络中不是堆积了报文段而是减少了三个报文段,因此可以适当把拥塞窗口扩大一些。

下图演示了Reno版TCP与Tahoe版TCP的拥塞控制窗口的演化情况。在该图中,阈值初始等于8个MSS,在前8个传输回合,Tahoe和Reno采取了相同的动作。拥塞窗口在慢启动阶段以指数速度快速爬升,在第4轮传输时到达了阈值。然后拥塞窗口以线性速度爬升,直到在第8轮传输后出现了3个冗余ACK。注意到该丢包事件发生时,拥塞窗口值为12MSS。于是ssthresh的值被设置为0.5cwnd=6*MSS。在TCP Reno下,拥塞窗口被设置为cwnd=9MSS,然后线性地增长。在TCP Tahoe下,拥塞窗口被设置为1个MSS,然后呈指数增长,直至到达ssthresh值为止,在这个点它开始线性增长。
面试感受:人挺好,我是个废物。感觉答的都很浅,要重新再深入学习一下。#面试题目##腾讯#
全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
03-31 10:48
已编辑
腾讯cisg 实习 0 其他
点赞 评论 收藏
转发
1 14 评论
分享
牛客网
牛客企业服务