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窗口相关推荐

  1. 2022字节跳动数仓实习面经(2、3面、hr面)

    字节已经给offer了,今天接着上一篇抖音电商部门的数仓实习生面经,这次面试是2.3面的总结,就放在一起吧.对往期内容感兴趣的同学可以查看如下内容

  2. 字节跳动社招面试记录,java异常处理关键字

    蚂蚁花呗第一次技术面(60min): Java容器有哪些?哪些是同步容器,哪些是并发容器? ArrayList和LinkedList的插入和访问的时间复杂度? java反射原理, 注解原理? 说说一致 ...

  3. 数仓面试|四个在工作后才知道的SQL密技

    SQL是大数据从业者的必备技能,大部分的大数据技术框架也都提供了SQL的解决方案.可以说SQL是一种经久不衰.历久弥新的编程语言.尤其是在数仓领域,使用SQL更是家常便饭.本文会分享四个在面试和工作中 ...

  4. 为什么字节跳动的前端面试需要那么难的算法题?

    首先我来辟个谣: 随便打开一个招聘网站,你会发现前端工程师的岗位需求依旧庞大,大厂人才奇缺,就业薪资起点高,无行业限制. (数据来源:职友集) 前端开发的行业大环境 行业升级,如果说以前只会HTML. ...

  5. 面试字节跳动,被面试官的源码问题问到怀疑人生

    面试字节跳动,被面试官的源码问题问到怀疑人生 最近,我的一位朋友在找工作,已经拿到了美团.快手等公司的Offer,准备选择其中一家入职了. 后来他又接到了字节跳动的电话,通知他去参加三面.从二面到三面 ...

  6. 字节跳动2019春招第二次笔试编程题

    字节跳动2019春招第二次笔试编程题 1.变身程序员 题目描述 输入描述 输出描述 示例 示例1 示例2 示例3 分析 参考代码 2.特征提取 题目描述 输入描述 输出描述 示例 示例1 备注 分析 ...

  7. sql怎么实现取当前数据以及累计7天数据_年薪60万+大佬吐血整理字节跳动大数据面试真题...

    字节的面试难度一直很高,所以一直是我想攻克的目标,定下这个目标后就去准备收集了几十个字节实际面经,还包括面试前都需要做哪些准备.只能说是工欲善其事必先利其器,经过这些周全的准备,最终的面试还是很顺利的 ...

  8. Android开发十年,面试百度竟被刷!柳暗花明2020获字节跳动Offer(面试总结)

    [Android进阶小刘]是我的头条号,里面会不定期更新一些Android进阶学习视频,感兴趣可以关注一下! 前言 历经两个月的春招,最近终于尘埃落定,为人生第一份实习画上圆满的句号.现在决定好好总结 ...

  9. 选择大于努力,错失字节跳动数亿身价,含泪分享

    大家好,我是校长.今天给大家推荐一篇飞哥的文章,飞哥是资深的程序员,这篇文章是他自己的亲身感悟,很有启发性.另外,大家可以点击上方公众号卡片,关注他. 我是飞哥,今天写一篇来拉一拉大家的活跃度.我想大 ...

最新文章

  1. 测量大脑的快速光信号可以加快BCI响应
  2. mysql tags_mysql tags table解决方法
  3. 四大金刚 数据结构_GIS技术在气象领域应用综述
  4. RabbitMQ和Kafka选型用哪个
  5. jquery选择器《-》
  6. springboot注释详解
  7. python 智能造句_[零基础学Python]正规地说一句话
  8. 设置crontab用vi打开编辑
  9. opencv_找cv::Mat中的最大值和最小值
  10. php中session销毁,PHP中session变量的销毁
  11. 自定义错误页面 404.html
  12. Building package xxx:xxx-windows failed with: BUILD_FAILED
  13. muma很可能在陪你玩游戏
  14. 关于 傅里叶变换 的一些理解(通俗版)
  15. 【vn.py】SpreadTrading价差交易
  16. ecshop 添加php标签,ECSHOP模板标签【ecshop标签大全】ecshop标签手册
  17. 《东周列国志》第四十三回 智宁俞假鸩复卫 老烛武缒城说秦
  18. docker 查询ip
  19. 3dmark压力测试 linux,拷机还用Furmark? 瞧瞧3DMark压力测试怎样玩
  20. 常见排序算法的最好、最坏、平均时间复杂度以及空间复杂度

热门文章

  1. 工业相机在超级高铁管道视觉检测系统中的应用
  2. 大话西游猛击源码_我们猛击Return(Enter)键可能会演变的原因
  3. 刚拿下字节50万offer,想上岸的请一字一句看清楚
  4. Flash中使用Filereference上传文件的一些注意事项
  5. sublime text 3安装-add to explorer context menu意思
  6. Intel的东进与ARM的西征(4)--理想的星空,苹果处理器之野望
  7. Java Math.tan()/Math.tanh()具有什么功能呢?
  8. 毕业设计 基于B2C的网上拍卖系统设计与实现
  9. sublime插件崩溃
  10. 腾讯云增值税发票OCR