2021春招经验贴 大数据开发 阿里字节小米

笔者杭电信管大三,妹子一枚,一年多的大数据学习经历,两份相关实习经验(数据分析和数据仓库),三月份开始投递简历,经历了小米两轮技术面、阿里测评+笔试+两轮技术面、字节三轮技术面,面试都比较顺利全部通过,4.8拿到了字节商业化广告大数据开发实习offer(小米岗位方向不符,阿里补笔试太难挂了)



本篇分享不按照公司或者时间顺序罗列面试题,按照知识点分块汇总,之前面网易、好未来遇到的知识点我也会加进去,另外面试中没遇到但我觉得很重要的点也会补充。

目录君来了

Hadoop
1、介绍下Hadoop(字节、好未来)
2、mapreduce处理流程/shuffle过程(阿里、好未来、网易)
3、Yarn是怎么工作的(小米)
4、mapreduce和hdfs是一体的吗,有什么关系(阿里)
5、数据倾斜是如何产生的及解决方案(阿里、字节、小米、网易、好未来)
6、mapreduce有几种join(字节)
7、Hadoop的HA


Hive
1、内部表和外部表的区别(字节、好未来)
2、数据仓库的分层(小米、好未来、网易)
3、星型模型和雪花模型的选择(字节、好未来)
4、数据仓库和传统数据库的区别(好多都问了)
5、接上问,维度冗余及三范式(字节、好未来)
6、hive数据存储格式、压缩格式,区别(好未来)
7、HQL执行慢是怎么解决的(字节、阿里、小米)


Spark
1、job、stage、task的关系(小米)
2、spark任务提交过程(阿里、小米)
3、spark常见算子(小米)
4、spark shuffle和mr shuffle的区别及优化
5、spark容错机制(阿里)
6、sparkSQL的几种join实现
7、介绍下sparkstreaming
8、spark RDD的理解


Flink
1、spark streaming和flink的比较(小米)
2、flink的状态(小米)
3、flink的容错机制、状态一致性(阿里)
4、讲述一致性检查点的实现——分布式快照(阿里)
5、flink的watermark、窗口机制、时间(小米)
6、flink的运行构架


Mysql
1、索引相关,b+tree(阿里)
2、建立索引的考虑因素(使用频率、联合索引、索引顺序)
3、聚簇索引、覆盖索引与回表查询
4、索引失效的情况,如何知道索引是否被用到
5、什么是事务,事务并发带来的问题(脏读、不可重复读、幻读)
6、ACID、隔离级别


Kafka
1、kafka的文件存储机制
2、kafka的可靠性保障
1)生产者往broker发送消息(副本数据同步策略、ISR、ACK)
2)topic分区副本
3)leader选举
3、kafka一致性保障
4、如何保障数据有序性
5、kafka和传统消息队列的区别


Redis
1、redis的优缺点
2、redis的数据类型
3、为什么redis效率高
4、redis主从复制过程
5、AOF、RDB的优缺点、适用场景
6、redis的过期淘汰策略
7、缓存雪崩、缓存击穿及如何解决(这部分我只了解概念...)


java
这个写起来就太多了,我每次面试前会把javase、多线程、jvm的重点串一遍
笔者java也是处于有待深入的阶段,后端开发的大佬可以看这篇


开放型问题
1、谈谈对大数据处理思想的理解(可以围绕分而治之、计算向数据移动展开)
2、谈谈对大数据体系演变的理解(阿里)
3、你觉得未来大数据体系的变化可能是怎样的(阿里)
4、如果你的抖音突然卡住了,会是因为什么(字节)


SQL题
遇到非常多道sql题,基本都跑不了开窗函数,有时候也遇到需要case when表达式转化的


