数据分析岗笔面经及基础总结

前言

本文会收录我个人找工作查阅的资料以及2021届校招面经,并尽可能地记录当时的回答,答案可能有诸多错误和不足之处,欢迎大家指正、交流和学习!

主要面向数据分析岗位,但因为我同时在投递算法岗位,所以本文也会包含部分算法相关的笔面经和基础知识。

基础知识总结

在准备面经前有些基础知识是必不可少的,面经只是平时积累的冰山一角,本文尽量写出我笔面试过程中遇到的重点难点(每个人的知识储备不同,见仁见智)。千里之行,积于跬步!

数据结构

二叉树

  • 前序遍历:根节点 → \rightarrow 左子树 → \rightarrow 右子树
  • 中序遍历:左子树 → \rightarrow 根节点 → \rightarrow 右子树
  • 后序遍历:左子树 → \rightarrow 右子树 → \rightarrow 根节点
  • 层序遍历:按层次遍历

实例:
在这里插入图片描述

  • 前序遍历:ABDEGHCF
  • 中序遍历:DBGEHACF
  • 后序遍历:DGHEBFCA
  • 层次遍历:ABCDEFGH

前中后序互求技巧:

  • 求后序:前序首位为根节点;中序根节点左右为两个子树
  • 求中序:不唯一;头部为后续遍历的头部,尾部为前序遍历的尾部

脚本语言

