面试总结
来源:互联网 发布:淘宝卖家后台网址 编辑:程序博客网 时间:2024/06/11 20:11
最近面试了几家公司,把整个过程中的能记得的问题和自己当时的回答记录一下,希望对一些朋友有用。可能有的说的不是很准确,勿喷!面试总结:一.HQL部分 1.hql的行转列怎么实现 答:1.多个字段转一个字段可以使用union all 2.一个字段里面内容按逗号分隔转一个字段多行使用表生成函数,即:lateral view explode 2.count(distinct xxx)如何优化 答:group by 3.Hive里的UDF有哪几种 答:UDF和UDAF 补充:开发普通的UDF可以通过重写evaluate方法实现,还可以通过extends GenericUDF,重写initialize、getDisplayString、evaluate方法 4.数据倾斜会出现在什么情况下,如何处理 答: 发生场景: 1.有聚合运算的时候 2.有join的时候 处理方案: 第一种方案:建临时表 第二种方案:将key通过随机数打散后运算,然后再重新拆分聚合 第三种方案:设置参数 set hive.exec.reducers.bytes.per.reducer以及set hive.optimize.skewjoin = true 第四种方案:大小表关联用map join,group by的时候设置参数 5.hive的mapjoin默认是开启的还是关闭的,map join的原理是什么 答:hive 0.11以后mapjoin默认是开启的,但是在用的时候需要设置一下小表数据大小的阈值。 原理:将小表直接加载到内存中通过hashtable打散到各个map,并与大表在map端进行匹配。(说的不是很详细。自己可以去查一下) 6.select a.id,b.name from a join b on a.id=b.id 说一下这条sql的mr过程 答:Map端输出的时候按join on的列为key,给每个value打一个tag标示来源于哪个表并按照key进行排序 shuffle阶段根据key值进行hash,按照hash值将key/value推送至不同的reduce中,确保两个表中相同的key位于同一个reduce reducer阶段根据key值完成join操作,期间通过Tag来识别不同表中的数据 7.select id,age from a where id =1这条sql会不会起reduce,是否需要优化,如果需要,应该怎么优化,为什么这么优化? 答:hive默认会启动一个reduce。 可以优化,因为没有计算,所以不需要启动reduce,可以通过设置reduce个数等于0优化。 因为如果不启动reduce的话避免了shuffle的过程。shuffle里面有partition,sort,spill等操作,会浪费很多资源和时间。 8.hive有哪几种文件存储格式,大概说一下原理 答:主要用到的是text和rcfile以及SequenceFile 其中text为默认的存储格式,如果建表的时候不特殊指定则采用这种格式存储 rcfile是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block。其次,块数据列式存储,有利于数据压缩和快速的列存取。 SequenceFile是Hadoop API提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点。 SequenceFile支持三种压缩选择:NONE,RECORD,BLOCK。Record压缩率低,一般建议使用BLOCK压缩。
9.写个sql,分组取top N
答:貌似很多人都会问到这个问题,一般采用最low的方法就是用row_number给每条记录打标,然后做嵌套查询。
10.hive中 Sort By,Order By,Cluster By,Distrbute By的区别是什么
答:order by:会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序)。只有一个reducer,会导致当输入规模较大时,需要较长的计算时间 sort by:不是全局排序,其在数据进入reducer前完成排序。
distribute by:按照指定的字段对数据进行划分输出到不同的reduce中。
cluster by:除了具有 distribute by 的功能外还兼具 sort by 的功能二.Hadoop部分 1.hadoop提交任务的流程 答:client先向RM提交一个RPC请求,RM返回给client一个jobid,client会根据jar的名字和jobid等信息拼接成一个临时jar文件名 并将本地jar以那个临时文件名put到hdfs。然后client向RM再次发送请求。RM开始计算需要的MAP和Reduce数并给nodemanager分配任务 2.MapReduce的运行流程 答:1.通过input 进行输入分片 2.map进行运算 3.Combine阶段和shuffle阶段进行partition运算并按key值进行sort排序由于map输出不能只在内存, 所以当内存快要满的时候就会进行spill操作将内存数据写入到硬盘的临时文件当中 4.reduce阶段做计算输出 3.写个MR程序。有一个文件里面放的是一堆英文单词,输出是同位词放在一行例如(post,stop) 答:思路是将每个单词转成list并进行sort以此作为key,在reduce中进行拼串。原理同wordcount类似。 4.kylin的原理 答:进行预计算将不同维度的计算结果存放到HBASE中,查询的时候直接访问HBASE的rowkey对应的值即可三.数仓部分 1.介绍一下你们现有的数仓体系,你在里面担任什么样的角色 2.元数据这块是怎么做的 3.数据质量管控如何实现 4.如何应对上游系统的物理删除和表结构的变更 5.数仓分了几层,主题如何划分的,这样划分的目的是什么 6.为什么要建设数仓,好处在哪里四.JAVA部分 1.list和set的区别什么 答:list有序且可重复,底层实现是数组 set无序且不可重复,底层实现是Map,只用到了Map的key 2.数据和链表哪个查询速度快 答:数组 3.写个程序输出10000以内的质数,程序的时间复杂度是多少 答:百度 4.5000亿条是数据文件,里面放的是IP,求IP次数出现最多的前10个 答:百度 5.java不同对象在内存中保存的位置 答:基本类型在栈中存放,实例对象放在堆中,但是会有一个相应的引用类型放在栈中。还有一部分是用来装静态变量
1 0
- 【面试】第一次面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试 总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 面试总结
- 《把时间当朋友》读后感
- ListView使用
- C++ 保留字之override
- ffmpeg--学习笔记3-树莓派:安装、编译
- Java集合面试
- 面试总结
- [博弈论] Codeforces Gym 101190 NEERC 16 G. Game on Graph
- JETBRAIN系列IDE改变终端的字体
- FOJ 1002 HangOver
- Android:获取应用基本信息
- hibernate一级缓存和二级缓存的区别
- 十大经典排序算法小结
- 170411 VJ题解(3)(ZOJ
- 2787 加密术