A. 面试题-关于大数据量的分布式处理
面试题-关于大数据量的分布式处理
题目:生产系统每天会产生一个日志文件F,数据量在5000W行的级别。文件F保存了两列数据,一列是来源渠道,一列是来源渠道上的用户标识。文件F用来记录当日各渠道上的所有访问用户,每访问一次,记录一条。
请问如何快速计算出各渠道上新增的用户?
问题分析:首先本次面试的是有关于分布式数据处理以及数据分析的职位,所以相关的面试题目可能会偏向于使用分布式的思想去解决。但无奈本人当时反应太慢,实在没向分布式处理方向思考。
方案一:
本题最直观的一个处理方法就是,直接拿着当日新增的5000W条访问记录一条一条的去匹配历史访问用户。若存在历史访问记录,则忽略;若不存在访问记录,则保存为新增记录。很明显,假若历史访问用户有2亿条记录,则需要和2亿条数据比较5000W次。比较次数可想而知。
由于本人一直在做基于数据库的数据处理工作,很容易就想到将历史数据保存在数据库的一张表中,并对来源渠道和用户标识这两个字段建立索引,然后遍历日志文件F(5000W次)。根据日志文件F中的每一行去匹配数据库中的历史访问记录。由于历史数据表有索引,单次查询的速度也非常快。但是需要5000W次的数据库查询,很明显效率低下。
方案二:
既然多次单一查询无法满足要求,于是可以先通过一种数据导入技术将当日新增数据导入到数据库的另一张表中,并和历史数据做左外关联。若能关联成功,则表示此用户已存在;若关联失败,则表示此用户不存在。
此方案暂且不说5000W条记录的大表与2亿条记录的大表关联效率有多高以及使用到的数据库缓冲区的资源有多少,单就5000W条访问记录导入数据库表,都是一个不小的时间花费。
方案三:
很明显,面试时方案二的回答并未达到面试官的预期,最初被遗憾的PASS掉。一家很有潜力,自己很看好的公司,并计划做为自己未来发展方向的职位,就这样丢下我,扬长而去了。
这几天又看了下分布式相关的介绍,突然想到这道题。一下子醒悟过来,其实还是因为对题目要考察的点分析得不够透彻。当时以为只是仅仅考数据处理效率的一个题目,其实考的是一种将复杂问题拆分为简单问题的拆分思想。了解到这一层,一种新的方式立马在脑海中浮现出来。具体如下:
假如现在有N(N>=2)个存储块,并存在一个函数f(来源渠道,用户标识),对于给定的一组(来源渠道,用户标识),总能将其分发到一个固定的存储块内。那么可以使用此函数将5000W行访问记录尽量均匀的分发至N个存储块上,并同时使用此函数将历史访问记录也分发至这些存储块上。由于相同的一组记录,肯定会被分配至同一个存储块,所以比较时,只需要分别比较各个存储块上当日新增记录与历史访问用户,然后将N个存储块上比较的结果汇总,即可得到最终结果。
假设历史访问用户数据已通过函数f(来源渠道,用户标识)被分发至了N个历史文件H1、H2、…、HN。则详细处理步骤如下:
1、将F中的内容使用函数f(来源渠道,用户标识),分发至文件F1、F2、…、FN内。(可开M(M>=2)个并行,且若N-M越大,同时向同一文件写入数据的概率越小)
2、将文件F1、F2、…、FN内的访问记录去重。(可开N个并行分别处理对应的N个文件)。
3、将文件Fn(1=<n<=N)去重后的结果与对应的历史文件Hn比较得出新增用户结果Rn。(可开N个并行分别处理对应的N个文件且当N足够大时,实际要处理数据的量级就会相当小)。
4、合并第3步得到的结果R1、R2、…、RN即可得到当日新增用户。(可并行)
5、为使历史数据文件H1、H2、…、HN中的数据最全,将结果R1、R2、…、RN分别写入对应的历史文件中。(可并行)
本方案主要有以下优点:
1、数据的分发、处理、合并都可并行处理,明显提高了处理效率。
2、由于每个存储块上的新增数据,只需要与它对应存储块上的历史数据比较即可,大大减少了比较次数。(对于当日每一条记录来说,都只需要与大约历史的N分之一条数据去比较)
3、基本不需要考虑历史全量数据的保存及获取问题。
本方案缺点:
1、处理方案明显变的复杂许多,不仅需要处理数据的分发,处理,还需要一个并行的快速收集方法。
2、可能需要多台服务器并行处理。
本方案难点:
1、一个稳定(对于相同的一组来源渠道和用户标识,必定会被分发至同一存储块)、快速(根据一条来源渠道和用户标识数据,可以快速的计算出它将要被分发至的存储块)、均匀(当日新增数据及历史数据都能尽量均匀的被分发至N个存储块,最理想的情况是每个存储块上分发到的数据都是总数据的N分之一)的分发函数至关重要。
2、如何分发、并行处理及汇总数据。
B. 大数据告诉你求职者是如何面试的
大数据告诉你求职者是如何面试的
大数据告诉你求职者是如何面试的,对没有多少经验的求职者来说,想要轻松面试,可以多看一些被人面试的案例,这样能提高自己面试的技巧。下面是大数据告诉你求职者是如何面试的!
又到每年的招聘旺季,想跳槽的人都已经走在了面试的路上,运气好的人已经拿到了offer。
无论如何,面试是找工作中躲不开的一环,作为正在找工作的我们,是不是时常有这样的困惑,为什么别人面试轻轻松松,“一面”就过了,而自己却连个面试机会都没有;
为什么别人上午面,下午就被录用了,而自己面试“一面”、“二面”,最终却“黄”了;求职者面试不能迟到,但面试官却迟到了,作为求职者该等多久才合适;
面试结束多久没回音,就真的没戏了……这些面试时的“疑难杂症”到底如何解开?想知道大家是如何面试的吗?别急,这篇文章将揭晓答案。
好不容易来面试了,而我却不想要,什么原因?
没面试,盼面试,有面试,却不想去,这是出了什么状况?日前,前程无忧在网上发起了《个人面试行为习惯》大调查;
调查显示:“薪资谈不拢”、“公司本身信息缺失”、“风评不好”、“路程太远”和“公司只发短信通知面试”这五个情况成为个人有面试机会却不想去的主要原因。其中薪资达不到期望是首因。
有趣的是,对于“路程太远”这一投票选项,女性比男性更在意。数据显示,63%的女性受访者表示公司离家太远的话就不想去面试了,而仅有37%的男性表示介意路程问题。
哪些情况会让你不想要面试机会
12%左右的人会放公司“鸽子”
调查显示,如果约好的面试,因为各种原因不想去了,大部分人(超八成)会告知公司,仅有12%左右的人直接爽约,什么也不干。
数据还显示:直接爽约率与工作年限成反比。例如,工作1—2年的受访者,面试爽约率在14%左右,而拥有6年工作时间的受访者,面试爽约率在12%左右,工作10年的受访者面试爽约率为11%左右。
显然大部分人在面试约定这件事上做到了诚信,保持着良好的职业素养。
通过此次调查还发现,个人取消面试的主要原因是公司风评不好。受访者表示,在答应面试以后,会对公司进行初步的了解,如果看到公司在网上有不好的风评,会直接打消面试念头。
此外,实地考察路途太远,也是取消面试的重要因素。当然还有一类重要原因是,个人同时拿到了更为心仪的公司面试邀请,而面试时间发生了冲突,不得不取消原来的面试约定。
公司离家近是一种什么样的体验?
前面提到,路途太远成为个人不接受面试或是取消面试的重要原因。那究竟公司离家多远才算远呢?进一步调查显示,61%的受访者表示,半小时是忍耐的界线。
公司离家近节约的不仅仅是交通费,还有时间成本。一位网友表示:“上份工作,去公司单程时间要2个小时,当同事在家吃晚饭时,我还在路上;同事吃完饭出门散步遛娃的时候,我还在路上;
同事都上床休息,陪着娃做睡前阅读了,我终于打开了家的大门,这是一种怎样的体验?”
单程上班时间多长能忍受?
另外一位网友感叹:“公司离家远,天天顶着星星出门,看着月亮回家,不见天日。当时间不再像是手握流沙而是被整块整块地搬走时,我很快就觉悟到了人们口中‘钱多事少离家近’中那‘离家近’ 的含义。”
面试地点在酒店客房?不去!
调查发现,受访者曾经去过的'面试地点“五花八门”,郊外、仓库或是居民区,已经司空见惯,那种明晃晃地把面试地点安排在酒店客房的情况,还真叫大家无法接受。
受访者表示:酒店客房、交通枢纽和酒店大堂是让人最不能接受的面试地点。
有位从事HR工作的网友表示:“有些公司在异地招聘时可能会把面试地点定在酒店,但一般会在酒店的大堂或是咖啡吧等公共区域。所以个人找工作时还是要具体情况具体分析,不用一见地点是酒店就疑神疑鬼。”
哪些面试地点让你犹豫?
异地面试,成本是个问题
根据最近的前程无忧求职者跳槽意愿度调查显示,近6成的个人愿意异地找工作,异地跳槽已是常态。但是在异地招聘过程中,如果公司不报销面试费用,个人异地面试的意愿度会急剧下降。
本次调查显示,如果公司不承担面试费用(交通费、住宿费等),65.7%的受访者不愿意去异地面试。在不愿去异地面试的人群中,女性占比高于男性。
无忧专家建议:虽然异地面试成本高,但是对于心仪的工作,公司在行业中排名靠前的话,个人不妨可以要求公司先视频面试,做初步沟通,如果双方都有意向,再进行异地面试也为时不晚。
异地面试,公司不负担费用,你会去面试吗?
面试官迟到,到底等不等?
近7成受访者表示,最多等面试官一个小时,其中有2.73%的受访者表示耐心有限,只等五分钟,另有33.45%的受访者表示会等半小时。
面试官迟到,你会等多久?
大部分网友表示:等还是不等?看自己对机会的渴望度!网友“时间换空间”认为:“福利待遇一般的公司我可以等30分钟;较好的公司我等60分钟。差的公司,10分钟不来我就走人。”
网友“xiaomin80”表示:“面试官迟到要不要等,看你是不是真的很需要一份工作。
我刚毕业的时候去一家日企等过十个小时,当时老板体会到我的诚意,当场就录用了我。如果面试当天自己没有其他重要的事情,等等也无妨。
关键是看,面试官出现后是不是能很诚恳地表示歉意,并且解释迟到的原因。有时候老板的事情突如其来,他又不得不处理,我们要体谅。”
面试后多久没通知,你觉得没戏了?
前程无忧调查显示,9成受访者认为面试结束2周内没通知,面试就是没戏了。还有7%受访者认为,4周内没通知,才是真的面试失败了。
进一步调查显示,当面试没回音时,近七成受访者不会联系公司,认为联系了也没有用;有36%的受访者会联系公司询问情况。
面试结束多久没通知,就没戏了?
面试后(一周以上)没有回音有可能遇到以下几种情况:
情况一: 还需要安排下一轮面试,而面试官一般是级别较高的领导,出差、会议安排多,HR要和其协调安排面试时间,这个过程会比较费时,但进入下一轮甚至入职的希望也会相应增加。
情况二: 还有其他的候选人。你的面试表现只是过关,但并非是最好最令人满意的,只是侯选池中的一员,因此要等整一轮面试过后才能决定你的“命运”。
如果在之后的候选人中有表现优异的,那“暂时”没有回音就成了“永远”没有回音了。
情况三: 一些较高层的职位本身的招聘时间会更长一些,企业会更慎重地考量、挑选候选人,所以很可能面试一周后还没有回复。
情况四: 很不幸,你被淘汰了。
总之,面试后没回音是“正常”现象,若是你所心仪的公司,发个邮件或打个电话跟进询问一下也无妨,说不定你的热忱和主动会打动HR或面试官,再给你一次机会呢。
离面试成功到底要过几关?
调查显示,面试需要经过5轮以上的受访者并不在少数,占到了14%左右。63%的受访者面试2轮以内。
在被录取前,你面试了几轮?
猎头J女士表示,通常管理岗位面试时间较长,需要面见的面试官也较多;而基础岗位的面试轮次基本在1—2轮。面试的轮数越多,从另一个方面也可以证明岗位的重要性,公司方出于谨慎需要几轮面见才能最终决定。
从事HR工作的王女士这样透露:“面试的时候,经历了五轮面试后没有消息的,问题并不一定出在第五轮。
很多时候可能是前面的面试官意见有分歧,但是还是需要考察完再慎重考虑,这个时候一般会让候选人走完整个招聘流程。
所以在分析面试为什么没成功时,要通盘考虑,失败原因是综合的,终面没过并不代表问题出在终面上。”
最后,我们还是要时时刻刻提醒自己,我们只是在找工作,不是“求”工作。面试是双向的,也是平等的。只有在面试前做足应对准备,对形势有充分地预估,那么在面试中才能游刃有余掌控全局。
面试中技术很重要,但是如何去沟通表达你的技术更重要,这篇文章内容会讲一些面试中的方法论,后续将不定期进行更新。首先,在这里我想提前说三个问题:
大数据面试
1、面试和工作要懂得分开,先不要过多担心自己写内容在真正工作时不会做,要先解决第一个问题,先有机会进到公司。至于工作的问题是后话,有另一套方法论解决,不是当前要考虑的问题。
2、当前的复习不要追求大而全,不要盲目复习,要根据自己的简历复习,怎么根据简历做看下面内容。
3、高薪肯定是好的,但是要有自我的认知,付出努力会有回报,要追求卓越,要有自驱力。
简历书写
格式
1、专业技能点(8~10 行,主要描述自己掌握的技术栈,可以按照框架划分)
2、工作项目个数(1年经验[1~2]个项目,2年经验[2~4]个项目,3年经验[3~4]个项目)
3、项目描述(概况说明项目即可,但是不能太短,不要两三句话就结束了)
4、架构组件(项目中涉及的技术组件列出来 A+B+C+…的形式)
5、项目流程(可以将项目的整个流程,以列表形式描述出来,要包含所用的关键技术组件,注意用技术的名词,组件名词,别都是中文描述)
6、项目职责(个人职责[3~5]条),`这里注意个人职责,先概况说明,有必要的话再细化一些,比如负责计算了XX指标,描述出来通过什么方式,或者用了什么函数计算了XX指标`。每条不要一句话参与了XX事情,就结束了。
7、自我评价(自己发挥,正能量即可,比如追求卓越,自驱力等)
内容
1、错别字和技术组件的大小写问题,要注意检查,同一个技术组件不要有的大写有的小写。
2、项目内容的时间顺序要有逻辑比如采集-数仓-画像-推荐 在时间上的顺序要递进,但是这里注意项目在简历中可以倒序排列。
3、项目可以根据自己对组件的掌握程度,已经对我们学习项目的掌握程度来写,比如 Flink掌握不好,可以不写,但是Spark是必须的。
4、简历项目一定要认真读,认真思考,我在简历项目中已经把涉及到的问题讲解的比较清晰了,借用到自己的项目中时,要转换为自己的语言。
如何沟通?
项目架构图
你的每一个项目都要将项目架构图画出来(这很重要),架构图中要提现出你项目中所涉及的技术组件,弄清楚一条数据在你架构图中的每个组件的输入输出都是什么;
每一个组件在架构图中的作用是什么,为什么用它,能解决什么问题。尤其在你写的自己的项目职责,要在架构上有体现。
架构图画出来有两名方面的作用:
架构图能让你对你的项目有更明确深入的理解,有助于你思考问题。同时在描述项目是思路会更清晰。这就要求你画架构图是不仅仅是列出来组件,而是要明白数据在:
1、组件中的流转,每个组件对数据都做了怎样的处理,我为什么要用这个组件,它有什么优势,有没有可以替代的其他方案。当然上述这些不是每个人都能做的完美,请记住我们这句话Done is better than perfect。
2、当你做完自我介绍后,不要傻傻的等着面试官问你问题,如果手边有纸和笔,或者身边有黑板,就对面试官说,您好,我能把我项目的架构图画一下吗;
这样我们有一个上下文,也比较容易沟通,我对着架构给你讲一下我们项目的技术栈,期间你有什么技术问题,可以随时打断我。
这样是不是就可以把你们沟通的思路圈定到你线下准备的架构上了,是不是对你就更有利了?
当然会遇到面试官不需要或者没有给到机会画架构,不必担心,那就正常走面试流程就可以了。
3、因为在沟通过程中,不可避免会问到你项目中关键组件的一些技术原理问题,比如你用ClickHouse,问你ClickHouse为什么你得知道吧,因此关键组件的基本原理还是要掌握一些,但也不要追大。
技术问题
你的每一个项目都要准备两个相关的技术问题,有深度一些的,准备这些问题作用如下:
当你描述自己的项目的时候,不要只是去讲解项目流程,同时要说一个问题,比如“我在做项目的时候,在什么样的场景下,遇到了XX问题,然后我是怎么解决的”。
这样会让面试官听起来更有质量,同时面试官也可能会追问这个问题,你们是不是就有共同语言了。
比你沉默不语要好得多”。
心态
1、前几次的面试,是找经验的,不必关心结果,不用感觉到面试回答不好,就影响到心情,这是很正常的事情。
你要做到的就是面试之后的“总结”,这个非常重要,每一次面试之后都要深刻总结问题,不仅是技术问题;
还有自己在面试过程中的表现,有没有找到机会画架构图,有没有一些问题是自己会的,但是当时由于什么原因没有答上来,下次该如何调整。
2、面试时不用紧张,此处不留爷,自由留爷处,你和这个面试官可能一辈子就这一次见面的机会,有什么可紧张的,就是表现的再不好,又有什么可怕的。
3、面试的过程其实就是与人交流的过程,要善于抓住机会把自己的能力表现出来,也要能够抓住机会,引导面试官问你会的问题。
比如上边说的描述项目中,说出来自己遇到的问题,已经怎么解决的,就可能把面试官的思路引导到你解决问题的场景和组件上。 还有自我介绍后的画架构图,都是这个思路。
C. 大数据面试题以及答案整理(一)
一、Map端的shuffle
Map端会处理输入数据并产生中间结果,这个中间结果会写到本地磁盘,而不是HDFS。每个Map的输出会先写到内存缓冲区中,当写入的数据达到设定的阈值时,系统将会启动一个线程将缓冲区的数据写到磁盘,这个过程叫做spill。
在spill写入之前,会先进行二次排序,首先根据数据所属的partition进行排序,然后每个partition中的数据再按key来排序。partition的目的是将记录划分到不同的Recer上去,以期望能够达到负载均衡,以后的Recer就会根据partition来读取自己对应的数据。接着运行combiner(如果设置了的话),combiner的本质也是一个Recer,其目的是对将要写入到磁盘上的文件先进行一次处理,这样,写入到磁盘的数据量就会减少。最后将数据写到本地磁盘产生spill文件(spill文件保存在{mapred.local.dir}指定的目录中,Map任务结束后就会被删除)。
最后,每个Map任务可能产生多个spill文件,在每个Map任务完成前,会通过多路归并算法将这些spill文件归并成一个文件。至此,Map的shuffle过程就结束了。
二、Rece端的shuffle
Rece端的shuffle主要包括三个阶段,、sort(merge)和rece。
首先要将Map端产生的输出文件拷贝到Rece端,但每个Recer如何知道自己应该处理哪些数据呢?因为Map端进行partition的时候,实际上就相当于指定了每个Recer要处理的数据(partition就对应了Recer),所以Recer在拷贝数据的时候只需拷贝与自己对应的partition中的数据即可。每个Recer会处理一个或者多个partition,但需要先将自己对应的partition中的数据从每个Map的输出结果中拷贝过来。
接下来就是sort阶段,也称为merge阶段,因为这个阶段的主要工作是执行了归并排序。从Map端拷贝到Rece端的数据都是有序的,所以很适合归并排序。最终在Rece端生成一个较大的文件作为Rece的输入。
最后就是Rece过程了,在这个过程中产生了最终的输出结果,并将其写到HDFS上。
读:
1、跟namenode通信查询元数据,找到文件块所在的datanode服务器
2、挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流
3、datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)
4、客户端以packet为单位接收,现在本地缓存,然后写入目标文件
写:
1、与namenode通信请求上传文件,namenode检查目标文件是否已存在,父目录是否存在
2、namenode返回是否可以上传
3、client请求第一个 block该传输到哪些datanode服务器上
4、namenode返回3个datanode服务器ABC
5、client请求3台dn中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将真个pipeline建立完成,逐级返回客户端
6、client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,A收到一个packet就会传给B,B传给C;A每传一个packet会放入一个应答队列等待应答
7、当一个block传输完成之后,client再次请求namenode上传第二个block的服务器
D. java面试题:将一个20G的数据,存入一个运行2G的电脑里,每个数据占一行,怎么去重
这题考的是大数据去重,数据量大于内存,即无法直接在内存中去重,那回么有两个方案:
1、内存外去重答
也就是将数据存入数据库,然后利用数据库进行排序并去重。
优缺点:
1)优点:简单直接
2)缺点:消耗大
2、算法去重
题目中说明是20G数据,假设每行数据是1k,则数据行数是20M(如果每行数据是512字节,则数据行数是40M),可使用MD5对每行数据进行映射,获得16字节映射吗,即总共需要内存空间320M(或640M),满足内存内去重的需求。
优缺点:
1)优点:在内存内进行处理,速度明显比内存为要快。
2)缺点:需要进行额外的编码,程序复杂度和效率要求较高。
E. 尚硅谷大数据面试都会问些什么
其实不管是哪家公司面试,都是根据你的简历来对你进行提问,所以自己简历上面写的知识点都要全部对答如流。
还有慎用精通这样的字眼,工作五年以上的人,也不敢说自己对哪一方面能够达到精通的地步。
尚硅谷大数据面试的一些基本问题总结如下:
1.讲讲你做的过的项目。 项目里有哪些 难点重点注意点呢?
2.讲讲多线程吧, 要是你,你怎么实现一个线程池呢?
3.讲一下Maprece或者hdfs的原理和机制。map读取数据分片。
4.shuffle 是什么? 怎么调优?
5.项目用什么语言写? Scala? Scala的特点? 和Java的区别?
6.理论基础怎么样,比如数据结构,里面的快速排序,或者,树? 讲一讲你了解的树的知识?
7.数学怎么样呢?
8.讲一下数据库,SQl ,左外连接, 原理,实现?
9.还了解过数据的什么知识? 数据库引擎?
10.Hadoop的机架怎么配置的?
11.Hbase的设计有什么心得?
12.Hbase的操作是用的什么API还是什么工具?
13.对调度怎么理解.? 用什么工具吗?
14.用kettle 这种工具还是 自己写程序? 你们公司是怎么做的?
15.你们数据中心开发周期是多长?
16.你们hbase里面是存一些什么数据
F. 面试问你们大数据项目的数据结构是怎样的
一些最常见的编程面来试问自题:
1.数组编码面试问题
数组是最基本的数据结构,它将元素存储在一个连续的内存位置。这也是面试官们热衷的话题之一。以下是一些热门的基于数组的编程面试问题:
1.如何在一个1到100的整数数组中找到丢失的数字?(方法)
2.如何在给定的整数数组中找到重复的数字? (方法)
3.如何在未排序整数数组中找到最大值和最小值? (方法)
4.如何找到数组所有和等于一个给定数的数对? (方法)
5.如果一个数组包含多重复制,那么如何找到重复的数字? (方法)
6.在Java中如何从给定数组中删除多重复制? (方法)
7.如何使用快速排序算法对整数数组进行排序? (方法)
8.如何从数组中删除多重复制? (方法)
9.如何在Java中对数组进行反向操作? (方法)
10.如何在不使用任何库的情况下从数组中删除多重复制? (方法)
这些问题不仅可以帮助你提高解决问题的能力,还可以提高你对数组数据结构的认识。
G. 大数据中的归并排序(Merge Sort)
最近在研究大数据的分治思想,很多场景计算得出的中间结果都是“内部有序,外部无序”,这时候就要用到“归并排序”算法将多个这样的结果集合归并为一个有序的集合。于是就复习了一下“归并排序”。
在大数据场景中,数据量远大于计算机的内存,磁盘和网络的IO又是无法解决的瓶颈,就需要用到分治思想。
比如有1000G的中国2020年某电商平台用户消费总金额数据。数据格式是用户名:消费总金额。所有数据都是无序的。现在有1台磁盘5T/内存8G(程序可用内存约为5G多)的计算机。如何将数据按消费总金额从大到小排序输出?
a. 从有序队列中取出第一个元素。
b. 将此元素数据写入输出的文件中,并从此元素所属的数组中的下一个元素放入有序队列。
c. 重复步骤a,b直到某个数组元素耗尽,从这个数组所属的5G文件中,继续加载25M数据到内存中。
d. 重复步骤a,b,c直到所有5G文件的数据全部加载到内存中,并写入到输出文件。
H. 大数据面试题及答案谁能分享一下
大数据时代才刚刚开始。随着越来越多的公司倾向于大数据运营,人才需求达到历史最高水平。这对你意味着什么?如果您想在任何大数据岗位上工作,它只能转化为更好的机会。您可以选择成为数据分析师,数据科学家,数据库管理员,大数据工程师,Hadoop大数据工程师等。在本文中,慧都网将介绍与大数据相关的前10大数据面试问题。
以下是最重要的大数据面试问题以及具体问题的详细解答。对于更广泛的问题,答案取决于您的经验,我们将分享一些如何回答它们的提示。
无论何时进行大数据采访,采访者都可能会询问一些基本问题。无论您是大数据领域的新手还是经验丰富,都需要基础知识。因此,让我们来介绍一些常见的基本大数据面试问题以及破解大数据面试的答案。
1.您对“大数据”一词有何了解?
答:大数据是与复杂和大型数据集相关的术语。关系数据库无法处理大数据,这就是使用特殊工具和方法对大量数据执行操作的原因。大数据使公司能够更好地了解其业务,并帮助他们从定期收集的非结构化和原始数据中获取有意义的信息。大数据还允许公司采取数据支持的更好的业务决策。
2.大数据的五个V是什么?
答:大数据的五个V如下:
Volume -Volume表示体积大,即以高速率增长的数据量,即以PB为单位的数据量
Velocity -Velocity是数据增长的速度。社交媒体在数据增长速度方面发挥着重要作用。
Variety -Variety是指不同的数据类型,即各种数据格式,如文本,音频,视频等。
Veracity -Veracity是指可用数据的不确定性。由于大量数据带来不完整性和不一致性,因此产生了准确性。
Value -价值是指将数据转化为价值。通过将访问的大数据转换为价值,企业可以创造收入。
YARN的两个主要组成部分:
ResourceManager-该组件接收处理请求,并根据处理需要相应地分配给各个NodeManager。
NodeManager-它在每个单个数据节点上执行任务
7.为什么Hadoop可用于大数据分析?
答:由于数据分析已成为业务的关键参数之一,因此,企业正在处理大量结构化,非结构化和半结构化数据。在Hadoop主要支持其功能的情况下,分析非结构化数据非常困难
存储
处理
数据采集
此外,Hadoop是开源的,可在商用硬件上运行。因此,它是企业的成本效益解决方案。
8.什么是fsck?
答:fsck代表文件系统检查。它是HDFS使用的命令。此命令用于检查不一致性以及文件中是否存在任何问题。例如,如果文件有任何丢失的块,则通过此命令通知HDFS。
9. NAS(网络附加存储)和HDFS之间的主要区别是什么?
答:NAS(网络附加存储)和HDFS之间的主要区别 -
HDFS在一组计算机上运行,而NAS在单个计算机上运行。因此,数据冗余是HDFS中的常见问题。相反,复制协议在NAS的情况下是不同的。因此,数据冗余的可能性要小得多。
在HDFS的情况下,数据作为数据块存储在本地驱动器中。在NAS的情况下,它存储在专用硬件中。
10.格式化NameNode的命令是什么?
答:$ hdfs namenode -format。
欢迎咨询慧都在线客服,我们将帮您转接大数据专家团队,并发送相关资料给您!
以上就是大数据面试题及答案,希望我的回答对您有帮助!
I. 算法面试
我在《再谈“我是怎么招程序员”》中比较保守地说过,“问难的算法题并没有错,错的很多面试官只是在肤浅甚至错误地理解着面试算法题的目的。”,今天,我想加强一下这个观点——我反对纯算法题面试!(注意,我说的是纯算法题)图片源Wikipedia(点击图片查看词条)我再次引用我以前的一个观点——能解算法题并不意味着这个人就有能力就能在工作中解决问题,你可以想想,小学奥数题可能比这些题更难,但并不意味着那些奥数能手就能解决实际问题。好了,让我们来看一个示例(这个示例是昨天在微博上的一个讨论),这个题是——“找出无序数组中第2大的数”,几乎所有的人都用了O(n)的算法,我相信对于我们这些应试教育出来的人来说,不用排序用O(n)算法是很正常的事,连我都不由自主地认为O(n)算法是这个题的标准答案。我们太习惯于标准答案了,这是我国教育最悲哀的地方。(广义的洗脑就是让你的意识依赖于某个标准答案,然后通过给你标准答案让你不会思考而控制你)功能性需求分析试想,如果我们在实际工作中得到这样一个题 我们会怎么做?我一定会分析这个需求,因为我害怕需求未来会改变,今天你叫我找一个第2大的数,明天你找我找一个第4大的数,后天叫我找一个第100大的数,我不搞死了。需求变化是很正常的事。分析完这个需求后,我会很自然地去写找第K大数的算法——难度一下子就增大了。很多人会以为找第K大的需求是一种“过早扩展”的思路,不是这样的,我相信我们在实际编码中写过太多这样的程序了,你一定不会设计出这样的函数接口 —— Find2ndMaxNum(int* array, int len),就好像你不会设计出 DestroyBaghdad(); 这样的接口,而是设计一个DestoryCity( City& ); 的接口,而把Baghdad当成参数传进去!所以,你应该是声明一个叫FindKthMaxNum(int* array, int len, int kth),把2当成参数传进去。这是最基本的编程方法,用数学的话来说,叫代数!最简单的需求分析方法就是把需求翻译成函数名,然后看看是这个接口不是很二?!(注:不要纠结于FindMaxNum()或FindMinNum(),因为这两个函数名的业务意义很清楚了,不像Find2ndMaxNum()那么二)非功能性需求分析性能之类的东西从来都是非功能性需求,对于算法题,我们太喜欢研究算法题的空间和时间复杂度了。我们希望做到空间和时间双丰收,这是算法学术界的风格。所以,习惯于标准答案的我们已经失去思考的能力,只会机械地思考算法之内的性能,而忽略了算法之外的性能。如果题目是——“从无序数组中找到第K个最大的数”,那么,我们一定会去思考用O(n)的线性算法找出第K个数。事实上,也有线性算法——STL中可以用nth_element求得类似的第n大的数,其利用快速排序的思想,从数组S中随机找出一个元素X,把数组分为两部分Sa和Sb。Sa中的元素大于等于X,Sb中元素小于X。这时有两种情况:1)Sa中元素的个数小于k,则Sb中的第 k-|Sa|个元素即为第k大数;2) Sa中元素的个数大于等于k,则返回Sa中的第k大数。时间复杂度近似为O(n)。搞学术的nuts们到了这一步一定会欢呼胜利!但是他们哪里能想得到性能的需求分析也是来源自业务的!我们一说性能,基本上是个人都会问,请求量有多大?如果我们的FindKthMaxNum()的请求量是m次,那么你的这个每次都要O(n)复杂度的算法得到的效果就是O(n*m),这一点,是书呆子式的学院派人永远想不到的。因为应试教育让我们不会从实际思考了。工程式的解法根据上面的需求分析,有软件工程经验的人的解法通常会这样:1)把数组排序,从大到小。2)于是你要第k大的数,就直接访问 array[k]。排序只需要一次,O(n*log(n)),然后,接下来的m次对FindKthMaxNum()的调用全是O(1)的,整体复杂度反而成了线性的。其实,上述的还不是工程式的最好的解法,因为,在业务中,那数组中的数据可能会是会变化的,所以,如果是用数组排序的话,有数据的改动会让我重新排序,这个太耗性能了,如果实际情况中会有很多的插入或删除操作,那么可以考虑使用B+树。工程式的解法有以下特点:1)很方便扩展,因为数据排好序了,你还可以方便地支持各种需求,如从第k1大到k2大的数据(那些学院派写出来的代码在拿到这个需求时又开始挠头苦想了)2)规整的数据会简化整体的算法复杂度,从而整体性能会更好。(公欲善其事,必先利其器)3)代码变得清晰,易懂,易维护!(学院派的和STL一样的近似O(n)复杂度的算法没人敢动)争论你可能会和我有以下争论,如果程序员做这个算法题用排序的方式,他一定不会像你想那么多。是的,你说得对。但是我想说,很多时候,我们直觉地思考,恰恰是正确的路。因为“排序”这个思路符合人类大脑处理问题的方式,而使用学院派的方式是反大脑直觉的。反大脑直觉的,通常意味着晦涩难懂,维护成本上升。就是一道面试题,我就是想测试一下你的算法技能,这也扯太多了。没问题,不过,我们要清楚我们是在招什么人?是一个只会写算法的人,还是一个会做软件的人?这个只有你自己最清楚。这个算法题太容易诱导到学院派的思路了。是的这道“找出第K大的数”,其实可以变换为更为业务一点的题目——“我要和别的商户竞价,我想排在所有竞争对手报价的第K名,请写一个程序,我输入K,和一个商品名,系统告诉我应该订多少价?(商家的所有商品的报价在一数组中)”——业务分析,整体性能,算法,数据结构,增加需求让应聘者重构,这一个问题就全考了。你是不是在说算法不重要,不用学?千万别这样理解我,搞得好像如果面试不面,我就可以不学。算法很重要,算法题能锻炼我们的思维,而且也有很多实际用处。我这篇文章不是让大家不要去学算法,这是完全错误的,我是让大家带着业务问题去使用算法。问你业务问题,一样会问到算法题上来。小结看过这上面的分析,我相信你明白我为什么反对纯算法面试题了。原因就是纯算法的面试题根本不能反应一个程序的综合素质!那么,在面试中,我们应该要考量程序员的那些综合素质呢?我以为有下面这些东西:会不会做需求分析?怎么理解问题的?解决问题的思路是什么?想法如何?会不会对基础的算法和数据结构灵活运用?另外,我们知道,对于软件开发来说,在工程上,难是的下面是这些挑战:软件的维护成本远远大于软件的开发成本。软件的质量变得越来越重要,所以,测试工作也变得越来越重要。软件的需求总是在变的,软件的需求总是一点一点往上加的。程序中大量的代码都是在处理一些错误的或是不正常的流程。所以,对于编程能力上,我们应该主要考量程序员的如下能力:设计是否满足对需求的理解,并可以应对可能出现的需求变化。
J. 2021年大数据工程师面试内容包括哪些
【导语】近年来,大数据发展如火如荼,很多人都选择学习大数据专业或者转行大数据,大数据里又包含很多就业岗位,所以在进行岗位选择的时候,还是需要大家合理选择,为了帮助大家更好的进入大数据行业执业,下面就把2021年大数据工程师面试内容给大家进行一下具体介绍。
1、自我介绍
一般上来就是自我介绍,谈下工作经历和项目经验,面试官会根据你的项目经验对你进行技术面试。在自我介绍时,一定要抓住核心说,不要太啰嗦,尽量放大自己的价值,让面试官感受到你对工作的热情,以及以后对公司贡献的能力。
2、数仓开发知识技能
(1)Java是必问的,不过问的不深,把Javase部分吃透,足以应付Java部分的面试。
(2)Hadoop生态,Yarn、Zookeeper、HDFS这些底层原理要懂,面试经常被问。
(3)Maprece的shuffle过程这个也是面试被常问的。
(4)Hbase和HIve,搞大数据这些不懂真的说不过去。
(5)Mysql、Oracle和Postgres数据库操作要回,Sql要会写。
(6)linux操作系统,这个简单得命令必须要懂,会写shell脚本更好了。
(7)Kettle或Sqoop这种数据处理工具至少要会一个。8,数据仓库建模、数据模型的问题。
3、技术方面知识技能
(1)SparkSql和SparkStreaming,底层原理、内核、提交任务的过程等等,尽量深入内幕,这个经常会跟MapRece作比较的。当然也要了解Storm和Flink,Flink这个建议要学会,以后用处会越来越广。
(2)Redis、Kafka、ElasticSearch这些都得懂原理,深入了解,会使用,会操作,会调优。
(3)impala和kylin这些尽量也要了解会用
(4)Python这个要是有能力,有精力,建议也要往深处学习,我目前正在自学中。
(5)集群的问题,包括一些简单的运维知识。
(6)大数据数据倾斜的问题,包括Spark JVM内存调优问题等等。
关于2021年大数据工程师面试内容,就给大家介绍到这里了,希望对大家能有所帮助,当然进入大数据行业,还需要大家在平时不断进行技能提升,这样才能更好的拥有一席之地。