数据分析主要侧重产品sence与Hive使用,也会有少量数据结构、大数据架构与算法相关内容(会放至其它相应篇中)。以下试题为日常整理的通用高频面经,包含题目,答案与参考文章,欢迎纠正与补充。
1.Mysql中索引是什么?建立索引的目的?
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。MyISAM和InnoDB是MySQL最常用的两个存储引擎,MyISAM和InnoDB的索引均采用B+树数据结构。
不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。
2.sql语句执行顺序?
(1) from (先抓取from后表生成虚拟表)
(2) on(应用on筛选器,筛选满足on条件的行)
(3) join (分outer left right将筛选行添加进来)
(4) where (最终过滤数据)
(5) group by (开始使用select中的别名,后面的语句中都可以使用)
(6) avg,sum....(通过聚合函数生成超组)
(7) having (能应用到已分组数据的筛选器)
(8) select (筛选上述数据select子句处理出来的列)
(9) distinct (移除相同行)
(10) order by (返回排序后)
(11) limit (应用top选项)
3.数据库与数据仓库的区别?
-
简单理解下数据仓库是多个数据库以一种方式组织起来
-
数据库强调范式,尽可能减少冗余
-
数据仓库强调查询分析的速度,优化读取操作,主要目的是快速做大量数据的查询
-
数据仓库定期写入新数据,但不覆盖原有数据,而是给数据加上时间戳标签
-
数据库采用行存储,数据仓库一般采用列存储
-
数据仓库的特征是面向主题、集成、相对稳定、反映历史变化,存储数历史数据;数据库是面向事务的,存储在线交易数据
-
数据仓库的两个基本元素是维表和事实表,维是看待问题的角度,比如时间、部门等,事实表放着要查询的数据
4.OLTP和OLAP的区别?
联机分析处理 (OLAP) 的概念最早是由关系数据库之父E.F.Codd于1993年提出的,他同时提出了关于OLAP的12条准则。OLAP的提出引起了很大的反响,OLAP作为一类产品同联机事务处理 (OLTP) 明显区分开来。
当今的数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。
OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
5.行存储和列存储的区别?
-
行存储:传统数据库的存储方式,同一张表内的数据放在一起,插入更新很快。缺点是每次查询即使只涉及几列,也要把所有数据读取
-
列存储:OLAP等情况下,将数据按照列存储会更高效,每一列都可以成为索引,投影很高效。缺点是查询是选择完成时,需要对选择的列进行重新组装。
-
当你的核心业务是 OLTP 时,一个行式数据库,再加上优化操作,可能是个最好的选择。
-
当你的核心业务是 OLAP 时,一个列式数据库,绝对是更好的选择。
6.Hive执行流程?
(1)Hive 将 HQL 转换成一组操作符Operator,比如GroupByOperator, JoinOperator 等
(2)操作符 Operator 是 Hive 的最小处理单元
(3)每个操作符代表一个 HDFS 操作或者 MapReduce 作业
(4)Hive 通过 ExecMapper 和 ExecReducer 执行 MapReduce 程序,执行模式有本地模式和分布式两种模式
简要概括hiveSQL转换成MapReduce的执行计划包括如下几个步骤:HiveSQL ->AST(抽象语法树) -> QB(查询块) ->OperatorTree(操作树)->优化后的操作树->mapreduce任务树->优化后的mapreduce任务树
7.Hive HDFS HBase区别?
Hive:Hive不支持更改数据的操作,Hive基于数据仓库,提供静态数据的动态查询。其使用类SQL语言,底层经过编译转为MapReduce程序,在Hadoop上运行,数据存储在HDFS上。
HDFS:HDFS是GFS的一种实现,他的完整名字是分布式文件系统,类似于FAT32,NTFS,是一种文件格式,是底层的。Hive与Hbase的数据一般都存储在HDFS上。Hadoop HDFS为他们提供了高可靠性的底层存储支持。
Hbase:Hbase是Hadoop database,即Hadoop数据库。它是一个适合于非结构化数据存储的数据库,HBase基于列的而不是基于行的模式。
8.数仓中ODS、DW、DM概念及区别?
-
ODS(Operational Data Store) 操作性数据,是作为数据库到数据仓库的一种过渡,ODS的数据结构一般与数据来源保持一致,便于减少ETL的工作复杂性,而且ODS的数据周期一般比较短。ODS的数据最终流入DW
-
DW (Data Warehouse)数据仓库,是数据的归宿,这里保持这所有的从ODS到来的数据,并长期报错,而且这些数据不会被修改。
-
DM(Data Mart) 数据集市,为了特定的应用目的或应用范围,而从数据仓库中独立出来的一部分数据,也可称为部门数据或主题数据。面向应用。
9.窗口函数是什么?实现原理?
窗口函数又名开窗函数,属于分析函数的一种。用于解决复杂报表统计需求的功能强大的函数。窗口函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行。
开窗函数指定了分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化。下面列举一些常用窗口函数:
-
获取数据排名的:ROW_NUMBER() RAND() DEBSE_RANK() PERCENT_RANK()
-
获取分组内的第一名或者最后一名等:FIRST_VALUE() LAST_VALUE() LEAD() LAG()
-
累计分布:vCUME_DIST() NTH_VALUE() NTILE()
Hive中窗口函数的实现,主要借助于一个叫做 Windowing-TableFunction 的 Partitioned Table FunctionPTF(PTF)。
10.数仓中维度建模含义?有哪几种模式?
维度建模(dimensional modeling)是专门用于分析型数据库、数据仓库、数据集市建模的方法。 它本身属于一种关系建模方法,包含了基本的两个概念:维度表(dimension, 表示对分析主题所属类型的描述。)和事实表(fact table,表示对分析主题的度量)。
维度建模包含三种模式:
-
星形模式(星型模式的核心是一个大的中心表(事实表),一组小的附属表(维表))
-
雪花模式(雪花模式是星型模式的扩展,其中某些维表被规范化,进一步分解到附加表(维表)中)
-
星座模式(可以看做星型模式的汇集)
11.Hive数据倾斜表现、原因及处理?
表现:由于数据分布不均匀,造成数据大量的集中到一点,造成数据热点。任务进度长时间维持在 99%或者 100%的附近,查看任务监控页面,发现只有少量 reduce 子任务未完成,因为其处理的数据量和其他的 reduce 差异过大。单一 reduce 处理的记录数和平均记录数相差太大,通常达到好几倍之多,最长时间远大于平均时长。
原因:
-
key 分布不均匀
-
业务数据本身的特性
-
建表考虑不周全
-
某些 HQL 语句本身就存在数据倾斜
处理:
-
大表和小表关联时:将小表(关联键记录少的表)依次放到前面,这样可以触发reduce端更少的操作次数,减少运行时间。 同时可以使用Map Join让小的维度表缓存到内存。
-
大表和大表的关联:这种情况可以对异常值赋一个随机值来分散key,均匀分配给多个reduce去执行。当key值都是有效值时,解决办法为设置以下几个参数:
-
set hive.exec.reducers.bytes.per.reducer = 1000000000
-
set hive.optimize.skewjoin = true;
-
set hive.skewjoin.key = skew_key_threshold (default = 100000)等
-
-
因group by造成数据倾斜:hive.map.aggr=true (默认true)这个配置项代表是否在map端进行聚合,相当于Combiner。
-
Reduce个数太少:set mapred.reduce.tasks=800;
-
当HQL中包含count(distinct )时:使用sum...group by代替
-
set mapred.reduce.tasks=800
12.用Python怎么进行数据分析?
-
数据获取:如果采用现有数据集,则直接用内置函数或第三方库读取;如果没有现成数据,运用requests库和bs4库等进行数据采集。
-
数据清洗:利用numpy、pandas等库进行缺失值、异常值处理。
-
数据探索:利用pandas、matplotlib等库进行数据描述统计分析及可视化。
-
特征工程:构建指标体系,采用sklearn等库中聚类降维与特征筛选方法进行特征工程构建。
-
数据建模:利用传统统计学模型(statsmodels库)或者机器学习模型(sklearn、keras、tensorflow、pytorch等库)进行建模并评估最终得出结果。
13.数据缺失值处理办法
-
删除样本或删除字段
-
用中位数、平均值、众数等填充
-
插补:同类均值插补、多重插补、极大似然估计
-
用其它字段构建模型,预测该字段的值,从而填充缺失值(注意:如果该字段也是用于预测模型中作为特征,那么用其它字段建模填充缺失值的方式,并没有给最终的预测模型引入新信息)
-
onehot,将缺失值也认为一种取值
-
压缩感知及矩阵补全
14.Excel中数据透视表,vlookup?
数据透视表:可以做快速数据分析、快速合并多个分表、快速规范数据、制作各种交互式图表。
参考链接:https://www.zhihu.com/question/21364170
vlookup函数:VLOOKUP函数是Excel中的一个纵向查找函数,它与LOOKUP函数和HLOOKUP函数属于一类函数,在工作中都有广泛应用,例如可以用来核对数据,多个表格之间快速导入数据等函数功能。功能是按列查找,最终返回该列所需查询序列所对应的值;与之对应的HLOOKUP是按行查找的。
15.AB测试与假设检验?
AB测试:为同一个目标,设计两种方案,将两种方案随机投放市场中,让组成成分相同(相似)用户去随机体验两种方案之一,根据观测结果,判断哪个方案效果更好,结果可以通过CTR或者下单率来衡量。
假设检验:假设检验是先对总体参数提出一个假设值,然后利用样本信息判断这一假设是否成立,是传统统计学的重要内容,主要有卡方检验、t检验、F检验等,在AB测试中扮演显著性检验的角色。
16.TO C指标体系?
指标是量化衡量标准、衡量目标的单位或方法,例如对电商或内容数据分析来说,最常见的指标就是UV和PV,而针对APP来说,最常见的就是DAU,MAU。
核心指标:休眠用户、潜在用户、活跃用户、流失用户、进入活跃用户、今日注册用户、今日访问用户、今日下单用户
流量指标:PV、UV
转化率&留存指标:总体转化率、百度转化率等,次日留存、三日留存、七日留存等
内容质量指标:播放量、刷新量、展现量、分发量、点击量、播放完成量、下载量
商品运营指标:商品分享类指标、商品复购类指标、商品收藏购买指标
17.如果次留下降了 5%该怎么分析?
-
首先采用“两层模型”分析:对用户进行细分,包括新老、渠道、活动、画像等多个维度,然后分别计算每个维度下不同用户的次日留存率。通过这种方法定位到导致留存率下降的用户群体是谁
-
对于目标群体次日留存下降问题,具体情况具体分析。具体分析可以采用“内部-外部”因素考虑,内部因素分为获客(渠道质量低、活动获取非目标用户)、满足需求(新功能改动引发某类用户不满)、提活手段(签到等提活手段没打成目标、产品自然使用周期低导致上次获得的大量用户短期内不需要再使用等);外部因素采用PEST分析,政治(政策影响)、经济(短期内主要是竞争环境,如对竞争对手的活动)、社会(舆论压力、用户生活方式变化、消费心理变化、价值观变化等偏好变化)、技术(创新解决方案的出现、分销渠道变化等)
18.贝叶斯公式复述并解释应用场景
1)P(A|B) = P(B|A)*P(A) / P(B)
2)如搜索query纠错,设A为正确的词,B为输入的词,那么:
-
P(A|B)表示输入词B实际为A的概率
-
P(B|A)表示词A错输为B的概率,可以根据AB的相似度计算(如编辑距离)
-
P(A)是词A出现的频率,统计获得
-
P(B)对于所有候选的A都一样,所以可以省去
19.CPA、CPS、CPM、CPT、CPC 是什么?
CPA(Cost Per Action) 每行动成本。CPA是一种按广告投放实际效果计价方式的广告,即按回应的有效问卷或注册来计费,而不限广告投放量。电子邮件营销(EDM)现在有很多都是CPA的方式在进行。
CPS(Cost Per Sales):以实际销售产品数量来换算广告刊登金额。CPS是一种以实际销售产品数量来计算广告费用的广告,这种广告更多的适合购物类、导购类、网址导航类的网站,需要精准的流量才能带来转化。
CPM(Cost Per Mille) 每千人成本。CPM是一种展示付费广告,只要展示了广告主的广告内容,广告主就为此付费。
CPT(Cost Per Time) 每时间段成本。CPT是一种以时间来计费的广告,国内很多的网站都是按照“一个星期多少钱”这种固定收费模式来收费。
CPC(Cost Per Click) 每点击成本。CPC是一种点击付费广告,根据广告被点击的次数收费。如关键词广告一般采用这种定价模式,比较典型的有Google广告联盟的AdSense for Content和百度联盟的百度竞价广告。
20.AARRR模型是什么?
AARRR分别代表了五个单词,又分别对应了产品生命周期中的五个阶段:
-
获取(Acquisition):用户如何发现(并来到)你的产品?
-
激活(Activation):用户的第一次使用体验如何?
-
留存(Retention):用户是否还会回到产品(重复使用)?
-
收入(Revenue):产品怎样(通过用户)赚钱?
-
传播(Refer):用户是否愿意告诉其他用户?
写在最后
20道题目虽然不多,但都是笔者在收集周边50位同学面试经验所得高频试题,考察概率极高,认真复习,预祝早日上岸!更多资源关注公众号【大数据之眸】自取~