职业经验 每天一点面试题(2021/3/5)

**潘 · 2021年03月05日 · 2564 次阅读

每天一点面试题
1--------------------------测试基础面试题
问:说一说白盒和黑盒的测试方法
答:白盒测试:
概念:白盒测试也称为结构化测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它是根据程序的控制结构来设计测试用例,主要用于软件或程序的验证。白盒测试法检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法。
局限:但即使每条路径都测试过了,任然有可能存在错误,因为穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序,穷举路径测试不可能检查出程序因为遗漏路径而出错,穷举路径测试发现不了一些与数据相关的错误。
原则:保证一个模块中的所有独立路径至少被测试一次;所有逻辑值均需要测试 true 和 false 两种方法;检查程序内部数据结构,保证期结构的有效性;在上下边界可操作范围内运行所有循环
常用方法:静态测试(不用运行程序,检查代码、结构分析、代码质量度量、文档测试等);动态测试(需要执行代码,通过运行程序来找到问题)
逻辑覆盖:包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖
黑盒测试:
概念:成为功能测试或数据驱动测试,是已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时把程序看作一个不能完全打开的盒子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按找需求说明书的规定正常使用,程序是否能适当的接入数据而产生正确的输出信息
方法:等价类划分;边界值划分;因果图;场景法;正交实验设计;判定表驱动分析法;错误推测法;功能图分析法

2--------------------------语言类面试题(python)
问:python 装饰器,作用,用法
答:python 装饰器是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于他的返回值也是一个函数,使用 python 装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。一般而言,我们想要拓展原来函数代码,最直接的办法就是侵入到函数里面做修改,但是如果不允许修改原有核心函数,需要用装饰器自己写一下,可以定义一个函数,他的参数是一个函数,然后对这个新的函数进行修改,可以拓展函数功能
需要注意的:1、实质:装饰器是一个函数 2、参数:是你要装饰的函数名(并非函数调用);3、返回:是装饰完的函数名(非函数调用);4,作用:为已经存在的对象添加额外的功能;5、特点:不需要对对象做任何的代码上的改变

import time
#函数的函数装饰器
def decorator(func):
    def wrapper(*args,**kwargs):
        start_time = time.time()
        func()
        end_time = time.time()
        print(end_time-start_time)

    return wrapper



def func():
    time.sleep(0.8)


func()


#类方法的函数装饰器
def decorator(func):
    def wrapper(me_instance):
        start_time = time.time()
        func(me_instance)
        end_time = time.time()
        print(end_time - start_time)
    return wrapper

class Method(object):
    @decorator
    def func(self):
        time.sleep(0.8)

p1 = Method()
p1.func()

#类装饰器
class Decorator(object):
    def __init__(self,f):
        self.f = f
    def __call__(self):
        print('decorator start')
        self.f()
        print("decorator end")

@Decorator
def func():
    print("func")

func()


# 装饰器库--functools
from functools import wraps
def decorator(func):
    @wraps(func)
    def inner_function():
        pass
    return inner_function

@decorator
def func():
    pass

print(func.__name__)


#一个面试题,要求给当前运行的函数打上时间标签
import time
def run_time(func):
    def wrapper(*x,**y):
        print(time.time())
        func(*x,**y)
    return wrapper

@run_time
def run(*x,**y):
    print(x)
    print(y)

def run2(*n,**m):
    print(n)
    print(m)

run(1,2,key = 'value')
run2(3,4,key = 'value')

3--------------------------操作系统类面试题(linux)
问:如何查看 linux 系统版本
cd /boot/grub
uname
lsb release -a
cat /etc/redhat-release

4--------------------------计算机网络类面试题
问:TCP 的可靠性是怎么保障的,分别解释一下是怎么实现
答:1、确认和重传机制:建立连接时三次握手同步双方的 “序列号 + 确认号 + 窗口大小” 来确认重传、流控的基础
2、数据排序:tcp 有专门的序列号 SN 字段,可提供数据 re-order
3、流量控制:滑动窗口和计时器的使用。TCP 窗口中会指明双方能够发送接收的最大数据量,发送方通过维持一个发送滑动窗口来确保不会发生由于发送方报文发送太快接收方无法及时处理的问题
4、拥塞控制:TCP 的拥塞控制由 4 个核心算法组成(“慢启动”、“拥塞避免”、“快速重传”、“快速恢复”)
5--------------------------数据库类面试题(sql,mysql)
问:mysql 删除语句有哪些
答:1、drop 语句,用来删除数据库和表:例子【drop database db;drop table tb】
2、delete 语句,用来删除表中的字段:例子【delete from tb where id=1】
3、用 truncate 来删除表中的所有字段:例子【truncate table tb】

补充:问:delete 和 truncate 有什么不同
答:DELETE 删除是一条一条删除,所以会有显示有多少行删除;truncate 是将表完全摧毁,再新建一张表,结构和之前一模一样
DELETE 删除表中的数据,但不重置 AUTO_INCREMENT 的值;truncate 摧毁表,重建表,AUTO_INCREMENT 重置为 1

6--------------------------自动化接口测试(Jmeter)
问:什么是采样器(samplers)和线程组(thread group)
答:线程组:对于任何测试计划,线程组元件都是 JMeter 的开始部分。这是 JMeter 的重要原件,你可以再其中设置多个用户和时间来加载线程组中给出的所有用户。
采样器:采样器生成一个或多个采样结果,这些采样结果具有许多属性,例如经过时间、数据大小等。采样器允许 JMeter 通过采样器将特定类型的请求发送到服务器,线程组决定需要发出的请求类型,一些有用的采样器包括 HTTP 请求,FTP 请求、JDBC 请求等

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册