測試面試題集錦(四)| Linux 與 Python 編程篇(附答案)

本文為霍格沃茲測試學院學員學習筆記。

本系列文章總結歸納了一些軟體測試工程師常見的面試題,主要來源於個人面試遇到的、網路搜集(完善)、工作日常討論等,分為以下十個部分,供大家參考。如有錯誤的地方,歡迎指正。有更多的面試題或面試中遇到的坑,也歡迎補充分享。希望大家都能找到滿意的工作,共勉之!~

軟體測試工程師面試題

  1. 測試常見問題與流程篇
  2. 測試工具篇
  3. 電腦網路知識與資料庫篇
  4. Linux 與 Python 編程技能篇
  5. 自動化測試(Selenium、Appium 和介面測試)與性能測試篇
  6. 軟素質篇(10 大靈魂拷問)與反問面試官篇

Linux 技能篇

1. 工作中常用的 Linux 命令有哪些?
awk、sed、vim、iotop、dstat、cp、top、ifconfig、pwd、cd、ll、ls、cat、tail、grep、mv、rm、mkdir、df、du
2.什麼命令可以幫助 Linux 執行 Windows 上傳的腳本?
  • 改變編碼格式
  • vim test.sh
  • :set ff?// 顯示dos的話
  • :set ff=unix:wq
3簡述 Linux 三劍客
  • grep 命令

    • 根據用戶指定的模式 pattern 對目標文本進行過濾,顯示被模式匹配到的行;
    • grep [options] pattern [file]
    • 常用參數:
      • -v 顯示不被pattern匹配到的行
      • -i 忽略字元的大小寫
      • -n 顯示匹配的行號
      • -c 統計匹配的行數
      • -o 僅顯示匹配到的字元串
      • -E 使用ERE,相當於egrep(可以識別更多的正則表達式規則)
  • sed 命令

    • 流編輯器,用來處理一行數據。將一行數據存儲在模式空間中->用sed命令處理->送入螢幕->清空空間。
    • 常用參數:
      • -h 顯示幫助
      • -n 僅顯示script處理後的結果
      • -e 指定的腳本來處理輸入的文本文件
      • -f 以指定的腳本文件來處理
    • 常用動作:
      • a: 新增 sed -e 『4 a newline』
      • c: 取代 sed -e 『2,5c No 2-5 number』
      • d: 刪除 sed -e 『2,5d』
      • i: 插入 sed -ed 『2i newline』
      • p: 列印 sed -n 『/root/p』
      • s: 取代 sed -e 『s/old/new/g』
      • g: 代表全局
  • awk 命令

    • 把文件逐行的讀入,以空格為默認分隔符將每行切片。把行作為輸入,並賦值給$0->將行切段,從$1開始->對行匹配正則/執行動作->列印內容;
    • awk 'pattern + action' [filenames]
    • 常用語法:
      • filename awk 瀏覽的文件名
      • begin 處理文本前要執行的操作
      • end 處理文本之後要執行的操作
      • fs 設置輸入域分隔符,等價於命令行-F選項
      • nf 瀏覽記錄的域的個數(列數)
      • nr 已讀的記錄數(行數)
    • 常用參數:
      • ofs 輸出域分隔符
      • ors 輸出記錄分隔符
      • rs 控制記錄分隔符,換行標誌
      • $0 整條記錄
      • $1 第一條分隔後的記錄
4.如何通命令定位 Linux 伺服器下的日誌?
  • 如果要監控日誌,那麼使用 tail -f | grep xxx 命令,過濾需要的欄位;
  • 如果在完整日誌中查看內容,使用 cat xxx.log | grep xxxx | awk 『{print $1}』 等命令過濾自己需要的內容;