算法
笔者不是算法大神,剑指offer刷过两遍,整体回顾过四五次,建议每次面试前将j剑指offer链表、二叉树、栈和队列、动态规划、递归及回溯的题目都分块回顾一次,链表的题一般用虚拟头结点、步长差解决。二叉树的题目一般要么和遍历有关,借助栈和队列,比如镜像和对称二叉树、求深度、之字形打印...都相当于在遍历中加入判断条件;要么用递归及回溯思想解决,比如树的子结构,最低公共祖先、和为某值的路径等题目。动态规划思想我认为是维护一个状态,关注点就在目前状态和新进来的数据上面,然后进行比较和状态更新,需要多练习找感觉。另外排序算法也要熟悉,冒泡啥的不说了,快速排序、归并排序也要可以直接写出来。算法练习过程中注意思考多种方法解题,字节面试中有遇到追问第二种方法解决问题。


非科班同学转型大数据可以看下b站TALKDATA的视频,有比较详细的学习路线


如有问题或者建议可以联系我,祝大家拿到理想offer~






#面经##校招##数据开发工程师##阿里巴巴##小米##字节跳动##网易#
全部评论
大三这么厉害了
2 回复 分享
发布于 2021-04-15 18:51
楼主好强,沾沾喜气。我投了好几个月的字节,今天终于给我发笔试通知了。
1 回复 分享
发布于 2021-04-15 23:15
很赞👍🏻
点赞 回复 分享
发布于 2021-04-15 18:08
太强了 我大数据这个方向完全不会
点赞 回复 分享
发布于 2021-04-15 20:14
重点还是个妹子
点赞 回复 分享
发布于 2021-04-15 20:15
tql
点赞 回复 分享
发布于 2021-04-15 20:24
tql,想问下为什么我投的数据开发岗面试都问的sql不问java🤣是我投到数仓去了吗
点赞 回复 分享
发布于 2021-04-15 20:40
这就是妹子么,tql,我java不太熟练,感觉问题大么(sql,熟练)算法都是用的c++
点赞 回复 分享
发布于 2021-04-15 20:51
不会是上海商业化技术吧…
点赞 回复 分享
发布于 2021-04-15 23:30
大佬可以讲一下Javase、多线程和JVM重点串一遍是那些吗
点赞 回复 分享
发布于 2021-04-16 00:49
妹子也太厉害了٩(๑ᵒ̴̶̷͈᷄ᗨᵒ̴̶̷͈᷅)و 好厉害
点赞 回复 分享
发布于 2021-04-16 13:37
都是自学吗?
点赞 回复 分享
发布于 2021-04-16 14:05
请问有没有提升写HQL能力的好办法😂
点赞 回复 分享
发布于 2021-04-16 14:17
学姐太强了 佩服!
点赞 回复 分享
发布于 2021-04-16 16:52
给师妹跪了
点赞 回复 分享
发布于 2021-04-16 20:14
楼主,请问“HQL执行慢是怎么解决的”从哪几个方向去回答
点赞 回复 分享
发布于 2021-04-16 22:06
为啥阿里还要补笔试那?是之前没有参加过?
点赞 回复 分享
发布于 2021-04-17 00:13
同大三🤣,也想往大数据开发方面发展,目前参加了学校的大数据寒暑假班,也学习了大数据相关组件,像hadoop、hive、sqoop、flume、hbase、spark等,如果想找大厂的实习的话还需要准备哪些呀?楼主学习是看哪些书的?(我一本书都没有看过😂)还是看视频学习?
点赞 回复 分享
发布于 2021-04-17 11:47
点赞 回复 分享
发布于 2021-04-17 21:40
还是妹子 太厉害了
点赞 回复 分享
发布于 2021-04-17 22:20

相关推荐

