有关依赖管理的面试问题

Pau*_*erg 2 algorithm graph

在我最近的一次采访中,我被问到关于软件包管理器工具在内部npmpip内部如何工作,以便确定首先要安装哪些依赖项。

例如,假设您要安装依赖于软件包B的软件包A,而后者又依赖于软件包C。在这种情况下,应先安装软件包C,再安装B,然后再安装A。

依赖跟踪可能变得更加复杂,我相信可以以图形的形式表示。现在的问题是弄清楚这些软件包之间是否存在周期性的依赖关系,如果不存在,则以安装它们的顺序打印这些软件包。

我无法及时提出正确/最佳的解决方案,但也许有人可以提供帮助?

谢谢!

nel*_*lex 5

包之间的依赖关系可以建模为有向无环图

如果依赖图包含一个循环,则该依赖图无效,您可以参考以下算法在有向图中检测循环:https : //www.geeksforgeeks.org/detect-cycle-in-a-graph/

如果图中没有循环,则可以执行拓扑排序以获取依赖项的安装顺序:https : //www.geeksforgeeks.org/topological-sorting/

希望这能回答您的问题。干杯!