最近一直在做一个build system的依赖管理,感觉其中某些内容可以抽取出来,作为一道很不错的面试题:
假设你在同时编译n个项目,他们相互之间有依赖关系,比如:
现在,让你写一个算法,把每个项目的依赖拍平:即把其所有间接依赖+直接依赖的项目都输出。
比如上面这个图的输出就为:
a: b c d e f gb: c dc: dd:e: f gf: gg:
然后,还可以有后续的问题:
- 如果有环,如何判断并输出环?
- 如果这些项目有可能有一些外部的依赖,请改变你的算法以适合这种情况。
好,面试到此结束。
下面是个扩展题,没在工作中做到,但后来想了下,觉得挺有意思:
- 为了提高编译速度,现在需要找出那些可以并行编译的项目,请改进算法实现之。