小米大数据岗位面试题汇总

小米面试题

学长1

大家可以投一下小米的推荐算法。

一面:问两个有序大数组合并成一个数组的最佳方法,还有快排,问了所有项目。

二面:是问推荐算法的业务实现,还有如果你自己做一个推荐,你会怎么选择模型、算法。

三面:数据结构的查找,新增,删除的时间复杂度、还有各种数学问题,然后写了二叉树的查找、还有根据算法题写了一个递归,差不多就这样就过了

1)技术部分

(1)Java8的新特性?

(2)Java8的hashMap为什么采用数组+链表+红黑树?

(3)垃圾回收的算法,CMS和G1的比较,用什么监控JVM?

(4)Kafka对接SparkStreaming?

(5)线程池好处是什么,什么场合用?

(6)Zookeeper的选举机制,以及我们还可以用Zookeeper做些什么?

(7)Flume采集数据的优缺点,还有什么可以代替它,也可以通过自己公司的业务情况自己开发。

(8)Spark Streaming和Storm,Flink的比较,以及各自的优势?

(9)怎么从10亿条数据中计算TOPN?

学长2

1)基本信息

(1)面试地点:小米6期

(2)面试时长:共2个半小时

2)一面(下午3点30分到4点10分):

(1)自我介绍

(2)Spark Streaming和Flink区别

(3)MR和Spark引擎的区别

(4)引起Shuffle的算子有哪些?

(5)Flink+Kafka保证精确一次消费相关问题

(6)Zookeeper的应用

(7)Java中HashMap和TreeMap区别(记不清是不是这个问题了)

(8)SparkStreaming保证精确一次消费

(9)给出数据倾斜解决方案

(10)被问到任务划分的源码(DAGScheduler划分)

(11)给一个整形数组,找出最大的连续子集

(12)给一个数组,一个值,找出第一次出现的两个数的和等于这个值的下标并存入List中(好像Letcode第一道题,双层for循环)

(13)Spark中划分宽窄依赖的底层原理:只说Shuffle划分Stage没用

3)二面(下午4点25分到5点10分):

(1)自我介绍

(2)手写SQL:(看着你写,注意)

表t1

页面id 点击 浏览 日期

page_id view visiable date

0 0/1 0/1

1 0/1 0/1

...

表t2

品类id 页面id

border_id page_id

a 0

b 1

a 3

a 4

b 0

...

找出各个border_id的view,visable个数 (join group by where count(if)......)

(3)JVM内存和调优

(4)Redis数据类型,事务(凭印象说的multi,exec,watch),持久化方式和区别,Redis中zSet底层实现是什么?

(5)Redis问的很细

(6)跑任务用的什么(Azkaban)?定点定时跑还是周期性跑?

(7)手画星座模型

(8)业务过程,维度,事实

(9)手写单例模式

(10)实时统计过的指标

(11)如何从0到1搭建数据平台?

4)三面(下午5点10分到5点30分):

(1)自我介绍

(2)B+树和B树底层,与二叉树的区别(手画) 不太会

(3)给你两个矩阵(txt文件,以\t分隔),让你用MapReduce实现两个矩阵相加并输出(每行打行号标记)

... ...

5)四面:(下午5点35分到5点50分)

(1)了解上家公司情况

(2)入职相关事情

学长3

1)笔试:

(1)链表两两反转(搞定)

(2)验证二叉树是否符合以下条件:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。(我说我对二叉树不咋熟悉)

(3)求一个序列中的最长上升子序列的长度(搞定)

2)面试:

(1)Flink的状态后端

(2)说说rockDB状态后端,rockDB做状态后端有啥好处和缺点

(3)说说HDFS状态后端,它是怎么存储的状态的

(4)说说Flink中的keyState包含哪些数据结构

(5)Redis常用数据类型

(6)SparkStreaming是如何处理数据积压的,说说反压机制的令牌桶算法

(7)简单谈谈JVM垃圾处理的算法,了解多少,分别是什么

(8)谈谈JVM内存的分布,方法区中都存些什么

学长4

1)语言基础:

(1)String类可以被继承吗?为什么?

(2)HashMap,HashTable,ConcurrentHashMap的异同?

(3)Java单例模式,Scala语言如何实现?

(4)实现快速排序算法

(5)设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。

2)Hive

(1)把每科最高分前三名统计出来 --成绩表Score(student_name,student_no,subject_no,score)