11-10 17:45
同济大学 golang
这是我投递的岗位仍然是后端开发,但是我的简历还是转到了数开的那里紧急学习了一下关于数开的一些技术栈字节的面试官很好很好 是我太菜了呜呜  大部分时间在问项目 并且很认真地引导我思考  1. 先问项目  简单介绍一下项目2. 介绍一下分布式锁  为什么要使用分布式锁 为了解决什么问题用于分布式系统中保证资源的独占性  避免多个进程同时修改同一资源  3. 分布式锁怎么实现的  1. Redis  setnx  互斥命令  只用setnx xxx的时候才会成功  2. 利用过期时间  如果出现宕机的情况也会自动释放  3. 同一个线程无法多次获得同一把锁    4. 获取锁只尝试一次就返回false  没有重试机制  5. 锁超时释放虽然可以避免死锁   但如果是业务执行耗时较长  也会导致锁释放问题  6. Redisson 自动续期的机制 来避免锁的误释放问题   看门狗机制    1. 自动会为锁续期  直到业务逻辑执行完成为止    2. RedLock算法是一种基于多个redis实例的分布式锁机制    只有大多数节点成功枷锁  才认为锁被成功获取    3. 重入锁      1. 同一个线程可以多次获取同一把锁      2. 锁计数器记录了获取锁的次数      4. 公平锁      1. 按照请求的顺序来获取锁  类似于排队机制  需要保证请求顺序   而不是像非公平锁那样可以随机抢占资源      2. 性能上会有所损失4. 在这个项目中  你面对的最大的难题是什么高并发下数据一致性  性能优化  缓存设计   解决分布式环境中的一致性和延迟问题5. 你承担的角色是怎么样的  1. 开发工程师  系统架构设计  核心功能开发  技术选型6. 你的项目的数据链路结构会是怎样的  1. 用户请求  负载均衡分发到应用服务器   通过消息队列分发任务   再到数据库存储   通过缓存和搜索引擎加速访问7. 首页为什么要缓存  是静态页面还是动态页面 为什么要缓存  为什么之前那么慢  1. 减少数据库负载和提升响应速度  8. 你的数据埋点的整个数据链路是怎么做的9. 会考虑性别 校区的影响吗10. Kafka 是如何保证高容错的  1. 数据存储    1. 日志文件    内存提高读写速度  磁盘负责持久化操作    2. 分段  清理机制  处理过期信息  2. 消息分区    1. 每个分区都是一个有序的消息序列   分区使得消息可以被消费者并行消费  提高了并行量  3. 索引机制    1. 方便消息的快速查找  4. 高可用性    1. 创建数据副本  5. 顺序与一致性  6. 缓存与流量控制机制    1. 信用机制  7. 分布式协调服务    1. zookeeper来管理节点状态   分区分配   故障监测  8. 消息消费机制    1. 是主动推动 还是被动拉取  9. 事务机制  10. 错误恢复和重试机制  11. 底层优化    1. Kafka  zookeeper    2. Rabbitmq amqp协议  使用内存和磁盘存储信息  11. 再问问技术方面12. Mysql 事务的隔离级别是什么13. 什么会发生幻读14. 如何避免幻读  1. 可重复读结合MVCC机制 实现  或者使用表级锁来避免幻读15. redis的list底层是怎么样实现的  1. 双向链表和压缩列表实现   提供高效的插入和删除操作紧凑的存储:元素之间没有额外的指针,每个元素之间是紧密相连的,节省了空间。  多种编码方式:压缩列表中的元素会根据内容的类型和大小选择最优的编码方式。比如,整数可以用更少的字节表示,小的字符串也会用更紧凑的格式存储。  双向遍历:每个元素保存前一个元素的长度,使得压缩列表支持双向遍历,从头部或尾部都可以遍历整个列表。  2. 与列表的元素个数有关  512个  每一个的字节都小于64  3. 3.2版本之后 变成了 跳跃表  4. 消息队列(但是有两个问题:1.生产者需要自行实现全局唯一 ID;2.不能以消  费组形式消费数据)  5. 有序单链表的一种改进  查询、插入、删除也是O(logN)的时间复杂度。  那如果加二级索引呢?如下图所示,查找路径:1、7、9、10。是不是找 10 的效率更高了?这就是跳表的思想,用“空间换时间”,通过给链表建立索引,提高了查找的效率。16. Hash类型底层实现是怎样的  1. 缓存对象  购物车等  2. 压缩列表或者哈希表实现的  3. 现在使用listpack   为了节省空间,它采用了多种编码方式来表示不同长度的整型和字符串17. Set 类型  1. 哈希表  整数集合  2. 小于512  使用整数集合  大于使用 哈希表18. Zset实现原理  1. 排序场景  2. 有序集合 元素小于128个  元素的值小于64字节时候  使用压缩列表  3. 否则使用  跳跃表  和  哈希表  4. 19. redis的持久化了解过吗  1. AOF日志  2. RDB快照20. redis为什么是单线程 1. 「接收客户端请求->解析请求 ->进行数据读写等操作->发生数据给客户端」这个过程是由一个线程(主线程)  可以避免了多线程之间的竞争,省去了多线程切换带来的时间和性能上的开销,而且也不会导致死锁问题。  2. 后台线程相当于一个消费者,生产者把耗时任务丢到任务队列中,消费者(BIO)不停轮询这个队列,拿出任务就去执行对应的方法即可。  3. CPU 并不是制约 Redis 性能表现的瓶颈所在,更多情况下是受到内存大小和网络I/O的限制  4. 使用了单线程后,可维护性高,多线程模型虽然在某些方面表现优异,但是它却引入了程序执行顺序的不确定性,带来了并发读写的一系列问题,增加了系统复杂度、同时可能存在线程切换、甚至加锁解锁、死锁造成的性能损耗21. spark操作过吗  1. 数据处理  计算 模型训练22. redis和mysql如何保证数据的一致性的  1. 事务   消息队列  延迟双删除  数据同步脚本  2. 更新数据的时候 直接删除缓存    3. 23. 先读还是先存  1. 优先读取缓存  缓存未命中时读取数据库并更新缓存24. mysql的悲观锁 乐观锁  1. 悲观锁  直接加锁  2. 乐观锁  版本号等方式控制25. mysql有哪些锁  1. 行级锁  表级锁  全局锁  共享锁  排他锁  意向锁  保证数据一致性和并发控制26. mvcc是乐观锁实现 还是悲观锁实现  1. 乐观锁  通过记录数据的多个版本来实现隔离级别 避免加锁带来的性能影响 27. 幻读问题如何解决  1. InnoDB 的 MVCC 结合快照读和间隙锁,使得在 REPEATABLE READ 隔离级别下也可以避免幻读。28. Hive sql题   取出连续三天一样的数据id  1. 窗口函数但第一时间想到的方法被认为会有一些问题  被看出来了29. MySQL是怎么保证原子性的?  1. 事务的原子性就是:一个事物要么全部执行成功,要么全部执行失败。MySQL 主要是利用 undo log,也就是回滚日志来实现原子性。  2. 平常我们在对数据进行增删改时,InnoDB 除了会记录 redo log,还会将更新的数据记录写进 undo log 中。当事务出现异常,执行失败的时候,就需要利用 undo log 中的信息将数据回滚到修改之前的版本  3. undo log:  4. 作用包括:    - 提供回滚(行里面有一个roll point指向undo log该行修改前的信息)保证原子性!    - MVCC(undo log版本链)  - 与redo log 的区别:  redo log: 记录的是物理日志,记录事务中修改的信息  保证事务的持久性   redo log   数据库崩溃时的数据恢复   undo log: 记录的是逻辑日志,记录修改前的信息    保证事务的原子性   事务的原子性就是:一个事物要么全部执行成功,要么全部执行失败。MySQL 主要是利用 undo log,也就是回滚日志来实现原子性。30. Binlog是什么  1. 日志文件31. 编程题  字符串按照z字输出 javaZ 字形输出指的是将字符串按行间交替对齐,按行存储,然后逐行输出。可以用一个二维数组来模拟“Z”字形排列,或用指针上下移动实现 zigzag字符串操作忘记了  所以被认为基础不牢 确实 刷题刷太少了#牛客创作赏金赛##字节#复盘:项目其实是我在一个月内紧急编出来的一个项目 自己并没有做很多亮点的地方 但是又必须得写一些亮点的地方  所以被拷打的很凶 基础不牢就很麻烦  现在想的是又需要沉淀一下  也需要可以更好的把技术真正的做好
查看30道真题和解析 牛客创作赏金赛
点赞 评论 收藏
分享
评论
78
464
分享
牛客网
牛客企业服务