频道栏目
首页 > 资讯 > IT资讯 > 正文

大数据面试必问题总结大全

2018-04-26 09:42:02         来源:李优的博客  
收藏   我要投稿


Big Data面试题总结

JAVA相关

1-1)List与set的区别?

老掉牙的问题了,还在这里老生常谈:List特点:元素有放入顺序,元素可重复 ,Set特点:元素无放入顺序,元素不可重复。

 

1-2)数据库的三大范式?

原子性、一致性、唯一性

 

1-3)java的io类的图解

 

1-4)对象与引用对象的区别

对象就是好没有初始化的对象,引用对象即使对这个对象进行了初始化,这个初始化可以使自己的直接new的也可以是直接其他的赋值的,那么背new或者背其他赋值的我们叫做是引用对象,最大的区别于

 

1-5)谈谈你对反射机制的理解及其用途?

反射有三种获取的方式,分别是:forName/ getClass /直接使用class方式使用反射可以获取类的实例

1-6)列出至少五种设计模式

设计方式有工厂法,懒加载,观察者模式,静态工厂,迭代器模式,外观模式、、、、

 

1-7)RPC原理?

Rpc分为同步调用和一部调用,异步与同步的区别在于是否等待服务器端的返回值。Rpc的组件有RpcServer,RpcClick,RpcProxy,RpcConnection,RpcChannel,RpcProtocol,RpcInvoker等组件,

 

1-8)ArrayList、Vector、LinkedList的区别及其优缺点?HashMap、HashTable的区别及优缺点?

ArrayList和Vector是采用数组方式存储数据的,是根据索引来访问元素的,都可以

根据需要自动扩展内部数据长度,以便增加和插入元素,都允许直接序号索引元素,但

是插入数据要涉及到数组元素移动等内存操作,所以索引数据快插入数据慢,他们最大

的区别就是synchronized同步的使用。

LinkedList使用双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但

是插入数据时只需要记录本项的前后项即可,所以插入数度较快!

如果只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector

或ArrayList都可以。如果是对其它指定位置的插入、删除操作,最好选择LinkedList

HashMap、HashTable的区别及其优缺点:

HashTable中的方法是同步的HashMap的方法在缺省情况下是非同步的 因此在多线程环境下需要做额外的同步机制。

HashTable不允许有null值key和value都不允许,而HashMap允许有null值key和value都允许 因此HashMap使用containKey()来判断是否存在某个键。

HashTable使用Enumeration,而HashMap使用iterator。

Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类。

1-9)使用StringBuffer而不是String

当需要对字符串进行操作时,使用StringBuffer而不是String,String是read-only的,如果对它进行修改,会产生临时对象,而StringBuffer是可修改的,不会产生临时对象。

1-10)集合的扩充

ArrayList list = new ArrayList(90000); list扩充多少次??

publicArrayList() {

this(10);

}

默认的扩充是10由此计算

 

1-11)java的拆包与封包的问题

 

System.out.println("5"+ 2);

52

 

1-12)Java中Class.forName和ClassLoader.loadClass的区别

Class.forName("xx.xx")等同于Class.forName("xx.xx",true,CALLClass.class.getClassLoader()),第二个参数(bool)表示装载类的时候是否初始化该类,即调用类的静态块的语句及初始化静态成员变量。

 

ClassLoader loader = Thread.currentThread.getContextClassLoader(); //也可以用(ClassLoader.getSystemClassLoader())

 

Class cls = loader.loadClass("xx.xx"); //这句话没有执行初始化

 

forName可以控制是否初始化类,而loadClass加载时是没有初始化的。

 

1-13)hashMap与hashTable的区别

HashMap Hashtable

 

父类AbstractMap Dictiionary

 

是否同步否是

 

k,v可否null 是 否

 

 

Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。

 

1-14)怎样实现数组的反转

ArrayList arrayList = new ArrayList();

arrayList.add("A");

arrayList.add("B");

 

对数组进行反转

Collections.reverse(arrayList);

 

1-15)请使用JAVA实现二分查找

一般的面试者都是些向看看你的思路,所以一般答题时只需要把思路写出来即可。

具体的实现如下:

二分查找就是折半查找,要想折半就必须把原来的数据进行排序,才能方便的查找:

实现代码如下:

public static int binarySearch(int[] srcArray, int des){

int low = 0;

int high = srcArray.length-1;

while(low <= high) {

int middle = (low + high)/2;

if(des == srcArray[middle]) {

return middle;

}else if(des

high = middle - 1;

}else {

low = middle + 1;

}

}

return -1;

}

 

 

1-16)java中有两个线程怎样等待一个线程执行完毕

可以使用join关键字

 

1-17)hashmap hashtable currentHashMap的使用区别

