面试--笔试部分汇总

飞鹤面试:
1.做链接和右连接的区别?
左连接:返回左表中的所有字段以及右表中关联上的字段.
右连接:返回右表中的所有字段以及左表中关联上的字段.
内连接:inner join = join 只返回两个表中连接字段相等的行.
全连接:full join :返回左右表中所有的记录和左右表中连接字段相等的记录。
左表3条记录,右表2条,左连接结果为3条记录.
2.表数据中有个员工表emp,建表语句如下:
create table emp_his(emp_id number , emp_name varchar(50) );
表中存在重复的记录(根据id来判断),用SQL

select emp_id id, count(*) count 
from emp 
group by id 
where count >1

3.有张student_score表,存放每个学生,每个课程分数建表
create table student_score
(emp_id number
,course_name varchar(50)
,score number);
需要把每一门课程按照学生分数降序排序并添加序号,SQL

select 
course_name,
score , 
rank() over(partition by course_name order by score desc)
from
student_score
order by course_name,score
select 
emp_id ,
coalesce(b.emp_name, a.emp_name),
coalesce (a.age,b.age)
from emp_his a
full join emp_inc b on a.emp_id = b.emp_id;

5.1

select a.number_id,count(point)
from orders a
join stores c on a.store_id = c.store_id
where c.name like '%猎洋%'
group by a.member_id

5.2

select b.name,sum(a.point)
from orders a 
join members b on a.member_id =b.member_id
join stores c on a.store_id = c.store_id
where c.name = '婴童'
group by b.name
having sum(a.point) between 100 and 600

5.3

select b.name sum(a.point)
from orders a
join member b on a.member_id = b.member_id
group by a.member_id , b.member_id, b.name
order by sum(a.point)
val str= "foothebar"
val newstr="str"
replaceAll("th","22")

select concat(‘abc’,‘def’,‘gh’);
8.
hive中order by 与 sort by 的区别
order by 对输入的全局做排序,因此只会用一个reducer 消耗时间较长.
sort by :不是全局排序的,在数据进入到reducer前完成排序,如果用sort by 排序,并设置reduce.tasks>1,则并不保证全局有序.

10Java中的集合
Java集合按照其存储结构可以分为 两大类,即单列集合Collection和双列结合Map
Collection 单列集合类的根接口,其有两个重要子接口 List 和Set 。
List 相当于OC的NSArray 。Set相当于OC的NSSet.

List 接口的主要类有 ArrayList 和 LinkedList
Set  接口的主要类有 HashMap   和 TreeMap

HashMap

//主要的实现类有HashMap和TreeMap
class Person{
public name String;
public age Int;
}
public static void hashMap(){
Person p1=new Person("zhangsan",23)
Person p2=new Person("lisi",24)
Person p3=new Person("wangwu",25)
HashMap map =new HashMap<Int,Person>()
map.add(p1)
map.add(p2)
map.add(p3)
Set<String> keySet=map.keySet();
Interator it=keySet.iterator()
while(it.hasNext())
{
Object key=it.next();
Object value=map.get(key);
sout(key+value)
}
}

SparkStreaming与Flink的区别
技术理念不同,SparkSteaming数据流以时间为单位,通过弹性分布式数据集RDD进行批量处理.
Flink是基于时间驱动的,是一个面向流处理的计算框架,Flink基于每一个事件一行一行的流式处理,是真正的流式处理.
吞吐量/延时
sparkStreaming 高吞吐量,妙计延迟
Flink 高吞吐量,毫秒延迟
时间机制
SparkStreaming支持处理时间
Flink:支持事件时间,注入时间,处理时间,同事支持watermark机制处理迟到的数据.
13
flume和kafka的技术栈是什么,适用的场景是什么?
flume和kafka都是日志系统,kafka是分布式消息中间件,自带存储,提供push和pull存取数据功能.
flume分为agent,collector(数据简单处理和写入),storage(存储器),每一部分都是可以定制的.
kafka做日志的缓存.
flume做为日志策采集.

创建分区表SQL

create table fenqutable('jason' String)
PARTITIONED  by ('st' string)
inputformat 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
 OUTPUTFORMAT 
 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
 LOCATION '/warehouse/gmall/ods/ods_start_log';

使用Spark的指标:

  1. 每周各品类热门商品销量前三(取每周各热门品类,然后取用户行为宽表的几个字段,热门品类,用户id,商品id。然后用热门品类过滤。得到属于热门品类的数据,再根据热门品类,商品id,去聚合。去前三。)
  2. 各区域热门商品销量前五:取用户行为宽表,然后得到里面的数据,可以转化成样例类的rdd。然后根据区域分组,然后求商品销量,前五的。
  3. 商品评价人数占比(该商品的总评价人数/该商品的总购买人数):根据商品key分类,拿到评价人数,再拿到总购买人数
  4. 各品牌商家总销售额。 根据商家为key,拿去用户行为宽表的数据,求对应的销售额
  5. 各品类中销量前三的品牌
  6. 购物车各品类占比:以品牌为key,数量为value。从购物车宽表中获取数据。然后根据品牌分类,求总数。(说明大家想买的东西,便于后期铺货。)
  7. 每周广告点击率。(看到这个广告的人数/点击这个广告商品的人数)
  8. vip用户每日,周订单总额
  9. 每日限时特卖产品占比(限时特卖产品渠道总额/每日交易总额)
  10. 香港特快直送渠道总交易额占比(香港特快直送渠道总额/每日商品交易总额)
  11. 香港特快直送渠道总交易单占比
  12. 国内保税仓渠道总交易额占比(国内保税仓总额/每日商品交易总额)
  13. 国内保税仓渠道总交易单占比
  14. 各区域页面平均加载时长(页面加载成功时间戳-请求时间戳)(考察各地区网络问题。后台访问是否稳定)
  15. 获取点击下单和支付排名前10的品类

