【百度一二面】测试开发工程师 2021.10.09

2021.10.09 挂在二面 ,代码能力有待提高

一面:

1.对测试开发职位的理解
2.扣 实习经验
3.手撕算法:

	**找出一个字符串中第一个只出现一次的字符的位置** 
class Soltion :
    def maxLengthMax(self,str):
        for i in str:
            if str.count(i) == 1:
                print(i)
                break
        else:
            print(-1)
Soltion().maxLengthMax('google')

		**实现无重复字符串的最长子串**
def lengthLong(s):
    if len(s) ==0:
        return 0
    start = 0
    end  = 0
    ans = end -start +1
    while True:
        end +=1
        print('end= ',end)
        if s[end] in s[start:end]:
            print('s[end]=',s[end])
            k = s[start:end].find(s[end])
            start += k+1
        else:
            pass
        ans = max(end -start +1,ans)
        print(ans)
        if end == len(s)-1:
            break
    print(s[:ans])
lengthLong('adbcdcdf')

数据库:在这里插入图片描述

二面

1.实习相关项目
2.算法:找出数组中最大数和次大数

(没手写,但要你说出思路)
一个for循环,依次赋值比较
3.python装饰器:

python装饰器本质上就是一个函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外的功能,装饰器的返回值也是一个函数对象(函数的指针)
,应用场景:插入日志、性能测试、事务处理、权限校验

2.1 函数装饰器

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

@decorator 
def func():
    time.sleep(0.8)

func() # 函数调用# 输出:0.800644397735595

在上面代码中 func是我要装饰器的函数,我想用装饰器显示func函数运行的时间。@decorator这个语法相当于 执行 func =
decorator(func),为func函数装饰并返回。在来看一下我们的装饰器函数 - decorator,该函数的传入参数是func
(被装饰函数),返回参数是内层函数。这里的内层函数-wrapper,其实就相当于闭包函数,它起到装饰给定函数的作用,wrapper参数为*args,**kwargs。*args表示的参数以列表的形式传入;**kwargs表示的参数以字典的形式传入:
在这里插入图片描述从图中我们可以看到:凡是以key=value形式的参数均存在kwargs中,剩下的所有参数都以列表的形式存于args中。这里要注意的是:为了不破坏原函数的逻辑,我们要保证内层函数wrapper和被装饰函数func的传入参数和返回值类型必须保持一致。

2.2 类方法的函数装饰器

import time

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() # 函数调用

对于类方法来说,都会有一个默认的参数self,它实际表示的是类的一个实例,所以在装饰器的内部函数wrapper也要传入一个参数 -
me_instance就表示将类的实例p1传给wrapper,其他的用法都和函数装饰器相同。

2.3 类装饰器

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()

这里有注意的是:call()是一个特殊方法,它可将一个类实例变成一个可调用对象:

p = Decorator(func) # p是类Decorator的一个实例 p() # 实现了__call__()方法后,p可以被调用
要使用类装饰器必须实现类中的__call__()方法,就相当于将实例变成了一个方法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白舟的博客

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值