字节跳动数仓面试 三道题-JAVA编程+hive窗口
2020.5.18 面试的小姐姐非常温柔,总共出了三道题,还会引导,我基本上说了思路,但是实现起来有差距,今天整理一下:
题目一:给定一个字符串,找到这个字符串中的第一个只出现一次的字符。
思路:
首先判断字符串是否为空,或者length==0。如果是,返回-1;否则:
1)维护一个hashMap的变量,盛放字符串中各个字符出现的次数,new HashMap<Character,Integer> k:字符;v:次数
2)遍历字符串中的各个字符,判断是否在hash表中存在,如果存在,将v加1,否则put<c,1>
3)重新遍历字符串,依次判断hash表中这个字符对应的v值是否为1,若是,返回当前索引;
代码如下:
private static int firstchar(String s) {if(s==null || s.length()==0) {return -1;}HashMap<Character,Integer> aa=new HashMap<Character,Integer>();for(int i=0;i<s.length();i++) {char b=s.charAt(i);if(aa.containsKey(b)) {aa.put(b, aa.get(b)+1);}else {aa.put(b,1);}}for(int i=0;i<s.length();i++) {char c=s.charAt(i);if(aa.get(c)==1) {System.out.println("第一次出现一次的字符是: "+c);return i;}}return -1;}
题目二: 求,每个班级科目,学生分数的中位数,表名score。
班级,科目,学生,分数
2班, 语文, a, 98
1班, 数学, b, 100
本题目用到了hive中的窗口函数,增加一个排序的列row_number()over().
补充:窗口函数的基本语法为:
分析函数()over(partition by 字段1 order by 字段2 rows between 开始位置 and 结束位置).
首先,分析函数可以是一些:
1)聚合函数.比如,max(),min(),sum(),count();
2)排名函数,row_number():排名不重复,即没有并列排名;
rank():排名可以并列,但是排名不跳过;desen_rank():排名可以并列,但是排名跳过。
3)其它函数:
lag(列名,往前的行数)可以计算用户上次购买时间,或者用户下次购买时间。
lead(列名,往后的行数,[行数为null时的默认值,不指定为null])
ntile(n) 把有序分区中的行分发到指定数据的组中,各个组有编号,编号从1开始,对于每一行,ntile返回此行所属的组的编号
第二,over()内部包含有三个函数:
1)partition by 字段 指定分区的字段。按照指定的字段分组,相当于Sql中的Group by
2) order by 字段 指定排序的字段。分区内部按照指定字段进行排序
3) rows between 开始位置 and 结束位置,指定窗口的大小
比较常用的是:ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW(表示从起点到当前行),其它一些设定为:
PRECEDING:往前
FOLLOWING:往后
CURRENT ROW:当前行
UNBOUNDED:起点(一般结合PRECEDING,FOLLOWING使用)
UNBOUNDED PRECEDING 表示该窗口最前面的行(起点)
UNBOUNDED FOLLOWING:表示该窗口最后面的行(终点)
例子与解释:
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW(表示从起点到当前行)
ROWS BETWEEN 2 PRECEDING AND 1 FOLLOWING(表示往前2行到往后1行)
ROWS BETWEEN 2 PRECEDING AND 1 CURRENT ROW(表示往前2行到当前行)
ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING(表示当前行到终点)
本题的答案:
1)先求出按班级、科目分组后的组内排名和组内计数
select 班级,科目,count(userid)over(partition by 班级,科目 order by 分数) as cnt,row_number()over(partition by 班级,科目) rnk from score;
2)以上表作为一个中间表a,再求各组内的中位数
再用一个union将cnt为奇数,或者为偶数的两种情况union到一张表上
题目三:已知表A:班级,学生,课外兴趣小组(字符串:“舞蹈,画画,天文”),将该表转化为按照每个班级,兴趣分组的学生列表
每个班级, 每种兴趣,报名的学生数
(一)需要用到LATERAL VIEW explode(split(“课外兴趣小组”,",")) intersting将课外兴趣小组成一列数据,在于原表进行笛卡尔积的叉乘,即:
select 班级,学生,intersting from A LATERAL VIEW explode(split(“课外兴趣小组”,",")) intersting ;
(二)上一步结束后,所有的兴趣与相关的班级 学生做叉乘,接下来需要用到一个listagg(学生,",") within group(order by class,intersting)函数进行姓名字符串的拼接,具体实现:
select class,intersting,listagg(学生,",") within group(order by class,intersting) AS stuName from (select 班级,学生,intersting from A LATERAL VIEW explode(split(“课外兴趣小组”,",")) intersting ) b group by class,intersting;
字节跳动数仓面试 三道题-JAVA编程+hive窗口相关推荐
- 2022字节跳动数仓实习面经(2、3面、hr面)
字节已经给offer了,今天接着上一篇抖音电商部门的数仓实习生面经,这次面试是2.3面的总结,就放在一起吧.对往期内容感兴趣的同学可以查看如下内容
- 字节跳动社招面试记录,java异常处理关键字
蚂蚁花呗第一次技术面(60min): Java容器有哪些?哪些是同步容器,哪些是并发容器? ArrayList和LinkedList的插入和访问的时间复杂度? java反射原理, 注解原理? 说说一致 ...
- 数仓面试|四个在工作后才知道的SQL密技
SQL是大数据从业者的必备技能,大部分的大数据技术框架也都提供了SQL的解决方案.可以说SQL是一种经久不衰.历久弥新的编程语言.尤其是在数仓领域,使用SQL更是家常便饭.本文会分享四个在面试和工作中 ...
- 为什么字节跳动的前端面试需要那么难的算法题?
首先我来辟个谣: 随便打开一个招聘网站,你会发现前端工程师的岗位需求依旧庞大,大厂人才奇缺,就业薪资起点高,无行业限制. (数据来源:职友集) 前端开发的行业大环境 行业升级,如果说以前只会HTML. ...
- 面试字节跳动,被面试官的源码问题问到怀疑人生
面试字节跳动,被面试官的源码问题问到怀疑人生 最近,我的一位朋友在找工作,已经拿到了美团.快手等公司的Offer,准备选择其中一家入职了. 后来他又接到了字节跳动的电话,通知他去参加三面.从二面到三面 ...
- 字节跳动2019春招第二次笔试编程题
字节跳动2019春招第二次笔试编程题 1.变身程序员 题目描述 输入描述 输出描述 示例 示例1 示例2 示例3 分析 参考代码 2.特征提取 题目描述 输入描述 输出描述 示例 示例1 备注 分析 ...
- sql怎么实现取当前数据以及累计7天数据_年薪60万+大佬吐血整理字节跳动大数据面试真题...
字节的面试难度一直很高,所以一直是我想攻克的目标,定下这个目标后就去准备收集了几十个字节实际面经,还包括面试前都需要做哪些准备.只能说是工欲善其事必先利其器,经过这些周全的准备,最终的面试还是很顺利的 ...
- Android开发十年,面试百度竟被刷!柳暗花明2020获字节跳动Offer(面试总结)
[Android进阶小刘]是我的头条号,里面会不定期更新一些Android进阶学习视频,感兴趣可以关注一下! 前言 历经两个月的春招,最近终于尘埃落定,为人生第一份实习画上圆满的句号.现在决定好好总结 ...
- 选择大于努力,错失字节跳动数亿身价,含泪分享
大家好,我是校长.今天给大家推荐一篇飞哥的文章,飞哥是资深的程序员,这篇文章是他自己的亲身感悟,很有启发性.另外,大家可以点击上方公众号卡片,关注他. 我是飞哥,今天写一篇来拉一拉大家的活跃度.我想大 ...
最新文章
- 测量大脑的快速光信号可以加快BCI响应
- mysql tags_mysql tags table解决方法
- 四大金刚 数据结构_GIS技术在气象领域应用综述
- RabbitMQ和Kafka选型用哪个
- jquery选择器《-》
- springboot注释详解
- python 智能造句_[零基础学Python]正规地说一句话
- 设置crontab用vi打开编辑
- opencv_找cv::Mat中的最大值和最小值
- php中session销毁,PHP中session变量的销毁
- 自定义错误页面 404.html
- Building package xxx:xxx-windows failed with: BUILD_FAILED
- muma很可能在陪你玩游戏
- 关于 傅里叶变换 的一些理解(通俗版)
- 【vn.py】SpreadTrading价差交易
- ecshop 添加php标签,ECSHOP模板标签【ecshop标签大全】ecshop标签手册
- 《东周列国志》第四十三回 智宁俞假鸩复卫 老烛武缒城说秦
- docker 查询ip
- 3dmark压力测试 linux,拷机还用Furmark? 瞧瞧3DMark压力测试怎样玩
- 常见排序算法的最好、最坏、平均时间复杂度以及空间复杂度
热门文章
- 工业相机在超级高铁管道视觉检测系统中的应用
- 大话西游猛击源码_我们猛击Return(Enter)键可能会演变的原因
- 刚拿下字节50万offer,想上岸的请一字一句看清楚
- Flash中使用Filereference上传文件的一些注意事项
- sublime text 3安装-add to explorer context menu意思
- Intel的东进与ARM的西征(4)--理想的星空,苹果处理器之野望
- Java Math.tan()/Math.tanh()具有什么功能呢?
- 毕业设计 基于B2C的网上拍卖系统设计与实现
- sublime插件崩溃
- 腾讯云增值税发票OCR