1. 程式人生 > 其它 >蝦皮測試面經

蝦皮測試面經

蝦皮一面:3.19(1h)
自我介紹
深挖專案


c++:
虛擬函式,虛表,虛指標是什麼?
用virtual關鍵字申明並在一個或多個派生類中被重新定義的函式叫做虛擬函式,虛擬函式肯定是類的成員函式。存在虛擬函式的類都有一個一維的虛擬函式表叫做虛表。每一個類的物件都有一個指向虛表開始的虛指標。虛表是和類對應的,虛表指標是和物件對應的。對於虛擬函式調 用來說,每一個物件內部都有一個虛表指標,該虛表指標被初始化為本類的虛表。


Python:
Python裝飾器是什麼?
裝飾器是給現有的模組增添新的小功能,可以對原函式進行功能擴充套件,而且還不需要修改原函式的內容,也不需要修改原函式的呼叫。裝飾器是閉包的一種應用。簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是一個函式,使用python裝飾器的好處就是在不用更改原函式的程式碼前提下給函式增加新的功能。使用時,再需要的函式前加上@demo即可。


計算機網路:
get請求,post請求的區別是什麼?
GET使用URL或Cookie傳參。而POST將資料放在BODY中。
GET的URL會有長度上的限制,則POST的資料則可以非常大。
POST比GET安全,因為資料在位址列上不可見,get的引數直接暴露在URL上。
一般get請求用來獲取資料,post請求用來發送資料。
GET請求只能進行url編碼,而POST支援多種編碼方式。
對引數的資料型別,GET只接受ASCII字元,而POST沒有限制。
TCP三次握手的具體步驟是?
(1) 第一次握手:建立連線時,客戶端傳送SYN包到伺服器,並進入SYN_SEND狀態,等待伺服器確認。
(2) 第二次握手:伺服器收到SYN包,必須確認客戶的SYN,同時自己也傳送一個SYN包,即SYN+ACK包,此時伺服器進入SYN_RECV狀態。
(3) 第三次握手:客戶端收到伺服器B的SYN+ACK包,向伺服器B傳送確認包ACK,此包傳送完畢,客戶端A和伺服器B進入ESTABLISHED狀態,完成三次握手。
SYN泛洪攻擊是什麼?
SYN攻擊利用的是TCP的三次握手機制,攻擊端利用偽造的IP地址向被攻擊端發出請求,而被攻擊端發出的響應 報文將永遠傳送不到目的地,那麼被攻擊端在等待關閉這個連線的過程中消耗了資源,如果有成千上萬的這種連線,主機資源將被耗盡,從而達到攻擊的目的。
作業系統:
程序與執行緒的區別是什麼?
程序是資源分配的最小單位,執行緒是程式執行的最小單位(資源排程的最小單位)
程序有自己的獨立地址空間,每啟動一個程序,系統就會為它分配地址空間,建立資料表來維護程式碼段、堆疊段和資料段。而執行緒是共享程序中的資料的,使用相同的地址空間,因此CPU切換一個執行緒的花費遠比程序要小很多,同時建立一個執行緒的開銷也比程序要小很多。
執行緒之間的通訊更方便,同一程序下的執行緒共享全域性變數、靜態變數等資料,而程序之間的通訊需要以共享記憶體的方式進行。
多程序程式更健壯,多執行緒程式只要有一個執行緒死掉,整個程序也死掉了,而一個程序死掉並不會對另外一個程序造成影響,因為程序有自己獨立的地址空間。
程序與執行緒的同步分別用什麼?
程序:無名管道、有名管道、訊號、共享記憶體、訊息佇列、訊號量
執行緒:互斥量、讀寫鎖、自旋鎖、執行緒訊號、條件變數
程序如何通過訊號量獲得共享資源?
(1)測試控制該資源的訊號量
(2)訊號量的值為正,程序獲得該資源的使用權,程序將訊號量減1,表示它使用了一個資源單位
(3)若此時訊號量的值為0,則程序進入掛起狀態(程序狀態改變),直到訊號量的值大於0,若程序被喚醒則返回至第一步。
注:訊號量通過同步與互斥保證訪問資源的一致性。


