作业一
以下两题,至少完成一道
有两个单向链表(链表长度分别为 m,n),这两个单向链表有可能在某个元素合并,如下图所示的这样,也可能不合并。现在给定两个链表的头指针,在不修改链表的情况下,如何快速地判断这两个链表是否合并?如果合并,找到合并的元素,也就是图中的 x 元素。
请用(伪)代码描述算法,并给出时间复杂度和空间复杂度。
class Node {
String val;
Node next;
}
Node crossNode(Node left, Node right) {
Map<String, List<Node>> map = getNodeMap(Node left);
while (right != null) {
if (map.containsKey(right.val) {
for (Node node : map.get(right.val)) {
if (isSameNode(node, right) {
return right;
}
}
}
right = right.next;
}
return null;
}
Map<String, List<Node>> getNodeMap(Node left) {
Node tmpLeft = left;
Map<String, List<Node>> map = new HashMap<>();
while (tmpLeft != null) {
if (map.containsKey(tmpLeft.val) {
map.get(tmpLeft.val).add(tmpLeft);
} else {
List<Node> values = new List<>();
values.add(tmpLeft);
map.put(tmpLeft.val, values);
}
tmpLeft = tmpLeft.next;
}
return map;
}
boolean isSame(Node left, Node right) {
Node tmpLeft = left;
Node tmpRight = right;
while (tmpLeft != null && right != null) {
if (!tmpLeft.val.equals(right.val) {
return false;
}
tmpLeft = tmpLeft.next;
tmpRight = tmpRight.next;
}
if (tmpLeft == null && tmpRight == null) {
return true;
} else {
return false;
}
}
时间复杂度: O(N)
空间复杂度:O(N)
请画出 DataNode 服务器节点宕机的时候,HDFS 的处理过程时序图。
作业二
根据当周学习情况,完成一篇学习总结
actor 模型最早在 erlang 中,scala 的陡峭的学习曲线,actor 模型对于中间件是ok 的,但是对于应用层,并不合适。
RAID 技术解决了文件高可用问题
HDFS 解决了文件系统跨服务器的高可用
分布式文件系统可以用 ceph,glusterfs。