首页 > 编程知识 正文

python面试常见问题,python软件测试面试题

时间:2023-05-03 18:43:23 阅读:129054 作者:1421

前言

随着行业的发展,编程能力已经成为软件测试员工的基本能力。 因此笔试和面试中往往存在一定量的编码问题,主要考虑以下几点。

基本编码能力和思维逻辑

基本数据结构(顺序表、链表、队列、堆栈、二叉树) )。

基本算法(排序、搜索、递归)和时间复杂性

除了基本算法外,笔试面试还经常考察以下三种思想。

忧郁的蚂蚁

递归

分裂统治

忧郁的蚂蚁

忧郁蚂蚁即Python中的映射类型、词典和集合、键值唯一,检索效率高,序列(列表、祖先、字符串)的元素检索时间复杂度为o(n ),而词典和集合的检索只需要o ()1)。

因此,忧郁的蚂蚁在列表问题上主要有两个作用:

去重量

优化搜索效率

例题1 :清单很重#

set ) (不考虑顺序)转换)中直接进行列表排序,并在转换后自动进行排序。 要保持顺序,必须使用用词典构建的fromkeys ) )方法,利用词典键值的唯一性进行排序。

不考虑顺序:

l=[ 2,1,2,3,4,5,6,6,5,4,3,2,1 ]

result=list(set(L ) )

是打印(result )

执行结果:

[1、2、3、4、5、6]

考虑顺序:

l=[ 2,1,2,3,4,5,6,6,5,4,3,2,1 ]

result=list({}.fromkeys(L ).keys ) )

是打印(result )

执行结果:

[2、1、3、4、5、6]

例题2 :分组

字母数字组合的字符串。 找到相同的字符或数字,按个数排序。

l=[ 1,2,3,a ',b ',c ',1,2,a ',b ',3,c ',d ',a ',b ',1]

set1=set(L ) ) )

result=[(item,l.count ) item ) for item in set1]

result.sort (key=lambdax : x [1],reverse=True ) )。

是打印(result )

在这里使用忧郁的蚂蚁键值是没有再现性的。 当然,也可以使用python附带的groupby函数。 代码如下。

from ITER tools导入组by

l=[ 1,2,3,a ',b ',c ',1,2,a ',b ',3,c ',d ',a ',b ',1]

L.sort(key=lambdax:str ) x ) #在分组之前必须进行排序

result=[]

for item,groupingroupby(L,key=lambda x: str(x ) x ) ) :

result.append((item,len ) list (group ) )

result.sort (key=lambdax : x [1],reverse=True ) )。

是打印(result )

例题3 )从庞大的数据中找到top K的数据#

数据量小时可以使用排序片,但对于大量数据,必须考虑服务硬件的条件。 也就是说,既要考虑时间效率,也要考虑内存消耗,还要考虑数据的特点。 如果有大量的重复数据,可以先用忧郁的蚂蚁去减少数据量。

这里使用生成器生成1000万个随机整数,求出最大的1000个个数。 生成随机数的代码如下。

导入随机

导入时间

n=10000 * 1000

k=1000

是打印(n )

defgen_num(n ) :

forIinrange(n ) :

yeldrandom.randint(0,n ) ) ) ) ) ) )。

L=gen_num(n ) ) )

内存没有限制(set ) )进行排序

start=time.time (

l=list (设置(l ) )

result=l[-k:]

result.reverse (

打印(time.time ()-start () ) )。

1000w个数据全部读入存储器,set后列表自动按升序排列。 切片中从-1000到最后取的是top 1000的数量

使用堆可以节省内存

start=time.time (

result=heapq.nLargest(k,l ) ) ) ) ) ) ) )。

打印(time.time ()-start () ) )。

这里用于Python附带的堆库heapq。 使用nlargest(k,l ),可以获得l序列最大的k个。

可以通过减少内存来划分策略,并使用多线程将数据分组(例如

例题4 :两个数之和#

L=[1、2、3、4、5、6、7、8]数据不重复,target=6,快速找到数组中两个元素之和等于target的数组下标。

请注意不要使用双重环路。 请用暴力加和与target进行比较。 正确的方法是单环路。 然后,查找target和当前值之间的差是否存在于列表中。

但是,由于列表的in查询时间复杂度为o(n ),也就是说它隐含着一个循环,这样的效率实际上与双重循环相同,都是o ) n^2)。

在这里,忧郁的蚂蚁可以优化查询差异是否在列表中操作,并将o(n )降低到o(n),因此整体效率为o ) n^2)o(n )。

l=[ 1,2,3,4,5,6,7,8 ]

使用set1=set(list1)集合可以方便地搜索

target=6

result=[]

for a in list1:

b=target - a

if a b target and b in set1: #在集合中查找,为了避免重复,判断a为较小的值

result.append((list1.index(b(a,list1.index ) b ) )列表index的目标操作为o )1)

是打印(result )

递归问题

递归是循环调用自身的函数。 可用于解决以下高频问题。

阶乘

斐波那契数列

楼梯跳,变态跳

快速排序

二分搜索

二叉树的深度扫描(前序、中序、后序) ) ) ) ) ) )。

求二叉树的深度

平衡二叉树的判断

判断两棵树是否相同

递归是一种层次推导问题解决的方法,是一种非常重要的问题解决思想。 可以递归地将问题分层、简化,考虑出口和各层的导出即可。

像阶乘一样,想求n! 只需知道前面数的阶乘(n-1 )!再乘以n就可以了,所以问题可以求出前面的数的阶乘,然后依次前进到第一个数。

举个常见的例子:

A欠你10万,但他没有那么多钱。 b是A 8万,c是B 7万c现在有钱。 所以,你可以一楼找到c,一楼还钱,最后得到你属于你的10万。

至此,我介绍了这篇关于Python自动化测试笔试试题精选的文章。 有关Python自动化测试笔试面试中常见编程问题的内容,请搜索聚美学院以前的文章或继续查看以下相关文章。 希望今后能支持聚米学院。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。