数据分析师 面经和知识点总结

我是2021届的应届生,主要投递的是数据分析岗,经过大半年找工作的历程,真心很感谢牛客这个平台,收获到了不少经验和知识。这个帖子主要是我在面试过程中的知识点总结,希望能对还在努力找工作的小伙伴儿有所帮助。

首先,我其实投递过挺多的大厂,但近几年互联网大厂非常的卷,数分岗更是卷中之卷,很多次我面试到3轮却被告知没有hc了,但不管怎样,抛开这些外部因素,不要放弃。
我先总结一下这些大厂面试时的侧重点:
阿里,蚂蚁金服:比较看重编码能力,尤其python和SQL,和业务能力相比,逻辑和算法能力更为重要。所以多刷代码题吧,把简历中做过项目的算法和原理搞透彻,阿里的面试官思路精奇,很可能会寻根究底。
字节:字节的面试官都很随和,都很nice,字节的数据分析更看重你的业务能力和面试时的临场表现,所以一定对app产品,对指标体系的建设,对异常指标的监控等等有一套清晰的思维框架和认知,并且一定要让面试官相信你是热爱这个岗位的。
美团:美团的面试官非常技术导向,我面试的是美团优选,和阿里一样,非常看重你的代码和算法能力,除此之外,一定要对hadoop和数仓要有简单的认知。
京东:京东的面试官思维节奏都非常的快,京东非常注重对用户画像,用户行为分析知识点的考察,非常看重hivesql的能力,而且如果你懂时间序列检测算法,那会是一个很大的加分项。去京东一定要做好没有休息日的准备。
神策:神策非常看重对业务的认知水平和产品能力,包括产品生命周期,产品竞品分析,分析报告的产出等等,除此之外,神策还会很注重考察你的沟通能力和语言表达能力。
猿辅导:猿辅导的数分岗面试流程很标准,面试官都是很漂亮的小姐姐,记住一定要多复习统计学知识。

tips:一般面试完,如果面试官说:谢谢你的时间或者说我们自己内部再讨论一下,再或者像字节这种收到了面试调查问卷,那么大概率是没有通过了,就可以准备其他的面试了。如果面试官说:好的 接下来的流程会有hr联系你,那么潜台词就是你通过了这一轮的面试。



接下来是我总结的数据分析岗的知识点,主要有sql,业务知识,机器学习算法,统计学原理,大数据架构和数仓,python这几部分:

1.sql:
(1) 除了熟练掌握基本的select from where group by having,左右外内连接(左连接求差集),union和union all,if then else,case when end 还要熟练掌握各种聚合函数,如sum,max,count
(2)开窗函数(row_number(), rank(), dense_rank(),lead()) 和over(partirion by order by),并且要准确理解函数的意义
(3)sql 字符串处理函数,round,ceiling,cast,date_format(),转置函数pivot

2.业务知识:
(1)A/B测试+辛普森悖论,对照组实验组的选取;埋点的设置,尤其注意页面访问统计和用户浏览行为的相关指标;留存率的不同时段的分析
(2)日活,月活,gmv的变动分析,这类都可以统归为指标异动分析,没有固定的答案,但要有一套自己的分析体系,重点是要划分好维度和内外部综合分析
(3)为某个app搭建一套指标体系,可以按照标准的人货场回答,也可以按app产品处于不同生命周期的阶段进行回答,思路正确而且完整就ok,当然不同业务类型的app要回答不同的业务指标,如电商,视频,音乐等等
(4)商业变现(广告,增值服务,电商),这个经常会跟产品的生命周期结合,产品的不同阶段需要的引流和关注的用户群体是完全不一样的
(5)归因分析和漏斗转化分析
(6)用户画像(属性,行为,需求偏好)

3.机器学习算法:
(1)k-means: 算法原理,和knn的比较,k值的选取和质心的选择
(2)bagging和boosting,boosting尤其要注意每轮样本数据和分类器权值的修正
(3)决策树,随机森林算法,xgboost: 随机森林要注意样本和特征的随机性,xgboost要和gdbt一起学习 
(4)交叉验证,留一法和k折交叉验证,以及交叉验证的意义;过拟合和欠拟合出现的原因以及解决办法
(5)对异常值和离群点的处理
(6)评估模型的指标,准确率,精确率,recall,f-score,r2