資料庫:
事務的四大特性是什麼?如何去實現這四大特性?
原子性:將事物進行的操作捆綁成一個不可分割的單元,事物中進行的資料操作要麼全部成功,要麼全部失敗。原子性通過undo log(回滾日誌)來實現的,undo log能夠保證在事務回滾時,能夠撤銷所有已經執行成功的SQL。
一致性:資料庫前後必須處於一致性狀態。欄位的一致性是有保證措施的,例如整型的字元不能傳入,字串、時間等格式,字串的長度不能超過列的限制。但是在應用層面是需要開發者自己來保證。
隔離性:多個使用者併發訪問資料庫,資料庫為每個使用者開啟一個事物,每個事物相互獨立,互不干擾。事務間的讀寫靠MySQL的鎖機制來保證隔離,事務間的寫操作靠MVCC機制(快照讀、當前讀)來保證隔離性。
永續性:指一個事務一旦被提交了,那麼對資料庫中的資料的改變就是永久性的,即便是在資料庫系統遇到故障的情況下也不會丟失提交事務的操作。事務提交時會把redo log同步在磁碟中的,所以當MySQL出現宕機時,可以從磁碟中讀取redo log進行資料的恢復,從而保證了事務的永續性。
MySQL中的鎖機制是什麼?
按照功能分:讀鎖和寫鎖;按照作用範圍分:表級鎖和行級鎖;按照思想的劃分:樂觀鎖和悲觀鎖;
讀鎖:又稱“共享鎖”,是指多個事務可以共享一把鎖,都只能訪問資料,並不能修改。
寫鎖:又稱“排他鎖”,是不能和其他事務共享資料的,如果一個事務獲取到了一個數據的排他鎖,那麼其他事務就不能再獲取該行的其他鎖,包括共享鎖和排他鎖。
表級鎖:是指會將整個表進行鎖定,效能較差。
行級鎖:會將需要操作的相應行進行鎖定,效能好。
悲觀鎖:是每次在讀資料時,都會給資料加上鎖,避免其他的讀操作拿到鎖。
樂觀鎖:是給資料新增一個版本號,通過對比版本號來實現資料前後一致性的對比。
索引有什麼作用?優點是什麼?缺點是什麼?
索引的作用:建立索引能夠大大的提高系統的效能
優點:
  通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性
  大大加快資料的檢索速度,這也是建立索引的最主要原因
  加快表與表之間的連線,在實現資料的參考完整性方面特別有意義
  在使用分組和排序,子句進行資料檢索時,同樣可以顯著減少查詢中分組和排序的時間
  通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的效能。
缺點:
  建立索引和維護索引需要時間,這種時間隨著資料量的增加而增加
  索引需要佔物理空間,除了資料表佔資料空間之外,每一個索引還要佔物理空間,如果要建立聚簇索引,需要的空間更大
  當對錶中的資料進行增加、刪除和修改的時候,索引也要動態的維護,這就降低了資料的維護速度。
left join、right join、inner join有何區別?
left join(左聯接):LEFT JOIN子句允許您從匹配的左右表中查詢選擇行記錄,連線左表中的所有行,即使在右表中找不到匹配的行也顯示出來,但使用NULL值代替。返回包括左表中的所有記錄和右表中聯結欄位相等的記錄。
right join(右聯接) 返回包括右表中的所有記錄和左表中聯結欄位相等的記錄
inner join(等值連線) 只返回兩個表中聯結欄位相等的行
問了兩道資料庫題,手寫sql語句


演算法題:建立一個迴圈連結串列刪除其中數值相同的重複節點
英語自我介紹(10min)
反問

蝦皮二面:3.23(1h)
自我介紹
深挖專案


c++:
深拷貝、淺拷貝:
淺拷貝只複製指向某個物件的指標,而不復制物件本身,新舊物件還是共享同一塊記憶體。但深拷貝會另外創造一個一模一樣的物件,新物件跟原物件不共享記憶體,修改新物件不會改到原物件。


