Мы проводим собеседование для старшей Java Development Role, и все три человека, которых мы попросили выполнить этот вопрос, дали нам тот же неправильный ответ. Вопрос был сделан перед интервью, поэтому у них было много времени. Их решения, казалось, сортировали входные данные 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;
}
}
Например, следующий список Node (s) может отображаться графически как:
Node (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)
Предположения:
-
Всегда будет хотя бы один Node
-
Будет один и только один Node с нулевым parentId
-
Каждый Node будет иметь действительный parentId, за исключением Node, у которого есть null parentId
Требования:
- Напишите класс, который реализует следующий интерфейс, который получит список Node (s) и упорядочивает их сверху вниз (узлы, которые выше в дереве, должны быть перед узлами ниже в дереве. Node 1 в верхней части дерева должно быть до Node 4, которое находится в нижней части дерева). Узлы на том же уровне будут в порядке их идентификатора, поэтому Node с id = 2 появится перед Node с 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)
Вход: 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)
Вывод: Node (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)
Вход: 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)
Вывод: Node (id: 1, parentId: null), Node (id: 2, parentId: 1), Node (id: 5, parentId: 1), Node (id: 3, parentId: 2), Node (id: 4, parentId: 5)