2011-04-01 16 views
10

सभी,साक्षात्कार क्यू - डिजाइन फाइल सिस्टम - समीक्षा

मैं हाल ही में तकनीकी साक्षात्कार में से एक में कहा गया था एक फ़ाइल Sysem के लिए एक उच्च स्तरीय डिजाइन लिखने के लिए। इस सवाल का मेरा जवाब इस प्रकार था।

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

साथ ही, इस तरह के डिजाइन प्रश्नों के किसी भी सामान्य संकेत बहुत सराहना की जाएगी: मैं की समीक्षा करें और मुझे पता है अगर वहाँ सुझाव/सुधार कर रहे हैं जाने के लिए हर किसी के अनुरोध करते हैं।

उत्तर

8

तीन आवश्यक संचालन, कि याद कर रहे हैं के होते हैं:

  • एक फ़ाइल
  • एक फ़ाइल की सामग्री लेखन की सामग्री को पढ़ने
  • परीक्षण है कि क्या एक BaseFileSystem एक File या एक Folder
  • है

दूसरी तरफ, कुछ ऐसे ऑपरेशन हैं जिन्हें मैं फ़ाइल सिस्टम के लिए आवश्यक नहीं मानता:

  • फ़ाइल एक्सटेंशन का सभी ऑपरेटिंग सिस्टम में कोई महत्व नहीं है। फिर इसे सेट करने और पुनर्प्राप्त करने के लिए एक विधि क्यों मौजूद होनी चाहिए?
  • संबंधित प्रोग्राम केवल एक कंप्यूटर/ओएस संयोजन में एक अर्थ है। एक सामान्य उद्देश्य फ़ाइल सिस्टम में, प्रोग्राम केवल अस्थायी रूप से मौजूद हो सकते हैं (क्योंकि एक अलग ओएस बूट किया गया है या डिवाइस स्थानांतरित हो गया है)। चिंताओं को अलग करने के कारण इसे फ़ाइल की मेटा जानकारी के हिस्से के रूप में IMHO को संग्रहीत नहीं किया जाना चाहिए।
  • public void executable() जगह से बाहर निकलता है। लेकिन यह केवल एक अनुमान है, क्योंकि मुझे नहीं पता कि यह विधि क्या करना है। यदि यह निष्पादन योग्य फ़ाइल निष्पादित करता है: यह ऑपरेटिंग सिस्टम द्वारा मैन्युअल रूप से किया जाना चाहिए। इसके अलावा, कक्षा फ़ोल्डर में इसका कोई व्यवसाय परिभाषित नहीं किया गया है।

इसके अलावा, BaseFileSystem में परिभाषित गुण फ़ाइल सिस्टम की आवश्यकताओं के बारे में कुछ मान्यताओं को बनाते हैं। हो सकता है कि अपने सरल अनुमतियाँ प्रणाली पर्याप्त नहीं है या फाइल सिस्टम के उद्देश्य और एसीएल की जरूरत है। शायद दृश्यता फ़ाइल के नाम से निर्धारित की जाती है (जैसे यूनिक्स में)। आपको पहले से स्पष्ट करना चाहिए।

+0

हां, आप सही हैं। 'पढ़ा' और 'लिखना' मूलभूत कार्यक्षमताओं थे जिन्हें मैंने अपने समाधान में याद किया है। फ़ाइल एक्सटेंशन से जुड़े कार्यक्रमों के बारे में, आपको ऐसा क्यों लगता है कि यह फ़ाइल सिस्टम का हिस्सा नहीं होना चाहिए? इस अर्थ में, आप तर्क तर्क कहां देखते हैं? अगर मेरे पास एन प्रोग्राम के साथ फाइल है, तो मुझे लगता है कि यह ओएस को बताने के लिए जिम्मेदार फाइल है। ओएस प्रोग्राम कौन से प्रोग्राम फाइल में डेटा पढ़ने के लिए उपयोग कर सकते हैं। –

+0

