春招面试经验系列(六)阿里 菜鸟网络 、美团

阿里 菜鸟网络

一、介绍下MapReduce的原理。

1、 Map过程:数据从hdfs中传入一个maptask,数据经过partition之后存入map的内存缓冲区(每个map task都会有一个内容缓冲区),当缓冲区满了之后就会将缓冲区的内容存到磁盘上,然后再用缓冲区来接受新的数据,这个往磁盘存数据的过程就是spill。当整个map task结束后再对磁盘中所有的临时文件做合并。

2、 在MapReduce中reduce的用法规定在从map中取数之后到合并计算的过程中,其实在数据传入reduce之前也有“reduce”过程,称作combine。Combiner等同于reducer,combiner将有相同的key/value对的value加起来,减少写到磁盘的数量。

3、 Map端的所用工作结束后,最终生成的merge后的文件存放在tasktracker能够检测到的某个本地目录中,每个reduce task不断的通过RPC从jobtracker哪里获取maptask是否完成的信息,如果reduce task得到通知已经完成,再启动shuffle的后半段过程。

4、 Reduce task 执行之前,就是从不同的map task的最终结果,将他们merge到一起,形成reduce task的输入文件。

5、 Reduce端的shuffle过程:(1)copy过程:不停的从本地磁盘通过对tasktracker的访问来拉取map的输出文件。(2)merge过程:copy过来的数据将先存放在缓冲区,这里和map的缓冲区原理一样(这个过程如果设置了combiner,也会启动),然后知道没有了map端的数据才停止merge(这里的merge有三种形式:内存到内存,内存到磁盘,磁盘到磁盘)。

6、 不断的merge后,reducer获得了最终的输入文件。整个shuffle过程结束!然后就是reducer执行,把结果放到hdfs上了。

combiner function可以减少需要在map和reduce之间传输的数据。

shuffle:后台线程根据reduce个数将输出结果进行分组。


二、MapReduce如何解决数据倾斜问题?

在map端解决,或对key操作从而缓解reduce的压力:

1、参数调优:(1)hive.map.aggr=true,

                      (2)hive.groupby.skewindata=true:为了让结果是相同的groupby key有可能被分到不同的reduce中,从而达到负载均衡的目的。

2、在key上做文章,在map阶段将造成倾斜的key先分成多组,在为计算之前将多的key后边加上例如1,2,3,4这些字符,先进行一个运算,之后再恢复key进行最终的运算。

3、先进行group操作,把key先进行一次reduce,之后再进行count或者distinct count操作。

4、join操作中,使用map join在map端就进行join,免得reduce是卡住。


三、会不会数据库?知不知道索引?

会使用一些数据库的指令(show 、use、 create等 )

索引:是指对数据库中的一行或者一列的数值进行排序的一种结构,可以不用遍历整个数据库,方便的访问数据表中的特定信息。例如:select * from table 1 where id = 10000。

四、sql中内连接和左连接的区别是什么?

1、内连接:只有两个表都有的key才会保留。

2、左连接:以左边的表为主,左表有的才会保存。

3、右连接:以右边的表为主,右表有的才会保存。

4、完全连接

5、union:在进行表的连接后,会筛选掉重复的记录,并且进行排序。

6、union all:只是简单的将两个表合并后返回。

五、where和having的区别:

  1. where 过滤行,
  2. having 过滤的是分组,
  3. 区别:where在数据分组前进行过滤,having在数据分组后进行过滤。where 排除的行不包括在分组中,可能会改变计算值。

六、决策树和逻辑回归的区别?什么时候用决策树,什么时候用逻辑回归?

  1. 逻辑回归对数据整体结构的分析优于决策树,而决策树对局部结构的分析优于逻辑回归。
  2. 逻辑回归擅长辨识线性关系,而决策树对线性关系的把握较差。线性联系在实践中有很多优点:简洁,易理解,
  3. 可以在一定程度上防止对数据的过度拟合。决策树的强项是非线性关联,但是很多非线性关系完全可以用直线模拟,
  4. 逻辑回归对极值比较敏感,容易受极端值的影响,而决策树对极值有很好的抗干扰性。
  5. 决策树由于采用分割的方法,所以能够深入数据细部,但同时就失去了对全局的把握。一个分层一旦形成,它和别的层面或节点的关系就被切断了,以后的挖掘只能在局部中进行。同时由于切分,样本数量不断萎缩,所以无法支持对多变量的同时检验。而逻辑回归,始终着眼整个数据的拟合,所以对全局把握较好。但无法兼顾局部数据,或者说缺乏探查局部结构的内在机制。

美团

一、MySQL第一范式,第二范式,第三范式

1、第一范式:指的是数据库表的每一列是不可分割的基本数据项,同一列中不能有多个值。

2、第二范式:在第一范式的基础上简历起来,即首先需要先满足第一范式,同时要求数据库表中的每个行必须是被唯一地区分。

