我们正在面试一个高级Java开发角色,我们要求完成这个问题的所有三个人给了我们同样错误的答案.问题是在面试之前完成的,所以他们有很多时间.他们的解决方案似乎是通过parentId和childId对输入进行排序,而不是从输入创建树,然后遍历树以找到正确的顺序.问题不够明确吗?
题:
以下是Java Developer角色的简单技能和演示测试,必须在电话访问之前完成.
需要:
JUnit测试
NodeSorter接口的实现
题:
我们有一个看起来像这样的Java对象:
public class Node {
public int id;
public Integer parentId;
public Node(int id, Integer parentId) {
this.id = id;
this.parentId = parentId;
}
}
Run Code Online (Sandbox Code Playgroud)
例如,以下节点列表可能以图形方式显示为:
节点(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)
Run Code Online (Sandbox Code Playgroud)
假设:
总会有至少一个节点
将有一个且只有一个节点具有null parentId
每个节点都有一个有效的parentId,除了具有null parentId的Node
要求:
接口:
public interface NodeSorter {
public List<Node> sort(List<Node> unSortedNodes);
}
Run Code Online (Sandbox Code Playgroud)
测试数据:
测试案例1:
输入图:
Node (id: 1)
/ \
/ \
/ \
/ \
Node (id: 2) Node (id : 3)
/ \
/ \
/ \
/ \
Node (id: 4) Node (id : 5)
Run Code Online (Sandbox Code Playgroud)
输入:Node(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)
Run Code Online (Sandbox Code Playgroud)
输入:Node(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)
Bes*_*ska 14
我会说这很不清楚.您需要未排序的输入列表和排序列表作为输出.
输出列表中的每个项目都是树节点,但树上没有强制执行平衡.用户不能只读入所有节点的值,对它们进行排序,然后循环创建新节点的排序值,每个节点都指向前一个节点,并且基本上完成...他们创建了一个节点非常不平衡的树(没有分支),但谁在乎呢?
这对我来说似乎是正确的,但如果我接受采访,我对这个答案不会很满意,因为我会想知道为什么这棵树在那里.
这个问题中没有任何内容告诉我,我应该做任何你喜欢的事情:"创建一个树,然后从输入然后遍历树,找到正确的顺序."
Eda*_*aor 11
老实说,这个问题对我来说似乎很清楚.
您是否尝试过问他们为什么选择按列表ID排序,然后选择节点ID?他们认为这解决了问题吗?如果是这样的话,当他们面对不起作用的输入时,他们的反应是什么?
即使他们没有正确回答问题,通过向他们提出这些问题,你可以更多地了解他们,并了解你的问题中哪些不够清楚.
如果提供的解决方案不正确,更新测试用例以添加会失败的测试怎么样?
看起来这将是一个明显的方式来使问题更清楚.然后,如果他们仍然不理解问题或者发现问题不清楚,只要提供问题/测试用例,他们可以在完成解决方案之前请求其他信息.
在我看来,您基本上是要求他们根据两个因素对列表进行排序 - 父 ID 和列表 ID。如果是这种情况,您可以简化问题,而不必担心整个“树结构”的想法,只需要求他们根据两个因素为列表编写排序即可。