Интервью Q-Дизайн Файловой Системы-Обзор

все,

меня недавно попросили в одном из технических интервью написать дизайн высокого уровня для файловой системы. Мой ответ на этот вопрос был следующим. Я прошу всех, пожалуйста, комментарий и дайте мне знать, если есть предложения/улучшения:

  interface BaseFileSystem
{
    /*Basic file/folder attributes are:
      1. File/Folder Size
      2. File/Folder Date created
      3. File/Folder Date Modified
      4. File/Folder permissions - Read, write and execute
      5. File/Folder Owner - Owner of the file who defines permissions for other users
      6. File/Folder Visibility - Hidden or Visible
      7. File/Folder Name 

      Hence each one of the above attributes would have public <return type> get() and public void set<AttributeName>(<variable datatype>) */
}

public class File implements BaseFileSystem
{
       /*The `File` class should implement all of the methods from interface `BaseFilesystem`.
         In addition, it must also implement following specific methods that can only be associated with physical files*/

        public String getFileExtension(){….}

        public void setFileExtension(String value) {….}

        public String[] getAssociatedPrograms(){ …..}

        public void executable(){ …. };
}

public class Folder implements BaseFileSystem
{

      /*The `Folder` class should implement all of the methods from interface `BaseFileSystem`. In addition, it must also implement following specific methods that can only be associated with the physical 'folders'*/

        public BaseFileSystem[] getSubFoldersAndFiles(){ …. }

        public void addSubFolderAndFiles(BaseFileSystem fileObj) { …. }

        public void executable(){throw new UnsupportedOperationException();}
}

кроме того, любые общие указатели на такие вопросы дизайна были бы весьма признательны.

3 ответов


существует три основные операции, которые отсутствуют:

  • чтение содержимого файла
  • запись содержимого файла
  • проверка -- является ли BaseFileSystem Это File или Folder

С другой стороны, есть некоторые операции, которые я не считаю необходимым для файловой системы:

  • расширение файла не имеет никакого значения во всех операционных системах. Тогда почему должен существовать метод для установки и извлечения?
  • связанные программы имеют значение только в одной комбинации компьютер / ОС. В файловой системе общего назначения программы могут существовать только временно (из-за загрузки другой ОС или перемещения устройства). Он не должен храниться как часть метаинформации файла из-за разделения проблем.
  • public void executable() кажется неуместным. Но это только предположение, потому что я не знаю, что этот метод должен делать. Если это выполняет исполняемый файл: это должно быть сделано операционной системой вручную. Кроме того, он не определяется в папке класса.

кроме того, атрибуты, которые вы определили в BaseFileSystem сделайте некоторые предположения о требованиях файловой системы. Возможно, ваша простая система разрешений недостаточна или требуется назначение файловой системы и ACLs. Возможно, видимость определяется именем файла (как в UNIX). Вы должны уточнить это заранее.


из того, что я знаю о вопросах интервью, вам нужно убедиться, что вы задаете уточняющие вопросы о файловой системе. Скрытая часть такого вопроса - убедиться, что вы тот, кто может определить двусмысленность. Также выясните, кто ваши пользователи могут быть, так как они могут не заботиться о "дате изменения"

когда я читал этот вопрос, я думал что-то *nix-based и использовал бы командные строки! Удачи!


Я не думаю, что имеет смысл просто дать API. Если вы следуете за POSIX, API уже предоставлен вам. Не имеет ли смысла описать модель данных для файловой системы? Например, как вы связываете данные, отслеживаете используемые / свободные блоки,обрабатываете изменения и т. д...

Мне это тоже не понравилось:

следовательно, каждый из вышеперечисленных атрибутов будет иметь public get () и public void set ()*/

Я действительно ненавижу геттеры/сеттеры. Если бы я собирался создать файловую систему, я бы вытолкнул любые метаданные файла за пределы файловой системы. Вместо этого предоставьте общий интерфейс для произвольных метаданных. Например, разрешения могут не иметь значения для встроенной системы, так зачем делать ее частью файловой системы?

удачи!