写一个程序, 把package dependency的关系找出來, 面试官是用javascript当例子, 解释题目给我听, 基本上就是用topological sort去解
如下
package dependency
// HTML
<script src='foo.js'></script>
// code for foo.js
require('bar.js')
require('main.js')
// code for bar.js
require('lib.js')
output 就是 ["lib.js", "bar.js", "main.js", "foo.js"]
foo.deps = [bar, main]
bar.deps = [lib]
getOrder(foo) => [lib, bar, main, foo]
[main, lib, bar, foo]
[lib, main, bar, foo]
以上三種output, 任一種都可
Also, you have to check whether the overall package dependency contains a cycle or not (directed graph cycle checking)
然後還要做有向圖環的checking, 有環就直接return,啥都不做!
public class JSLibDependency { public static class DiGraph { Set<String> libs; Map<String, Set<String>> map = new HashMap<>(); public DiGraph(Set<String> libs) { this.libs = libs; for(String lib:libs) { map.put(lib, new HashSet<>()); } } public int V() { return libs.size(); } public void addDependency(String lib, String dependentLib) { map.get(lib).add(dependentLib); } public Set<String> depends(String lib) { return map.get(lib); } } public static List<String> toposort(DiGraph g, String lib) { List<String> result = new ArrayList<>(); Stack<String> stack = new Stack<>(); Set<String> visited = new HashSet<>(); // toposortUtil(g, lib, stack, visited); if(toposortCycle(g, lib, stack, visited)) { stack.clear(); } while(!stack.isEmpty()) { result.add(0, stack.pop()); } return result; } public static void toposortUtil(DiGraph g, String lib, Stack<String> stack, Set<String> visited) { visited.add(lib); for(String parentLib:g.depends(lib)) { if(!visited.contains(parentLib)) { toposortUtil(g, parentLib, stack, visited); } } stack.push(lib); } public static boolean toposortCycle(DiGraph g, String lib, Stack<String> stack, Set<String> visited) { visited.add(lib); for(String parentLib:g.depends(lib)) { if(visited.contains(parentLib) || toposortCycle(g, parentLib, stack, visited)) { return true; } } stack.push(lib); return false; } public static void main(String[] args) { Set<String> libs = new HashSet<>(); libs.add("alex.js"); libs.add("lib.js"); libs.add("foo.js"); libs.add("bar.js"); libs.add("main.js"); DiGraph g = new DiGraph(libs); g.addDependency("foo.js", "bar.js"); g.addDependency("foo.js", "main.js"); g.addDependency("bar.js", "lib.js"); // add cycle here g.addDependency("lib.js", "alex.js"); g.addDependency("alex.js", "foo.js"); List<String> result = toposort(g, "alex.js"); System.out.println(result); } }
相关推荐
压缩包文件名为`gulp-amd-dependency-master`,这可能表示这是一个完整的项目源码,包括了所有必要的文件和配置,使得开发者可以直接使用或者参考其结构和实现。通常,这样的源码包会包含`README.md`文件,提供详细...
依赖检查工具dependency-check是软件开发领域中用于检测项目依赖库是否存在已知安全漏洞的重要工具。在版本7.1.1中,它提供了最新的安全数据库和改进的分析功能,以帮助开发者确保他们的应用程序免受潜在的安全威胁...
sonar安全扫描插件
文件列表中的 "ros-noetic-gl-dependency-master" 很可能是源代码的主分支。当从AUR安装软件包时,通常需要下载源代码,解压,然后编译和安装。在这个例子中,`master`分支通常表示项目的主线或最新稳定版本。 总的...
1. **dependency-check/bin**:这个目录包含用于不同操作系统的可执行脚本,如Windows的`dependency-check.bat`和Linux/Unix的`dependency-check.sh`,这些脚本允许用户在命令行环境中运行依赖检查。 2. **...
rpm-spec-dependency-analyzer 这是一个简单的Python3脚本,它解析SPEC文件列表并使用DOT生成它们之间的依赖关系的良好图形。如何安装 pip3 install rpm-spec-dependency-analyzer如何使用 rpm_spec_dependency_...
熟悉该过程后,可以使用以下命令安装此插件:npm install grunt-hitina-dependency --save-dev 插件安装完成后,可以使用以下JavaScript代码在您的Gruntfile中启用该插件: grunt . loadNpmTasks ( 'grunt-hitina-...
maven-dependency-plugin-2.8.jar
@ anchan828 / nest-cache-dependency Nest框架(node.js) 缓存依赖项模块描述nest-cache-dependency考虑依赖关系。删除那些依赖删除的内容。待办事项:编写更多文档。安装$ npm i --save @anchan828/nest-cache-...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
Novatec服务依赖关系图面板 的服务依赖关系图面板为您提供了许多功能,例如监视等待时间,错误和所需服务的请求。 这个用于交互式面板将帮助您更好地可视化应用程序的过程。如何建造由于依赖性问题,请安装,如果...
jar包,官方版本,自测可用
jar包,官方版本,自测可用
docker-base-image-auto-rebuild-on-dependency更新如果(poetry.lock)中定义的python依赖关系已更新,则此操作...用法示例uses: actions/docker-base-image-auto-rebuild-on-dependency-update@v1with: GH_USERNAME:
这个工具的"Jira-Agile-Backlog-Dependency-Checker-develop"文件可能包含了源代码、文档、示例或其他资源,供开发者深入了解其工作原理和进行自定义配置。对于Jira的使用者而言,掌握并应用这款工具将极大地提升...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装