3、第三范式:如果关系模式R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R是第三范式的模式。(例如学生表:学号、姓名、课程号、成绩)

二、MapReduce的执行过程

1、 Map过程:数据从hdfs中传入一个maptask,数据经过partition之后存入map的内存缓冲区(每个map task都会有一个内容缓冲区),当缓冲区满了之后就会将缓冲区的内容存到磁盘上,然后再用缓冲区来接受新的数据,这个往磁盘存数据的过程就是spill。当整个map task结束后再对磁盘中所有的临时文件做合并。

2、 在MapReduce中reduce的用法规定在从map中取数之后到合并计算的过程中,其实在数据传入reduce之前也有“reduce”过程,称作combine。Combiner等同于reducer,combiner将有相同的key/value对的value加起来,减少写到磁盘的数量。

3、 Map端的所用工作结束后,最终生成的merge后的文件存放在tasktracker能够检测到的某个本地目录中,每个reduce task不断的通过RPC从jobtracker哪里获取maptask是否完成的信息,如果reduce task得到通知已经完成,再启动shuffle的后半段过程。

4、 Reduce task 执行之前,就是从不同的map task的最终结果,将他们merge到一起,形成reduce task的输入文件。

5、 Reduce端的shuffle过程:(1)copy过程:不停的从本地磁盘通过对tasktracker的访问来拉取map的输出文件。(2)merge过程:copy过来的数据将先存放在缓冲区,这里和map的缓冲区原理一样(这个过程如果设置了combiner,也会启动),然后知道没有了map端的数据才停止merge(这里的merge有三种形式:内存到内存,内存到磁盘,磁盘到磁盘)。

6、 不断的merge后,reducer获得了最终的输入文件。整个shuffle过程结束!然后就是reducer执行,把结果放到hdfs上了。

三、MapReduce数据倾斜问题。

四、用过哪些机器学习模型,结合项目。

五、MapReduce和spark的区别?

通俗的讲:Hadoop主要是HDFS和MapReduce,其中HDFS用于存储数据,MapReduce用于分布式处理,而MapReduce阶段又分为map和reduce,然而spark在map和reduce阶段分别有对应的算法:map, flatMap, filter, keyBy,以及reduceByKey, sortByKey, mean, gourpBy, sort等,所以说非常方便。

       Mapreduce是Hadoop1.0的核心,Spark出现慢慢替代Mapreduce。那么为什么Mapreduce还在被使用呢?因为有很多现有的应用还依赖于它,它不是一个独立的存在,已经成为其他生态不可替代的部分,比如pig,hive等。

尽管MapReduce极大的简化了大数据分析,但是随着大数据需求和使用模式的扩大,用户的需求也越来越多:

1.    更复杂的多重处理需求(比如迭代计算, ML, Graph);

2.    低延迟的交互式查询需求(比如ad-hoc query)

而MapReduce计算模型的架构导致上述两类应用先天缓慢,用户迫切需要一种更快的计算模型,来补充MapReduce的先天不足。

 Spark的出现就弥补了这些不足,我们来了解一些Spark的优势:

1.每一个作业独立调度,可以把所有的作业做一个图进行调度,各个作业之间相互依赖,在调度过程中一起调度,速度快。

2.所有过程都基于内存,所以通常也将Spark称作是基于内存的迭代式运算框架。

3.spark提供了更丰富的算子,让操作更方便。

4.更容易的API:支持Python,Scala和Java

其实spark里面也可以实现Mapreduce,但是这里它并不是算法,只是提供了map阶段和reduce阶段,但是在两个阶段提供了很多算法。如Map阶段的map, flatMap, filter, keyBy,Reduce阶段的reduceByKey, sortByKey, mean, gourpBy, sort等。

六、osi 七层模型,tcp协议和IP协议在哪一层?

物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

tcp在传输层,IP协议在网络层。

七、知道哪些排序算法?冒泡排序的时间复杂度和快速排序的时间复杂度?快速排序最差时间复杂度?

1、 冒泡排序:比较相邻元素,成对比较。

2、 快速排序:每一趟排序后都分成独立的两部分,保证其中一部分比另一部分小。再分别对两部分进行相同操作。(将第0个看做中轴)

3、 堆排序:树形选择排序,对直接选择排序有效改进。

4、 选择排序:在一组数中选出最小的一个数与第一个位置的数交换(这个最小的数不参与之后的计算),以此类推(与第二,第三等等后边的位置交换)

5、 插入排序:先比较前两个数,按大小排序再比较第三个,然后插入前边的合适位置,以此类推。

6、 归并排序:将两个有序表合并成一个有序表的过程。

7、 希尔算法:将整个序列分成若干个子序列,依次进行直接插入排序,然后再对全体序列进行插入排序。


你可能感兴趣的:(面试,春招,互联网公司)