5.簡述項目中的環境搭建和維護
  • 結合自身經驗先從系統安裝開始,如常用的 CentOS 和 Ubuntu 說起,系統安裝主要是磁碟分區和磁碟陣列問題;
  • 基礎環境依賴,如 MySQL、Redis、Jenkins、Docker、項目中用到的其他依賴環境等;
  • 維護方便主要從遇到的錯誤說起,如無法遠程連接、伺服器加固等;

Python 編程篇

1.Python 中類方法,類實例方法,靜態方法的區別
  • 實例方法:由對象調用;至少一個 self 參數;執行普通方法時,自動將調用該方法的對象賦值給 self;
  • 類方法:由類調用;至少一個 cls 參數;執行類方法時,自動將調用該方法的類複製給 cls;
  • 靜態方法:由類調用;無默認參數;
2.dict 和 tuple 及 list 的區別(這裡列的是主要區別,面試足夠)
  • tuple 是不可變對象,list 和 dict 都是可變對象,這裡的不可變指的是指向地址不可變;
  • list 是有序的,dict 是無序的,不可存放有序集合;
  • dict 查找速度快,不管有多少個元素時間都一樣,list 查找速度慢,需要有序查找;
  • dict 的 key 為不可變對象,且不可重複,list 則可以重複,存放任意對象;
3.JSON 和 dict 的區別
  • JSON 是一種數據格式,純字元串。dict 是一種完整的數據結構;
  • dict 是一個完整的數據結構,是對 Hash Table 這一數據結構的一種實現,是一套從存儲到提取都封裝好了的方案。它使用內置的哈希函數來規劃 key 對應 value 的存儲位置,從而獲得O(1)的數據讀取速度;
  • JSON 的 key 只能是字元串,Python 的 dict 可以是任何可 hash 對象(不可變對象);
  • JSON 的 key 可以是有序、可重複的;dict 的 key 不可重複,且無序;
  • JSON 任意 key 存在默認值 undefined,dict 默認沒有默認值;
  • JSON 訪問方式可以是[],也可以是.,遍歷方式分 in、of;dict 的 value 僅可以下標訪問;
  • dict 可以嵌套 tuple,JSON 里只有數組;
4.Python 會不會出現記憶體泄漏,為什麼?
  • 當對象之間互相引用的時候再刪除的時候,可能會造成無法釋放對象的情況,出現泄漏;
  • 上面為個人了解,如有其它請補充;
5.Python 的同步和非同步
  • 直接得到最終結果的結果,就是同步調用。
  • 不直接得到的最終的結果,就是非同步調用。
  • 同步與非同步區別在於:調用者是否得到了想要的最終結果。
6.常見手撕程式碼題
  • 兩個列表提取作為字典
dict(zip(list1, list2))
  • 字元串反轉輸出
str = '1234567890'
print(str[::-1])

l = list(str)
l.reverse()
print(''.join(l))
  • 實現斐波那契數列
def Fibonacci(loop):
    if loop == 0:
        return '無效參數'
    elif loop == 1:
        return 0
    l = [0, 1]
    for i in range(2, loop):
        l.append(l[i - 1] + l[i - 2])
    return l
  • 找出駝峰數組的最大值
li = [1, 2, 10, 10, 2, 1]
print([v for v in li if v == max(li)])
  • 水仙花數
sxh = []
for i in range(100, 1000):
    s = 0
    for j in str(i):
        s += int(j)**3
    if i == int(j)**3:
        sxh.append(i)
print(sxh)
  • 完全數
a = []
for i in range(1, 1000):
    s = 0
    for j in range(1, i):
        if i % j == 0 and j < i:
            s += j
    if s == i:
        a.append(i)
  • 冪的遞歸
def mi(a, n):
    if n == 0:
        return 1
    else:
        return a * mi(a, n - 1)
  • 目錄遍歷
import os

def get_file(path, rule=''):
    files = []
    for fpath, dirs, fs in os.walk(path):
        for f in fs:
            if os.path.join(fpath, f).endswith(rule):
                files.append(f)
    return files

更多內容,我們在後續文章分享。

