1. 程式人生 > >測試工程師的一些面試題目(python)和總結

測試工程師的一些面試題目(python)和總結

pat 實現 cci strong 表現 用法 工程 重點 性能

(一)說明

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幾分鐘可以敲出來的代碼,在紙上偏偏寫不出來,這種情況一般都是一些關鍵又很簡單的函數/方法忘記了)所以面試前,最好花一些時間復習一下(基本的數據類型整型、浮點數、字符串、列表、字典、集合和一些常用的函數/方法等)。

測試工程師的一些面試題目(python)和總結