(2)找出单科成绩高于该科平均成绩的同学名单(无论该学生有多少科,只要有一科满足即可) --成绩表Score(student_name,student_no,subject_no,score)

(3)一个表 test(name,price),构建一个新表,将name相同的,price所有价格合并到一个字段里面

(4)如何将题3中price合并后的prices字段再拆分为多条记录?

3)Spark

(1)用户访问日志文件有两列,分别为日期和用户ID:(date,user_id),使用Spark统计每天的访问的记录数和用户数。

(2)在Spark中,代码的执行位置:

dstream.foreachRDD { rdd =>
      val where1 = "执行位置1"
      rdd.foreachPartition { partition =>
        val where2= "执行位置2"
        partition.foreach { record =>
          val where2 = "执行位置3"
        }
    }
}

学长5

1)基本信息

(1)2019年11月10号:

(2)面试地点:小米6期

(3)面试时长:共2个半小时

2)一面(下午3点30分到4点10分):

(1)自我介绍

(2)Spark Streaming和Flink区别

(3)MR和Spark引擎的区别

(4)引起Shuffle的算子有哪些?

(5)Flink+Kafka保证精确一次消费相关问题(记不清了):我说的两阶段提交

(6)Zookeeper的应用

(7)Java中HashMap和TreeMap区别(记不清是不是这个问题了)

(8)SparkStreaming保证精确一次消费

(9)给出数据倾斜解决方案

(10)被问到任务划分的源码(DAGScheduler划分)

(11)给一个整形数组,找出最大的连续子集

(12)给一个数组,一个值,找出第一次出现的两个数的和等于这个值的下标并存入List中(好像Letcode第一道题,双层for循环)

(13)Spark中划分宽窄依赖的底层原理:只说shuffle划分stage没用

3)二面(下午4点25分到5点10分):

(1)自我介绍

(2)手写SQL:(看着你写,注意)

表t1

页面id 点击 浏览 日期

page_id view visiable date

0 0/1 0/1

1 0/1 0/1

...

表t2

品类id 页面id

border_id page_id

a 0

b 1

a 3

a 4

b 0

...

找出各个border_id的view,visable个数 (join group by where count(if)......)

(3)JVM内存和调优

(4)Redis数据类型,事务(凭印象说的multi,exec,watch),持久化方式和区别,redis中zset底层实现是什么?

(5)Redis问的很细

(6)跑任务用的什么(Azkaban)?定点定时跑还是周期性跑?

(7)手画星座模型

(8)手写单例模式

(9)实时统计过的指标

(10)如何从0到1搭建数据平台?

4)三面(下午5点10分到5点30分):

(1)自我介绍

(2)B+树和B树底层,与二叉树的区别(手画) 不太会

(3)给你两个矩阵(txt文件,以\t分隔),让你用MapReduce实现两个矩阵相加并输出(每行打行号标记)

... ...

5)四面:(下午5点35分到5点50分)

(1)了解上家公司情况

(2)入职相关事情

学长6

1)笔试:

语言基础:

(1)String类可以被继承吗?为什么?

(2)HashMap,HashTable,ConcurrentHashMap的异同?

(3)Java单例模式 Scala语言如何实现?

(4)实现快速排序算法

(5)设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。

Hive

(1)把每科最高分前三名统计出来 --成绩表Score(student_name,student_no,subject_no,score)

(2)找出单科成绩高于该科平均成绩的同学名单(无论该学生有多少科,只要有一科满足即可) --成绩表Score(student_name,student_no,subject_no,score)

(3)一个表 test(name,price),构建一个新表,将name相同的,price所有价格合并到一个字段里面

(4)如何将题3中price合并后的prices 字段再拆分为多条记录?

Spark

(1)用户访问日志文件有两列,分别为日期和用户ID:(date,user_id),使用Spark统计每天的访问的记录数和用户数。

(2)在Spark中,代码的执行位置:

dstream.foreachRDD { rdd =>
      val where1 = "执行位置1"
      rdd.foreachPartition { partition =>
        val where2= "执行位置2"
        partition.foreach { record =>
          val where2 = "执行位置3"
        }
    }
}

2)面试:

(1)Scala中以下几个的区别

(2)Spark UDF与 Hive UDF区别

(3)Spark广播出去的信息可以修改吗?比如我广播的是配置信息,怎么改呢。

大数据培训

猜你喜欢

转载自blog.csdn.net/msjhw_com/article/details/107757297