資料庫:
分別介紹一下髒讀、幻讀、不可重複讀,並說明一下如何去解決?
1.髒讀:
指一個事務A正在訪問資料,並且對該資料進行了修改,但是這種修改還沒有提交到資料庫中(也可能因為某些原因Rollback了)。這時候另外一個事務B也訪問這個資料,然後使用了這個被A修改的資料,那麼這個資料就是髒的,並不是資料庫中真實的資料。這就被稱作髒讀。
解決辦法:把資料庫事務隔離級別調整到READ_COMMITTED
即讓使用者在更新時鎖定資料庫,阻止其他使用者讀取,直到更新全部完成才讓你讀取。
2.幻讀:
指一個事務A對一個表中的資料進行了修改,而且該修改涉及到表中所有的資料行;同時另一個事務B也在修改表中的資料,該修改是向表中插入一行新資料。那麼經過這一番操作之後,操作事務A的使用者就會發現表中還有沒修改的資料行,就像發生了幻覺一樣。這就被稱作幻讀。
解決辦法:把資料庫事務隔離級別調整到SERIALIZABLE_READ
3.不可重複讀:
指在一個事務A內,多次讀同一個資料,但是事務A沒有結束時,另外一個事務B也訪問該同一資料。那麼在事務A的兩次讀資料之間,由於事務B的修改導致事務A兩次讀到的資料可能是不一樣的。這就發生了在一個事務內兩次讀到的資料不一樣,這就被稱作不可重複讀。
解決辦法:把資料庫事務隔離級別調整到REPEATABLE_READ
資料結構:
熟悉哪些排序演算法?時間複雜度空間複雜度多少?
這裡我把8種排序演算法全說了,面試官問我最熟悉哪個,我就說了快排
快速排序的具體流程是?缺點是?如何改善?
採用了分治的策略
1.先從數列中取出一個數作為基準數。
2.分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。
3.再對左右區間重複第二步,直到各區間只有一個數。
缺點:不穩定,初始序列有序或基本有序時,時間複雜度降為O(n^2)。
改善:通常採用“三者值取中”方法,即比較H->r[low].key、H->r[high].key與H->r[(10w+high)/2].key,取三者中關鍵字為中值的元素為中間數。