实时指标(spark streaming做):

  1. 每日日活实时统计

  2. 每日订单量实时统计

  3. 一小时内日活实时统计

  4. 一小时内订单数实时统计

  5. 一小时内交易额实时统计

  6. 一小时内广告点击实时统计

  7. 一小时内区域订单数统计

  8. 一小时内区域订单额统计

  9. 一小时内各品类销售top3商品统计

  10. 用户购买明细灵活分析(根据区域,性别,品类等)

  11. 准备三个具体的指标。比较难,又有对运营,营销又非常有价值的。帮助他们做了什么事,讲讲怎么做的
    寻找潜在VIP:

  12. 上一周连续3天登录,且上周内下过一单的
    先过滤取出上周内下过一单,又是非vip的人。(从订单明细表)
    再根据他们每日的最早启动时间,用rank窗口函数进行排序。那么排序的这个字段就应该是以1为公差的等差数列(left join 用户活跃表日)
    然后再用date-sub去将启动日期与rank计算,得到了日期差值,根据这个日期差值进行分组,计算这个差有几个。

3就是我们所需要的用户。
找出来之后,给她短信,后台消息推送vip活动免费一个月体验。减税,免邮,享受会员价等活动。

  1. 过去一个月内下单商品大于8件,且下单次数大于2
    使用用户订单详情表:取出过去一个月的非vip用户购买详情。
    计算每个用户的下单商品数,下单次数>2 (group by userID,sum(购买件数),count(distinct 订单号)》2)
    推送消息,给免费vip活动体验
    这部分的用户在接下来的三个月时间里,真正转换成vip的有35%的人,所以这个指标还挺有意义的

商品季度/半年复购率(购买过这个商品两次以上的用户数/这个季度购买这种商品的总人数):
3. 用户购买明细表。
把上个季度的用户购买详情表过滤出来。group by 用户id 商品id分组,求出用户对于某个商品下单的总次数。
然后用sum if(判断订单单数>2),订单单数>1的人数,求比率,
然后对比率根据品类排名,求每个品类中 比率排名前十的。用row_number<11.分区取品类,排序取复购率。
这些商品,是我们的重要维系的商品,要及时补货。然后复购率高说明,受用户喜欢,可以推荐,给用户发送小样,尝试,增大转化率。

4.品牌复购率:
差不多,把具体商品,改成品牌id。各类商品下的品牌复购率(每月来算)

5.每周各品类热门商品销量前三(取每周各热门品类,然后取用户行为宽表的几个字段,热门品类,用户id,商品id。然后用热门品类过滤。得到属于热门品类的数据,再根据热门品类,商品id,去聚合。去前三。)
6.各区域热门商品销量前五:取用户行为宽表,然后得到里面的数据,可以转化成样例类的rdd。然后根据区域分组,然后求商品销量,前五的。
7.各品类中销量前三的品牌
8.购物车各品类占比:以品牌为key,数量为value。从购物车宽表中获取数据。然后根据品牌分类,求总数。(说明大家想买的东西,便于后期铺货。

数据健康问题:
物流信息:有的客户物流信息上显示收到货了,但是快递可能没有送到他手里,然后过程中有丢失的情况。那么我们的物流计算时长,如果单纯按照物流信息来就会出现偏差,所以我们物流到货时间都是以用户,确认收货为准。也不会差很大。
用户的隐私信息,电话号码:我们使用自己的一套脱敏技术,将每个电话号码的4-11位,加1,然后4-7位与8-11位顺序调换。后期我们需要用到他们的隐私信息,电话进行,营销,发送消息是,就把他转换过来。

数据倾斜问题:

  1. 用时间维度表去join过去一整年的用户购买明细表,查看,用户集中购买的月份和季节。分析用户的行为。之前不是默认的。(默认开启mapJoin嘛)
  2. 小表join大表的问题。后面这个优化了,但是小表不能超过512M.我们数据量没那么大,应该是可以的。

比如说算品类销售排名的时候,group by 品类,求销售总量是,某一品类像面膜,可能销售量特别大,占60%多,那么有一个任务就会执行特别久。半天出不来。设置推测执行也差不多,就应该是数据倾斜导致的问题
Map端部分聚合

这里需要修改的参数为:
  hive.map.aggr=true(用于设定是否在 map 端进行聚合,默认值为真) hive.groupby.mapaggr.checkinterval=100000(用于设定 map 端进行聚合操作的条目数)
• 有数据倾斜时进行负载均衡
  此处需要设定 hive.groupby.skewindata,当选项设定为 true 是,生成的查询计划有两 个 MapReduce 任务。在第一个 MapReduce 中,map 的输出结果集合会随机分布到 reduce 中, 每个 reduce 做部分聚合操作,并输出结果。这样处理的结果是,相同的 Group By Key 有可 能分发到不同的 reduce 中,从而达到负载均衡的目的;第二个 MapReduce 任务再根据预处 理的数据结果按照 Group By Key 分布到 reduce 中(这个过程可以保证相同的 Group By Key 分布到同一个 reduce 中),最后完成最终的聚合操作。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值