阿里,头条,美团,快手大数据开发岗面试总结
问题导读
1.Java基础主要有哪些问题?
2.数据结构和算法有哪些公司会考?
3.下面哪些问题我们比较熟悉?
从3月份开始,陆续面了阿里,头条,美团,快手四家公司的大数据开发岗位,近20场面试面下来挺耗费脑力的,不过结果还行,除了头条外,目前拿到了其他三家的offer,今天把还能记住的题目做个整理,整理是按技术分类的,因为确实记不太清哪一场问了哪些题了。
先说一下这几场面试的整体感受,头条和快手风格相似,每一面基本都有算法或实现题,算法主要是leetcode easy, middle难度的题,这跟你面试情况有关,可能项目上没有亮点的算法题会出的难一点。笔者刷题不多,也就100多道吧,还好没有遇到太难的算法,不过刷题还是平时没事多刷刷的好,毕竟每次面试才突击刷有点累,刷题也有助于开阔思维。实现题主要是让你实现下HashMap,LRU,生产消费者模型,单例模式等,面试官通过这些可以看出你对数据结构的理解和代码实现能力。
阿里和美团的话,算法题不是很多,但会比较注重问项目里的亮点,我理解的亮点包括你开发或优化过比较有价值的功能,解决过复杂或有难度的问题等,这个需要自己根据做过的项目总结好。数仓的话SQL,建模理论问的比较多。
建议刚开始面试不要海投简历,可以先找一家练练手,面试过程中查漏补缺,不断完善知识盲点,这些公司,你只要表现不是太差,一个部门面不过还可以面其他部门的。投简历可以在脉脉,拉钩,boss直聘上找HR,内部员工内推,也可以通过猎头投,不过猎头参差不齐,好的猎头会对公司在招的岗位给出详细的介绍,这个尤其在后面你有多个offer做选择时比较方便,你可以通过猎头了解这些offer的利弊,不过好猎头不好碰。
特别想说的一点是,面试前你要先想好自己适合做哪个方向的开发,大数据的话,有平台开发,数仓业务开发,数据分析挖掘,算法等,每个方向的岗位要求是不一样的。毕竟每个人精力有限,你也不可能所有方向都精通。
平台开发包括内部平台产品开发,组件源码级开发等,一般要求对某个或某几个组件有源码级的开发能力,这个大厂基本都在专门的基础研发平台部门,当然也有一些只是对开源组件做些封装啥的,方便用户使用,这个岗位一般不直接做业务,而是开发和维护业务开发使用的平台工具。
数仓业务开发,这个在大数据开发的招聘岗位里需求量比较大,因为平台可以用云或开源的,但每家公司的数仓都要根据自己的业务构建,所有其他的业务也都是以数仓为基础开展的。这个岗位面试重点是SQL要熟,常用的开窗函数,Hive优化要懂,还有就是数仓建模理论,维度建模,范式建模基本是必问的。一般还需要有Spark,Flink处理离线,实时数据的能力,你要问清楚这个岗位的主要工作内容,谁也不想只做SQL boy。
数据分析挖掘岗,一般是SQL,Python居多,也会用公司的数据分析产品构建模型做报表啥的,还需要对机器学习算法有了解,能够用算法做更深层次的数据分析。
算法岗,如推荐,广告等场景的算法研究,模型构建,调参等,这个一般需要比较深的机器学习,深度学习算法基础,一般需要科班出身的算法工程师,如果之前不是这个方向的,中间转不是很好转,本文不涉及此岗位的面试题。
好了,下面开始罗列这次面试中遇到的面试问题,这些题没有答案,不过会先给出一些我看过的书籍和课程。后续的文章中会对这些知识点进行总结,敬请关注。
1 Java基础
说说Java里的多态什么意思
Java 里的final关键用过吗
讲讲volatile关键字的作用,与synchronized关键字的不同
了解HashMap的内部结构吗?自己实现一个HashMap
HashMap、Hashtable、ConcurrentHashMap的原理与区别
用Java实现一个生产者消费者模型,可以用BlockingQueue阻塞队列
了解哪些设计模式,实现一个单例模式
感言:做大数据开发,java基础是必须的,一般一面,二面都会问到,java基础答的不好,一般都不会给过。
2 数据结构与算法
算法:
搜索旋转排序数组,leetcode 33,中等难度
实现一个LRU缓存,leetcode 146 ,中等难度
用两个栈实现一个队列,leetcode 232 , 简单难度
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。Leetcode 347 , 中等难度
二叉树的最近公共祖先, Leetcode 236 , 中等难度
感言:就记住了这几个,大家也能看出来,基本都是leetcode上的题,刷题还是很有必要的。刷题时建议先按分类刷,像二分查找,动态规划都有一些固定的模式的。
数据结构:
布隆过滤器
Bitmap
B+树
LSM Tree
跳表
Hyperloglog
推荐阅读:强烈推荐极客时间王争老师的《数据结构与算法之美》课程,目前已有8万多人购买,应该是极客时间购买人数最多的课程,有需要的可以扫下面二维码购买。质量绝对优质,反正我读了受益匪浅。比如讲Redis的有序集合底层数据结构为什么用跳表时,老师会从二叉搜索树,B+树开始讲起,让你同时了解了这三种数据结构的异同和应用场景。
3 Hive
做大数据,Hive SQL也是必问的,大厂的ETL任务很多都是Hive SQL,主要问题如下:
Hive row_number,rank两个函数的区别
Hive窗口函数怎么设置窗口大小
Hive order by,sort by,distribute by,cluster by 区别
Hive map,reduce数怎么设置
Hive SQL数据倾斜有哪些原因?怎么优化
parquet数据格式内部结构了解吗
Hive数据选择的什么压缩格式
Hive SQL 如何转化成MR任务的
Hive 分桶了解吗
Hive的udf、udaf和udtf了解过吗?自己有没有写过udf
怎么验证Hive SQL 的正确性
lateral view explode关键字来拆分数组
join操作底层的MapReduce是怎么去执行的
SQL应用题:
一个login_in表,userid、login_time、ip,数据量很大,一个人可能有多条登录数据,取出最近10个登录的用户。
还是login_in表,统计登录的总条数( PV )和登录的总人数 (UV)。
一个用户好友表 userid , follow_list (该用户的好友id数组) A B C 统计这个表有多少对好友
感言:这个主要考察你平时写SQL多不多,数仓开发岗会比较在意SQL能力
4 MapReduce&Spark
MapReduce的作业流程,涉及到几次排序
Spark任务执行过程
MapReduce Shuffle 和 Spark Shuffle的区别
Spark的内存管理模型
讲讲Spark Shuffle
Spark Shuffle bypass模型了解吗
Spark使用中遇到什么问题,怎么解决的
感言:MapReduce&Spark是主要的离线计算引擎,需要对任务调度流程和可能出现性能瓶颈的点熟悉, 懂得组件原理和调优,如果工作中遇到并解决过大数据工程性能问题会有加分
5 Spark Streaming&Flink
Spark Streaming 与Flink的对比
Flink怎么做到Exactly Once
Spark Streaming能做到Exactly Once语义吗
Flink的StateStore有哪些,工作中用过哪些
做过Flink内存调优吗
遇到过OOM的情况吗,怎么处理的
讲讲Spark Streaming 与Flink的反压机制
Flink的窗口函数,时间机制,CheckPoint机制,两阶段提交
Flink 双流Join
Flink State TTL怎么设置
Flink 维表关联有哪些方式,数据量大时怎么处理
其他一些应用题:
实时PV,UV统计
实时TOP N 统计
广告曝光流和点击流实时join
感言:不仅要对组件的原理清楚,还要实际做过实时相关的业务开发,面试官也会出一些他们场景的业务让你说下你会怎么设计,所以需要多关注些实时业务场景的应用实现。
6 数据仓库
你们公司数仓是怎么构建的,怎么做的分层
说说范式建模和维度建模的区别
说说星型模型和雪花模型的区别
设计一个统计各渠道用户留存的模型
缓慢变化维怎么处理
你们数据怎么同步到数仓的,怎么保证数据不丢失
数据质量怎么控制
数据规范怎么定义的
如果进行元数据管理
感言:数仓方法论的东西需要了解,数仓整体的构建理念要对,给一个业务需求,能够给出合理的数仓构建模型。
7 Kafka
说说对kafka的了解
Kafka基本原理说一下,和其他的MQ相比的优势
讲讲Kafka的高阶,低阶消费者API的区别
Kafka的ack有哪几种
Kafka 消费者怎么从Kafka取数据的
Kafka生产消费怎么保证Exactly Once
Kafka怎么保证有序性的
Kafka Controller是做什么用的
Kafka 多副本leader如何选举
Kafka 消费者组重平衡流程是怎样的
新版和老版Kafka offset的管理有什么不同
如何查看消费者的消费进度
8 HBase
HBase rowkey如何设计的
谈谈热点问题以及如何解决
说下HBase的读写流程
HBase使用过程中做过哪些优化
HBase的Compaction机制作用
9 Redis
Redis 包含哪些数据结构
Redis 有序集合的底层实现
Redis 有哪几种数据持久化方式及各自优缺点
一致性哈希了解吗
原文链接:
https://mp.weixin.qq.com/s/bxMrhhqohxosPj5YB0lifw
页:
[1]