本來可以問面試官的,面的太差,不想開口啦,哈哈哈哈
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.靜態測試和動態測試的概念。答 靜態方法是不執行被測程式本身,僅通過分析和檢查源程式的語法 結...