【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个岗位
点赞 评论 收藏
转发
-&nbsp;自我介绍-&nbsp;讲讲你目前在蔚来测试什么产品?你在其中的工作是什么?你在工作中使用的是什么自动化测试框架?case&nbsp;的通过率如何?-&nbsp;你的&nbsp;Python&nbsp;水平如何?-&nbsp;看到你之前有做过开发,现在有做测试,你今后的规划是什么?-&nbsp;我们做的是偏底层网络的,对网络知识的要求可能会比较高,你这方面怎么样?-&nbsp;讲讲&nbsp;TCP/IP&nbsp;五层模型?-&nbsp;了解&nbsp;ARP&nbsp;吗,讲讲这个协议?-&nbsp;说下你对&nbsp;TCP&nbsp;和&nbsp;UDP&nbsp;的了解和见解?TCP&nbsp;遇到堵塞是如何解决的?了解过粘包吗,如何解决?-&nbsp;简单说说&nbsp;TCP&nbsp;三次握手?了解半连接和全连接吗?-&nbsp;简单说说&nbsp;TCP&nbsp;四次挥手?了解&nbsp;TCP&nbsp;连接中的一些状态吗,比如&nbsp;TIME_WAIT&nbsp;和&nbsp;CLOSE_WAIT?-&nbsp;有了解过&nbsp;PING&nbsp;泛洪(PING&nbsp;Flood)吗?如何防范?-&nbsp;Linux&nbsp;接触的多吗?用过&nbsp;Ubuntu&nbsp;吗?用过哪些网络抓包工具?有没有了解&nbsp;Linux&nbsp;上的一些网络相关工具,例如&nbsp;tcpdump?-&nbsp;对虚拟化了解吗?(不太了解)当我们从虚拟机访问百度时,会经过什么样的流程?-&nbsp;讲讲&nbsp;TCP&nbsp;报文格式?头部有多大?-&nbsp;对于一个&nbsp;2000&nbsp;字节的&nbsp;UDP&nbsp;大包,MTU&nbsp;为&nbsp;1500&nbsp;字节,IP&nbsp;层会作何处理?-&nbsp;了解(数据包的)分片和重组吗?如何判断数据包是否分片?-&nbsp;刚才我说到了&nbsp;ARP,ARP&nbsp;(报文)是通过什么方式进行传播的?(广播)了解广播和组播的区别吗?-&nbsp;DHCP&nbsp;了解吗,简单讲讲?-&nbsp;BPS&nbsp;和&nbsp;PPS&nbsp;了解吗?-&nbsp;Python&nbsp;这边你之前用的都是哪些版本(他们用&nbsp;2.7,太草了)-&nbsp;写过&nbsp;Socket&nbsp;吗,用过哪些库?-&nbsp;对&nbsp;IPv4&nbsp;和&nbsp;IPv6&nbsp;有什么了解吗?知道&nbsp;CIDR&nbsp;吗?-&nbsp;有了解过最长前缀匹配吗?有没有在自己的机器上配置路由表?-&nbsp;NAT&nbsp;了解吗?简单说一下?了解&nbsp;SNAT&nbsp;和&nbsp;DNAT&nbsp;的区别吗?-&nbsp;有用过&nbsp;scapy&nbsp;吗?-&nbsp;代码题:现有一个包含四个元素的&nbsp;list,每次调用接口时都需要从&nbsp;list&nbsp;中随机选出一个(索引)不重复的数,应该如何设计代码?-&nbsp;场景题:当你发现你上网很慢的时候,你如何进行排查?-&nbsp;反问
点赞 评论 收藏
转发
10 9 评论
分享
牛客网
牛客企业服务