招聘面试—关于Mysql的一点儿总结
最近半年,作为部门的面试官之一,参加了许多次招聘面试。数据库知识,尤其是对数据的增删改查等操作是软件测试人员的基本功,是面试过程中的必考项。在这其中,有一道题,是我每次面试的必考题。
题目
以Mysql为例,假设有一张数据库表user_info,第一列是id,用作唯一标识;第二列是user_name,即用户姓名;第三列是some_data,这是一列存储某某数值的列,比如用户的年收入、用户的年龄、用户完成的订单数等等。需求是,找出这张表中,按第三列的数值降序排列,排在前5的所有用户记录。
题解
显然,这道题中除了有基本的select语句、还有降序排序的基本用法,以及limit用法,因此,稍微有些基础的人便可以给出答案:
select * from user_info order by some_data desc limit 0,5;
即使这道题没有涉及什么难点,但精准回答率也并不高(就我面试的情况,约为60%)。然而,写出如上答案还不算完,我会再次向候选人描述问题并确认是否回答完毕。
如果候选人表示回答完毕不需要修正,我会给出提示和引导——答案是否完整?是否遗漏了某些用户记录?这时,极个别的候选人会意识到数值有重复的情况。这已经不单单是Mysql的面试题了,还涉及到需求理解能力、逻辑思维能力等。
无论是否意识得到,我都会再进一步明确地提问,在考虑重复数据的情况下,按第三列的数值降序排列,找出排在前5的所有用户的记录。
必然地,能够写出来的就更少了,这里给出一个答案——先找出排在第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;
- 括号中的子句的作用是找出按第三列倒序排序并去重后的第5个值。
- 括号外的
order by some_data desc是为了让最终输出的结果再次按第3列降序排序。
可见,除了上面涉及到的知识点,此时的答案还涉及了子查询,distinct关键字。
总结
这种穿插在面试过程中,问题难度有递进的笔试题,不仅仅是一道非黑即白式的知识问答,它更是一个情景对话。在这个过程中,可以考察到候选人对基本知识的掌握程度,还可以考察到他们对需求的理解能力、问题的分析能力等。因此,这样的题目比单一去考数据库各个知识点的题目要有效地多。
相关知识点
- mysql
- select基本语法
- order by
- limit用法
- 子句语法
- distinct
招聘面试—关于Mysql的一点儿总结的更多相关文章
- php面试专题---mysql数据库分库分表
php面试专题---mysql数据库分库分表 一.总结 一句话总结: 通过数据切分技术将一个大的MySQLServer切分成多个小的MySQLServer,既攻克了写入性能瓶颈问题,同一时候也再一次提 ...
- php面试专题---MySQL分表
php面试专题---MySQL分表 一.总结 一句话总结: 分库分表要数据达到一定的量级才用,这样才有效率,不然利不一定大于弊,可能会增加一次I/O消耗 1.分库分表的使用量级是多少? 单表行数超过 ...
- php面试专题---MySQL分区
php面试专题---MySQL分区 一.总结 一句话总结: mysql的分区操作还比较简单,好处是也不用自己动手建表进行分区,和水平分表有点像 1.mysql分区简介? 一个表或索引-->N个物 ...
- php面试专题---MYSQL查询语句优化
php面试专题---MYSQL查询语句优化 一.总结 一句话总结: mysql的性能优化包罗甚广: 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存) ...
- php面试专题---MySQL常用SQL语句优化
php面试专题---MySQL常用SQL语句优化 一.总结 一句话总结: 原理,万变不离其宗:其实SQL语句优化的过程中,无非就是对mysql的执行计划理解,以及B+树索引的理解,其实只要我们理解执行 ...
- php面试专题---Mysql索引类型、介绍及优点
php面试专题---Mysql索引类型.介绍及优点 一.总结 一句话总结: 精品视频讲解里面的资料来源也是通过各种资料,比如博客.书等,只不过是基于讲解者的知识体系有整理的过程 1.B-Tree索引三 ...
- php面试专题---Mysql索引原理及SQL优化
php面试专题---Mysql索引原理及SQL优化 一.总结 一句话总结: 注意:只写精品 1.为表设置索引要付出代价 是什么? 存储空间:一是增加了数据库的存储空间 修改插入变动索引时间:二是在插入 ...
- 面试之MySQL基本命令
既然要操作数据库就从数据库链接写起,包括建库.建表.增删该查字段及约束,删库,删表的数据,以下主要是对我以往面试的总结,欢迎补充! 一.数据库连接 1.连接本机(p和密码123456之间无空格) my ...
- 近期安卓与IOS招聘面试有感
版权声明:本文出自汪磊的博客,转载请务必注明出处. 一.你总是想一步登天,却不知道路是一步步走出来的 大概是放年假前一个月开始招聘吧,陆陆续续到目前为止安卓面试10几个,IOS面试了15个左右,本以为 ...
随机推荐
- Linux 常用命令 (common commands for linux)
Linux 常用命令 (Common Commands For Linux) 1.声明,此文章仅写基于 Bash shell 常用的命令,如果遇上命令在使用过程中提示没有,可能随着更新,命令也被替换掉 ...
- iis发布网站问题-由于权限不足而无法读取配置文件,无法访问请求的页面
错误一: HTTP Error 500.19 - Internal Server Error 配置错误: 不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况.锁定是默认设置的 (o ...
- 定时跳转的两种方式(html + javaweb)
html方式 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...
- Netty的常用概念
我们先来看一段代码: // Configure the server. EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGr ...
- 基于Parallax设计HTML视差效果
年关将至,给大家拜年. 最近时间充裕了一点,给大家介绍一个比较有意思的控件:Parallax.它可以用来实现鼠标移动时,页面上的元素也做偏移的视差效果.在一些有表现层次,布局空旷的页面上,用来做Hea ...
- yml 文件操作方法
文件读取方法示例: import yaml fr = open('yml_file_address', 'r',encoding='utf-8') data = yaml.load(fr) print ...
- Python常用数据结构之collections模块
Python数据结构常用模块:collections.heapq.operator.itertools collections collections是日常工作中的重点.高频模块,常用类型由: 计数器 ...
- 转:【web前端开发】浏览器兼容性处理大全
解决思路: ①.写代码的时候遵循W3C标准,按照最新稳定版本的IE或WebKit内核浏览器进行编码 ②.遇到部分无法全面解决浏览器兼容的时候,采取CSS的hack手段进行针对性微调.简单的说,CSS ...
- HZAU 1199: Little Red Riding Hood 01背包
题目链接:1199: Little Red Riding Hood 思路:dp(i)表示前i朵花能取得的最大价值,每一朵花有两种选择,摘与不摘,摘了第i朵花后第i-k到i+k的花全部枯萎,那么摘的话d ...
- java遍历的优化
说明:这是在面试中面试官出的题.虽然是常见的优化问题,但这种经验的确很有用.感慨之余,分享出来,以此共勉. 场景:现有List<PersonA>,List<PersonB>,P ...