已解決 面試測試崗位遇到的幾個未解決的問題

2022-02-04 02:15:12 字數 3209 閱讀 9942

本來可以問面試官的,面的太差,不想開口啦,哈哈哈哈

1. api介面中的冪等性有什麼解決方案?

冪等性三個字平常倒是聽說過,但只浮於表面聽過而已,是什麼意思,不清楚;

抄用一段數學上的定義:f(f(x)) = f(x)。x被函式f作用一次和作用無限次的結果是一樣的。冪等性應用在軟體系統中,我把它簡單定義為:某個函式或者某個介面使用相同引數呼叫一次或者無限次,其造成的後果是一樣的,在實際應用中一般針對於介面進行冪等性設計。舉個栗子,在系統中,呼叫方a呼叫系統b的介面進行使用者的扣費操作時,由於網路不穩定,a重試了n次該請求,那麼不管b是否接收到多少次請求,都應該保證只會扣除該使用者一次費用。

列舉三種改進方式:

1、 悲觀鎖,select for update,整個執行過程中鎖定該訂單對應的記錄。

2、樂觀鎖,affectrows = db.update("update payorder set state='已支付' where orderid=$orderid and state='未支付' "),如果affectrows=1,執行充值,否則返回已處理。

3、定義notifylog表,orderid為unique key或者primary key,執行前,先insert,若insert成功則執行充值,否則返回已處理。

以上簡單例子用以說明冪等性常用應用實現,在soa化系統中,可能很多原子功能都被拆分到不同的程序裡,如charge充值這個函式,可能在另乙個程序中,那麼整個業務的鏈路就會更長,可能**成功了,但是充值失敗。同理,只要充值介面保證冪等性,對於已經**過但是充值結果未返回的請求,**接收程式,應當重**起充值請求。更深入更複雜的應用場景,在資料一致性中再細講。

其實我回答了一種方式,是第三種,用入參中傳值是唯一的乙個code,此code將對應db表中的某個字段,該欄位設定為unique constraint唯一性約束,面試官表示沒聽懂我說什麼。

也怪我表述不清吧,而且近幾天都在搞cassandra資料庫,cassandra一張表中某個字段作為primary key後,該欄位partition key,然後還有clustering key。然後內心就去想cassandra資料庫了,思緒有點飄~

後來我解釋了,比如乙個註冊介面,20個請求同時註冊,本來註冊介面中又限制手機號/身份證號碼唯一的,但同時註冊20個會員,資料庫最終新增了20個會員。

如果將比如手機號一列作唯一性約束,那就只有一條insert成功,剩餘的19條都會失敗。

面試官聽完,又問我:如果入參中沒有乙個唯一的值,要怎麼辦?

暫時沒想到好方法。

網上的solution summary:

業務層設計協議時,要求請求方定義不重複的業務流水號。應用實現時,利用資料庫樂觀鎖、插入unique key的日誌等方式保證併發時的冪等。

冪等性把關環節,在協議設計評審中,評審重要業務rpc或者http介面是否支援冪等,**評審中,重點把關請求併發時,是否仍舊能夠保證冪等性。

設計人員和具體實現人員在實現過程中,也應該時刻自審冪等性的實現是否過關。

2. api介面中返回資訊是很複雜的json格式,有些順序可能有誤,有可能是一層包一層的順序錯誤,要如何檢查驗證,最好能自動化?

回頭試試jmeter能否處理,乾脆一步到位點,將json物件每乙個contains做個判斷,只有完全符合,才bellshell斷言成功。

目前限於想法,能否實現再說;

更新20180620:以下隨筆中提到的json提取器或者json斷言,可以解決。主要原理,就是定位json中一層層元素,元素位置即元素層級不正確,會有定位不到的問題,也就會斷言失敗了

3. 效能測試中,如何檢視伺服器的資源情況?如果是4核或者8核,如何具體看每核的資源使用情況?

vmstat -2 每隔2秒輸出伺服器cpu/記憶體等資訊

free

topuptime

終於明白了,是我理解有問題,有的是vm linux伺服器,有的是physical。

而cat /proc/cpuinfo出來的processerid 是指總共的core核心數。

所有一般命令,比如top ,之後敲一下1,所顯示的cpu0~cpun就是總共的核心數。

附贈乙個簡單的指令碼,持續列印top 命令到home 目錄下

top -b -d 5 > ~/cpu_result

grep cpu cpu_result | awk "" | sed "s|\%\([a-z]\)\([a-z]\)\,||g"

統計鏈結數,分別在windows中和linux下

c:\users\jasqia.ap>netstat -ano | find "10.215.70.172:443" | find "established" /c

50c:\users\jasqia.ap>netstat -ano | find "10.215.70.172:443" | find "time_wait" /c

2233

302144

windows中

c:\users\jasqia.ap>systeminfo | find "system model"

system model: optiplex 3020

物理機

mesg | grep -i virtual

dmi: vmware, inc. vmware virtual platform/440bx desktop reference platform, bios 6.00 09/21/2015

hpet0: at mmio 0xfed00000 (virtual 0xffffffffff5fe000), irqs 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

vendor: vmware model: virtual disk rev: 1.0

虛擬機器

最近面試遇到的幾個題目

一。c net方面 1.怎樣防止進入admin資料夾。2.簡述下request a request.from a request.querystring a 作用和區別?3.列舉ado.net中的五個主要物件,並簡單描述?4.為什麼我們要使用泛型呢?或者 list 和arraylist 有什麼區別?...

最近遇到的幾個面試題

一 物件導向的三大特徵。繼承 封裝 多型。b 封裝 b 封裝機制將資料和 到一起,避免了外界的干擾和不確定性。它同樣允許建立物件。簡單的說,乙個物件就是乙個封裝了資料和操作這些資料的 的邏輯實體。在乙個物件內部,某些 和 或 某些資料可以是私有的,不能被外界訪問。通過這種方式,物件對內部資料提供了不...

扒一扒,面試測試開發崗位會遇到哪些常見問題?

1.黑盒測試和白盒測試常用的測試方法有哪些?舉例說明。答 白盒測試 逡輯覆蓋法,主要包括詫句覆蓋,判斷覆蓋,條件覆蓋,判斷條件覆蓋,組合條件覆蓋 路徑覆蓋。黑盒測試 等價劃分類,邊界值分析,錯諢推測法等 2.靜態測試和動態測試的概念。答 靜態方法是不執行被測程式本身,僅通過分析和檢查源程式的語法 結...