12
votes

Interview Q - Système de fichiers de conception - examen

Tous,

On m'a récemment demandé dans l'une des entretiens techniques d'écrire une conception de haut niveau pour un sysem de fichier. Ma réponse à la question était la suivante. Je demanderais à tout le monde s'il vous plaît examiner et me faire savoir s'il existe des suggestions / amélioration: p>

  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();}
}


0 commentaires

3 Réponses :


1
votes

De ce que je sais sur les questions d'entrevue, vous devez vous assurer de demander des questions clarifiantes sur le système de fichiers. La partie cachée d'une question comme celle-ci est de vous assurer que vous êtes quelqu'un qui peut identifier l'ambiguïté. Déterminez également qui pourraient être vos utilisateurs, car ils ne se soucient pas de «date modifiée»

Quand j'ai lu cette question, je pensais quelque chose * basé sur Nix et utiliserait les lignes de commande! Bonne chance!


3 commentaires

Eh bien, je devais soumettre la réponse par voie électronique. J'ai donc dû supposer certaines des fonctionnalités et il n'y avait jamais eu de chance de discussion en arrière-plan. Par conséquent, je l'ai posé ici! Merci pour la réponse


Je suis désolé mais je ne suis pas d'accord avec vous sur la fonctionnalité "Date modifiée". Surtout, ce code n'est pas basé sur l'interface utilisateur et je ne sais pas pourquoi je devrais comprendre le public. Je ferais cela lors de la conception de l'interface utilisateur et non du système de fichiers.


Oui, je ne dis pas que la date modifiée doit être laissée de côté. Mon point culminant principal était de vous assurer de demander des questions de clarification =]



9
votes

Il manque trois opérations essentielles qui manquent:

  • lire le contenu d'un fichier
  • écrire le contenu d'un fichier
  • Testez si un basefileSystem est un fichier ou un dossier

    D'autre part, certaines opérations ne sont pas considérées comme essentielles pour un système de fichiers:

    • L'extension de fichier n'a aucune signification dans tous les systèmes d'exploitation. Alors pourquoi une méthode devrait-elle exister pour la définition et la récupérer?
    • Les programmes associés ont uniquement une signification dans une seule combinaison d'ordinateur / système d'exploitation. Dans un système de fichiers à usage général, les programmeurs ne peuvent exister que temporairement (car un système d'exploitation différent est démarré ou que le périphérique est déplacé). Il ne devrait pas être stocké dans le cadre des méta-informations d'un fichier, en raison de la séparation des préoccupations.
    • VOI public exécutable () semble hors de propos. Mais ce n'est qu'une hypothèse que je ne sais pas ce que cette méthode est censée faire. Si cela exécute un fichier exécutable: cela devrait être effectué par le système d'exploitation manuellement. En outre, il n'a pas d'affaires définie dans le dossier de classe.

      En outre, les attributs que vous avez définis dans basefileSystem apportent des hypothèses sur les exigences du système de fichiers. Peut-être que votre système d'autorisations simples n'est pas suffisant ni que le système de fichiers et les ACL sont nécessaires. Peut-être que la visibilité est déterminée par le nom du fichier (comme in Unix). Vous devriez clarifier cela à l'avance.


3 commentaires

Oui, tu as raison. Lire et Écrire Les fonctionnalités de base que j'ai manquées dans ma solution. En ce qui concerne les programmes associés aux extensions de fichiers, pourquoi pensez-vous qu'il ne faut pas faire partie du système de fichiers? Dans le sens, où voyez-vous ce raccord logique? Si j'ai un fichier avec N programmes associés à celui-ci, je pense que c'est ce fichier responsable de dire à l'O.S que les programmes utilisés par O.S peuvent utiliser pour lire les données dans le fichier.


Comme l'a dit Oswald, l'utilisateur A peut associer le fichier avec le programme X, utilisateur B avec programme Y. De plus, dans la plupart des systèmes d'exploitation, vous n'associe pas les programmes avec un fichier particulier, mais avec un type particulier de fichiers (déterminé par extension de fichier, certains attribut du fichier ou autre).


Est-ce qu'il doit être "chemin" sur basefileSystem ou dossier?



1
votes

Je ne pense pas qu'il est logique de simplement donner une API. Si vous suivez POSIX, l'API vous est déjà donné. N'aurait-il plus de sens de décrire le modèle de données du système de fichiers? Par exemple, comment reliez-vous les données, les blocs de piste utilisés / libres, les modifications de la poignée, etc.

Je n'ai pas aimé cela non plus:

Par conséquent, chacun des attributs ci-dessus aurait le public () et le vide public () * /

Je déteste vraiment getters / setters. Si j'allais concevoir un système de fichiers, je repousserais des métadonnées de fichier en dehors du système de fichiers. Fournissez plutôt une interface générique pour les métadonnées arbitraires. Par exemple, les autorisations peuvent être sans importance sur un système intégré, alors pourquoi faire partie du système de fichiers?

bonne chance!


0 commentaires