4.统计学原理:
(1)p值的正确理解:原假设为真时所得样本极端结果出现的概率,一旦出现p值,就有理由拒绝原假设,p值越小,拒绝的理由越充分
(2)显著性水平(一个可允许的概率作为判断界限的小概率标准)和置信区间(真实值有一定概率落在测量结果的周围的程度
(3)一类错误和二类错误
(4)大数定理和中心极限定理
(5)假设检验,注意为什么假设检验要用反证法(原假设往往是想要拒绝的假设)

5.大数据架构和数仓
(1)hadoop:
-hdfs(namenode,datanode)和mapreduce(jobtracker和tasktracker),理解每个组件的作用和意义
-mapreduce中对map,shuffle,reduce函数的理解,尤其要注意combine过程
(2)hive:
-hive和mysql的区别
-hive的数据倾斜问题的产生原因,以及如何避免
-hive内部表和外部表
-hive中order by,sort by,distribute by的区别
(3)数仓:
-维表,事实表,宽表的理解
-数仓的分层(ods,dwd,dws)

6.python:
(1)数据结构:列表,元组,字典,集合
(2)python的切片和排序操作

其实python主要还是靠刷题,而且数分岗不同于数据科学岗,对python能力的要求不是那么的高






#职业发展##面经##数据分析师##字节跳动##阿里巴巴##美团##京东##神策数据#
全部评论
lz写的nice呀
2 回复 分享
发布于 2021-07-12 16:52
感谢楼主
1 回复 分享
发布于 2021-11-12 17:01
python那些基础题在哪里刷好一点
1 回复 分享
发布于 2021-08-05 17:15
像lz去面的这些大厂最近还招21届的嘛?投递渠道是什么呢?我也是21届的
1 回复 分享
发布于 2021-07-13 15:16
请问楼主最后拿到了哪些offer呀
1 回复 分享
发布于 2021-07-12 17:08
感谢楼主!现在数分岗位要求年年攀高啊…… 感觉一个人就是一个数据部门
6 回复 分享
发布于 2021-07-12 17:07
楼主,大数据和数仓的知识上哪去学呢,B站或者其他一些关于大数据的学习视频感觉比较偏向开发哪一类的
点赞 回复 分享
发布于 2021-11-29 19:17
感谢楼主的分享~
点赞 回复 分享
发布于 2021-08-23 17:42
很有收获
点赞 回复 分享
发布于 2021-08-19 02:10
感谢楼主分享!
点赞 回复 分享
发布于 2021-08-18 23:01
京东加班很严重吗😂
点赞 回复 分享
发布于 2021-08-18 22:05
想问问楼主 你们也是电话面试嘛
点赞 回复 分享
发布于 2021-08-18 18:25
谢谢楼主,比心,不过问问就是现在秋招也是准备这些吗,腾讯呢
点赞 回复 分享
发布于 2021-08-12 21:23
感谢楼主分享,非科班只学过统计学和时间序列,求问如何系统地学习上面各个板块的知识呢~
点赞 回复 分享
发布于 2021-08-11 16:08
总结的很棒,谢谢
点赞 回复 分享
发布于 2021-08-08 01:43
唉今天面试被说了谢谢你的时间😂😂😂😂😂😂
点赞 回复 分享
发布于 2021-07-25 11:59
牛逼
点赞 回复 分享
发布于 2021-07-21 19:12
感谢楼主分享, 请问考察编码能力是做 leetcode 上面的题吗, 还是怎么考察呢?
点赞 回复 分享
发布于 2021-07-17 22:27
谢谢lz~~~
点赞 回复 分享
发布于 2021-07-13 13:58
感谢楼主,写的超级好,学习了😁
点赞 回复 分享
发布于 2021-07-13 13:32

相关推荐

04-27 16:50
已编辑
门头沟学院 Java
1. mysql删除表语句是什么?drop和truncate区别?2. 删除一行数据的sql3. 查询一张表所有的数据的sql4. 查询一张表有多少条数据sql。  count(1)和count(*)区别5. i++和++i区别6. 介绍下重载和重写。  构造方法可以重写重载吗?7. arraylist和linkedlist的区别8.解释一下深拷贝和浅拷贝9. 如果有三个线程,我如何能保证顺序执行.方法1: 使用join()join() 方法可以确保一个线程在另一个线程执行完毕后才开始执行。通过合理地调用 join(),可以实现线程的顺序执行。方法2:使用countdownlatch/semaphore方法3: 使用锁和原子类,wait() + notifyAll()方法4: 使用completablefuture10. 如果有一个 T1 线程,想把 T2 线程加到 T1 里面,怎么实现?方法1. 使用join()Thread t2 = new Thread(() -> {    // T2 线程的执行逻辑    System.out.println("T2 线程正在执行");});Thread t1 = new Thread(() -> {    try {        System.out.println("T1 线程开始执行");                // T1 线程在此处等待 T2 线程执行完成        t2.start();  // 启动 T2 线程        t2.join();    // T1 等待 T2 完成                System.out.println("T2 线程已完成,T1 继续执行");    } catch (InterruptedException e) {        e.printStackTrace();    }});t1.start();方法2. 使用future.get()ExecutorService executor = Executors.newSingleThreadExecutor();Future future = executor.submit(() -> {    // T2 线程的执行逻辑    System.out.println("T2 线程正在执行");});Thread t1 = new Thread(() -> {    try {        System.out.println("T1 线程开始执行");                // T1 线程在此处等待 T2 线程执行完成        future.get();  // 阻塞直到 T2 完成                System.out.println("T2 线程已完成,T1 继续执行");    } catch (InterruptedException | ExecutionException e) {        e.printStackTrace();    } finally {        executor.shutdown();    }});t1.start();方法3. 使用countdownlatchCountDownLatch latch = new CountDownLatch(1);Thread t2 = new Thread(() -> {    try {        System.out.println("T2 线程正在执行");    } finally {        latch.countDown();  // 完成时减少计数    }});Thread t1 = new Thread(() -> {    try {        System.out.println("T1 线程开始执行");                t2.start();  // 启动 T2 线程        latch.await();  // 等待 T2 完成                System.out.println("T2 线程已完成,T1 继续执行");    } catch (InterruptedException e) {        e.printStackTrace();    }});t1.start();11. a=a+b 和 a+=b的区别a = a + b,如果 a 和 b 的类型不同(如 a 是 int,b 是 double),需要显式强制类型转换,否则会编译报错。即:double a= 1;int b = 2;a = (double) (a+b); a += b,会自动执行隐式类型转换,将结果转换为 a 的类型。13. 数据库的三大范式如答案有错误欢迎指正
查看24道真题和解析
点赞 评论 收藏
分享
评论
211
1227
分享

创作者周榜

更多
牛客网
牛客企业服务