>本文為霍格沃茲測試學院學員學習筆記。
本系列文章總結歸納了一些軟體測試工程師常見的面試題,主要來源於個人面試遇到的、網路搜集(完善)、工作日常討論等,分為以下十個部分,供大家參考。如有錯誤的地方,歡迎指正。有更多的面試題或面試中遇到的坑,也歡迎補充分享。希望大家都能找到滿意的工作,共勉之!~
#### 軟體測試工程師面試題
1. [測試常見問題與流程篇](//blog.csdn.net/weixin_46635091/article/details/107833640)2. [測試工具篇](//blog.csdn.net/weixin_46635091/article/details/107843200)3. [電腦網路知識與資料庫篇](//blog.csdn.net/weixin_46635091/article/details/107857758)4. Linux 與 Python 編程技能篇5. 自動化測試(Selenium、Appium 和介面測試)與性能測試篇6. 軟素質篇(10 大靈魂拷問)與反問面試官篇#### Linux 技能篇
##### 1. 工作中常用的 Linux 命令有哪些?
“`bashawk、sed、vim、iotop、dstat、cp、top、ifconfig、pwd、cd、ll、ls、cat、tail、grep、mv、rm、mkdir、df、du“`
##### 2.什麼命令可以幫助 Linux 執行 Windows 上傳的腳本?
– 改變編碼格式- vim test.sh- :set ff?// 顯示dos的話- :set ff=unix:wq##### 3簡述 Linux 三劍客
– grep 命令
  – 根據用戶指定的模式 pattern 對目標文本進行過濾,顯示被模式匹配到的行;  – grep [options] pattern [file]  – 常用參數:    – -v 顯示不被pattern匹配到的行    – -i 忽略字元的大小寫    – -n 顯示匹配的行號    – -c 統計匹配的行數    – -o 僅顯示匹配到的字元串    – -E 使用ERE,相當於egrep(可以識別更多的正則表達式規則)- sed 命令  – 流編輯器,用來處理一行數據。將一行數據存儲在模式空間中->用sed命令處理->送入螢幕->清空空間。  – 常用參數:    – -h 顯示幫助    – -n 僅顯示script處理後的結果    – -e 指定的腳本來處理輸入的文本文件    – -f 以指定的腳本文件來處理  – 常用動作:    – a: 新增 sed -e ‘4 a newline’    – c: 取代 sed -e ‘2,5c No 2-5 number’    – d: 刪除 sed -e ‘2,5d’    – i: 插入 sed -ed ‘2i newline’    – p: 列印 sed -n ‘/root/p’    – s: 取代 sed -e ‘s/old/new/g’    – g: 代表全局- awk 命令  – 把文件逐行的讀入,以空格為默認分隔符將每行切片。把行作為輸入,並賦值給$0->將行切段,從$1開始->對行匹配正則/執行動作->列印內容;  – `awk ‘pattern + action’ [filenames]`  – 常用語法:    – filename awk 瀏覽的文件名    – begin 處理文本前要執行的操作    – end 處理文本之後要執行的操作    – fs 設置輸入域分隔符,等價於命令行-F選項    – nf 瀏覽記錄的域的個數(列數)    – nr 已讀的記錄數(行數)  – 常用參數:    – ofs 輸出域分隔符    – ors 輸出記錄分隔符    – rs 控制記錄分隔符,換行標誌    – $0 整條記錄    – $1 第一條分隔後的記錄##### 4.如何通命令定位 Linux 伺服器下的日誌?
– 如果要監控日誌,那麼使用 tail -f | grep xxx 命令,過濾需要的欄位;- 如果在完整日誌中查看內容,使用 cat xxx.log | grep xxxx | awk ‘{print $1}’ 等命令過濾自己需要的內容;##### 5.簡述項目中的環境搭建和維護
– 結合自身經驗先從系統安裝開始,如常用的 CentOS 和 Ubuntu 說起,系統安裝主要是磁碟分區和磁碟陣列問題;- 基礎環境依賴,如 MySQL、Redis、Jenkins、Docker、項目中用到的其他依賴環境等;- 維護方便主要從遇到的錯誤說起,如無法遠程連接、伺服器加固等;#### Python 編程篇
##### 1.Python 中類方法,類實例方法,靜態方法的區別
– 實例方法:由對象調用;至少一個 self 參數;執行普通方法時,自動將調用該方法的對象賦值給 self;- 類方法:由類調用;至少一個 cls 參數;執行類方法時,自動將調用該方法的類複製給 cls;- 靜態方法:由類調用;無默認參數;##### 2.dict 和 tuple 及 list 的區別(這裡列的是主要區別,面試足夠)
– tuple 是不可變對象,list 和 dict 都是可變對象,這裡的不可變指的是指向地址不可變;- list 是有序的,dict 是無序的,不可存放有序集合;- dict 查找速度快,不管有多少個元素時間都一樣,list 查找速度慢,需要有序查找;- dict 的 key 為不可變對象,且不可重複,list 則可以重複,存放任意對象;##### 3.JSON 和 dict 的區別
– JSON 是一種數據格式,純字元串。dict 是一種完整的數據結構;- dict 是一個完整的數據結構,是對 Hash Table 這一數據結構的一種實現,是一套從存儲到提取都封裝好了的方案。它使用內置的哈希函數來規劃 key 對應 value 的存儲位置,從而獲得O(1)的數據讀取速度;- JSON 的 key 只能是字元串,Python 的 dict 可以是任何可 hash 對象(不可變對象);- JSON 的 key 可以是有序、可重複的;dict 的 key 不可重複,且無序;- JSON 任意 key 存在默認值 undefined,dict 默認沒有默認值;- JSON 訪問方式可以是[],也可以是.,遍歷方式分 in、of;dict 的 value 僅可以下標訪問;- dict 可以嵌套 tuple,JSON 里只有數組;##### 4.Python 會不會出現記憶體泄漏,為什麼?
– 當對象之間互相引用的時候再刪除的時候,可能會造成無法釋放對象的情況,出現泄漏;- 上面為個人了解,如有其它請補充;##### 5.Python 的同步和非同步
– 直接得到最終結果的結果,就是同步調用。- 不直接得到的最終的結果,就是非同步調用。- 同步與非同步區別在於:調用者是否得到了想要的最終結果。##### 6.常見手撕程式碼題
– 兩個列表提取作為字典“`pythondict(zip(list1, list2))“`
– 字元串反轉輸出
“`pythonstr = ‘1234567890’print(str[::-1])
l = list(str)l.reverse()print(”.join(l))“`
– 實現斐波那契數列
“`pythondef Fibonacci(loop):    if loop == 0:        return ‘無效參數’    elif loop == 1:        return 0    l = [0, 1]    for i in range(2, loop):        l.append(l[i – 1] + l[i – 2])    return l“`
– 找出駝峰數組的最大值
“`pythonli = [1, 2, 10, 10, 2, 1]print([v for v in li if v == max(li)])“`
– 水仙花數
“`pythonsxh = []for i in range(100, 1000):    s = 0    for j in str(i):        s += int(j)**3    if i == int(j)**3:        sxh.append(i)print(sxh)“`
– 完全數
“`pythona = []for i in range(1, 1000):    s = 0    for j in range(1, i):        if i % j == 0 and j < i:            s += j    if s == i:        a.append(i)“`
– 冪的遞歸
“`pythondef mi(a, n):    if n == 0:        return 1    else:        return a * mi(a, n – 1)“`
– 目錄遍歷
“`pythonimport os
def get_file(path, rule=”):    files = []    for fpath, dirs, fs in os.walk(path):        for f in fs:            if os.path.join(fpath, f).endswith(rule):                files.append(f)    return files“`#### 更多內容,我們在後續文章分享。