【发布时间】:2014-03-16 23:07:21
【问题描述】:
我正在练习一些面试问题,我发现了一个有趣的问题,那就是构建一个基本的文件系统/终端。因为这是一道面试题,所以这个文件系统大概是一个基础的,涉及到添加文件和目录,以及在目录中添加文件和目录。另一个功能是以逻辑方式打印出所有目录和文件。这一切都必须在不使用 Collections 库的情况下完成
我很好奇我会使用什么数据结构来实现这个文件系统?我想到的是hashtable 或B tree。
Hashtable 的查找时间非常快。但是,它会占用大量内存。我打算使用素数作为我的存储桶大小。
B 树的内存效率会更高。但是查找时间会慢一些。
或者两者兼而有之?
例如:
所有文件都存储在hashtable 节点中,而目录则存储在一个树节点中,该树节点可以分支到其他目录节点或哈希表。
我的另一个问题是:哪个似乎更容易编写或实现print all 函数?
【问题讨论】:
-
B-tree 更接近实际使用的内容,NTFS 使用它。尽管缓存通常是在操作系统中实现的文件系统之上的一层。
-
这更像是一个“算法策略”问题,而不是一个特定的编程问题。对于文件系统,您需要了解您可能想要什么类型的使用......每个目录中是否可以有大量文件;名字可以多长;有关文件大小的信息;权限处理...
-
如果在您提出问题时提出“设计一个简单的文件系统”,那么您可能希望开始提出智能问题,这样您就可以实际设计出能够使感知所需的功能和性能。真正的文件系统会进行各种性能交易:速度、空间开销、ACID 属性、日志恢复和取证记录等。我会寻找表明您了解问题空间的问题,而不一定是关于哪种数据结构的固定答案选择。
-
哈希表将是一个非常糟糕的主意。如果有人要求您列出
"foo\bar"目录中的所有文件,您将不得不搜索所有键。这将是一个 O(n) 操作。
标签: java data-structures hashtable binary-tree