春招面试经验系列(九)蚂蚁金服
分享一个我的公众号,最近突然想玩公众号,之前做过一段时间前端开发,考虑到现在应用程序越来越多,未来社会一定是一个充满“只有你想不到,没有你做不到”的App的世界!而微信小程序又给我们这群喜爱开发的童鞋们提供了友好的入门机会,因此,不如就在当下,开始一步一步的学习并开发自己的小程序吧。这是我的公众号:目的是和大家讨论小程序开发,同时也带着开发小白入门设计开发微信小程序,来吧,加入!
正文:
蚂蚁金服
一、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)解决多指标数据、单位不同问题:最小最大,零均值,小数。
十七、最近阅读了什么书籍,对你有什么启示。
春招面试经验系列(九)蚂蚁金服相关推荐
- 春招面试经验系列(三)商汤科技
商汤科技 java基本上问的都是多线程的问题 一.java中int存储字节数: 1.1字节(byte)= 8位(bit) 2.整型:short 2字节.int 4字节.long 8字节 3.浮点型:f ...
- 春招面试经验系列(一)菜鸟网络
菜鸟网络 一.线程和进程的概念和区别,在Windows和linux上的区别? 概念上:(进程)具有一定独立功能的程序关于某个数据集合上的一次运行活动,是应用程序的一个实例,进程是系统进行资源分配和调度 ...
- 这份大厂面试真题之蚂蚁金服,已经通过很多内部人员的证实!建议收藏 ,反复观看!(一)
后续会更新大厂面试真题之蚂蚁金服二哦 目录 1. jdk1.7 到 jdk1.8 Map 发生了什么变化(底层)? 2. ConcurrentHashMap 3. 并行跟并发有什么区别? 4. jdk ...
- b类 蚂蚁金服_这份大厂面试真题之蚂蚁金服,已经通过很多内部人员的证实!建议收藏 ,反复观看!(一)...
后续会更新大厂面试真题之蚂蚁金服二哦 1. jdk1.7 到 jdk1.8 Map 发生了什么变化(底层)? 1.8 之后 hashMap 的数据结构发生了变化,从之前的单纯的数组+链表结构变成数组+ ...
- 2019面试总结(阿里巴巴蚂蚁金服、饿了么、人人车等)
前言 今年跳槽换工作,一共面试了8家公司,拿到了6个offer,其中包括阿里巴巴蚂蚁金服(外派杭州).饿了么.人人车等公司,总体来说还算是顺利,因为也没面的特别多,想把今年的面试情况总结一下,给自己做 ...
- 2016面试——腾讯、蚂蚁金服、蘑菇街
腾讯TST技术面: 先罗列一下问题吧: 编程语言编译的过程 同样的逻辑,golang的二进制代码比C语言的二进制代码长很多.试分析原因 项目 ,三个项目都有聊.因为现场面,可以用纸写,所以描述的更清楚 ...
- 2018面试总结(阿里巴巴蚂蚁金服、饿了么、人人车等)
前言 今年跳槽换工作,一共面试了8家公司,拿到了6个offer,其中包括阿里巴巴蚂蚁金服(外派杭州).饿了么.人人车等公司,总体来说还算是顺利,因为也没面的特别多,想把今年的面试情况总结一下,给自己做 ...
- 2019中原银行春招面试经验帖
因为网上关于中原银行的面试经验太少了,所以我写一写,方便后来的人参加工作.下周签三方. 首先网申,校招几乎是不刷简历的,所以都能过.之后是笔试,都是选择题,笔试是行测(40)+java(40)+数据库 ...
- 运营商2019春招面试经验(广东移动市场岗+湖南联通技术岗)
移动当时投了两个地方的,有的可能需要笔试. 结果:都拿到了offer 联通:是双选会现场投的.上午就是填了份资料然后问了些大概情况,下午去教室面试,问了些校园里的情况和技术的一些问题,相对比较水,基本 ...
最新文章
- Xamarin.Forms获取设备屏幕大小
- 女性养生需知的16条健康戒律
- 语言关键字特别注意没有_从零开始写文本编辑器(三十三):前20名编程语言的关键字...
- 服务的实例已在运行中_亚马逊首次把macOS引入云服务
- python 中文编码差异_Python 编码为什么那么蛋疼?
- 【渝粤题库】广东开放大学 标准法律法规 形成性考核
- 解析软件系统稳定性的三大秘密
- BOSS直聘发起“逆行者先行”招聘专场:优先录取抗疫志愿者
- 细说进程、应用程序域与上下文之间的关系(三)—— 深入了解.NET上下文
- java离职证明模板word_离职证明模板Word免费版下载
- Zabbix5系列-监控惠普服务器iLO管理口 (六)
- 矩阵分析之 伪逆矩阵,左逆,右逆,广义逆
- 芳菲也迷人,玩转北京大周边
- 网站漏洞修复之苹果cms电影系统
- 红米Note3全网通开发版(MIUI10 8.11.22 安卓6)获取完整root权限
- python3 print输出不换行
- CDR插件开发之Addon插件005 - Corel.Interop.VGCore.dll库文件简介
- Python学习笔记--文件操作
- 如何在Ubuntu上使用Ensemble数据库Biomart预测目标基因可能结合的转录因子
- 我的计划、你的计划与世界的计划