题目:输入两个链表,找出它们的第一个公共结点。
思路:公共链表部分长度一定一样,而且一定在最后部分,故先判断链表长度。若长度不一样则让长者先走到与短者相同位置,再对节点进行判断,若不同则两者共同往后走,直到有共同节点或者到末尾返回空节点。(注:手撸链表得提上日程)
代码:
public class Solution {
public static void main(String[] args) {
}
public static ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
ListNode p1 = pHead1;
ListNode p2 = pHead2;
int len1 = getLength(p1);
int len2 = getLength(p2);
if(len1 > len2){
int len = len1 - len2;
while(len > 0){
p1 = p1.next;
len--;
}
}else if(len2 > len1){
int len = len2 - len1;
while(len > 0){
p2 = p2.next;
len--;
}
}
while(p1 != p2){
p1 = p1.next;
p2 = p2.next;
}
return p1;
}
public static int getLength(ListNode listnode) {
int length = 0;
while (listnode != null) {
listnode = listnode.next;
length++;
}
return length;
}
}
面试题:
1、MapReduce原理:
inputformat按行读取数据,返回K,V值传到map方法中,context和write方法将处理后的数据输出到outputcolollector中,当outputcollector中的数据累计到一定数量后再将数据传到内存的环形缓冲区做处理,当环形缓冲区的数据累计到一定数量后再将数据通过split多次溢出到本地磁盘的多个文件中,期间会对各个溢出的数据进行分区,排序,然后对多个文件进行merge(归并排序)形成一个输出结果大文件,reduceTask根据自己的分区号去各个mapTask机器上取输出结果文件,将得到结果文件进行merge,然后进入reduce阶段,context和write将最终的结果输出到outputformat上,进而输出到本地文件系统。
2、什么是yarn?
yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式操作系统平台,而mapreduce等运算程序则相当于运行在操作系统之上的应用程序。
3、namenode的safemode是怎么回事?如何才能退出?
namenode在刚启动的时候元数据只有文件块信息,没有文件所在datanode的信息,需要datanode自己向namenode汇报。如果namenode发线datanode回报的文件信息没达到namenode内存文件块的总阈值的一个百分比,namenode就会处于安全模式,只有达到阈值或者强行退出。
4、secondarynamenode的主要职责
sn的主要职责是执行checkpoint操作,每隔一段时间,会由sn将namenode上积累的所有edits和一个新的fsimage下载到本地,并加载到内存进行merge。
5、如果namenode宕机,datanode节点是否也会跟着挂掉?
datanode宕机后,如果是短暂的宕机,可以实现写好脚本控制,将他启动起来。如果长时间宕机,那么datanode上的数据应该已经备份到其他机器了,那么这一台datanode就是一台新的datanode,删除其他的所有数据文件和文件状态后,重新启动。