1. 程式人生 > 其它 >04父子程序迴圈、父子訊號處理、檔案IO小知識

04父子程序迴圈、父子訊號處理、檔案IO小知識

本文為霍格沃茲測試學院學員學習筆記,進階學習文末加群。

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

軟體測試工程師面試題

  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
  1. 簡述 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` 第一條分隔後的記錄
  1. 如何通命令定位 Linux 伺服器下的日誌?
* 如果要監控日誌,那麼使用 `tail -f | grep xxx` 命令,過濾需要的欄位;

* 如果在完整日誌中檢視內容,使用 `cat xxx.log | grep xxxx | awk '{print $1}'` 等命令過濾自己需要的內容;
  1. 簡述專案中的環境搭建和維護
* 結合自身經驗先從系統安裝開始,如常用的 CentOS 和 Ubuntu 說起,系統安裝主要是磁碟分割槽和磁碟陣列問題;

* 基礎環境依賴,如 MySQL、Redis、Jenkins、Docker、專案中用到的其他依賴環境等;

* 維護方便主要從遇到的錯誤說起,如無法遠端連線、伺服器加固等;

Python 程式設計篇

  1. Python 中類方法,類例項方法,靜態方法的區別
* 例項方法:由物件呼叫;至少一個 self 引數;執行普通方法時,自動將呼叫該方法的物件賦值給 self;

* 類方法:由類呼叫;至少一個 cls 引數;執行類方法時,自動將呼叫該方法的類複製給 cls;

* 靜態方法:由類呼叫;無預設引數;
  1. dict 和 tuple 及 list 的區別(這裡列的是主要區別,面試足夠)
* tuple 是不可變物件,list 和 dict 都是可變物件,這裡的不可變指的是指向地址不可變;

* list 是有序的,dict 是無序的,不可存放有序集合;

* dict 查詢速度快,不管有多少個元素時間都一樣,list 查詢速度慢,需要有序查詢;

* dict 的 key 為不可變物件,且不可重複,list 則可以重複,存放任意物件;
  1. 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 裡只有陣列;
  1. Python 會不會出現記憶體洩漏,為什麼?
* 當物件之間互相引用的時候再刪除的時候,可能會造成無法釋放物件的情況,出現洩漏;

* 上面為個人瞭解,如有其它請補充;
  1. Python 的同步和非同步
* 直接得到最終結果的結果,就是同步呼叫。

* 不直接得到的最終的結果,就是非同步呼叫。

* 同步與非同步區別在於:呼叫者是否得到了想要的最終結果。
  1. 常見手撕程式碼題
  • 兩個列表提取作為字典
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

【相關閱讀】

**
來霍格沃茲測試開發學社,學習更多軟體測試與測試開發的進階技術,知識點涵蓋web自動化測試 app自動化測試、介面自動化測試、測試框架、效能測試、安全測試、持續整合/持續交付/DevOps,測試左移、測試右移、精準測試、測試平臺開發、測試管理等內容,課程技術涵蓋bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相關技術,全面提升測試開發工程師的技術實力

點選獲取更多資訊