hashmap hashtable的醉的的区别在于hashtable是线程安全的,而hashmap不是线程安全的,currentHashMap也是线程安全的。

ConcurrentHashMap是使用了锁分段技术技术来保证线程安全的。所分段的技术是:讲数据分成一段一段的储存,给每一段的数据添加一把锁,当线程访问一个数据时,其他的数据可以被访问。

 

1-18)简单描述一下java的gc机制,常用的JAVA调优的方法,OOM如何产生的,如何处理OOM问题???

1、程序在运行时会产生很多的对象的信息,当这些对象的信息没有用时,则会被gc回收

2、调优的方式主要是调节年轻代与老年代的内存的大小

3、OOM是OutOfMemory的缩写(搞得跟多高大上似的)就是线程创建的多了,没有及时的回收过来所产生的,代码如下:

public class JavaVMStackOOM {

private void dontStop() {

while (true) {

 

}

}

 

public void stackLeakByThread() {

while (true) {

Thread thread = new Thread(new Runnable() {

@Override

public void run() {

dontStop();

}

});

thread.start();

}

}

 

public static void main(String[] args) {

JavaVMStackOOM oom = new JavaVMStackOOM();

oom.stackLeakByThread();

}

 

4、既然知道以上的现象,在写代码时应该注意,不要过多的创建线程的数目。

 

 

Linux相关

2-1)关闭不必要的服务

A、使用ntsysv命令查看开启与关闭的服务

B、停止打印服务

[root@hadoop1 /]# /etc/init.d/cups stop

[root@hadoop1 /]# chkconfig cups off

2-2)关闭IP6

[root@hadoop1 /]# vim /etc/modprobe.conf

在下面添加一下配置:

alias net-pf-10 off

alias ipv6 off

2-3)调整文件的最大的打开数

查看当前的文件的数量:[root@hadoop1 /]#ulimit -a

修改配置:
[root@hadoop1 /]# vi /etc/security/limits.conf在文件最后加上:

* soft nofile 65535

* hard nofile 65535

* soft nproc 65535

* hard nproc 65535

2-4)修改linux内核参数

[root@hadoop1 /]# vi /etc/sysctl.conf

在文本的最后追加一下内容:

net.core.somaxconn = 32768

 

表示物理内存使用到90%(100-10=90)的时候才使用swap交换区

2-5)关闭noatime

在最后追加一下内容

/dev/sda2 /data ext3 noatime,nodiratime 0 0

 

 

2-6)请用shell命令把某一个文件下的所有的文件分发到其他的机器上

Scp -r /user/local hadoop2:/user/local

 

2-7)echo 1+1 && echo "1+1"会输出什么

 

[root@hadoop1 ~]# echo 1+1 && echo "1+1"

1+1

1+1

 

[root@hadoop1 ~]# echo 1+1 && echo "1+1" && echo "1+" 1

1+1

1+1

1+ 1

 

2-8)在当前的额目录下找出包含祖母a并且文件的额大小大于55K的文件

[root@hadoop1 test]# find .| grep -ri "a"

a.text:a

 

后半句没有写出来,有时间在搞

 

 

2-9)linux用什么命令查看cpu,硬盘,内存的信息?

Top命令

 

Hadoop相关

3-1)简单概述hdfs原理,以及各个模块的职责

 

 

 

 

1、客户端向nameNode发送要上传文件的请求

2、nameNode返回给用户是否能上传数据的状态

3、加入用户端需要上传一个1024M的文件,客户端会通过Rpc请求NameNode,并返回需要上传给那些DataNode(分配机器的距离以及空间的大小等),namonode会选择就近原则分配机器。

4、客户端请求建立block传输管道chnnel上传数据

5、在上传是datanode会与其他的机器建立连接并把数据块传送到其他的机器上

6、dataNode向namenode汇报自己的储存情况以及自己的信息

7、档第一个快上传完后再去执行其他的复制的传送

 

 

 

3-2)mr的工作原理

 

 

 

 

1、当执行mr程序是,会执行一个Job

2、客户端的jobClick会请求namenode的jobTracker要执行任务

3、jobClick会去HDFS端复制作业的资源文件

4、客户端的jobClick会向namenode提交作业,让namenode做准备

5、Namenode的jobTracker会去初始化创建的对象

6、Namenode会获取hdfs的划分的分区

7、Namenode去检查TaskTracker的心跳信息,查看存活的机器

8、当执行的datenode执行任务时Datenode会去HDFS获取作业的资源的文件

9、TaskTracker会去执行代码,并登陆JVM的执行渠道

10、JVM或执行MapTask或者ReduceTask

11、执行终结

 

 

3-3)怎样判断文件时候存在

这是linux上的知识,只需要在IF[ -f ]括号中加上-f参数即可判断文件是否存在

 

 

