[CareerCup] 8.9 An In-memory File System 内存文件系统
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() = 0; 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 = 0; for (auto a : _contents) { size += a->size(); } return size; } int numberOfFiles() { int cnt = 0; 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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· DeepSeek本地性能调优
· 一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略