8.9 Explain the data structures and algorithms that you would use to design an in-memory file system. Illustrate with an example in code where possible.

这道题让我们设计一个内存文件系统,咋一听感觉挺吓人啊,像是很底层的东西,但其实只是一道很普通的OOB的题目而已。根据书上所述,在一个简化的文件系统,由文件和目录构成的,而文件类File和目录类Directory都是由一个入口类Entry派生而来的,可参见如下代码:

class Directory;

class Entry {
public:
Entry(string n, Directory *p) {
_name = n;
_parent = p;
_created = getCurrentTimeMillis();
}
static long getCurrentTimeMillis() {
time_t res = time(NULL);
localtime(&res);
return (long)res;
}
bool deleteEntry() {
if (_parent == nullptr) return false;
return _parent->deleteEntry(this);
}
virtual int size() = ;
string getFullPath() {
if (_parent == nullptr) return _name;
else return _parent->getFullPath() + "/" + _name;
}
long getCreationTime() { return _created; }
long getLastUpdatedTime() { return _lastUpdated; }
long getLastAccessedTime() { return _lastAccessed; }
void changeName(string n) { _name = n; }
string getName() { return _name; } protected:
Directory *_parent;
long _created;
long _lastUpdated;
long _lastAccessed;
string _name;
}; class File: public Entry {
public:
File(string n, Directory *p, int sz): Entry(n, p) {
_size = sz;
}
int size() { return _size; }
string getContents() { return _content; }
void setContents(string c) { _content = c; } private:
string _content;
int _size;
}; class Directory: public Entry {
public:
Directory(string n, Directory *p): Entry(n, p) {}
int size() {
int size = ;
for (auto a : _contents) {
size += a->size();
}
return size;
}
int numberOfFiles() {
int cnt = ;
for (auto a : _contents) {
if (Directory *d = dynamic_cast<Directory*>(a)) {
++cnt;
cnt += d->numberOfFiles();
} else if (File *f = dynamic_cast<File*>(a)) {
++cnt;
}
}
return cnt;
}
bool deleteEntry(Entry *entry) {
for (vector<Entry*>::iterator it = _contents.begin(); it != _contents.end(); ++it) {
if (*it == entry) {
_contents.erase(it);
}
}
}
void addEntry(Entry *entry) {
_contents.push_back(entry);
} protected:
vector<Entry*> _contents;
vector<Entry*> getContents() { return _contents; }
};

[CareerCup] 8.9 An In-memory File System 内存文件系统的更多相关文章

  1. NFS - Network File System网络文件系统

    NFS(Network File System/网络文件系统): 设置Linux系统之间的文件共享(Linux与Windows中间文件共享采用SAMBA服务): NFS只是一种文件系统,本身没有传输功 ...

  2. Blazor组件自做十一 : File System Access 文件系统访问 组件

    Blazor File System Access 文件系统访问 组件 Web 应用程序与用户本地设备上的文件进行交互 File System Access API(以前称为 Native File ...

  3. 【Azure 存储服务】如何把开启NFS 3.0协议的Azure Blob挂载在Linux VM中呢?(NFS: Network File System 网络文件系统)

    问题描述 如何把开启NFS协议的Azure Blob挂载到Linux虚拟机中呢? [答案]:可以使用 NFS 3.0 协议从基于 Linux 的 Azure 虚拟机 (VM) 或在本地运行的 Linu ...

  4. nfs 是Network File System 网络文件系统

    NFS的基本原刚是容许不同的客户端及服务通过一组PRC分享相同的文件系统,它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享.NFS在文件传送过程中依赖于RPC协议.远程过程调用Rem ...

  5. node.js—File System(文件系统模块)

    文件系统模块概述 该模块是核心模块,提供了操作文件的一些API,需要使用require导入后使用,通过 require('fs') 使用该模块 文件 I/O 是由简单封装的标准 POSIX 函数提供的 ...

  6. 小白日记46:kali渗透测试之Web渗透-SqlMap自动注入(四)-sqlmap参数详解- Enumeration,Brute force,UDF injection,File system,OS,Windows Registry,General,Miscellaneous

    sqlmap自动注入 Enumeration[数据枚举] --privileges -U username[CU 当前账号] -D dvwa -T users -C user --columns  [ ...

  7. Unable to chmod /system/build.prop.: Read-only file system

    Unable to chmod /system/build.prop.: Read-only file system 只读文件系统 所以需要更改 使用下面的命令 mount -o remount,rw ...

  8. Linux File System

    目录 . Linux文件系统简介 . 通用文件模型 . VFS相关数据结构 . 处理VFS对象 . 标准函数 1. Linux文件系统简介 Linux系统由数以万计的文件组成,其数据存储在硬盘或者其他 ...

  9. HDFS分布式文件系统(The Hadoop Distributed File System)

    The Hadoop Distributed File System (HDFS) is designed to store very large data sets reliably, and to ...

随机推荐

  1. Java之fianl修饰符

    fianl修饰的变量不可以改变,一旦获得初始值,该final变量的值就不能被重新赋值. 1.final成员变量(必需由程序员显式地指定初始值) 类变量:必须在静态初始化块中或者声明该变量时指定初始值, ...

  2. Android中ListView 控件与 Adapter 适配器如何使用?

    一个android应用的成功与否,其界面设计至关重要.为了更好的进行android ui设计,我们常常需要借助一些控件和适配器.今天小编在android培训网站上搜罗了一些有关ListView 控件与 ...

  3. android 进程间通信---Service Manager(1)

    Bind机制由4个部分组成.bind驱动,Client,ServiceManager &Service 1.Bind其实是一个基于linux系统的驱动,目的是为了实现内存共享. bind驱动的 ...

  4. python yield

    http://www.jb51.net/article/15717.htm  这里还不错 只是粗略的知道yield可以用来为一个函数返回值塞数据,比如下面的例子: def addlist(alist) ...

  5. jquery treeview

    jquery treeview 插件参数说明 treeview开源地址:https://github.com/jzaefferer/jquery-treeview 1.animated:String ...

  6. MFC添加右键菜单

    本文原创转载请注明作者及出处 本文链接:http://blog.csdn.net/wlsgzl/article/details/42147277 --------------------------- ...

  7. cocos2d-x之猜数字游戏

    bool HelloWorld::init() { if ( !Layer::init() ) { return false; } visibleSize = Director::getInstanc ...

  8. jQuery Validate 表单验证插件----Validate简介,官方文档,官方下载地址

     一. jQuery Validate 插件的介绍 jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆 ...

  9. django安装和卸载

    一.pip安装 安装: apt-get update apt-get install python-pip pip install django==1.4.20 卸载: pip uninstall d ...

  10. JS的构造及其事件注意点总结

    一:js的组成 ECMAscript bom dom 类型包括: number boolean  string undefined  object function 二:基本函数作用 parseInt ...