YD笔试面试题

116 阅读1分钟

最近面试,顺带写下面试中遇到的面试题吧。先写写YD的面试题

编程排序题

题目大意是有两个数组,一个年龄数组[43,21,53,28],一个体重数组[70,65,81,67],其中年龄数组和体重数组是彼此对应的,将年龄进行从低到高排序,输出对应的年龄和体重数据.

思路: 主要是两点:年龄和体重对应关系;排序。 对应关系这个一般想到的是利用Map来搞,排序可以在Map的基础上用TreeMap的排序特性搞定

TreeMap<Integer,Integer> sortedMap = new TreeMap<>();
int[] ages = new int[]{43,21,53,28};
int[] weights = new int[]{70,65,81,67};
for(int i=0;i<ages.length;i++){
  sortedMap.put(ages[i],weights[i]);
}
for(Integer key:sortedMap.keySet()){
  System.out.println("age:"+key+" weight:"+sortedMap.get(key));
}

sql编程

有张student表,数据及表结构如下

image.png

  1. 找出查找每门课程都大于80的学生(直接反向思考,只要每个人最小分数大于80的就行)
select NAME
from student 
GROUP BY NAME
HAVING min(score)>80
  1. 删除每个学生除最高分以外的记录
  • 如果版本是mysql 8.0以后的,可以采用ROW_NUMBER() OVER (<partition_definition> <order_definition>) 对记录按名字分区,分数降序,返回每个分区的排序号,然后根据排序号的id进行删除即可。
with sub as  (SELECT 
    id,
    name,
    score,
    course,
    ROW_NUMBER() OVER (PARTITION BY name ORDER BY score desc) AS row_num
FROM student)
delete student from student INNER JOIN sub on student.id=sub.id
where sub.row_num!=1; 
  • 如果版本是mysql 8.0以前的,那就搞原始点的,找出最高分数的id,然后删除不在这些id中的记录
delete from student 
where id not in (select id
FROM student t
where score=(select max(score) from student tmp where tmp.name=t.name))