写一个程序, 把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); } }
相关推荐
dependency-check-7.1.1-release
vscode-java-dependency-master.rar
前端开源库-gulp-amd-dependency通过AMD模块文件,找出依赖的AMD模块文件。
making-sense-dependency-injection-test-execution-listener-源码.rar
开源项目-mtojek-dependency-injection-in-go.zip,Dependency Injection in Go - according to KISS rule
前端开源库-panto-dependency-mapPANTO依赖关系图,PANTO依赖关系图
dubbo-admin 2.5.3源码编译,alibaba-dubbo-dependency和opensesame类库
Grunt-es-dependency-graph 能够在ES6 模块文件中生成具有依存关系树的 JSON 文件。 代码示例: grunt.initConfig({ depGraph: { production: { options: { includeBindings: true, moduleName...
sonar安全扫描插件
ros-noetic-gl-dependency:ros-noetic-gl-dependency AUR软件包
NWP-Homework2-Custom-Dependency-Injection-Library:使用反射用Java编写的自定义依赖项注入
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-...
Manning系列,.net开发丛书,Dependency.Injection原理和应用,提升编程思想和技术的好书
Jira-Agile-Backlog-Dependency-Checker更多信息... 截屏
Dagger: 一种Android平台的依赖注入框架; 这个文档是Dagger作者的PPT原文讲解 对了解Dagger有一定作用
@ anchan828 / nest-cache-dependency Nest框架(node.js) 缓存依赖项模块描述nest-cache-dependency考虑依赖关系。删除那些依赖删除的内容。待办事项:编写更多文档。安装$ npm i --save @anchan828/nest-cache-...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
jar包,官方版本,自测可用
不用office com主键,实现对excel的读取 libxl-3.1