最近半年,做爲部門的面試官之一,參加了許屢次招聘面試。數據庫知識,尤爲是對數據的增刪改查等操做是軟件測試人員的基本功,是面試過程當中的必考項。在這其中,有一道題,是我每次面試的必考題。mysql
以Mysql爲例,假設有一張數據庫表user_info
,第一列是id,用做惟一標識;第二列是user_name
,即用戶姓名;第三列是some_data
,這是一列存儲某某數值的列,好比用戶的年收入、用戶的年齡、用戶完成的訂單數等等。需求是,找出這張表中,按第三列的數值降序排列,排在前5的全部用戶記錄。面試
顯然,這道題中除了有基本的select語句、還有降序排序的基本用法,以及limit用法,所以,稍微有些基礎的人即可以給出答案:sql
select * from user_info order by some_data desc limit 0,5;
即便這道題沒有涉及什麼難點,但精準回答率也並不高(就我面試的狀況,約爲60%)。然而,寫出如上答案還不算完,我會再次向候選人描述問題並確認是否回答完畢。數據庫
若是候選人表示回答完畢不須要修正,我會給出提示和引導——答案是否完整?是否遺漏了某些用戶記錄?這時,極個別的候選人會意識到數值有重複的狀況。這已經不僅僅是Mysql的面試題了,還涉及到需求理解能力、邏輯思惟能力等。測試
不管是否意識獲得,我都會再進一步明確地提問,在考慮重複數據的狀況下,按第三列的數值降序排列,找出排在前5的全部用戶的記錄。code
必然地,可以寫出來的就更少了,這裏給出一個答案——先找出排在第5的第三列的值,再把大於等於該值的記錄降序輸出便可。排序
select * from user_info where some_data >= (select distinct some_data from user_info order by some_data desc limit 4,1) order by some_data desc;
order by some_data desc
是爲了讓最終輸出的結果再次按第3列降序排序。可見,除了上面涉及到的知識點,此時的答案還涉及了子查詢,distinct關鍵字。it
這種穿插在面試過程當中,問題難度有遞進的筆試題,不單單是一道非黑即白式的知識問答,它更是一個情景對話。在這個過程當中,能夠考察到候選人對基本知識的掌握程度,還能夠考察到他們對需求的理解能力、問題的分析能力等。所以,這樣的題目比單一去考數據庫各個知識點的題目要有效地多。基礎