蚂蚁金服
一、Spring MVC中scope的作用
二、Spring Bean的生命周期
https://www.cnblogs.com/redcool/p/6397398.html
三、Hadoop和spark框架理解,MapReduce与spark之间处理有什么不同?
spark和Hadoop的关系:
Spark是类Hadoop MapReduce的通用并行框架, 专门用于大数据量下的迭代式计算。是为了跟 Hadoop 配合而开发出来的,不是为了取代 Hadoop, Spark 运算比 Hadoop 的 MapReduce 框架快的原因是因为 Hadoop 在一次 MapReduce 运算之后,会将数据的运算结果从内存写入到磁盘中,第二次 Mapredue 运算时在从磁盘中读取数据,所以其瓶颈在2次运算间的多余 IO 消耗。 Spark 则是将数据一直缓存在内存中,直到计算得到最后的结果,再将结果写入到磁盘,所以多次运算的情况下, Spark 是比较快的。其优化了迭代式工作负载。
四、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时卡住。
五、mapper和reducer之间怎么保证数据的正确传输,传输流程是什么?
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个数将输出结果进行分组。
六、mapper和combiner的关系?
combiner:是一个Hadoop优化性能的步骤,它发生在map与reduce之间。目的是为了解决数据倾斜的问题,减轻网络压力,实际上是减少了maper的输出。
既然在reducer端的作用是对数据进行规约处理,那么为什么还有在mapper端进行数据规约呢?
答:我们知道,MapReduce是分为Mapper任务和Reducer任务,Mapper任务的输出,通过网络传输到Reducer任务端,作为输入。在Reducer任务中,通常做的事情是对数据进行归约处理。所以既然数据来源是Mapper任务的输出,若在Mapper端对数据进行归约处理,业务逻辑与Reducer端做的完全相同。处理后的数据再传送到Reducer端,再做一次归约。这样的好处是减少了网络传输的数量。
优点一:因为在Mapper进行归约后,数据量变小了,这样再通过网络传输时,传输时间就变短了,减少了整个作业的运行时间。
优点二:因为Reducer端接收的数据就是来自于Mapper端。我们在Mapper进行归约处理,无非就是把归约操作提前到Mapper端做而已
优点三:因为Mapper端的数据仅仅是本节点处理的数据,而Reducer端处理的数据是来自于多个Mapper任务的输出。因此在Mapper不能归约的数据,在Reducer端有可能归约处理。
七、KNN算法与贝叶斯算法原理
八、多线程有几种实现方式?他们区别是什么?有没有返回值?如果想要返回值怎么实现?
1、继承thread类:thread本质上也是实现了runnable接口的一个实例。启动线程的唯一方法就是通过start()方法,然后执行run()方法。
2、实现runnable接口:自定义类并实现runnable接口,并创建thread对象。
3、实现callable接口:有返回值:与runnable功能类似,但是比runnable功能更强大。
九、堆排序的过程,时间复杂度,适用的场景。
每一次建立一个堆,然后把最大值放到末尾。
时间复杂度为O(n^2)
十、深度优先、广度优先的过程,适用场景
1、深度优先:用栈实现,适用于内存小的情况。
2、广度优先搜索:用队列实现,速度较快,占用内存较大。
十一、数组和链表的区别?
总之,想要快速访问元素,就用数组结构,想要多次增删元素,就用链表结构。
十二、内连接和外连接的区别?
1、内连接:合并两个表中都有的部分。(即从结果行中删除与其他连接表中没有匹配的所有行,所以内连接可能会造成信息的丢失)
2、外连接:不仅包含符合连接条件的行,而且还包括左表、右表或两个外连接表中的所有数据行。
十三、spark与Hadoop相比的优势?
1、中间数据缓存,MapReduce缓存在磁盘上,spark缓存在内存中。
2、API:MapReduce:map函数和reduce函数。spark:灵活性高。对应map和reduce阶段有相应的函数。
3、程序调度:MapReduce需要用oozie。spark:自行调度。
4、适合计算类型:spark适合迭代计算。
5、使用场景:MapReduce离线的海量数据统计分析。spark:实现实时的算法和机器学习。
十四、项目介绍
十五、数据建模的目的、建模方法、怎么调优、怎么判断模型好坏、特殊情况怎么处理?
十六、数据清洗怎么做?
数据清洗需要从两个角度看待:解决数据质量问题和使数据更适合数据分析。
1、数据质量问题:(1)数据完整性:通过其他信息进行补全;通过前后数据补全;数据补全的可以删除。
(2)数据唯一性:去重,按照主键去重和按照规则去重。
(3)数据合法性问题:设定合法规则;字段类型规则;字段内容合法规则。
2、使数据更适合数据分析:
(1)高纬度:PCA主成分分析
(2)解决纬度低的问题:汇总;平均;加权;最大;最小
(3)解决冗余手段
(4)解决多指标数据、单位不同问题:最小最大,零均值,小数。
十七、最近阅读了什么书籍,对你有什么启示。