Apple 面试题:任务依赖解析 – 拓扑排序经典题(Apple OA / Apple 面经 / 面试必考)

72次阅读
没有评论

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 依赖 mongo
  • mongo 又依赖 storage

所以正确执行顺序必须是:

storage → mongo → application A

题目让你实现:

getTaskWithDependencies(tasks, dependsOn)

输出按顺序展开后的任务执行链。

整个题的难点在于:

  1. 依赖是链式的
    • A → mongo → storage
    • 需要递归 /DFS 解决。
  2. 不能重复加入任务
    • 防止循环
    • 防止重复添加
  3. 要保证拓扑顺序稳定
    • 必须先加 storage,再 mongo,再 A。

适合使用:

✅ DFS + visited 集合
✅ 或 构建图 + 拓扑排序

这是非常典型的 Apple 系统设计 + 依赖图处理题。

VOprep 团队长期陪同学员实战各类大厂 OA 与 VO,包括 Apple、Google、Amazon、Citadel、SIG 等,提供实时答案助攻、远程陪练与面试节奏提醒,帮助大家在关键时刻不卡壳。
如果你也在准备 Tiktok 或类似工程向公司,可以了解一下我们的定制助攻方案——从编程面到系统设计,全程护航上岸。

正文完
 0