最近半年,做为部门的面试官之一,参加了许屡次招聘面试。数据库知识,尤为是对数据的增删改查等操做是软件测试人员的基本功,是面试过程当中的必考项。在这其中,有一道题,是我每次面试的必考题。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
这种穿插在面试过程当中,问题难度有递进的笔试题,不单单是一道非黑即白式的知识问答,它更是一个情景对话。在这个过程当中,能够考察到候选人对基本知识的掌握程度,还能够考察到他们对需求的理解能力、问题的分析能力等。所以,这样的题目比单一去考数据库各个知识点的题目要有效地多。基础