测试工程师的一些面试题目(python)和总结

(一)说明

     1、记录自己面试测试工程师时遇到的一些编程题(python)。

     2、回顾下面试的过程,做个总结。

(二)题目

    1、输入:JSON {"a":"aa","b":"bb","c":{"d":"dd","e":"ee"}}   输出:字典 {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'} 

 1 def conversion(n,the_dict):
 2     for key,value in n.items():
 3         #如果value的值是字典,递归
 4         if isinstance(value, dict):
 5             conversion(value,the_dict)
 6         else:
 7            the_dict[key] = value
 8     return the_dict
 9 #实际上JSON对象应该要先用 json.loads(r)解码,转换为python的字典
10 #但是这里如果这样直接输入这种格式的数据,会默认为字典对象,就不解码了
11 r = {"a":"aa","b":"bb","c":{"d":"dd","e":"ee"}}
12 
13 the_dict = dict()
14 print(conversion(r,the_dict))

    2、计算n!,例如n=3(计算3*2*1=6)

1 def factorial(n):
2     if n == 1:
3         return 1
4     return n*factorial(n-1)
5 
6 print(factorial(5))

    3、字符串分割,将列表数据合并为字符串。获取字典的key和value值

1 the_str = '12,33,44'
2 
3 #分割字符串,返回的是一个列表
4 the_list = the_str.split(',')
5 print(the_list)
6 
7 #将列表合并为字符串,','可以指定不同元素之间的分隔符
8 print(','.join(the_list))
 1 the_dict = {'a': 'aa', 'b': 'bb', 'd': 'dd', 'e': 'ee'}
 2 
 3 #迭代字典的key值和value值
 4 for key,value in the_dict.items():
 5     print(key)
 6     print(value)
 7 #迭代字典的key值
 8 for key1 in the_dict.keys():
 9     print(key1)
10 
11 #迭代字典的value值
12 for value1 in the_dict.values():
13     print(value1)

    4、有一个列表,每个元素存放学生姓名、成绩,按学生成绩从优到差排序。

因为没限制用什么排序算法,所以我是用选择排序去实现的

 1 def student_achie(A):
 2     for i in range(len(A)):
 3         key = i
 4         for j in range(i+1,len(A)):
 5             if A[key].split(':')[1] < A[j].split(':')[1]:
 6                 key = j
 7         A[key],A[i] = A[i],A[key]
 8     return A
 9 
10 #学生姓名及学生成绩
11 stu = ['张三:20','李四:70','王五:88','李六:40','王吉:55.5',]
12 
13 print(student_achie(stu))

    5、有一个列表,每个元素存放学生姓名、成绩,计算学生的总成绩。

1 #计算学生总成绩
2 def total_achie(A):
3     if len(A) == 1:
4         return float(A[0].split(':')[1])
5     return float(A.pop().split(':')[1]) + total_achie(A)
6 #学生姓名及学生成绩
7 stu = ['张三:20','李四:70','王五:88','李六:40','王吉:55.5',]
8 
9 print(total_achie(stu))

    6、实现斐波那契数列(第一项和第二项都是1,后面的都是前面2项相加),并打印前10项

 1 def fibonacci(n):
 2     the_list = []
 3     for i in range(n):
 4         if i == 0:
 5             the_list.append(1)
 6         elif i == 1:
 7             the_list.append(1)
 8         else:
 9             the_list.append(the_list[i-1] + the_list[i-2])
10     return the_list
11 #输出[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
12 print(fibonacci(10))

    7、算法性能主要受哪些因素影响?(我先回答了空间复杂度和时间复杂度),然后他问对算法的稳定性有了解吗

       当时我只回了受空间复杂度和时间复杂度影响。稳定性不了解。算法我还没学到性能分析这一块,短时间内应该也还没打算在上面花时间,所以这题没答案,先记着,等有空了再研究下。

    8、id ="info" 的div的xpath表达式

     //div[@id="info"]

   9、还有一些sql题目和基础的理论知识就不说了,不会太难(别问一些比较偏门或我平时基本用不上的知识点应该没什么问题),sql基本就到多表关联查询。(面试前复习下join on 、group by、order by、having的用法基本就够用了,有的可能需要转格式to_data() to_char(),因为最近大半年比较少写sql,不复习下很容易犯一些低级错误)

   10、还有一个Oracle的递归查询没写出来,这个确实得好好研究下。

    11、还有其他问了一些selenium的元素定位那些,没有问太难的。

(三)总结

  第一个,面试感觉自己在梦游,根本没有发挥出应有的水平,一些会的也没在自我介绍和对话中体现出来(还有一个很简单的题目竟然没写出来)。现在想想主要是:

        1、没有认真的做好准备,没有去复习一些基础知识,刚离职心态还没调整过来(刚来深圳找房子、找工作说实话有点累,状态一般),态度不够端正。

        2、平时写代码、sql一般都是有大概思路就直接写,写完后测试下行不行,哪里有问题就调试修改下,什么函数/方法不懂或忘记了,百度或谷歌查查资料(除了一些比较难的,基本是看下就懂了)。但是面试的时候,直接在纸上写,这时候感觉离开了IDE和网络确实很不习惯。

       后面认真复习下基础知识,2次面试后,成功拿到offer。第二次面试python的编程笔试和面试题应该基本正确(可能有点小问题),没过的原因感觉主要是他们想招一个熟悉Android自动化的,并且要负责维护他们的自动化测试框架、给别人解答他们自动化测试框架的一些问题,熟练使用Linux、adb命令,查看、分析日志等等,这工作我暂时确实没法胜任。

        总结:

        1、自我介绍、谈谈自身的优势、对加班的看法(发现这3个问题好像基本都有)不是口才特别好的话,最好先在纸上写一个版本,面试的时候不用临时组织语言。

         2、不要太看重面试,放松心态,就把这当成和朋友间的一次谈话,你会发现你会表现得更好。表现出自己的正常水平就行了,这样面试不过也是好事,因为确实代表你没能力胜任这项工作。

         3、面试前复习下一些基础知识,把一些比较常见的编程题、最常用的一些方法在纸上写一遍。

         4、其他或许该想想怎么避免谈到自己不擅长的知识点,将谈话的重点拉到自己擅长的技术上来。

         5、感觉编程的题目一般不会太难,一般都是考一些基础,然后根据你的简历问一些问题。(但是很尴尬的却是,第一次时用IDE几分钟可以敲出来的代码,在纸上偏偏写不出来,这种情况一般都是一些关键又很简单的函数/方法忘记了)所以面试前,最好花一些时间复习一下(基本的数据类型整型、浮点数、字符串、列表、字典、集合和一些常用的函数/方法等)。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏华章科技

Bruce Eckel:我最喜欢Python,Kotlin或将取代Java(附演讲全文+PPT)

这两天,Bruce Eckel来到中国,这是他的中国首秀。5月22日,Bruce Eckel发表了他的最新演讲,与在场的1000多人分享关于编程语言的一些思考,...

34340
来自专栏一个会写诗的程序员的博客

编程范式 (Programming paradigm)

范,模范、典范也。范式即模式、方法。常见的编程范式有:函数式编程、程序编程、面向对象编程、指令式编程等。

38310
来自专栏牛客网

阿里 Java研发工程师[内推] 电话面试

3月20号 阿里巴巴 Java研发工程师[内部推荐] 电话面试 1. 自我介绍(问了我哪里人、去杭州工作有没有问题、什么时间可以去实习) 2. 介绍一下自己做过...

48290
来自专栏阮一峰的网络日志

为什么Lisp语言如此先进?(译文)

上周,《黑客与画家》总算翻译完成,已经交给出版社了。 翻译完这本书,累得像生了一场大病。把书稿交出去的时候,心里空荡荡的,也不知道自己得到了什么,失去了什么。 ...

32160
来自专栏noteless

抽象工厂模式 创建型 设计模式(四)

所有的ConcreteCreator的返回类型都是Product,因为抽象工厂角色Creator就是返回Product 

7120
来自专栏Aloys的开发之路

关于强制式(命令式)语言和声明式语言的区别

在阅读Alfred V.Aho等的大作Compilers Principles,Techniques and Tools是看到如下一段话: Another  c...

31150
来自专栏Python小屋

Python实现大自然数分解为最多4个平方数之和(1)

问题描述:任意大自然数,总是能分解为最多4个平方数的和,所谓平方数是指它是一个自然数的平方。例如:72884 = 4^2 + 138^2 + 232^2,337...

28840
来自专栏诸葛青云的专栏

C语言:画一个爱心 送女票

其实学编程关键是学习其思想,如果你精通了一门,再去学其他的时候也很容易上手。C不会过时的,尤其是在unix、linux操作平台上,学好C是必须的。

19100
来自专栏Albert陈凯

Scala兴衰史:暂时的没落或许是一个新的开始

5年前,Scala 似乎曾要成为编程语言中下一个佼佼者,因为它能够优雅得使用面向对象编程范式进行函数编程。 现如今,随着像 LinkedIn 和 Yammer ...

40640
来自专栏desperate633

LintCode 买卖股票的最佳时机 II题目分析代码

假设有一个数组,它的第i个元素是一个给定的股票在第i天的价格。设计一个算法来找到最大的利润。你可以完成尽可能多的交易(多次买卖股票)。然而,你不能同时参与多个交...

6710

扫码关注云+社区

领取腾讯云代金券