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