3-4)fsimage和edit的区别?

 

大家都知道namenode与secondary namenode的关系,当他们要进行数据同步时叫做checkpoint时就用到了fsimage与edit,fsimage是保存最新的元数据的信息,当fsimage数据到一定的大小事会去生成一个新的文件来保存元数据的信息,这个新的文件就是edit,edit会回滚最新的数据。

 

3-5)hdfs中的block默认保存几份?

不管是hadoop1.x还是hadoop2.x都是默认的保存三份,可以通过参数dfs.replication就行修改,副本的数目要根据机器的个数来确定。

 

3-6)列举几个配置文件优化?

Core-site.xml文件的优化

 

fs.trash.interval

默认值:0

说明:这个是开启hdfs文件删除自动转移到垃圾箱的选项,值为垃圾箱文件清除时间。一般开启这个会比较好,以防错误删除重要文件。单位是分钟。

 

dfs.namenode.handler.count

默认值:10

说明:hadoop系统里启动的任务线程数,这里改为40,同样可以尝试该值大小对效率的影响变化进行最合适的值的设定。

 

mapreduce.tasktracker.http.threads

默认值:40

说明:map和reduce是通过http进行数据传输的,这个是设置传输的并行线程数。

 

3-7)谈谈数据倾斜,如何发生的,并给出优化方案

数据的倾斜主要是两个的数据相差的数量不在一个级别上,在只想任务时就造成了数据的倾斜,可以通过分区的方法减少reduce数据倾斜性能的方法,例如;抽样和范围的分区、自定义分区、数据大小倾斜的自定义侧咯

 

3-8)简单概括安装hadoop的步骤

1.创建 hadoop 帐户。

2.setup.改 IP。

3.安装 java,并修改/etc/profile 文件,配置 java 的环境变量。

4.修改 Host 文件域名。

5.安装 SSH,配置无密钥通信。

6.解压 hadoop。

7.配置 conf 文件下 hadoop-env.sh、core-site.sh、mapre-site.sh、hdfs-site.sh。

8.配置 hadoop 的环境变量。

9.Hadoop namenode -format

10.Start-all.sh

 

3-9)简单概述hadoop中的角色的分配以及功能

Namenode:负责管理元数据的信息

SecondName:做namenode冷备份,对于namenode的机器当掉后能快速切换到制定的Secondname上

DateNode:主要做储存数据的。

JobTracker:管理任务,并把任务分配到taskTasker

TaskTracker:执行任务的

 

3-10)怎样快速的杀死一个job

1、执行hadoop job -list 拿到job-id

2、Hadoop job kill hadoop-id

 

3-11)新增一个节点时怎样快速的启动

Hadoop-daemon.sh start datanode

 

3-12)你认为用java , streaming , pipe方式开发map/reduce,各有什么优点

开发mapReduce只用过java与hive,不过使用java开发mapreduce显得笨拙,效率也慢,基于java慢的原因于是hive,这样就方便了查询与设计

 

3-13)简单概述hadoop的join的方法

Hadoop 常用的jion有reduce side join , map side join , SemiJoin 不过reduce side join 与 map side join 比较常用,不过都是比较耗时的。

 

3-14)简单概述hadoop的combinet与partition的区别

combine和partition都是函数,中间的步骤应该只有shuffle!combine分为map端和reduce端,作用是把同一个key的键值对合并在一起,可以自定义的,partition是分割map每个节点的结果,按照key分别映射给不同的reduce,也是可以自定义的。这里其实可以理解归类。

3-15 ) hdfs的数据压缩算法

Hadoop 的压缩算法有很多,其中比较常用的就是gzip算法与bzip2算法,都可以可通过CompressionCodec来实现

 

3-16)hadoop的调度

Hadoop 的调度有三种其中fifo的调度hadoop的默认的,这种方式是按照作业的优先级的高低与到达时间的先后执行的,还有公平调度器:名字见起意就是分配用户的公平获取共享集群呗!容量调度器:让程序都能货到执行的能力,在队列中获得资源。

 

3-17)reduce后输出的数据量有多大?

输出的数据量还不是取决于map端给他的数据量,没有数据reduce也没法运算啊!!

 

3-18) datanode在什么情况下不会备份?

Hadoop保存的三个副本如果不算备份的话,那就是在正常运行的情况下不会备份,也是就是在设置副本为1的时候不会备份,说白了就是单台机器呗!!还有datanode在强制关闭或者非正常断电不会备份。

3-19)combine出现在那个过程?

Hadoop的map过程,根据意思就知道结合的意思吗,剩下的你们就懂了。想想wordcound

 

3-20) hdfs的体系结构?

HDFS有namenode、secondraynamenode、datanode组成。

namenode负责管理datanode和记录元数据

