【SQL技巧】面试遇到不会写的SQL题怎么办?

背景

找大数据开发工作的同学,在面试过程中会遇到两种情况:

  1. 面试官只要求你写两道算法题

  2. 面试官不但要求你写算法题,还要你写SQL题

但咱们大部分都是Java算法题选手,SQL题练习的次数太少了,非常有可能遇到不会写的SQL,那该怎么办呢?

解决办法

这里老刘说个取巧的办法,这个办法帮助老刘顺利通过了多轮面试,但是不保证对每个人都用,具体情况具体分析!

以老刘的亲身经历为例,有好几次遇到了不会写的SQL,我当时这样给面试官说:

老刘:“面试官,我平时主要以算法题为主,没怎么练习过SQL题,这个SQL题我可不可以用Java的形式给它写出来?”

面试官有点惊讶,说:“那你用Java把这道题写出来吧!”

那面试官给我们机会了,我们就一定要抓住这次机会!如果我们真的用Java把这道SQL题写出来了,还有继续面试的希望,如果没有写出来,就很有可能面试不通过!

举例

下面给大家举几个SQL转Java的例子!

例子1

(某中厂二面题)假如HDFS上有一份数据文件,这份数据文件存储了用户数据关系,内容如下:

user1 user2 ts
a b 1000
a c 1001
c d 1002
a e 2000

请输出最近三十天内活跃用户的记录(假设今天时间是2001,最近三十天就是2001-30 ~ 2001),结果如下:

user1 user2 ts
a b 1000
a c 1001
a e 2000

解析:

这个SQL意思就是在1971~2001之间,求活跃用户的记录?

当时面试官这样要求:

首先最后一行a,e,2000肯定在这个区别,并且a和b有联系需要算在答案内,a和c有联系也需要算在答案内。

当时我真不知道怎么写,我就说能不能用Java解决?

Java代码如下:
public class leetcode666 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("a,b,1000");
        list.add("a,c,1001");
        list.add("c,d,1002");
        list.add("a,e,2000");
        int ts = 2000;
        Set<String> users = new HashSet<>();
        List<String> list1 = new ArrayList<>();
        for (String s : list) {
            String[] tmp = s.split(",");
            if (2001 - Integer.parseInt(tmp[2]) <= 30) {
                String tmp1 = tmp[0];
                String tmp2 = tmp[1];
                users.add(tmp1);
                users.add(tmp2);
            }
        }

        for (String s : list) {
            String[] tmp = s.split(",");
            if (users.contains(tmp[0]) || users.contains(tmp[1])) {
                list1.add(s);
            }
        }
        System.out.println(list1);
    }
}

例子2

用java如何实现SQL中的Join?

解析:

//写一个伪代码,这个题也是老刘自己总结的类型
List<Object1> list1 = new ArrayList<>();
List<Object2> list2 = new ArrayList<>();
//实现object1.id = object2.id
List<Object3> list3 = new ArrayList<>();
for (Object1 obj1 : list1) {
	boolean found = false;
	for (Object2 obj2 : list2) {
		list3.add(new Object3(obj1, obj2));
		found = true;
	}
	if (!found) {
		list3.add(new Object3(obj1, null));
	}
}

总结

这种方法属于在面试过程中投机取巧,如果平时有空记得也要刷刷SQL题,不要只刷算法题。

如果遇到实在不会写的SQL题,那可以尝试给面试官说明一下情况,请求用Java解决这道SQL题。

#面经##实习面经##大数据#
全部评论
老刘真棒!🤩
2
送花
回复
分享
发布于 2022-06-03 21:52
真low
点赞
送花
回复
分享
发布于 2022-07-31 10:26
滴滴
校招火热招聘中
官网直投

相关推荐

点赞 评论 收藏
转发
10 9 评论
分享
牛客网
牛客企业服务