这个面试问题有多清楚?[已关闭]

2022-09-04 23:56:48

我们正在面试一个高级Java开发角色,我们要求完成这个问题的所有三个人都给了我们同样不正确的答案。这个问题是在面试之前完成的,所以他们有很多时间。他们的解决方案似乎是按 parentId 和 childId 对输入进行排序,而不是创建一个树,然后从输入中遍历树以找到正确的顺序。问题是不是不够清楚?

问题:

以下是Java开发人员角色的简单技能和演示测试,必须在电话面试之前完成。

必填:

  1. JUnit 测试

  2. NodeSorter 接口的实现

问题:

我们有一个 Java 对象,如下所示:

public class Node {

    public int id;
    public Integer parentId;

    public Node(int id, Integer parentId) {
        this.id = id;
        this.parentId = parentId;
    }
}

例如,以下节点列表可能以图形方式显示为:

节点 (id: 1, parentId: null), Node (id: 2, parentId: 1), Node(id: 3, parentId: 1), Node(id: 4, parentId: 2), Node(id: 5, parentId: 3)

              Node (id: 1)
             /            \
            /              \
           /                \
          /                  \
      Node (id: 2)         Node (id : 3)
         /                    \
        /                      \
       /                        \
      /                          \
  Node (id: 4)                 Node (id : 5)

假设:

  1. 始终至少有一个节点

  2. 将有一个且只有一个节点具有空父 Id

  3. 每个节点都有一个有效的 parentId,但具有空 parentId 的节点除外

要求:

  1. 编写一个实现以下接口的类,该接口将接收节点列表,并从上到下对它们进行排序(树中较高的节点必须在树中较低的节点之前。例如。树顶部的节点 1 必须位于树底部的节点 4 之前)。同一级别的节点将按其 id 的顺序排列,因此在上图中,id=2 的节点将显示在 id=3 的节点之前。

接口:

    public interface NodeSorter {
        public List<Node> sort(List<Node> unSortedNodes);
    }

测试数据:

测试用例 1:


输入图:

              Node (id: 1)
             /            \
            /              \
           /                \
          /                  \
      Node (id: 2)   Node (id : 3)
         /                    \
        /                      \
       /                        \
      /                          \
  Node (id: 4)           Node (id : 5)

输入: 节点 (id: 2, parentId: 1), Node(id: 4, parentId: 2), Node (id: 1, parentId: null), Node(id: 3, parentId: 1), Node(id: 5, parentId: 3)

输出:节点 (id: 1, parentId: null), Node (id: 2, parentId: 1), Node(id: 3, parentId: 1), Node(id: 4, parentId: 2), Node(id: 5, parentId: 3)

测试用例 2:


输入图:

              Node (id: 1)    
             /            \
            /              \
           /                \
          /                  \
      Node (id: 5)   Node (id : 2)
         /                    \
        /                      \
       /                        \    
      /                          \
  Node (id: 4)           Node (id : 3)

输入: 节点 (id: 5, parentId: 1), Node(id: 4, parentId: 5), Node (id: 1, parentId: null), Node(id: 3, parentId: 2), Node(id: 2, parentId: 1)

输出:节点 (id: 1, parentId: null), Node (id: 2, parentId: 1), Node(id: 5, parentId: 1), Node(id: 3, parentId: 2), Node(id: 4, parentId: 5)


答案 1

我会说这是非常不清楚的。您需要一个未排序的列表作为输入,一个排序的列表作为输出。

输出列表中的每个项都是一个树节点,但树上没有强制执行平衡。难道用户不能只是读取所有节点的值,对它们进行排序,然后遍历排序的值,创建新节点,每个节点都指向前一个节点,并且基本上可以完成...他们创造了一棵严重不平衡的树(没有树枝),但谁在乎呢?

这对我来说似乎是正确的,但如果我正在面试,我不会对这个答案感到非常满意,因为我会想知道为什么这棵树在那里。

这个问题中没有任何东西向我表明我应该做任何像你建议的那样的事情:“创建一棵树,然后从输入中,然后遍历树以找到正确的顺序。


答案 2

老实说,这个问题对我来说似乎很清楚。

你有没有试过问他们为什么选择按列表ID排序,然后按节点ID排序?他们认为这解决了问题吗?如果是这样,当面对不起作用的输入时,他们的反应是什么?

即使他们没有正确回答问题,通过问他们这些问题,你既可以更多地了解他们,又可以理解你的问题中有什么不够清楚。


推荐