測試:
軟體測試流程是什麼?具體說一下
測試需求分析階段:閱讀需求,理解需求,主要就是對業務的學習,分析需求點,參與需求評審會議。
測試計劃階段:主要任務就是編寫測試計劃,參考軟體需求規格說明書,專案總體計劃,內容包括測試範圍(來自需求文件),進度安排,人力物力的分配,整體測試策略的制定。風險評估與規避措施有一個制定。
測試設計階段:主要是編寫測試用例,會參考需求文件(原型圖),概要設計,詳細設計等文件,用例編寫完成之後會進行評審。
測試執行階段:搭建環境,執行冒煙測試(預測試)-然後進入正式測試,bug管理直到測試結束。
測試評估階段:出測試報告,確認是否可以上線。
熟悉哪些介面測試工具?有何特點?如何進行測試?
這裡我回答了postman、jmeter和selenium
黑盒測試白盒測試的區別是什麼?
黑盒測試也稱功能測試或資料驅動測試,它是在已知產品所應具有的功能,通過測試來檢測每個功能是否都能正常使用。“黑盒”法著眼於程式外部結構、不考慮內部邏輯結構、針對軟體介面和軟體功能進行測試。“黑盒”法是窮舉輸入測試,只有把所有可能的輸入都作為測試情況使用,才能以這種方法查出程式中所有的錯誤。實際上測試情況有無窮多個,因此不僅要測試所有合法的輸入,而且還要對那些不合法但是可能的輸入進行測試。
白盒測試也稱為結構測試或邏輯驅動測試,是針對被測單元內部是如何進行工作的測試。它根據程式的控制結構設計測試用例,主要用於軟體或程式驗證。白盒測試法檢查程式內部邏輯結構,對所有的邏輯路徑進行測試,是一種窮舉路徑的測試方法,但即使每條路徑都測試過了,但仍然有可能存在錯誤。
測試方法有哪些,能詳細介紹一下嗎?(越多越好)
1.等價類劃分
等價類劃分是將系統的輸入域劃分為若干部分,然後從每個部分選取少量代表性資料進行測試。等價類可以劃分為有效等價類和無效等價類,設計測試用例的時候要考慮這兩種等價類。
2.邊界值分析法
邊界值分析法是對等價類劃分的一種補充,因為大多數錯誤都在輸入輸出的邊界上。邊界值分析就是假定大多數錯誤出現在輸入條件的邊界上,如果邊界附件取值不會導致程式出錯,那麼其他取值出錯的可能性也就很小。
3.正交試驗法
正交是從大量的試驗點中挑選出適量的、有代表性的點。正交試驗設計是研究多因素多水平的一種設計方法,他是一種基於正交表的高效率、快速、經濟的試驗設計方法。
4.狀態遷移法
狀態遷移法是對一個狀態在給定的條件內能夠產生需要的狀態變化,有沒有出現不可達的狀態和非法的狀態,狀態遷移法是設計足夠的用例達到對系統狀態的覆蓋、狀態、條件組合、狀態遷移路徑的覆蓋。
5.流程分析法
流程分析法主要針對測試場景型別屬於流程測試場景的測試項下的測試子項進行設計,這是從白盒測試中路徑覆蓋分析法借鑑過來的一種很重要的方法。
6.輸入域測試法
輸入域測試法是針對輸入會有各種各樣的輸入值的一個測試,他主要考慮 極端測試、中間範圍測試,特殊值測試 。
7.輸出域分析法
輸出域分析法是對輸出域進行等價類和邊界值分析,確定是要覆蓋的輸出域樣點,反推得到應該輸入的輸入值,從而構造出測試用例,他的目的是為了達到輸出域的等價類和邊界值覆蓋。
8.判定表分析法
判定表是分析和表達多種輸入條件下系統執行不同動作的工具,他可以把複雜的邏輯關係和多種條件組合的情況表達的即具體又明確;
9.因果圖法
因果圖是用於描述系統輸入輸出之間的因果關係、約束關係。因果圖的繪製過程是對被測系統的外部特徵的建模過程,根據輸入輸出間的因果圖可以得到判定表,從而規劃出測試用例。
10.錯誤猜測法
錯誤猜測法主要是針對系統對於錯誤操作時對於操作的處理法的猜測法,從而設計測試用例
11.異常分析法
異常分析法是針對系統有可能存在的異常操作,軟硬體缺陷引起的故障進行分析,分析發生錯誤時系統對於錯誤的處理能力和恢復能力依此設計測試用例。
弱網測試具體有哪些方法?
軟體:Clumsy、Fiddler
延遲(Lag):把資料包快取一段時間後再發出,這樣能夠模擬網路延遲的狀況;
丟包(Drop):隨機丟棄一些資料;
截流(Throttle):把一小段時間內的資料攔截下來後再在之後的同一時間一起發出去;
重發(Duplicate):隨機複製一些資料並與其本身一同傳送;
亂序(Out of order):打亂資料包傳送的順序;
篡改(Tamper):隨機修改小部分的包裹內容。


Linux:
常見Linux命令
top:檢視cpu使用率
ps:檢視程序
kill:於刪除執行中的程式或工作。
最常用的訊號是:
1 (HUP):重新載入程序。
9 (KILL):殺死一個程序。
15 (TERM):正常停止一個程序。
kill 可將指定的資訊送至程式。預設的資訊為 SIGTERM(15),可將指定程式終止。若仍無法終止該程式,可使用 SIGKILL(9) 資訊嘗試強制刪除程式。


演算法題:
判斷連結串列中有沒有環
判斷兩個連結串列是否相交
寫一個getrandom函式,使其隨機輸出0、1,利用這個函式,使其隨機輸出0-1000
和麵試官英語交流(10~15min)
反問

蝦皮三面:3.23(15min)
自我介紹
成績排名
專案介紹
專案中的難點,如何解決
相比於其他人,有什麼優勢
平時如何自學
未來職業規劃
手頭還有offer嗎
家鄉在哪裡,以後願意到哪裡發展
反問
hr說4月初給郵件,等待ing