【发布时间】:2018-05-31 21:01:40
【问题描述】:
我正在尝试基于面试过程创建一个程序(我选择 Java,但可以是 C/C++ 或 GoLang)来表示/模拟 Linux/Unix 环境中存在的包安装和系统依赖关系。 基本上,我会做以下要求:
1) 维护已安装软件包及其依赖项的记录。
2) 支持显式安装包以响应命令(除非已经安装)。
3) 如果需要安装另一个包,支持隐式安装一个包。
4) 支持响应命令显式删除一个包(如果不需要支持其他包)。
5) 如果不再需要支持另一个组件,则支持隐式删除包。
在安装软件包之前,自动安装它需要的所有软件包。 在删除一个包之前,请确认没有其他包需要它。必须先手动删除依赖包,然后才能删除包。
我想要最好的数据结构(以及我可以检查的链接)的提示,我可以用它来做到这一点。我尝试使用队列列表作为存储依赖项的一种方式,并使用队列来存储已安装的包,但我不确定这是否是最好的方法,例如:
...
ArrayList<Queue<String>> dependencies = new ArrayList<>(capacity);
Queue<String> pkgInstalled = new LinkedList<String>();
...
该进程将捕获用户的条目数据,直到发出 END 命令。 命令语法为:
DEPEND item1 item2 item(n):包 item1 依赖于包 item2(和 item3 或任何;
安装 item1:安装 item1 和 item1 所需的任何其他包。
REMOVE item1:删除 item1,如果可能,删除 item1 所需的包。
LIST:列出所有当前安装的包的名称。
END:当单独在一行中使用时,标记输入的结束。
1) 在每个回显的 INSTALL 或 REMOVE 行之后执行响应所采取的操作,确保以正确的顺序给出操作。
2) 对于 LIST 命令,显示当前安装的组件的名称。
3) 对于 DEPEND 和 END 命令,除了回显之外,不产生任何输出。
4) 对于 DEPEND 命令,每一项只会有一个依赖列表。
【问题讨论】:
-
明确地说,您的计划是使用 Java 虚拟机管理系统级包和依赖项,而不是使用任何现有的系统包管理解决方案?而且,不看他们中的任何一个是如何做到的?我佩服你的乐观。
-
实际上并不是一个真正的系统来管理依赖和 pkg 安装。我想缺少包含我正在寻找模拟行为的内容。我选择 Java,但如果您认为另一种语言(如 go 或 C/C++)更好,那么知道会很棒
-
说到“数据结构”,第一个想到的就是DAG
标签: java c++ c go data-structures