secondraynamenode负责合并日志

datanode负责存储数据

3-21) hadoop flush的过程?

Flush就是把数据落到磁盘,把数据保存起来呗!

 

3-22)什么是队列

队列的实现是链表,消费的顺序是先进先出。

 

3-23)三个datanode,当有一个datanode出现错误会怎样?

第一不会给储存带来影响,因为有其他的副本保存着,不过建议尽快修复,第二会影响运算的效率,机器少了,reduce在保存数据时选择就少了,一个数据的块就大了所以就会慢。

 

3-24)mapReduce的执行过程

首先map端会Text接受到来自的数据,text可以把数据进行操作,最后通过context把key与value写入到下一步进行计算,一般的reduce接受的value是个集合可以运算,最后再通过context把数据持久化出来。

 

3-25)Cloudera提供哪几种安装CDH的方法

·Cloudera manager

·Tarball

·Yum

·Rpm

 

3-26)选择题与判断题

http://blog.csdn.net/jiangheng0535/article/details/16800415

 

3-27)hadoop的combinet与partition效果图

 

 

3-28)hadoop的机架感知(或者说是扩普)

看图说话

数据块会优先储存在离namenode进的机器或者说成离namenode机架近的机器上,正好是验证了那句话不走网络就不走网络,不用磁盘就不用磁盘。

 

3-29)文件大小默认为64M,改为128M有啥影响?

这样减少了namenode的处理能力,数据的元数据保存在namenode上,如果在网络不好的情况下会增到datanode的储存速度。可以根据自己的网络来设置大小。

 

3-30)datanode首次加入cluster的时候,如果log报告不兼容文件版本,那需要namenode执行格式化操作,这样处理的原因是?

这样处理是不合理的,因为那么namenode格式化操作,是对文件系统进行格式

化,namenode格式化时清空dfs/name下空两个目录下的所有文件,之后,会在目

录dfs.name.dir下创建文件。

文本不兼容,有可能时namenode与datanode的 数据里的namespaceID、

clusterID不一致,找到两个ID位置,修改为一样即可解决。

3-31)什么hadoop streaming?

提示:指的是用其它语言处理

 

3-32)MapReduce中排序发生在哪几个阶段?这些排序是否可以避免?为什么?

一个MapReduce作业由Map阶段和Reduce阶段两部分组成,这两阶段会对数

据排序,从这个意义上说,MapReduce框架本质就是一个Distributed Sort。在Map

阶段,在Map阶段,Map Task会在本地磁盘输出一个按照key排序(采用的是快速

排序)的文件(中间可能产生多个文件,但最终会合并成一个),在Reduce阶段,每

个Reduce Task会对收到的数据排序,这样,数据便按照Key分成了若干组,之后以

组为单位交给reduce()处理。很多人的误解在Map阶段,如果不使用Combiner

便不会排序,这是错误的,不管你用不用Combiner,Map Task均会对产生的数据排

序(如果没有Reduce Task,则不会排序,实际上Map阶段的排序就是为了减轻Reduce

端排序负载)。由于这些排序是MapReduce自动完成的,用户无法控制,因此,在

hadoop 1.x中无法避免,也不可以关闭,但hadoop2.x是可以关闭的。

 

3-33)hadoop的shuffer的概念

Shuffer是一个过程,实在map端到reduce在调reduce数据之前都叫shuffer,主要是分区与排序,也就是内部的缓存分分区以及分发(是reduce来拉数据的)和传输

 

3-34)hadoop的优化

1、优化的思路可以从配置文件和系统以及代码的设计思路来优化

2、配置文件的优化:调节适当的参数,在调参数时要进行测试

3、代码的优化:combiner的个数尽量与reduce的个数相同,数据的类型保持一致,可以减少拆包与封包的进度

4、系统的优化:可以设置linux系统打开最大的文件数预计网络的带宽MTU的配置

5、为job添加一个Combiner,可以大大的减少shuffer阶段的maoTask拷贝过来给远程的 reduce task的数据量,一般而言combiner与reduce相同。

6、在开发中尽量使用stringBuffer而不是string,string的模式是read-only的,如果对它进行修改,会产生临时的对象,二stringBuffer是可修改的,不会产生临时对象。

7、修改一下配置:

一下是修改mapred-site.xml文件

修改最大槽位数

槽位数是在各个tasktracker上的mapred-site.xml上设置的,默认都是2

mapred.tasktracker.map.tasks.maximum

task的最大数

2

mapred.tasktracker.reduce.tasks.maximum

ducetask的最大数

2

相关TAG标签 数据 面试 总结
上一篇:大数据面试题及答案,敢测试你能的拿多少分吗?
下一篇:十年高级程序员离职后经验总结的面试汇总
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站