千人千面:来看看这道简单的SQL面试题——设计一个学生成绩表
今早上班后清理工位时,发现这张废纸,记录一下。
下面是这个简单的数据库应用面试题
1、设计一个学生成绩表 (DDL 或者是逻辑结构)
2、用一条 SQ语句 查询总成绩大于270分的学生
3、用一条SQL语句 查询出每门课都大于80分的学生
坦白说,这个再常见不过的题并不难,甚至经常作为大学练习题。
表设计有2个方案:1. 横向存储的方式:学生+课程+分数;2.纵向按列存储的方式:学生+课程A+课程B+...+课程N
细节来说
首先,如何来标记学生呢,看这道题,并没什么要求,所以,我们用学生姓名来标记。当然, 用学号也行。
其次,分数字段的类型,如果没有小数,用int即可,如果有小数,可以用decimal(5,2)。
再次,选择方案1)与方案2)的两个设计方案的依据。如果基于课程会有变化这一点来考虑,则采用方案1);如果基于课程比较固定是那几科,则采用方案2)倒也不错。
下面这位候选人小伙做的不错。
在面试中,的确发现了千人千面。
针对本文开头的截图,我记得问那位候选人为什么要这么设计表,他的回答竟然是————为了能写出来后面的2个sql。
在问到分数字段的类型时,有同学上来就表示:用bigint,这样不会出现越界的bug。
有同学设计的表结构是:学生id+分数。声称这个表存学生的总分就行了。我暗自反思:是这道题描述得有歧义吗?
我曾面试过一个对接过京东支付的小伙, 他们的程序在接收到支付结果回调时,除了校验签名外,还会验证金额是否一致。直觉告诉我,我遇到了靠谱的程序员。连忙追问为什么验证金额,小伙没底气了,表示这是前人这么写的,自己也觉得画蛇添足,组内几个人沟通后准备去掉。害!最后,送他走的时候,我叮嘱他,不要去掉金额的验证,并阐述了理由。支付结果回调通知的安全控制(嘘,一般人我不告诉他~~)
当看到一些不好的代码时,会发现我还算优秀;当看到优秀的代码时,也才意识到持续学习的重要!--buguge
本文来自博客园,转载请注明原文链接:https://www.cnblogs.com/buguge/p/17653353.html