We have a list of tasks. Each task can depend on other tasks.
If task A depends on task B, then B should run before A.
Implement the method getTaskWithDependencies such that it returns a list of task names in the correct order.
Example:
If we want to execute task "application A", the method should return:
["storage", "mongo", "application A"]
The Java program is expected to be executed successfully.
List of Tasks
- name: application A
dependsOn:
- mongo
- name: storage
- name: mongo
dependsOn:
- storage
- name: memcache
- name: application B
dependsOn:
- memcache
Function to Implement (Java)
// Return the execution order for a given target, with all dependencies first.
private static List<String> getTaskWithDependencies(List<Task> tasks, String dependsOn);
Task Class (Given)
class Task {
private final String name;
private final List<String> dependsOn;
Task(String name) {this(name, new ArrayList<>()); }
Task(String name, List<String> dependsOn) {
this.name = name;
this.dependsOn = dependsOn;
}
public String getName() { return this.name;}
public List<String> getDependsOn() { return this.dependsOn;}
}
✅ Input / Output Examples
Input Example 1 — target: "application A"
tasks:
- name: application A
dependsOn: [mongo]
- name: storage
- name: mongo
dependsOn: [storage]
- name: memcache
- name: application B
dependsOn: [memcache]
target: "application A"
Expected Output
["storage", "mongo", "application A"]
Input Example 2 — target: "application B"
tasks:
- name: application A
dependsOn: [mongo]
- name: storage
- name: mongo
dependsOn: [storage]
- name: memcache
- name: application B
dependsOn: [memcache]
target: "application B"
Expected Output
["memcache", "application B"]
这道 Apple 面试题考察的是 任务依赖解析(Dependency Resolution),本质上就是一道 拓扑排序(Topological Sort) 的变体。
题目给你一组 Task,每个 Task 可能依赖其他 Task。
执行一个任务前,必须确保它依赖的任务已经全部执行。
例如:
application A依赖mongomongo又依赖storage
所以正确执行顺序必须是:
storage → mongo → application A
题目让你实现:
getTaskWithDependencies(tasks, dependsOn)
输出按顺序展开后的任务执行链。
整个题的难点在于:
- 依赖是链式的
- A → mongo → storage
- 需要递归 /DFS 解决。
- 不能重复加入任务
- 防止循环
- 防止重复添加
- 要保证拓扑顺序稳定
- 必须先加 storage,再 mongo,再 A。
适合使用:
✅ DFS + visited 集合
✅ 或 构建图 + 拓扑排序
这是非常典型的 Apple 系统设计 + 依赖图处理题。
VOprep 团队长期陪同学员实战各类大厂 OA 与 VO,包括 Apple、Google、Amazon、Citadel、SIG 等,提供实时答案助攻、远程陪练与面试节奏提醒,帮助大家在关键时刻不卡壳。
如果你也在准备 Tiktok 或类似工程向公司,可以了解一下我们的定制助攻方案——从编程面到系统设计,全程护航上岸。