赞
踩
1)基本介绍
金山云2.21号下午4点:电话面试
部门主要是做数据平台,二次开发改源代码
面试时长:1小时
2)技术部分:
(1)HashMap,HashTable,ConcurrentHashMap区别,HashMap扩容;注解的使用和内部原理
(2)Spark 任务划分,Job提交流程;
(3)根据进程名杀死进程;查看端口号占用情况;
(4)Flume如何保证数据不丢;TailDir如何保证数据完整性;记不清了,是读取一个Postion
(5)Flink如何保证exactly-once语义; Flink和Spark的区别;
(6)Kylin和Druid的使用场景和原理;CDH集群监控相关问题;
(7)介绍调节Kafka速率和开启背压机制;广播变量原理;项目性能调优(调参一直被怼);一些集群部署的事情
(8)JVM的参数调优;GC种类和算法(讲讲标记-清除原理);
(9)两个数组找出中位数;两个线程交替打印递增自然数;
3)金山云2.25号上午11点:电话面试
(1)介绍一个最擅长得项目,用到哪些大数据组件
(2)用Azkaban和其他调度工具的优劣,如何保证某个job挂掉后断点继续跑任务?
(3)Spark用过的算子
(4)Presto了解吗?
(5)HashMap和HashTable的区别?ConcurrentHashMap了解多少?一面和二面都被问到
(6)对网络编程,NIO,BIO等并发相关的理解。
(7)八个硬币找出最重的(分两组二分查找)
(8)一个N阶楼梯,可以步长为1/2的走,有多少种走法?(斐波那契数列)
快手:视频面试
1)一面:50分钟
(1)介绍项目
(2)Flink为什么用aggregate()不用process()
(3)自定义UDF,UDTF实现步骤,有哪些方法?UDTF中的ObjectInspector了解吗?
(4)Flume丢不丢数据?PUT,TAKE事务
(5)SQL题:
1. id department salary manager_id 找出员工薪水比领导薪水高的人员(单表join)
2. student course score 找出哪些学生课程比平均课程成绩高?(记不太清了,用到子查询)
(6)快手的数仓分了3层,OLAP用的是Druid,数据量每天达到PB级,上千个指标,平均每个人跑几百个指标吧。
2)二面:1小时
(1)手撕SQL
①A-天极增量表: uid,module_name,location,date
目标-B全量表: uid,module_name,first_entry_date,first_location
找出两个第一次插入到B表
②user:uid,age,date
order:order_id,order_money,location,date,其中location:{"city","xx"}
双十一场景,找出北京市双十一年龄范围在20-25岁的人中 的人数,人均销售额大于1000的人
③URL: http://www.a.com/home?key1=v1&key2=v2 ?后面的数据做切分,存放到一个JSON中返回,要求用UDF函数
④找出一个List中的最大值和最小值并返回
(2)问到了几个场景题
①Flink设计题
②HBase使用场景
③Redis使用场景
④Druid的一些东西
(3)最后问到了职业规划,闲聊
1)技术
(1)自我介绍
(2)问了下离线数仓的架构
(3)问了Hive四层架构
(4)问了业务系统8张表的更新方式
2)场景题:
(1)使用SQL或者SparkRdd写出代码
正在上传…重新上传取消正在上传…重新上传取消
(2)两张表,怎么使用SparkRDD的方式实现Join,代码
Table1
uid,dept_id
Table2
dept_id,dept_name
(3)使用MR或者Spark实现countDistinct(例如求uid数量)
现有一个用户活跃表user_active、用户注册表user_regist,
表中分区字段都为p_date(yyyy-MM-dd),用户字段均为user_id;
设计一张1-180天注册活跃留存表;
select regist_date
,date_diff
,user_count/regist_count as rate
from (
select t1.regist_date
,max(t1.regist_count) as regist_count
,datediff(t2.active_date, t1.regist_date) as date_diff
,count(*) as user_count
from (
select user_id
,regist_date
,count(*) over(partition by regist_date) as regist_count
from user_regist
where dt >= date_sub(current_date(), 180)
) t1
left join (
select user_id
,to_date(active_date) as active_date
from user_active
where dt >= date_sub(current_date(), 180)
group by user_id, to_date(active_date)
) t2 on t1.user_id = t2.user_id
where datediff(t2.active_date, t1.regist_date) >=1
and datediff(t2.active_date, t1.regist_date) <= 180
group by t1.regist_date, datediff(t2.active_date, t1.regist_date)
) t
二面 下周1
-- 统计面试几个人,多长时间 ,
-- 日志表
-- 点击开始面试 emp_id, user_id, session_id ,click_time
-- 点击关闭 emp_id, user_id, session_id ,click_time -一次会话
-- 计算: 点击会出现重复数据, 会有多个点击 点击时间会不一样,求最后一个时间
-- 关闭的时候,第一个点击时间
-- 每个面试官,每天 多长时间面试
select t1.dt as report_date
,t1.emp_id
,sum(unix_timestamp(t2.max_click_time, 'yyyy-MM-dd HH:mm:ss') -
unix_timestamp(t1.min_click_time, 'yyyy-MM-dd HH:mm:ss')) as inv_time
from (
select dt
,emp_id
,session_id
,max(click_time) as min_click_time
from start_log
group by dt, emp_id, session_id
) t1
left join (
select dt
,emp_id
,session_id
,min(click_time) as max_click_time
from end_log
group by dt, emp_id, session_id
) t2 on t1.dt = t2.dt and t1.emp_id = t2.emp_id and t1.session_id = t2.session_id
group by t1.dt, t1.emp_id
#
面试官描述,我提醒下,先问清楚我需求,一旦你开始写,就不要问我了?
然后我简单问了个问题?
最后面试官说,有个主意事项的,同一个session_id可能对应多个user_id, 因此需要按照人员进行划分,
我表示,我以为每次个用户只有唯一的session_id会话id
三面 本周3
主要问的都是围绕着从业经历,从java到大数据的原因
目前项目的架构,自己做的什么东西,
数据质量有接触吗?怎么理解的
零零碎碎的面试的都是些 类似宏观上的东西,也没问什么废话
1)技术部分
(1)HDFS架构理解(基础)
(2)HDFS源码/工作原理(高级)
(3)MapReduce架构理解(基础)
(4)MapReduce源码/工作原理/Shuffle原理(高级)
(5)MapReduce二次排序(编程,必选)
(6)YARN架构理解(基础)
(7)YARN源码/工作原理(高级)
(8)HBase架构理解(基础)
(9)HBase源码/工作原理(高级)
(10)HBase性能优化(高级)
(11)Hive原理理解(基础)
(12)Hive性能优化(高级)
(13)Flume架构理解(可选)
(14)Kafka架构理解(可选)
(15)Spark RDD理解(基础)
(16)Spark reduceByKey与groupByKey区别(基础)
(17)Spark Broadcast与Accumulator功能(基础)
(18)Spark工作原理(高级)
(19)Spark Shuffle原理(高级)
(20)Spark源码理解/贡献(高级)
(21)Spark性能优化/数据倾斜(高级)
2)项目部分
2.1)数仓理论
(1)数据仓库分层架构(初级)
(2)事实表与维度表(初级)
(3)星型模型与雪花模型 (初级)
(4)日增量表与日全量表 (初级)
(5)拉链表 (初级)
(6)缓慢变化维 (初级)
(7)两种建模理论(初级)
(8)data-vault理论(高级)
2.2)数仓周边系统
(1)血缘关系
(2)调度系统
(3)展示,olap(kylin)
(4)指标管理
(5)数据质量管理 (高级)
(6)元数据管理,调度系统元数据,任务运行数据,表存储数据,数据字典等
3)手写SQL部分
(1)点:窗口函数,行列转换,聚合函数
加一点复杂的:collect_set,split,case when,聚合函数,union等
(2)函数考察
eg: rank, dense_rank, row_number区别 (基础)
行列转换 (基础)
sort by,distribute by,order by,clustered by区别
(3)3个表关联,写下大概的mr过程 (中级)
(4)去重,2个写法的区别:
select count(distinct id) from t1;
select count(1) from ( select id from t1 group by id) a (高级)
(5)map join 原理 (基础)
(6)bloom filter去重,原理(高级)
(7)hive tunning
4)场景部分
(1)Job,Reduce长时间百分之99;
(2)Reduce的3个阶段,Reduce百分之90+,又降下去,反复几次
(3)Map一直百分之90多,之后报错
上海科锐国际外派美团点评
1)面试前HR给的重点
(1)SQL要强;
(2)分层是否有参与;
(3)熟悉哪些框架;
(4)项目的数据量有多少;
(5)调度工具用到哪些;
(6)数据源在哪里;
(7)数据可视化怎么做;
(8)跟Java怎么对接;
(9)面试官还会现场出一些题目,现场做
2)一面:
(1)问Spark,Flink优劣势,
(2)Flink如何处理乱序数据,
(3)Flink内存溢出怎么办,
(4)Flink有没有试过优化,
(5)Flink精准一次消费,
(6)建模理论,用过什么模型,雪花和星型的分别解决什么问题。
(7)用过什么工具进行数据迁移,导入导出。
(8)数仓大体干了什么,自己做了哪些指标,
(9)SQL题:用Hive解析Json字符串 或者 七天连续登陆用户
3)二面:
基本情况:去了是帮美团点评做和银行对接的数据仓库,数据量大,面试是完全和美团点评面试,签合同是和科瑞国际签约。
(听内部消息说尚大好像已经进去了两个,目前HR说还缺两个数据开发岗位)
美团金融
第一轮:
输入: 表T(user_id, timestamp), 用户在某一页面的所有曝光历史记录
输出: 2020年1月份1~31日,指标: 首次曝光用户数量,次1-7日留存用户数量
#
select t1.min_visit_date
,sum(if(t1.min_visit_date == t2.visit_date, 1, 0)) as base_count
,sum(if(datediff(t2.visit_date, t1.min_visit_date) = 1, 1, 0)) as liucun_day01
,sum(if(datediff(t2.visit_date, t1.min_visit_date) = 2, 1, 0)) as liucun_day02
,sum(if(datediff(t2.visit_date, t1.min_visit_date) = 3, 1, 0)) as liucun_day03
,sum(if(datediff(t2.visit_date, t1.min_visit_date) = 4, 1, 0)) as liucun_day04
,sum(if(datediff(t2.visit_date, t1.min_visit_date) = 5, 1, 0)) as liucun_day05
,sum(if(datediff(t2.visit_date, t1.min_visit_date) = 6, 1, 0)) as liucun_day06
,sum(if(datediff(t2.visit_date, t1.min_visit_date) = 7, 1, 0)) as liucun_day07
from (
select user_id
,min(to_date(timestamp)) as min_visit_date
from visit_info
group by user_id
having min_visit_date >= '2020-01-01' and min_visit_date <= '2020-01-31'
) t1
left join (
select user_id
,to_date(timestamp) as visit_date
from visit_info
where to_date(timestamp) >= '2020-01-01'
group by user_id, to_date(timestamp) -- 去重
) t2 on t1.user_id = t2.user_id
group by t1.min_visit_date;
第二轮
求:每个uid上一笔成功订单id,没有的记录为null,
状态值:1-成功 0-失败
id time uid is_suc 结果列[最终展示结果]
1 2020-01-01 1 1 Null
2 2020-01-02 1 0 1
3 2020-01-03 1 0 1
4 2020-01-04 1 1 1
5 2020-01-05 1 0 4
6 2020-01-06 2 0 Null
7 2020-01-07 2 1 Null
8 2020-01-08 2 0 7
#
我开始理解错题目了。我以为求上一个正确的状态值
实际上计算的是上一个状态是正确的id,还要面试给过了
drop table visit_info;
create table visit_info
as
select 1 as id, '2020-01-01' as visit_date, '1' as user_id, 1 as is_suc
union all
select 2 as id, '2020-01-02' as visit_date, '1' as user_id, 0 as is_suc
union all
select 3 as id, '2020-01-03' as visit_date, '1' as user_id, 0 as is_suc
union all
select 4 as id, '2020-01-04' as visit_date, '1' as user_id, 1 as is_suc
union all
select 5 as id, '2020-01-05' as visit_date, '1' as user_id, 0 as is_suc
union all
select 6 as id, '2020-01-06' as visit_date, '2' as user_id, 0 as is_suc
union all
select 7 as id, '2020-01-07' as visit_date, '2' as user_id, 1 as is_suc
union all
select 8 as id, '2020-01-08' as visit_date, '2' as user_id, 0 as is_suc
;
select t1.id
,t1.visit_date
,t1.user_id
,t1.is_suc
,max(if(datediff(t1.visit_date, t2.visit_date) <= 0, Null, t2.id)) as result_flag
from visit_info t1
left join (
select id
,visit_date
,user_id
from visit_info
where is_suc = 1
) t2 on t1.user_id = t2.user_id
group by t1.id ,t1.visit_date,t1.user_id,t1.is_suc
;
t1.id t1.visit_date t1.user_id t1.is_suc result_flag
1 2020-01-01 1 1 NULL
2 2020-01-02 1 0 1
3 2020-01-03 1 0 1
4 2020-01-04 1 1 1
5 2020-01-05 1 0 4
6 2020-01-06 2 0 NULL
7 2020-01-07 2 1 NULL
8 2020-01-08 2 0 7
第三轮:
确定是 技术面
面试官有点奇怪,开头就问为啥没考研,大四实习了吗?成绩很差吗?
什么专业?为什么学习java? 为什么又做大数据开发?为什么在某个公司要离职?
基本没问什么项目, 我尽量回答,最后问了HR 说沟通下,后续有其他部门的offer,就不管这个部门了, 应该是三面挂了
美团bp数据中心
一轮说自己写个top10
写完了说有啥问题吗?
我说挺好的?
row_number 如果order by 多个字段一样有问题吗?
然后就解释了一波 row_number, rank, dense_rank的区别
第2轮没有写sql, 问的都是项目内容
美团财务集市的面试题
第一轮
面试官不怎么问sql, 就说咱们随便来一个吧
dptid, user_id, age
求每个部门年龄的top10
第二轮,第三轮
也没写sql,面试官问的原理大部分都是基础的东西,觉得我准备的很充足,表达的欲望就是想要你,虽然方向不偏向数仓
第四轮交叉面
应该是个大佬,据说交叉面是定级的
面试偏向于管理方向,比如给你一个团队,你怎么带?怎么安排,我坦诚没带过,然后就回复 假如让你带,你构思下?
最后面试过了,因为选择了其他部门,这个就没进行HR面
美团外卖
第一轮:
create table if not exists tmpA(
wm_order_id bigint comment '订单id',
wm_poi_id bigint comment '商家id',
userid string comment '用户id',
month string comment '月份,格式:yyyyMM',
actual_amt double comment '实付金额',
dt string comment '日期,格式:yyyyMMdd'
)
row format delimited fields terminated by ",";
1.统计每月支付额排名前3的用户清单
2.展示每个用户每月的最大实付金额和截止到该月的总实付金额
-- 1.统计每月支付额排名前3的用户清单
select month
,useid
,actual_amt
,rn
from (
select month
,useid
,actual_amt
,row_number()over(partition by month order by actual_amt desc) as rn
from (
select month
,useid
,sum(actual_amt) as actual_amt
from tmpA
group by month, userid
) t
) t
where rn <= 3
;
-- 2. 展示每个用户每月的最大实付金额和截止到该月的总实付金额
select useid
,month
,max(month_max_actual_amt) as month_max_actual_amt
,max(total_actual_amt) as total_actual_amt
from (
select month
,useid
,max(actual_amt)over(partition by month, useid) as month_max_actual_amt
,sum(actual_amt)over(partition by useid order by month) as total_actual_amt
from tmpA
) t
group by month, useid
;
第二轮:
有个table 有两个字段 dt(yyyyMMdd), jieqi(内容为汉字 比如 立春, 小寒 记录每年农历的24节气)
表中记录了5年的数据
求: 增加一个season列,比如 春,夏,秋,冬,可以根据 立春 和 立夏 之间划分 春 诸如此类的划分;
展示行效果如下
dt jieqi season
2020xxxx 立春 春
select t1.dt
,t1.jieqi
,t2.season
from info t1
left join (
select dt
,jieqi
,season
,lead(dt, 1, '99991231') over(order by dt) as next_dt
from (
select dt
,jieqi
,case when jieqi = '立春' then '春'
when jieqi = '立夏' then '夏'
when jieqi = '立秋' then '秋'
else '冬' end as season
from info
where jieqi in ('立春','立夏','立秋','立冬')
) t
) t2
where t1.dt >= t2.dt and t1.dt < t2.next_dt
二面偏向java,问了一些java的
比如list, set, map的理解
并发容器CopyWriteArrayList的原理,又延伸了下 mysql数据的读写锁是怎么回事?写的时候,如何读的?
sql注入怎么理解的?
能否写个3个线程交替打印的代码?
回答的很不好,还是给过了
第三轮:
tord表: 字段为 ord_id, ord_time, usr_id, dt
增量存储的交易记录表,记录每个月新增用户首单在未来30天的复购交易额;
#
展示字段: 统计月, 复购交易金额
比如 求 7月份的时候,7月1号新增的,求 2~31号的,2号新增的求 3~8-1号的
insert into table order_amt_info partition (dt)
select substr(t1.min_info.col1,1,7) as report_month
,sum(t2.amt) as amt
,substr(t1.min_info.col1,1,7) as dt
from (
select usr_id
,min(struct(min_ord_time, ord_id)) as min_info
from tord
group by usr_id
having min_ord_time >= '2020-07-01' and min_ord_time <= '2020-07-31'
) t1
left join (
select ord_id
,to_date(ord_time) as ord_time
,usr_id
,amt
from tord
where dt >= '2020-07-01'
) t2 on t1.usr_id = t2.usr_id and t1.min_info.col2 = t2.ord_id
where datediff(t2.ord_time, t1.min_ord_time) >= 1
and datediff(t2.ord_time, t1.min_ord_time) <= 30
group by substr(t1.min_ord_time,1,7)
第三题的衍生发问
延伸题目
从上述的表中构建一个 增量表 记录
fusr: user_id, f_ord_time, dt - 增量的分区,每个分区存当日首购用户
延伸题目
fusr: user_id, f_ord_time,f_ord_amt, dt - 增量的分区,每个分区存当日首购用户以及首单的金额
初始化全量的 收购用户
insert into table order_amt_info partition (dt)
select user_id
,to_date(min_info.col1) as f_ord_time
,min_info.col2 as f_ord_amt
,to_date(min_info.col1) as dt
from (
select user_id
,min(struct(ord_time, amt)) as min_info
from tord
where dt < '2020-07-01'
group by user_id
) t
构建后续的每日增量数据
insert into table order_amt_info partition (dt='${}')
select t1.user_id
,to_date(t1.min_info.col1) as f_ord_time
,t1.min_info.col2 as f_ord_amt
from (
select user_id
,min(struct(ord_time, amt)) as min_info
from tord
where dt = '${}'
group by user_id
) t1
left join (
select user_id
from order_amt_info
where dt < '${}'
) t2 on t1.user_id = t2.user_id
where t2.user_id is null
;
继续延伸
用户im: 用户发起会话数,用户参与会话数,用户发起消息数,用户参与消息数,发起会话用户数,参与会话用户数
log:misid,sentid,reid,mis_time,dt
dim:uid,idtype(poi,usr,dlvr)
模型设计 - 出一张公共表:
按照自己的思路展开就好,不是sql题目
数仓岗
1)项目部分
(1)为什么用双层Flume
(2)日志标准化在哪里做最好
(3)Hive海量数据(一个分区)怎么导入MySQL
(4)遇到过那些坑,自己认为做过有价值的地方
(5)MapReduce
(6)怎样可以让运维自己做查询
)技术部分
(1)对Java的理解
(2)Java线程的理解
(3)对池的了解(线程池、数据库连接池),Java线程池是怎么实现的,Java线程池都有哪些组件,具体作用是什么
(4)对Spring框架的理解
(5)WebServer端收集的日志放在哪里
2)项目部分
(1)介绍下项目,项目中用的那些技术点
3)手写部分
(1)手绘Hadoop架构
1)自我介绍
2)技术部分
(1)让我介绍下Sqoop,说他没见过
(2)让我介绍MapReduce的运行过程
二话不说要笔要纸,手绘MapReduce从InputFormat到OutputFormat的流程,一边画图一边说。
3)项目部分
(1)让我介绍项目我都是给他要笔要纸,手绘架构图。
离线:data->flume->kafka->hdfs->hadoop/spark->mysql->前端展示
实时:data->flume->kafka->Spark Streaming->mysql->前端展示
kafka到hdfs是自定义的consumer
(2)为什么要使用Kafka,可不可以用Flume直接将数据放在HDFS上
(3)让我介绍下项目中的指标,都是怎么实现的
4)手写算法部分
(1)让我写链表的反转
(2)接下来让我手写单例
5)是否有问题问面试官
(1)最后说有没有问题要问他
问1:我就问他们大数据是做什么,一天的数据量有多大
问2:我就又问他们怎么定义的垃圾数据
1)自我介绍
2)技术部分
(1)介绍MapReduce的运行过程
3)项目部分
(1)项目框架介绍
(2)问我写的公司做什么的
(3)他又问具体都卖什么
(4)问我上家公司做大数据的有多少人
(5)问我公司在哪
(6)问我一天的数据量有多大
(7)又问我一天的访问量有多少
4)手写算法部分
(1)手写二分查找
(2)让我用Shell写一个脚本,对文本中无序的一列数字排序
5)是否有问题问面试官
(1)最后说他没问题了,我有什么要问他的没
1)自我介绍
(1)自我介绍
(2)问我哪一年毕业的,公司有多少人
(3)问我为什么要做这个,什么专业的
2)技术部分
(1)问我Kafka用的那个版本
(2)问我ZooKeeper的常用命令
(3)问我myisam和innodb的区别
(4)他又问我一句如果单线程访问,myisam和innodb那个性能好一点
(5)问我Redis常用的命令
(6)问我为什么要用Redis
(7)问我了解HBase不
(8)然后问我机械硬盘和SSD硬盘的差别了解不
(9)然后他又问我机械硬盘每秒读取次数多少知道不
3)项目部分
(1)问我一天的数据量有多大
(2)问我Azkaban一天调度多少个任务
(3)然后他问我这么一个问题,他说你做这些项目需要埋点日志的对吧,然后说如果后台的人不愿意给你加这个埋点,嫌麻烦,你怎么办
4)场景题,手写SQL
场景1:是这样的,一张表三个字段,分别是学生名字、科目名字、科目得分,让我用sql把总分最高的找出来
5)平时学习习惯
6)是否有问题问面试官
(1)最后他说他差不多了,我有什么要问他的没
1)自我介绍
2)技术部分
(1)介绍MapReduce的运行流程
(2)让我说下myisam和innodb的区别
(3)然后看着简历说你知道HDFS的存储过程,我说需不需要我说一下
3)项目部分
让我介绍下我写的三个项目都是干啥的
4)平时学习习惯
(1)问我喜不喜欢技术
(2)问我喜欢跟人打交道还是喜欢跟机器打交道
1)自我介绍
2)人事高频问题
(1)有没有别的offer,面试几家了
(2)问我什么时候辞职的
(3)问我为什么现在才找工作
(4)上家薪资多少
1)技术部分
(1)Kafka吞吐量怎么优化
(2)Hive底层,SQL、表关联、窗口函数、聚合函数、一堆场景题
(3)Join对应的MR
(4)一张小表Join一张大表 在MR上怎么JOIN
(5)map()阶段聚合
(6)Spark job流程
2)项目部分
(1)上个月用户访问次数最大的IP
(2)TopN
(3)日活实时统计
(4)SparkStreaming的活动窗口大小,数据重复怎么办?
(5)数据仓库ODS -》 DWD 用什么写的脚本?
3)算法部分
(1)二分查找
(2)字符串反转
1)技术部分
(1)HDFS的小文件处理。
(2)Hive调优,数据倾斜问题
(3)Spark任务提交流程
(4)MR任务提交Yarn流程
(5)HDFS的读写流程,Shuffle流程,Shuffle过程的归并排序具体怎么做。
(6)是否用了currenthashmap,高并发问题就高枕无忧了
(7)线程池了解吗?
(8)怎么判断一个Kafka消费者挂了
(9)了解Redis,MySQL吗,MySQL的索引了解吗?
(10)select。。。for update是什么锁?
(11)MySQL底层文件存储
(12)读过哪些框架的源码?
(13)JVM底层原理
(14)Spark的distinct()算子底层
(15)布隆过滤器
(16)Zookeeper的作用,Zookeeper单独的事务,Nginx的作用,只做收集数据吗?
(17)说一下Kafka的架构,描述hw leo,Kafka的优化,怎么做幂等,你们做业务幂等性,为什么消费者怎么看到hw。消息的一致性能解决什么问题,kafka事务怎么理解。
(18)Spark的Shuffle过程
(19)HBase怎么预分区
(20)Redis有多少曹,Redis的持久化,你们在项目中怎么用Redis的,如何防止雪崩。
(21)mysql update一条语句,需要走那些流程。
(22)了解ES吗?
(23)Yarn执行一个任务用了多少core
(24)produce给Kafka的一个topic发送消息,topic的一个分区挂掉,他的副本也全部挂掉,这个topic还能用吗
(25)有没有用JavaAPI去读Kafka的数据
(26)Spark读取Kafka数据的方式?
(27)Hive的内表和外表的区别,Hive为什么要做分区,Hive的元数据存在哪?
(28)列式存储和关系型数据库的区别
(29)Java中正则表达式用到哪些类?
(30)unlock和synchronzed的区别?
(31)编写SparkSQL的步骤?
2)项目部分
(1)写实时项目遇到了哪些问题
(2)拉链表的创建,连续三天登陆
(3)你们公司日活,月活,留存多少?你们团队多少人?
(4)为什么加最后一层Flume,不能直接Flume到HDFS吗?
(5)分析指标,对APP有什么影响。提升了百分之多少?
(6)有没有访问Kafka的所有Topic的权限
(7)有没有做Hive表的权限管理。
3)算法部分
(1)归并排序
(2)删除单链表的一个节点
4)情景题:
(1)Spark:如果消费Kafka中的数据时,某个分区内数据因为种种原因丢失了一条(也可理解成因为某些条件被过滤了),现在需要重新把这条数据纳入计算结果中。怎么解决?
(2)a left join b on a.id = b.id and b.age = 20
a left join b on a.id = b.id where b.age = 20
的结果有什么区别
5)平时学习习惯
(1)你最近在研究什么?
1)项目介绍
介绍一下项目,你主要负责哪部分,最精通什么
2)技术部分
(1)HDFS读写机制,DataNode怎么保证数据可靠性,原理是什么(答副本,说不对)
(2)MR的过程详细说一下
(3)使用MR写出Join过程
(4)日常开发哪里用到Java多线程,怎么写
(5)说一下并发和同步,单例必须加同步锁么?为什么
(6)说一下MR的底层源码,你研究了哪部分?
(7)说说Spark的底层源码吧
1)笔试部分(基础题)
(1)请用图形的方式表示出Java运行时数据区
(2)以上哪些数据区在空间不足的情况下会抛出异常?
(3)Java工程出现内存泄露如何排查?请写出你知道的排查工具以及方法
(4)以下代码的输出结果是什么?
String str1=new StringBuilder("58").append("ganji").toString();
System.out.println(str1.intern == str1);
String str2=new StringBuilder("ja").append("va").toString();
System.out.println(str2.intern == str2);
(5)在Scala中有一种函数其参数可以为参数,这样的函数称为高阶函数,请参照scala中常见map函数实现一个名为mymap的高阶函数,mymap接收两个参数值,第一个函数(x:Int)=>3*x,第二个为Int型数据。在mymap函数体内将第一个参数作用于第二个参数。
2)笔试部分(算法)
(1)给定两个只含有0和1字符的字符串,实现二进制加法。如:
String str1 = "101"
String str2 = "11"
实现binarySum(String s1,String s2),使得输入以上字符时返回字符串"1000"。
(2)给定一个整型数组array(没有重复元素),再给出一个目标值target,数组array中有两个元素的加和等于target,要求返回这两个元素的下标。如array = {1,2,4,6,3} target = 8,则返回[1,3]。
3)笔试部分(大数据相关)
(1)现有一张Hive表,表里面有两个字段uuid和ts,分隔符为\001分别表示用户唯一标识和用户来访的时间戳。
有如下需求
(a)要求计算每个用户的最后一次来访时间,用MapReduce实现(写完整的代码)
(b)你所写的代码有没有优化的空间?如果有,请写出优化方法。
(2)用Spark实现WordCount。
(3)Spark-Streaming+Kafka实现实时计算这种方案中通过什么方式保证数据的准确性?
(4)分别列举Hadoop和Spark中的文件缓存方式。
(5)HDFS的一致性是指什么?有几种语义?
(6)基于Yarn的推测执行是怎么实现的?描述其大致算法。
QUESTION NO:1
- publicclass Test1{
- public static void changeStr(String str){
- str="welcome";
- }
- public static void main(String[] args)(
- String str="1234";
- changeStr(str);
- System. out. println(str);
- }
- }
输出结果:
QUESTION NO:2
- public class Test2{
- static boolean foo(char c){
- System out print(c);
- return true;
- }
- public static void main(String[] argv){
- int i=0;
- for(foo('A');foo('B') &&(i< 2);foo('C')){
- i++;
- foo('D');
输出结果:
1、一面(学长面)
1)技术部分
(1)HashMap如何遍历。
(2)SparkStreaming窗口操作的3个时段设定分别是什么,问到倍数这块
2)项目部分
(1)讲了一下推荐项目怎么回事
(2)因为是招数仓这块的,所以三轮数仓都问了
3)算法部分
(1)快排或冒泡排序,我讲的是快排
4)情景部分
(1)设定了一个情景,手写SQL,比较简单吧
2、二面
1)技术部分
(1)flatMap和map的区别
(2)A表joinB表,用MR是如何处理的
(3)Yarn的资源调度
(4)Hbase有put方法,那如何批量put数据进hbase里,用什么方法
(5)NameNode的HA,一台挂掉之后,另一台会丢失数据吗,挂掉之前有一部分日志为更新
(6)问了Kafka的消费速度
(7)Kafka分区
(8)问了HDFS的块你们设置的是多大
(9)问了Spark版本,说一直是这个版本吗
(10)Sparksql什么时候不能读到Hive的数据
2)项目部分
(1)你们数仓之间的数据是怎么调度的
3)情景部分
(1)设置了一个情景,让写SQL
3、三面
项目组负责人
(1)要招数仓和算法的,所以主要问了数仓。
(2)数仓的DM为何不由数据组来设计封装,你觉得是数据组封装有什么不妥吗
(3)HBase里面你们都存了具体哪些业务数据,他说这些数据我觉得存到redis或者mysql中也行呀,为什么要非要用HBase,然后问了我你认为多少的数据量适合用HBase
(4)结合你这个HBase里存储的数据,说一下你们的rowkey怎么设计的
1)技术部分
(1)对Hadoop各组件之间通信RPC协议了解
(2)Hadoop的读数据流程
(3)传输过程中DataNode挂掉怎么办
(4)HBase源码
(5)HBase构建二级索引如何保证索引与数据的一致
(6)JVM架构,堆内存,GC算法,问平时会不会调GC算法
(7)-Xms和-Xmx设置一个和设置两个而且两个设置的都是一样有什么区别吗
(8)查看当前Java内存各个代的内存比例
(9)查看线程堆栈的命令
(10)查看Java进程里边对象的大小,
(11)堆内存泄露怎么看,除了Dump出来用MAT还有什么简单的方法
(12)Java进程用户反馈请求服务很慢,但是代码不是你开发的你怎么排查问题,
多线程,实现线程同步的方法
2)算法部分
(1)问对数据结构和算法了解吗,堆栈和链表什么的
一面:
sparkstreaming 用了哪些算子
flatmap与map的区别
dwd 的是啥 dws s是啥, dwt t是什么
你们获取kafka Offset的API是什么
HBase创建表时,rowkey的设计
ODS层干了什么
yarn工作机制说一下
kylin怎么用的
superset怎么用的
说一下JVM重用的参数
你们合并文件用的哪个参数 merge.mapred.files
Hive使用时遇到过什么困难
sparkstream如果进行精确一次性消费
1)笔试部分
(1)列举几种数据倾斜的情况,并解释为什么会倾斜,以及如何解决?
(2)解释一下SQL运行步骤,是否有优化空间,如果有,如何优化:
SELECT a.id, b.name FROM a LEFT OUTER JOIN b ON a.id = b.id WHERE a.dt = ‘2016-01-01’ AND b.dt = ‘2016-01-01’;
(3)已知表a是一张内部表,如何将它转换成外部表?请写出相应的Hive语句
(4)用select做查询是,用哪个函数给值喂null的数据设置默认值?
(5)Hive中,建的表为压缩表,但是输入文件为非压缩格式,会产生怎样的现象或者结果?
(6)订单详情表ord_det(order_id订单号,sku_id商品编号,sale_qtty销售数量,dt日期分区)任务计算2016年1月1日商品销量的Top100,并按销量降级排序
(7)某日志的格式如下:
pin|-|request_tm|-url|-|sku_id|-|amount
分隔符为‘|-|’,
数据样例为:
张三|-|q2013-11-23 11:59:30|-|www.jd.com|-|100023|-|110.15
假设本地数据文件为sample.txt,先将其导入到hive的test库的表t_sample中,并计算每个用户的总消费金额,写出详细过程包括表结构
(8)test.log日志中内容如下左列所示,使用awk输出右列4行数据
10-3-jd-dv
2-4-jd-dv 10-4-jd-dv
5-7-pv-click 5-7-pv-click
36-24-pv-uv
37-24-pv-uv 37-24-pv-uv
24-3-uv-mq 24-3-uv-mq
(9)Storm的分组策略有哪些?
1)笔试部分
(1)HiveSQL语句中select from where group by having order by的执行顺序
(2)Hive中MapJoin的原理和实际应用
(3)写出你常用的HDFS命令
(4)使用Linux命令查询file1里面空行的所在行号
(5)有文件chengji.txt内容如下:
张三 40
李四 50
王五 60
请使用Linux命令计算第二列的和并输出
(6)在Linux环境下有文件/home/dim_city.txt如何加载dim_city外部表中,HDFS路径/user/dim/dim_city
(7)请列出正常工作的hadoop集群中hadoop都分别需要启动哪些进程,他们的作用分别是什么,尽可能写的全面些
(8)数据仓库的整体架构是什么,其中最重要的是哪个环节
1)笔试部分(京东金融)
(1)数据按照业务含义可以分为时点数和时期数,在一般情况下,下列哪些数据属于时点数?
A.昨天的订单量 B.昨天的库存量
C.昨天的点击量 D.昨天的访问次数
(2)About hadoop map/reduce,The right answer is?
A.reduce的数量必须大于零
B.reduce总是在所有map完成之后再执行
C.combiner过程实际也是reduce 过程
D.Mapper的数量由输入的文件个数决定
(3)Hive中的元数据不包括?
A.表的名字 B.表的外键
C.表的列 D.分区及其属性
(4)Hive中如何限制查询条数?
A、TOP B、limit C、rownum D、only
(5)关于hivesql以下说法正确的是:
A.cluster by不会对字段进行排序
B order by只保证每个reducer的输出有序,不保证全局有序
C sortby是全局有序
D distribute by制定规则字段,将相同组数据分发到同一reducer
(6)下面SQL的运行结果是什么?
Select a.id,b.name from (select id from table_id) a left semi join (select id, name from table_nm) b on a.id=b.id
table_id |
id |
1 |
2 |
table_id | |
id | name |
1 | wzb |
A 、(a,ok) B、(2,null) C、(1,ok & & 2,null) D、以上结果均不对
(7)你处理过的最大数据量是多少?处理时是否遇到问题,采取了哪些优化的方案?
(8)列举Hive几种数据倾斜的场景以及解决方案?
1)技术部分
(1)你们Spark哪个版本
(2)SparkStreaming如何和Kafka对接
(3)Kafka消费过的消息如何再消费
(4)Redis版本多少
(5)CDH版本多少
(6)集群怎么部署的
(7)数据倾斜怎么处理
(8)MR和Spark的Shuffle的区别
(9)MR环形数组怎么设置最大能设置多大
(10)Redis分布式锁怎么实现
(11)Rdd和dateset的区别
(12)说说Scala伴生对象
(13)解释Scala的模式匹配
(14)谈谈Scala隐士转换
(15)Yarn的组件说说他们的功能
(16)Spark一个Excutor给多大内存
(17)Spark几种部署模式还有他们的区别
(18)你运行程序是client还是cluster 为什么
(19)说出git的几个常用命名
(20)git如何切换分支
(21)对Hive的理解做过哪些优化
4)算法部分
(1)用Idea写快速排序
5)手写代码部分
(1)手写Spark WordCount
6)项目部分
(1)整个业务数据的流向
7)场景部分
(1)现有两张大表所有字段都得保留不能再过滤了join操作就发生OOM怎么解决
(2)Session日志分析如何求出用户访问的Page路径
(3)三表的join求销量,order——id的统计(记得不了)就是三表join求统计吧
1)一面
(1)HDFS、MR、Yarn的理解
(2)MR的WordCount简单描述
(3)Kafka快的原因,零拷贝的原理
(4)Redis的数据类型
(5)Kafka的isr队列
(6)Spark的运行模式,WordCount的简单描述
(7)基本上是简历的东西
2)二面
基本上和简历无关,问的算法,我不懂,没办法整理
1)京东数科二面
(1)最近一两年内你做过感觉最有趣或者让你记忆深刻的项目,挑一个说一说。我说的是SparkStreaming实时计算(李老师讲的在线教育那个项目,我给稍微改了改成电商项目了)。
(2)有关于Spark、Kafka、MySQL的项目你感觉那个比较熟练一点。我回答我的是对spark比较感兴趣。
(3)做这个项目用的是Spark的哪个版本?
(4)这个版本里用Kafka用的是那种消费方式。
(5)可以简单讲一下direct大概的一个设计套路。
(6)如果说我每隔一百条或者一千条,记录偏移量,如果跑到八百条宕掉了,有可能重复消费,针对receiver优势能不能解决这一点?
(7)如果dsteam方式去拉取Reduce拉取出去,那有多少个线程从Kafka里拖数据?
(8)平时除了用Spark比较多,用Hive也不少,平时会涉及到调参优化方面有哪些?
(9)你能介绍一下Flume的架构或者设计。
(10)用代码实现一个类似于Flink水位线的机制。
(11)有做过依赖调解的工作吗?比如说有没有碰到问题说引用自己一个依赖,但是在别的地方用了一个其他的依赖由于版本不统一,不能兼容该怎么办
(12)最近为什么会想到说换一个工作。(离职原因)
(13)你有什么想问我们的。
1)笔试部分
(1)你可以得到网站访问记录,没条记录有user IP,设计一个程序,要随时能计算出过去5分钟内访问次数最多的1000个IP
(2)简述Paxos协议
(3)编程简单实现一个阻塞队列
(4)简单实现一个LRU算法
(5)有一个5000万的用户文件(user_id,name,age),一个2亿记录的用户看电影的记录文件(user_id,url),根据年龄段观看电影的次数进行排序?
2)技术部分
(1)Java的NIO是否了解
(2)Java多线程(什么wait、notify)
(3)MapReduce的shuffle过程(手画,边画边介绍),reduce是怎么到map端获取数据的(RPC通信是否了解)
(4)一句话介绍MapReduce
(5) Spark做缓存时缓存在哪里
(6)百度不用Spark,只用Hadoop和MapReduce(至少这个部门是这样,这个部门的主要业务是做用户画像),把MapReduce工作的各个阶段过程吃透
(7)是否看过Hadoop源码
(8)Linux系统(常用命令啥的)
(9)除了这些平时还接触或者学习哪些技术
3)项目部分
(1)业务架构
(2)根据项目业务介绍技术
(3)MapReduce数据倾斜和内存溢出怎么办
4)算法部分
(1)手写归并排序
(2)用递归实现斐波那契数列第100项的值(第一项和第二项分别为0和1),手写
(3)算法和数据结构了解到什么程度、知道多少
(4)Java中的数据结构,ArrayList和LinkedList的区别,ArrayList为什么查询快(为什么用数组就快)、LinkedList为什么增删快,哪些Map是线程安全的
5)手写代码部分
(1)手写MapReduce的WordCount(导入的包最好能记住)
6)场景部分
(1)遇到垃圾日志怎么办(假如说有人恶意制造日志,怎么处理。我说的黑名单机制,那个面试官貌似还挺满意)
1)基本信息介绍
(1)百度:视频面试
(2)面试周期:5天
(3)面试次数:6次
(4)面试总时长:3小时
2)百度一面二面(印象中的一些问题):
(1)自定义UDF、UDTF
(2)如何确定计算数据的准确性?
(3)建立数仓的目的
(4)自定义拦截器步骤
(5)SpringMVC
(6)设计网站前后端交互问题
(7)Linux常用命令
3)百度三面(部门负责人):
(1)在没有PM的情况下如何对指标做拆分去分析?
(2)介绍了他们部门的工作内容
4)百度四面hrbp:
(1)介绍工作经历+工作遇到的困难+对所应聘职位的理解+分析指标提出时间和原因+离职原因等问题
5)百度五面业务总裁:
(1)某一天日活下降10%,需要从哪些维度分析,如何分析?不用说技术
6)百度六面Recuriter面:
(1)上家薪资+期望薪资+职级+对数据分析和指标分析的理解+职业规划等问题。
1)基本信息介绍
(1)11月17号度小满金融(原百度金融,A轮公司)
(2)面试地点:西北旺百度科技园旁
(3)面试时长:2个半小时
(4)面试次数:3次
2)一面:
(1)一面中规中距,有手写SQL环节,还有SparkStreaming常用算子解决实际问题。大概1个多小时。
(2)手写SQL考的是:
三个字段: area、year、temperature,统计每个地区的温度最高的对应的年份。
写的用rank函数,一个子查询,险过。
3)二面:
因为面的是架构师,所以二面问的是几个组件的版本号和几个大数据组件的安装过程和配置文件细节,还有HA的几个进程的作用,比较难。大概20分钟
4)三面:
问了自定义UDAF,UDTF,和数仓开放性问题,和三面主管说了毕业时间,并说了未签订劳务合同,他说怎么没签合同呢,太后悔了,最后走的时候说hr可能过不去,给我争取一下。大概30分钟。
强烈推荐度小满金融公司,环境Top5,面试官很厉害。
1)笔试正在上传…重新上传取消转存失败重新上传取消
(1)写出用户表 tb_cuid_1d的 20200401 的次日、次7日留存的具体HQL :一条sql统计出以下指标 (4.1号uv,4.1号在4.2号的留存uv,4.1号在4.8号的留存uv)(一条sql写完)
(2)统计当天不同平台、版本下的uv、pv
(3)解析ext中所有的"type"( lateral view explode)
2)二面:
t_a (uid,os,day),t_b(uid,os,day),15号在t_a,但是不在t_b的用户
ut格式: 机型_app版本_xxx_xxx_厂商, 如 iphone 6s_10.0.0.1_sdk12.1_baidu_iphone:解析 ;12.1
正在上传…重新上传取消转存失败重新上传取消
t_a (uid,os,day)
最近30内,所有用户末次活跃日期
最近30内,所有用户末次活跃日期和倒数第二次的差值
一面:
讲项目
kafka精确一次性
数据量
log日志类型,存的什么数据
spark streaming怎么做的实时
hbase rowkey你是怎么设计的
namenode 重启流程
hdfs读流程
flume拦截器怎么写的
flume结构
两道算法:
窗口求中位数, 说流式处理底层求热点问题常用到
一个树形结构,一个节点可以监听它的父节点和子节点,问最小监听数量
1)技术部分
(1)Spark提交job流程
(2)提交脚本中-jar什么意思
(3)Excutor怎么获取Task
(4)详解Hadoop的WordCount
(5)Spark做过哪些优化,(优化说完会问你为什么?原理是什么?)
(6)Spark内存管理
2)算法部分
(1)单向链表反转
(2)实现堆栈push Pop Min 复杂度0(1)
(3)实现一个队列,男女均衡最长的队列 复杂度0(N)
阿里三面
第一题,亿级的交易订单量,每笔都有金额,快速找出top1000,要求不是简单的排序然后求出top1000,代码要有健壮性;提示注意是top1000不是top10。Map和Reduce分别做Treemap
第二题:有两个约1000万行记录的4到5G文件,JVM只有32M,在内存不溢出的情况下,找出相似的条数并打印出来。布隆过滤器
第三题,有一个双十一的天猫场景,我要做实时和离线两种分析方向,从数据建模、计算性能、元数据管理、数据质量上讲一讲基本架构设计成什么样子。
阿里四面
第一题,岛上有100个囚犯,他们都是蓝眼睛,但是他们都只能看到别人眼睛的颜色,并不能知道自己的眼睛颜色,而且他们之间不能去谈论眼睛颜色的话题,规定每天晚上都可以有一个人去找守卫说出自己的眼睛颜色,如果错了被杀死,如果对了被释放。但是大家在没有十足的把握前都不敢去找守卫,有一天,一个医生对他们说你们之中至少有一个蓝眼睛,然后N天,这些人都获救了,为什么?这句话对他们有什么影响?
第二题,有100层楼梯,从其中一层摔下鸡蛋的时候鸡蛋会碎,并且次层之上的都会碎,次层之下的都不会碎,如果你有一个鸡蛋、两个鸡蛋、三个鸡蛋,你会怎么去找出这个楼层,最多要试多少次
1)自我介绍
2)技术部分
(1)对未来的职业规划是怎样的?
(2)数仓的流程?你所做的事情?
(3)能讲一下做DW层的案例吗?如何建模的?
(4)讲一下交易的例子吧?
(5)做交易的话模型怎么设计的?
(6)物流的信息,链路的跟踪在不在你的交易表里边?
(7)退款的数据放在哪个表里?
(8)数仓的模型 是怎么建模的?
(9)记录交易的,整体的链路,到底设计了几张表?
(10)拉链表的原理?
(11)拉链表整合的方式?
(12)你在之前的公司遇到的痛点有哪些?(我讲的数据倾斜)
(13)数据倾斜怎么解决的啊?
(14)Join的等倾斜,Join的key,关联键,如果倾斜的话,能直接打散,如果Map端解决不了呢?Mapjoin解决不了怎么办?两个都是大表怎么解决数据倾斜?
(15)MR原理?
(16)Map端做的最重要的事情是什么?
(17)有没有其他你特别擅长的?
(18)怎么提前你SQL写的特别好呢?
(19)建索引要注意哪些事情?
(20)你有啥要问我的吗?
1)笔试部分
(1)有一表名t_sh_mtt_netdisk_log,从表名可以看出该表是什么业务的,是什么周期粒度的表。
(2)怎么查看表结构,表创建语句?怎么查看表有哪些分区?怎么查看分区对应hdfs路径?怎么计算某个分区的数据量大小?怎么计算某个分区的文件总数?
(3)有一hive sql,怎么计算这个sql会产生多少个map数?
(4)怎么查看hive有什么自带函数?怎么查看函数的详细信息?
(5)Hive支持哪些基木数据类型?
(6)请指出下面两个语句读取分区ds数据的不同
Select * from t where ds=20150101 and province='gd' or province='ex'
Select x fromt where ds 20150101 and(province='gd' or province='ex')
(7)将字符串"keyl=valuel&key2=value2...keyn=valuen"进行分割放到一个字段里面,可以查出任意一个keyx对应的valuex值。请写出查询语句,并计算总共有多少个key值。
(8)用一个字符串比如"alblc"来测试某个函数比如split(用|分隔符将字符串进行分割)的语句
(9)a表和b表内连接,a表为小表,只有2000行记录
select a.*from a Join b on a.key=b.key
可以进行怎样的优化
(10)a表left join b表,b表为小衣,可以进行怎样优化?
scleet a.*from a left join Join b ona.key=b.key
如果a为小表,可以怎样优化?
(11)请指出下面sql语句的区别
select a.* from a left Join b on a.key = b.key and a.ds=xxx and b.ds=xxx
sclect a.* from a lef Join b on a.key = b.key and b.ds=xxx
select a.* from a lef Join b on a.key = b.key and b.ds=xxx where a.ds=xxx
Select a.* from a left Join b on a.key = b.key where a.ds=xxx and b.ds=xxx
(12)多表连按的写法:a,.b,c三个表内连接,连接字段都是key,怎样写连接语句?
(13)两大表连接,发生了数据倾斜,有几个reduce无法完成,怎么查找发生数据领斜的原因?应该怎样优化?
语句:select t1.*,nvl(t2.x,1) from t1 left join t2 on t1.guid=t2.guid
(14)两大表连接,发生了数据倾斜。有一个reduce无法完成,检直发现t1中guid="的记录有很多,其他guid都不重复,这条语句该怎样优化?
语句:select t1.*,nvl(t2.x,1) from t1 left join t2 on t1.guid = t2.guid
(15)如何用hive q!实现sqL中的exist/in 子句
mysql语句如下:
SEL ECT a* FROM a where a.key in(select dstinct key from b where key like ‘filter%’)
(16)sort by、distribute by、cluster by 和 order by 区别
注:可参考数据工厂的“帮助中心》集群hive》hive使用优化》hive使用注意事项”
1)笔试题
用HiveSQL实现
(1)全量用户登员日志表t_login_all,字段信息ftime(登录日期)、openid(登录帐号)新增用户登录日志表t_login_new,字段信息ftime(登录日期)、openid(登录帐号)求每天新增用户次日、7天、30天留存率。
(说明:7天留存是指当天有登录且第7天还登录的用户)
(2)消息流水表t_chat all,字段信息:
Ftime(日期)、send_user id(发消息用户id)、receive.user id(接收消息用户id)、chat id(消息id)、send.time(发消息时间)
用户登录流水日志表t_login_all,字段信息:
Ftime(日期)、user_id(用户id)、login_id(登录id)、login_loc(登录区服)、login_time(登录时间)
求:每天有收发消息用户最近登录时间、登录区服,输出ftime,user_id,login_loc,login_time
用Spark core实现,写Scala脚本
1、reduceByKey()、groupByKey()有什么区别?
2、DataFrame和RDD有什么区别?
3、使用累加器,对数组Array(1,2,3,4)每个元素实现累加操作,最后打印输出求和结果。
4、现有文件file.txt,文件格式如下
Order_id,user_id,payment,productid
1、1768,50,155
2、1218,600,211
3、2239,788,242
4、3101,288,599
5、4899,25,230
6、2311,890,981
。。。。。。
求Top10个payment字段的值
1)技术部分
(1)我看你上面写了你会Spark,那你用Spark写一下刚刚那道题的代码(第6题),不能用Spark SQL
(2)我看你上面有写到熟悉Hive原理和优化,你说一下怎么优化
(3)优化有说到语句优化,然后又说回到pv和uv那个问题,假如说让你优化你怎么优化(我代码里面有count(distinct id) uv,)
(4)问了一些Kafka的,我只记得一点点,问我数据会不会重复消费,什么情况下会重复消费
(5)在Hive执行语句的时候如果很慢,什么原因造成
我有提到数据倾斜的问题,他又问怎么解决数据倾斜
2)项目部分
(1)让你挑一个比较有亮点的项目详细说
(2)你负责了什么,数仓中统计了哪些指标,
(3)刚刚听你说项目里面有提到分层,如果我要你求每天商品的pv,uv,从ods层到dm层它的具体流向,各层都统计了什么(后来让写求pv,uv的sql语句)
3)场景部分
(1)有一个分区表,表名T,字段qq,age,按天分区,让写出创建表的语句
(2)刚刚的分区表,求20200221这个分区中,年龄第N大的qq号列表
(3)有一个表,两个字段,分别是qqa和qqb,数据如下:
12,34
12,56
12,78
34,56
34,12
找出所有互相关注的qq对
4)手写部分
(1)三个字段,timestamp,user_id,product_id,让求pv最大的商品,写了之后又叫用Scala代码写一遍,然后又问,假如说只让你求pv数大于100的top3呢,代码又怎么写
1)技术部分
(1)你们数仓用什么建模方法,说出常见的建模方法?
(2)维度建模有什么好处? 为什么选择这个?比如最后业务需求要增加一个维度,我们需要做什么工作?
(3)怎么判断一个需求能不能实现,你们的判断标准是什么?需求变更要做什么
(4)增加一个维度后发现查询的速度变得非常慢,是什么原因导致的?
(5)你们ADS层的数据量每天的数据量有多大?ADS层再MySQL中的表是怎么创建的?有什么注意事项?索引怎么创建的?
(6)你知道Spark的宽窄依赖吗? 有没有把宽依赖转化为窄依赖的例子?
(7)Spark参数调优做了些什么 ?
2)算法部分
(1)一个list [1,5,5,7,9] 去重,并计算时间空间复杂度
(2)单链表的反转
1)技术部分
(1)WordCount的实现过程
(2)MR与Spark的区别
(3)Spark在Client与在集群运行的区别
(3)相同的SQL在HiveSql与SparkSQL的实现中,为什么Spark比Hadoop快
(4)自定义UDF
(5)设计HBase表需要注意的点
(6)HBase的hlog
(7)数据同样存在HDFS,为什么HBase支持在线查询
(8)数据从Hive中用SparkSql进行操作有遇到什么问题?类似兼容性的问题。
(9)SparkStream与Strom,Flink与什么区别
(10)有三个map,一个reduce来做top10,哪种方法最优。数据量特别大。
2)项目的架构
(1)数据仓库的模型设计
(2)数据仓库的数据清洗
(3)业务建模、数据分析方法。
(4)数据仓库是怎么设计的
(5)数仓规范设计哪些方面(字段、维度,存储压缩、数据保留机制)
(6)数仓质量怎么监控(数据质量管理系统,主键唯一、非空、数据波动)
(7)数仓主题分哪些(按照公司业务归类:申请单、客户信息、合同信息、放款、还款、余额、逾期等)
(8)数仓拉链表的原理
(9)有没有遇到数据倾斜的问题(场景、解决方式)
(10)数仓重点调度任务的保障方式(调度系统优先级)
(11)数仓任务报错和监控(调度系统捕捉错误,电话短信告之值班人员)
1)技术部分
(1)自我介绍
(2)写map-reduce,两份数据,一份是设备id+用户id,一份是设备id+点击的广告+点击时间,找出每个用户id每天10条最新的广告点击记录
(3)说下多线程和多进程
(4)fork命令
2)算法部分
(1)hashmap和map,hash实现原理(hashmap基于哈希,查找O(1);map基于树,查找O(logn);hash实现采用数组,偏移地址使得查找满足O(1),无论是再哈希还是链表法解决冲突,都需要存储key和value)
(1)MySQL引擎是什么,常用的是哪个innodb,知道原理吗
(2)MySQL优化,怎么建索引?选择合适的字段属性。对于某些文本字段可以设成ENUM类型(MySQL中被当做数值型数据来处理)。使用连接join代替子查询 。使用索引:innodb支持哈希索引、b+树索引、全文索引。
BTree和B+Tree
(3)手写sql...
user_id login_date
1 20200325
查询出用户连续三天登录的用户
表A 字段a 值1234
表B 字段b 值11235
Join 输出的结果
Left join 输出的结果
(4)Sqoop导入数据是增量怎么实现
(5)Flume事务实现
(6)Kafka消费者角度考虑是拉取数据还是推送数据
(7)Kafka中的数据是有序的吗
(8)Kafka数据推送失败怎么处理
(9)Kafka保证生产者精准一次
(10)没有接受到ack才会出现声明情况
(11)Kafka数据重复怎么处理
(12)Spark Streaming怎么里面实现精准一次消费
(13)如果offset没有发送成功数据会怎样
(14)Hive的优化,项目中怎么优化的
(15)然后就问了用MR怎么实现join,手写代码
(16)数据倾斜怎么处理的,
(17)碰到过oom情况吗,什么原因导致的,怎么处理的
(18)Hbase有那些组件,
(19)什么场景会用到Hbase
(20)Hbase的读写流程,大概说一下
(21)Spark,任务提交的流程,
(22)Spark的两种核心Shuffle,未优化的和优化的
(23)常用的数据结构都有哪些,
怎么实现一个list,
怎么实现一个map
map一般什么场景使用
用过树这种结构吗,什么场景用到的
(24)算法
字符串中第一个出现三次且仅出现三次
反转一个链表
两个链表第一次交叉的节点,
(25)用Cannal监控mysql之后,Scala怎么通过SparkStreaming去消费的
(26)你们这个项目spark计算完之后存HBase怎么设计的
(27)HBase你们在项目中怎么设计rowkey的
一面
(1)算法:给2个有序数组,合并成一个有序数组
延伸:给n个有序数组,合并成一个有序数组
(2)sql:
班级 学号 科目 分数
求某个班级总分最高的前五名
其他:
(3)精准一次性消费
(4)数据倾斜
二面
(1)主要问项目中是否丢数据,怎么做的数据治理,监控,问了一个算法,一个SQL
(2)算法是有序数组查找目标值,我的做法是二分查找
(3)sql是给用户的观看视频的时长,统计观看时间在0-1分钟的用户数,1-10分钟的用户数
三面:
(1)选型为什么是spark而不是Flink,有哪些优缺点(我项目上写的spark)
(2)HBASE为什么快(列式存储,内存,lsm树)
(3)消费不到kafka数据怎么办
(4)kafka怎么监控,重分区
(5)g1回收器和cms区别
(6)jvm调整过没有
1.数据仓库的基础理论:建模,分层 |
2.flink容错机制 |
3.spark调优,数据倾斜的处理方式 |
4.sql编程考察 |
5.算法:聚类kmeans |
6.二叉树算法 |
7.Java 线程问题,包括线程安全,锁,和线程池,问得很细。 |
8.Hbasse和mysql区别和存储原理 |
9.kafka的底层原理,kafka如何保证全局消费数据有序 |
10.redis底层原理,如何预估数据量 |
11.yarn底层原理,执行流程和,yarn底层使用的算法 |
12.算法基础建模有哪些,如何进行数据挖掘 |
13.链表反转排序 leetcode原题 |
14.sql 连续日期活跃用户 |
15.hive udf udaf udtf spark |
16.任务提交过程 |
17.回文函数 |
18.hive 数据倾斜 |
19.redis 跳表 |
20.spring ioc |
21.spring 需要单例设置的参数 |
22.线程池几个配置参数含义 |
23.mysql 事务 a b 客户端提交事务处理 |
24.storm 实时 |
25.java 并发包 |
26.hive 如何转mr |
27.线程 可重入理解 |
28.算法题 一个LRU 一个深度优先搜索 |
29.flink 的watermark shardGroup的概念 |
30.kafka如何保证消息的有序行高可用 |
31.数据倾斜如何处理 |
32.flink watermark 和barries 和checkpoint |
33.flink和spark的区别 |
34.jvm常见的垃圾回收算法 |
35.heap怎么分带的 |
36.kafka调优 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。