1 作了哪些项目
2 使用什么技术
3 哪一个是你主导的项目,一共开发多少个接口,项目多长时间,数据库有多少个表html
1 用本身擅长的语言实现非递归单链表反转 现场手写
2 Hadoop和spark的主要区别
3 Hadoop中一个大文件进行排序,如何保证总体有序?sort只会保证单个节点的数据有序
4 Hive中有哪些udf
5 Hadoop中文件put get的过程详细描述
6 Java中有哪些GC算法
7 Java中的弱引用 强引用和软引用分别在哪些场景中使用java
1 用java实现非递归单链表反转node
思路:算法
由于在对链表进行反转的时候,须要更新每个node的“next”值,可是,在更新 next 的值前,咱们须要保存 next 的值,不然咱们没法继续。因此,咱们须要两个指针分别指向前一个节点和后一个节点,每次作完当前节点“next”值更新后,把两个节点往下移,直到到达最后节点。数据库
实现代码以下: 缓存
class Node { char value; Node next; } public Node reverse(Node current) { //initialization Node previousNode = null; Node nextNode = null; while (current != null) { //save the next node nextNode = current.next; //update the value of "next" current.next = previousNode; //shift the pointers previousNode = current; current = nextNode; } return previousNode; } public class Test{ public static void main(String[] args) { Node head = new Node(0); Node node1 = new Node(1); Node node2 = new Node(2); Node node3 = new Node(3); head.setNext(node1); node1.setNext(node2); node2.setNext(node3); // 打印反转前的链表 Node h = head; while (null != h) { System.out.print(h.getData() + " "); h = h.getNext(); } // 调用反转方法 // head = reverse1(head); head = reverse(head); System.out.println("\n**************************"); // 打印反转后的结果 while (null != head) { System.out.print(head.getData() + " "); head = head.getNext(); } }
}
2 Hadoop和spark的主要区别-这个问题基本都会问到框架
记住3点最重要的不一样之处:dom
3 Hadoop中一个大文件进行排序,如何保证总体有序函数
在Spark中使用算子sortByKey()能够实现按关键字排序,那Hadoop中实现全排序呢?oop
咱们知道Mapreduce框架在feed数据给reducer以前会对map output key排序,这种排序机制保证了每个reducer局部有序,hadoop 默认的partitioner是HashPartitioner,它依赖于output key的hashcode,使得相同key会去相同reducer,可是不保证全局有序,若是想要得到全局排序结果(好比获取top N, bottom N),Hadoop提供TotalOrderPartitioner类用于实现全局排序的功能,而且解决了OOM和数据倾斜的问题。TotalOrderPartitioner 类提供了三个采样器,分别是:
具体实现能够参考https://zhuanlan.zhihu.com/p/43851100
4 Hive中有哪些UDF
Hive中有3种UDF:
你写过哪些UDF?在哪一种状况下会使用该UDF?--本身能够扩展这个问题
5 Hadoop中数据读写流程分析,即文件在put get过程当中具体发生了什么
i) hadoop fs -put 操做为例:
当接收到 PUT 请求时,尝试在 NameNode 中 create 一个新的 INode 节点,这个节点是根据 create 中发送过去的 src 路径构建出的目标节点,若是发现节点已存在或是节点的 parent 存在且不为 INodeDirectory 则异常中断,不然则返回包含 INode 信息的 HdfsFileStatus 对象。
使用 HdfsFileStatus 构造一个实现了 OutputStream 接口的 DFSOutputStream 类,经过 nio 接口将须要传输的数据写入 DFSOutputStream。
在 DFSOutputStream 中写入的数据被以必定的 size(通常是 64 k)封装成一个 DFSPacket,压入 DataStreamer 的传输队列中。
DataStreamer 是 Client 中负责数据传输的独立线程,当发现队列中有 DFSPacket 时,先经过 namenode.addBlock 从 NameNode 中获取可供传输的 DataNode 信息,而后同指定的 DataNode 进行数据传输。
DataNode 中有一个专门的 DataXceiverServer 负责接收数据,当有数据到来时,就进行对应的 writeBlock 写入操做,同时若是发现还有下游的 DataNode 一样须要接收数据,就经过管道再次将发来的数据转发给下游 DataNode,实现数据的备份,避免经过 Client 一次进行数据发送。
整个操做步骤中的关键步骤有 NameNode::addBlock 以及 DataNode::writeBlock, 接下来会对这两步进行详细分析。
ii) hadoop fs -get操做:
GET 操做的流程,相对于 PUT 会比较简单,先经过参数中的来源路径从 NameNode 对应 INode 中获取对应的 Block 位置,而后基于返回的 LocatedBlocks 构造出一个 DFSInputStream 对象。在 DFSInputStream 的 read 方法中,根据 LocatedBlocks 找到拥有 Block 的 DataNode 地址,经过 readBlock 从 DataNode 获取字节流。
6 Java中有哪些GC算法
现代虚拟机中的垃圾搜集算法:
标记 -清除算法
“标记-清除”(Mark-Sweep)算法,如它的名字同样,算法分为“标记”和“清除”两个阶段:首先标记出全部须要回收的对象,在标记完成后统一回收掉全部被标记的对象。之因此说它是最基础的收集算法,是由于后续的收集算法都是基于这种思路并对其缺点进行改进而获得的。
它的主要缺点有两个:一个是效率问题,标记和清除过程的效率都不高;另一个是空间问题,标记清除以后会产生大量不连续的内存碎片,空间碎片太多可能会致使,当程序在之后的运行过程当中须要分配较大对象时没法找到足够的连续内存而不得不提早触发另外一次垃圾收集动做。
复制算法
“复制”(Copying)的收集算法,它将可用内存按容量划分为大小相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另一块上面,而后再把已使用过的内存空间一次清理掉。
这样使得每次都是对其中的一块进行内存回收,内存分配时也就不用考虑内存碎片等复杂状况,只要移动堆顶指针,按顺序分配内存便可,实现简单,运行高效。只是这种算法的代价是将内存缩小为原来的一半,持续复制长生存期的对象则致使效率下降。
标记-压缩算法
复制收集算法在对象存活率较高时就要执行较多的复制操做,效率将会变低。更关键的是,若是不想浪费50%的空间,就须要有额外的空间进行分配担保,以应对被使用的内存中全部对象都100%存活的极端状况,因此在老年代通常不能直接选用这种算法。
根据老年代的特色,有人提出了另一种“标记-整理”(Mark-Compact)算法,标记过程仍然与“标记-清除”算法同样,但后续步骤不是直接对可回收对象进行清理,而是让全部存活的对象都向一端移动,而后直接清理掉端边界之外的内存
分代收集算法
GC分代的基本假设:绝大部分对象的生命周期都很是短暂,存活时间短。
“分代收集”(Generational Collection)算法,把Java堆分为新生代和老年代,这样就能够根据各个年代的特色采用最适当的收集算法。在新生代中,每次垃圾收集时都发现有大批对象死去,只有少许存活,那就选用复制算法,只须要付出少许存活对象的复制成本就能够完成收集。而老年代中由于对象存活率高、没有额外空间对它进行分配担保,就必须使用“标记-清理”或“标记-整理”算法来进行回收。
7 Java中的弱引用、强引用、软引用和虚引用是什么,他们分别在哪些场景中使用
经过表格来讲明一下,以下:
引用类型 |
被垃圾回收时间 |
用途 |
生存时间 |
强引用 |
历来不会 |
对象的通常状态 |
JVM中止运行时终止 |
软引用 |
在内存不足时 |
对象缓存 |
内存不足时终止 |
弱引用 |
在垃圾回收时 |
对象缓存 |
gc运行后终止 |
虚引用 |
任什么时候候 |
跟踪对象被垃圾回收器回收的活动 |
Unknown
|
=================================================================================
原创文章,转载请务必将下面这段话置于文章开头处(保留超连接)。
本文转发自程序媛说事儿,原文连接http://www.javashuo.com/article/p-xkazofhw-ho.html=================================================================================