जैसा कि ओस्वाल्ड ने कहा था, उपयोगकर्ता ए प्रोग्राम प्रोग्राम के साथ प्रोग्राम एक्स, उपयोगकर्ता बी के साथ फाइल को जोड़ सकता है। इसके अलावा, अधिकांश ऑपरेटिंग सिस्टम में आप किसी विशेष फ़ाइल के साथ प्रोग्राम को संबद्ध नहीं करते हैं, लेकिन किसी विशेष प्रकार की फाइलों के साथ (फ़ाइल एक्सटेंशन द्वारा निर्धारित, फ़ाइल या कुछ भी कुछ विशेषता)। – Jirka

+0

क्या बेसफाइल सिस्टम या फ़ोल्डर पर "पथ" होना आवश्यक है? – user3795309

1

साक्षात्कार के सवालों के बारे में मुझे क्या पता है, आपको यह सुनिश्चित करना होगा कि आप फ़ाइल सिस्टम के बारे में स्पष्ट प्रश्न पूछें। इस तरह के एक प्रश्न का छुपा हिस्सा यह सुनिश्चित करना है कि आप ऐसे व्यक्ति हैं जो अस्पष्टता की पहचान कर सकें। इसके अलावा यह पता लगाने जो आपके उपभोक्ताओं को हो सकता है जब मैं इस सवाल का, मैं कुछ सोच रहा था पढ़ने के बाद से वे के बारे में

"संशोधित तिथि" परवाह नहीं हो सकता है * nix आधारित और कमांड लाइन का प्रयोग करेंगे! सौभाग्य!

+0

वैसे मुझे इलेक्ट्रॉनिक जवाब देना पड़ा। तो मुझे कुछ कार्यक्षमताओं को ग्रहण करना पड़ा और कभी आगे की चर्चा का मौका नहीं था। इसलिए मैंने इसे यहां पूछा है! उत्तर –

+0

के लिए धन्यवाद मुझे खेद है, लेकिन मैं "तिथि संशोधित" कार्यक्षमता के बारे में आपसे असहमत हूं। सबसे ऊपर, यह कोड यूआई आधारित नहीं है और इसलिए मुझे यकीन नहीं है कि मुझे दर्शकों को समझने की आवश्यकता क्यों होगी। मैं ऐसा करता हूं कि UI को डिज़ाइन करते समय फ़ाइल सिस्टम नहीं। –

+0

हाँ, मैं नहीं कह रहा हूं दिनांक संशोधित छोड़ा जाना चाहिए। मेरा मुख्य आकर्षण यह सुनिश्चित करना था कि आपने स्पष्ट प्रश्न पूछे हैं =] –

1

मैं इसे नहीं लगता कि समझ में आता है सिर्फ एक एपीआई देने के लिए। यदि आप POSIX का पालन करते हैं, तो एपीआई आपको पहले ही दी गई है। फाइल सिस्टम के लिए डेटा मॉडल का वर्णन करने के लिए और अधिक समझदारी नहीं होगी? उदाहरण के लिए, आप डेटा को कैसे लिंक करते हैं, प्रयुक्त/मुक्त ब्लॉक ट्रैक करते हैं, संशोधनों को संभालते हैं, आदि ...

मुझे यह पसंद नहीं था या तो:

इसलिए ऊपर विशेषताओं में से हर एक सार्वजनिक get() और सार्वजनिक शून्य सेट() */

होता मैं वास्तव में पसंद नहीं getters/setters। अगर मैं एक फाइल सिस्टम डिजाइन करने जा रहा था, तो मैं फाइल सिस्टम के बाहर किसी भी फ़ाइल मेटाडेटा को धक्का दूंगा। इसके बजाय मनमाने ढंग से मेटाडेटा के लिए एक सामान्य इंटरफ़ेस प्रदान करें। उदाहरण के लिए, एक एम्बेडेड सिस्टम पर अनुमतियां अप्रासंगिक हो सकती हैं, तो इसे फ़ाइल सिस्टम का हिस्सा क्यों बनाएं?

गुड लक!

संबंधित मुद्दे