shell

  • export: 设置环境变量
  • echo:查看是否成功
  • env:显示所有的环境变量
  • cat:用于连接文件并打印到标准输出设备上(文本输出命令)
  • set:显示所有本地定义的Shell变量
  • unset:清除环境变量
  • touch:用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
  • `:执行反引号内语句并返还结果;如 a= `touch /test`
  • 在shell中 ‘>’ 为创建,’>>’ 为追加。当文件不存在时,’>'与‘>>’都会默认创建。

逻辑判断:

  • 与:-a
  • 或:-o
  • 非:!

改变文件权限:

  • Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。r 表示可读取(read),w 表示可写入(write),x 表示可执行(execute);对应数字r=4,w=2,x=1。

  • 使用chmod命令改变文件权限:chmod+000文件目录
    例:只在第二级中添加r-x为 chmod+050

Python

复数表示:real + image j

  • j大小写均可
  • 实部和虚部都是浮点数
  • 复数的 conjugate 方法可以返回该复数的共轭复数

计算机网络

TCP协议

最主要特点:

  • TCP是面向连接的运输层协议。应用进程之间的通信像“打电话”:通话前要先拨号建立连接,通话结束后要挂机释放链接。
  • 每一条TCP连接只能有两个端点(endpoint),点对点,不可多播和广播
  • TCP提供可靠交付的服务。无差错、不丢失、不重复,并且按序到达。(TCP提供的是可靠交付,所以TCP首部开销会大;UDP协议只是尽最大努力交付,UDP的首部开销小)
  • TCP提供全双工通信。双向通信
  • 面向字节流。虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来 的数据仅仅看成是一连串的无结构的字节流 。TCP并不知道所传送的字节流的含义。

数据库

索引

索引的特点:

  • 创建索引的好处
    (1)通过创建索引,可以在查询的过程中,提高系统的性能
    (2)通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性
    (3)在使用分组和排序子句进行数据检索时,可以减少查询中分组和排序的时间
  • 创建索引的坏处
    (1)创建索引和维护索引要耗费时间,而且时间随着数据量的增加而增大
    (2)索引需要占用物理空间,如果要建立聚簇索引,所需要的空间会更大
    (3)在对表中的数据进行增加删除和修改时需要耗费较多的时间,因为索引也要动态地维护

数据库事务

特点:

  • 原子性(Atomicity):假如我们有个方法中对一个属性进行了N次的更新,但是执行到一半的时候有一个语句有问题出现了异常,这样就可能使得我们上面所说的操作后的点与我们预先的点不同,这不是我们想要的,所以原子性要求你这个方法要么全部执行成功,要么你就别执行。
  • 一致性(Consistency):一致性规定事务提交前后只存在两个状态,提交前的状态和提交后的状态,绝对不会出现中间的状态。
  • 隔离性(Isolation):事务的隔离性基于原子性和一致性,每一个事务可以并发执行,但是他们互不干扰,但是也有可能不同的事务会操作同一个资源,这个时候为了保持隔离性会用到锁方案。
  • 持久性(Durability):当一个事务提交了之后那这个数据库状态就发生了改变,哪怕是提交后刚写入一半数据到数据库中,数据库宕机(死机)了,那当你下次重启的时候数据库也会根据提交日志进行回滚,最终将全部的数据写入。

数据库设计范式

  • 第一范式

    属性的原子性:实体中的某个属性不能有多个值或者不能有重复的属性,如果出现重复的属性则需要重新构建实体,新的实体由重复的属性构成。

  • 第二范式

    数据库的每个实例或行必须可以被唯一的区分,即表中要有一列属性可以将实体完全区分,这个属性就是主键,即每一个属性完全依赖于主键,在员工管理中,员工可以通过员工编号进行唯一区分。
    完全依赖概念:即非主属性不能依赖于主键的部分属性,必须依赖于主键的所有属性。

  • 第三范式

    一个数据库表中不包含已在其他表中已包含的非主关键字信息。属性不依赖与其他非主属性,也就是说,如果存在非主属性对于码的传递函数依赖,则不符合第三范式

  • BCNF范式

  1. 所有的非主属性对每一个码都是完全函数依赖 (暗含主关键字里面可能有多个码可以将实体区分)
  2. 所有的主属性对每一个不包含它的码也是完全函数依赖(即所选码与未选择的码之间也是完全函数依赖的)
  3. 没有任何属性完全函数依赖于非码的任何一组属性(即非主属性之间不能函数依赖)

大数据技术

Hive数据仓库

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。

Hadoop

在Google三篇大数据论文发表之后,Cloudera公司在这几篇论文的基础上,开发出了现在的Hadoop。但Hadoop开发出来也并非一帆风顺的,Hadoop1.0版本有诸多局限。在后续的不断实践之中,Hadoop2.0横空出世,而后Hadoop2.0逐渐成为大数据中的主流。

  • 分布式文件系统 HDFS

    对HDFS来说,其主要的运行架构则是master-slave架构,即主从架构。其中呢,master主节点称之为Namenode节点,而slave从节点称为DataNode节点。

    1. NameNode管理着整个文件系统,负责接收用户的操作请求
    2. NameNode管理着整个文件系统的目录结构,所谓目录结构类似于我们Windows操作系统的体系结构
    3. NameNode管理着整个文件系统的元数据信息,所谓元数据信息指定是除了数据本身之外涉及到文件自身的相关信息
    4. NameNode保管着文件与block块序列之间的对应关系以及block块与DataNode节点之间的对应关系
  • 分布式计算框架 MapReduce

Map 和 Reduce 其实是函数式编程中的两个语义。Map 和循环 for 类似,只不过它有返回值。比如对一个 List 进行 Map 操作,它就会遍历 List 中的所有元素,然后根据每个元素处理后的结果返回一个新的值。

而 Reduce 在函数式编程的作用则是进行数据归约。Reduce 方法需要传入两个参数,然后会递归地对每一个参数执行运算。

Hadoop MapReduce 和函数式中的 Map Reduce 还是比较类似的,只是它是一种编程模型。我们来看看 WordCount 的例子就明白了。
在这里插入图片描述
所谓 MapReduce 的意思是任何的事情只要都严格遵循 Map Shuffle Reduce 三个阶段就好。其中Shuffle是系统自己提供的而Map和Reduce则用户需要写代码。

参考:分治算法到MapReduce

  • Hadoop1.0和2.0的区别

在hadoop1.0中,namenode有且只有一个,虽然可以通过SecondaryNameNode与NameNode进行数据同步备份,但是总会存在一定的延时,如果NameNode挂掉,但是如果有部份数据还没有同步到SecondaryNameNode上,还是可能会存在着数据丢失的问题。MapReduce同样是一个主从结构,由一个JobTracker(主)和多个TaskTracker(从)组成。

Hadoop2.0为克服Hadoop1.0中的不足进行了下面改进:

  1. 针对Hadoop1.0单NameNode制约HDFS的扩展性问题,提出HDFS Federation,它让多个NameNode分管不同的目录进而实现访问隔离和横向扩展,同时彻底解决了NameNode单点故障问题;

  2. 针对Hadoop1.0中的MapReduce在扩展性和多框架支持等方面的不足,它将JobTracker中的资源管理和作业控制分开,分别由ResourceManager(负责所有应用程序的资源分配)和ApplicationMaster(负责管理一个应用程序)实现,即引入了资源管理框架Yarn

  3. Yarn作为Hadoop2.0中的资源管理系统,它是一个通用的资源管理模块,可为各类应用程序进行资源管理和调度,不仅限于MapReduce一种框架,也可以为其他框架使用,如Tez、Spark、Storm、Hive等

数据挖掘技术

数据挖掘的基本任务:

  • 探索性数据分析:使用交互式的和可视化的技术,对数据进行探索
  • 建模描述:为数据的总体分布建模;把多维空间划分成组等问题
  • 预测建模:建立一个模型,通过这个模型根据已知的变量值来预测其他某个变量值
  • 根据内容检索:用户有一种感兴趣的模式并且希望在数据集中找到相似的模式

数据挖掘方法:

  • 决策树
  • 神经网络
  • 回归
  • 聚类
  • 关联规则
  • 贝叶斯分类

分类方法:

  • 基于距离的分类方法
  • 决策树分类方法
  • 贝叶斯分类方法
  • 规则归纳方法

机器学习算法和模型

是否需要归一化处理:

  • 当使用梯度下降法寻求最优解时,很有可能走“之字型”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;在梯度下降进行求解时能较快的收敛。所以,使用梯度下降法求解最优解的模型,归一化就非常重要!knn,logistc回归,gbdt,xgboost,adaboost,神经网络

  • 还有一些模型是基于距离的,所以量纲对模型影响较大,就需要归一化数据,处理特征之间的权重问题,这样可以提高计算精度。比如,knn,svm,kmeans,k近邻,主成分分析;

  • 那么不需要归一化处理的模型,决策树,随机森林。他们因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率

数据分析常见指标

用户

  • DAU/MAU(用户日活、月活)
  • 新增用户:特别是在业务的起步阶段,这个指标尤为重要;这个代表公司的潜力。比如拼多多,一年比一年亏损多,但股价却越来越高,主要原因就是资本市场看好拼多多用户的增速。
  • 留存率:留存率又分次日留存率,次周留存率,次月留存率
  • 渠道来源

PS: 留存率R,新增用户N和日活A的转化
第m天的日活Am = Nm + Nm-1 * R1 + Nm-2*R2 + …… + N1 * Rm-1 + A1 * Rm-1

行为数据

  • PV、UV: 页面浏览量;用户浏览量
  • 访问深度
  • 转化率:转化用户行为
  • 停留时长:用户粘性,衡量健康程度
  • 弹出率:有多少用户,刚逛没多久,扭头就走

业务数据:

  • 总量GMV:网站的成交金额,gmv=销售额+取消订单金额+拒收订单金额+退货订单金额
  • 人均ARPU:每用户平均收入;一些奢侈品行业,就非常关心这个指标
  • 付费率:付费用户比率,可用来衡量健康程度
  • 被消费对象:SKU(存货单元)层面

分析异动指标

  • 归因分析步骤
  1. 数据真实性(趋势变动是突然还是缓慢,是否是正常环境因素导致)
  2. 拆分维度,确定范围
  3. 分维度做假设:产品、技术和运营
  • 分析指标异动原因常见拆分维度
    在这里插入图片描述
    计算影响系数:每一项数据都要和以往正常值做对比,算出影响系数。
    影响系数=(维度今日量-维度昨日量)/(今日总量-昨日总量)
    影响系数越大,说明此处就是主要的下降点
    以上是几种常见的初步拆分维度,通过初步拆分,定位原因大致范围。

其他

位、字节和编码

  • 位(bit):来自英文bit,音译为“比特”,表示二进制位。位是计算机内部数据储存的最小单位,11010100是一个8位二进制数。

  • 字节(byte):字节来自英文Byte,音译为“拜特”,习惯上用大写的“B”表示。 字节是计算机中数据处理的基本单位。计算机中以字节为单位存储和解释信息,规定一个字节由八个二进制位构成,即1个字节等于8个比特(1Byte=8bit)。八位二进制数最小为00000000,最大为11111111;通常1个字节可以存入一个ASCII码,2个字节可以存放一个汉字国标码。

  • UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。中文标点占三个字节,英文标点占一个字节

  • Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。中文标点占两个字节,英文标点占两个字节

增量模型(Incremental Model)

又称演化模型。与建造大厦相同,软件也是一步一步建造起来的。在增量模型中,软件被作为一系列的增量构件来设计、实现、集成和测试、每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成,增量模型在各个阶段并不交付一个可运行的完整产品,而是交付满足客户需求的一个子集的可运行产品。整个产品被分解成若干构件,开发人员逐个构件地交付产品,这样做的好处是软件开发可以较好地适应变化,客户可以不断地看到所开发的软件,从而降低开发风险。具有回溯性,可返回修改
在这里插入图片描述

  • 增量模型的基本思想
    (1) 增量模型属于非整体开发模型,它推迟某些阶段或所有阶段的细节,从而较早的产生工作软件

    (2) 增量方式包括增量开发和增量提交

    (3) 增量开发指在项目开发周期内,以一定的时间间隔开发部分工作软件

    (4) 增量提交指在项目开发周期内,以一定的时间间隔向用户提交工作软件及相应文档。

螺旋模型

软件开发过程每迭代一次,软件开发又前进一个层次

笔面经

字节跳动数据分析师

字节数据分析笔试就是一些经典行测题目,主要是数据图表题,难度比一般行测还要低,基本不需要准备。

  • 一面:

    一面是peer interview,首先基本的自我介绍,深挖简历项目
    可能因为背景更偏工程又没有互联网实习经历,所以面试官先试探性的问了下DAU等指标

    业务问题:

    1. 日活1亿,平均使用时长60分钟,投放广告后,观看广告人数50万,平均使用时长90分钟,问是否是广告的影响

      我面试时认为这个问题主要是考察逻辑,观看广告的人使用时长提升不一定是由于广告因素,有可能是反过来因为这个人群观看时长本身较长,才看到了广告或者愿意看广告。

      面试官追问那如何确定是那种因素造成的,我答得是需要看内外部因素blabla,先排除其他因素干扰后再观察广告的影响。面试官接着问是否考虑abtest,我说abtest需要预先设定实验条件,无法用于已经发生的事情上面(应该吧)。

      面试官没有什么反馈,接着问那如果后面继续投放广告,是否可以进行abtest?我说可以然后blabla说一堆abtest的东西,如何分组,怎么检测显著性。大概还行吧,就转到下个问题了

    2. 衔接上一个问题,平均使用时长下降10分钟,如何分析?

      质疑数据真实性。接着划分维度分析,如新老用户划分,面试官说新用户一般数量少对对总体影响不大,追问是否有其他维度,答说还有用户渠道划分和地域划分等。

      针对地域划分接着问是否可能每个地区无变化但是总体有变化,这里我没答上来,面试官提醒辛普森悖论,可能是由于人群分布的变化导致的(恍然大悟,完全忘记了辛普森悖论说的是啥啊。。。)

      后面就继续问如何解决这个问题,我(懵逼)先是说出现了这种情况就已经证明了原因所在啊,看面试官脸色不太满意,赶紧试着回答了一下,比如先考虑到类似的情况,给各个维度一个日活人数加权再看影响系数,后面的追问忘了,但是这个问题应该回答的不是很好,面试官很nice,最后还鼓励了一下思路不错。。。

    3. 顺着abtest层层深入,想知道是否应该投放广告,做abtest需要检查哪些指标?

      DAU,留存率,用户收入ARPU;追问投放广告留存率肯定会下降,怎么进一步处理这种情况?开始不知道面试官想问啥,说那就看DAU和ARPU,然后就被challenge ARPU投放广告肯定会上升啊,这些指标都不能说明问题。最后我说应该构建一个总的收入指标,不单看人均收入,这才算是过关了吧。

    4. 感觉是字节数分面试固定问题,平时用什么app?

      知乎、b站、抖音tiktok(特意说的),然后面试官问说一下b站的优缺点吧(hmmmm抖音你家的产品不问嘛!),然后说b站手机端的频道分类做得一般,过于细化,不方便;面试官马上针对这个问题又问一遍abtest,现在想改进频道分类界面,如何设计指标做abtest?blabla又说一堆

    5. 常规问题,还有什么要问我的么?

  • 二面:

    简短自我介绍,只关注数据分析经历深挖简历(第一次被问实习以外的项目经历…)。二面面试官人非常nice,提出问题之后非常耐心等待本菜狗思考回复,得到回答后还会点评并提出建议,认识到了自己的不足,真的学到很多

    1. 深挖我的一个商业分析项目经历,分析商品运输丢失率高的原因,(我项目里提出跨大区域运输丢失率低,小区域丢失率高)问从逻辑上都有什么可能原因?

      边懵逼边回答,大区域运输可能夜间运输更多,车流量少交通事故风险低,被反问夜间视野问题交通事故风险比白天高吧?(我:好有道理)只能硬着头皮继续答,跨大区域运输一般为集装箱式运输,那么丢失风险比小区域的零散运输会低,跨大区域一般路况稳定,小区域路线分散路况复杂…大概记得这些

    2. 继续问我简历提出的双休日增加承运商方案是怎么来的,为什么和解决丢失率有关系?

      答双休日货物运量会提高,但是现有情况是承运商数目不变,那么承运货物就有可能超出承运商能力,会造成商品丢失;追问为什么超出能力就会丢失?答有可能运输车辆超载造成事故几率提高,快递人员任务过于繁重的人为因素(全是现编的…);接着面试官提出那之前你上个问题怎么没说到这个原因导致的丢失率提高?(我内心:卧槽,草率了)只能尴尬地承认之前没想到…感觉面试官问完就大概清楚我这个项目的水分了,最后提建议就是计算指标到最后提出方案的时候多思考,逻辑上是否都是成立的,不能只是摆出数据指标然后理所当然提解决方案。(我觉得说的真的很对,受教了)

    3. 业务问题,滴滴现在想发放优惠券吸引用户,如何分析这个商业策略的ROI指标?

      ROI就是投资回报率(之前只是单纯知道这个指标,面试后查了查发现这里面大有文章)。总体答得有点乱,大概意思是用户量会上升,但是有投入成本导致利润会降低(后来发现不应该这么说,ROI指标是产出/投入,不是利润/成本)

      面试官追问怎么样决定是否要做这件事?我说abtest,然后就是又来一顿abtest连环追问,竟然问了abtest该做多少人,woc我不知道啊,1% 0.1%???然后问为啥,我说要根据业务经验吧,不能太多成本太高,不能太少,显著性会受影响;那你现在没有业务经验就让你做怎么确定多少人?(问的太犀利了,我给宁跪了)开始瞎掰,那看一下最终KPI要求是多少,我们的前期投入成本的限额决定于KPI的要求。面试官总算是看出我的勉强(真的一滴都没有了…)放了我一马

    4. 接着前面的问题,如果abtest结果是没有显著性的,怎么分析?

      (没显著性不是凉凉了么…) 答看一下除了ROI指标之外的指标,比如用户PV UV(其实这里应该说转化率)等指标是否有显著性,如果有的话那么还有文章可做,流量提高的话那么可以利用这部分流量去带来其他收益(因为我对ROI理解不深,这些都答偏了,所以被追问还有其他分析么?)我答说还有可能是时间因素导致,比如abtest所在的时间如果是工作日大家普遍都会打车,不需要优惠券刺激,周六日才会有效果。追问还有么?我说还有可能有些用户本身就是忠诚用户,不需要大额优惠券刺激,有些新用户则需要…后面还有一些记不得了。面试官点评说所以可以在abtest的时候就分多组做,比如优惠券的数额不同,时间不同,用户不同,做多组假设进行实验(疯狂点头!!!终于在最后明白面试官想听什么了…)

    5. 常规问题,向面试官提问

  • 三面:

    三面偏压力面,对简历的项目挖的不深,一道比较有趣的题目让我印象很深:一个直播间,一直会有用户进出,只知道每个用户的登录时间和退出时间的情况下如何得到直播间内观看直播的最大人数?

    我的思路是对时间切片,把用户填进去,先看小时级最大人数的位置,再切到分钟级,再到秒级,只要拆分到用户登录和退出时间的单位级别,就能锁定最大人数数量。

    面试收获巨大,其实是面试官帮忙梳理了分析问题的模式,回顾就会发现,有些东西应该在一开始就考虑周全,比如abtest的设计;对指标深入的理解,明确业务逻辑这些真的不是概念说说就完事了,背后需要很多的业务经验,大量试错最终总结成自己的方法论。之前总觉得数据分析师岗位最终会被产品和算法岗cover掉,但现在我相信存在即合理,数据分析师也有很多自己的特性是很难被取代的。不要小看任何一个岗位!

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值