दो बार एक ही मूल्य वापस न करने की गारंटी


23

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

मेरा विचार प्रत्येक मशीन को एक अद्वितीय आईडी प्रदान करना था और उस मूल्य को अद्वितीय मूल्य जनरेटर फ़ंक्शन में पास करना था:

var i = 0;
function uniq(process_id, machine_id) {
   return (i += 1).toString() + machine_id + "-" + process_id;
}

यह दो या दो से अधिक प्रक्रियाओं के लिए समान मूल्य को पढ़ता है, भले ही दौड़ की स्थिति से गिरावट से बचना होगा i, प्रत्येक वापसी मूल्य को प्रक्रिया आईडी और मशीन आईडी के एक अद्वितीय संयोजन को टैग किया जाता है। हालाँकि, मेरे साक्षात्कारकर्ता को यह उत्तर पसंद नहीं आया क्योंकि एक और मशीन ऑनलाइन लाने के लिए इसमें एक आईडी असाइन करना शामिल है।

तो क्या कोई इसे हल करने का दूसरा तरीका सोच सकता है जिसमें प्रत्येक मशीन को एक अद्वितीय आईडी रखने के लिए कॉन्फ़िगर करना शामिल नहीं है? यदि यह प्रश्न फिर से उठता है, तो मुझे उत्तर देना होगा। धन्यवाद।


31
शब्द की सख्त अर्थ में गारंटी? मेरा मतलब है, यहां तक ​​कि कुछ लोग खुद को दोहराना शुरू कर देंगे। हम अब नहीं रह सकते हैं, लेकिन गारंटी देता है .. और वैसे, एक प्रक्रिया आईडी अद्वितीय होने से बहुत दूर है
जेएनएसजी

7
@CodesInChaos - यह एक बहुत ही भयानक धारणा है, यह देखते हुए कि यह आपके मैक पते को बदलने के लिए कुछ ऑपरेटिंग सिस्टम में तुच्छ है।
तेलस्तीन

7
"मान लें कि यह फ़ंक्शन कई मशीनों द्वारा समवर्ती रूप से एक्सेस किया जाएगा" - ईमानदारी से, इसका मतलब या तो हो सकता है "कोड प्रत्येक मशीन पर इंडिविजुअल रूप से चलता है, मशीनों के बीच कोई संचार नहीं है", या "एक केंद्रीय मशीन / केंद्रीय डेटाबेस है जहां फ़ंक्शन अन्य मशीनों के लिए प्रदान किया जाता है, नेटवर्क पर उपलब्ध है "। आपको यह पहले स्पष्ट करना शुरू कर देना चाहिए।
डॉक्टर ब्राउन

28
क्या यह एक ट्रिकी प्रश्न था? उदाहरण के लिए, एक अनंत लूप वाला एक फ़ंक्शन दो बार एक ही मान वापस नहीं करेगा ..
ब्रेंडन

8
शायद वे एक प्रोग्रामर की तलाश में थे, जो संदिग्ध आवश्यकताओं के बारे में सवाल पूछते हैं, बजाय धारणा बनाने और इसके साथ चलने के :) :)
TheMayer

जवाबों:


60

फैंसी न पाएं, बस कुछ संचार समापन बिंदु (WCF, वेब सेवा, जो कुछ भी हो) के पीछे एक सरल (थ्रेडसेफ़) काउंटर टॉस करें:

   long x = long.MinValue;
   public long ID(){
       return Interlocked.Increment(ref x);
   }

हाँ, यह अंततः बह निकलेगा। हां, यह रिबूट को संभालता नहीं है। हां, यह यादृच्छिक नहीं है। हां, कोई इसे कई सर्वरों पर चला सकता है।

यह सबसे सरल बात है जो व्यावहारिक आवश्यकताओं को पूरा करती है। फिर उन्हें उन समस्याओं के साथ पालन करने दें (यह सुनिश्चित करने के लिए कि वे सीमाओं को समझते हैं, क्या वे वास्तव में सोचते हैं कि आपको 2 ^ 64 आईडी से अधिक की आवश्यकता है), इसलिए आप तब पूछ सकते हैं कि कौन से ट्रेड-ऑफ ठीक हैं। क्या उसे रिबूट को जीवित करने की आवश्यकता है? हार्ड ड्राइव विफलता के बारे में क्या? परमाणु युद्ध के बारे में क्या? क्या यह यादृच्छिक होने की आवश्यकता है? कितना यादृच्छिक?


7
यह एक अच्छा जवाब है, क्योंकि साक्षात्कारकर्ता कभी भी सीधे उत्तर पाने के लिए सवाल नहीं पूछते हैं। वे चाहते हैं कि आप एक जवाब दें जहां आप अपने फैसलों को सही ठहरा सकें। यदि आप डोमेन को समझते हैं, तो लगभग कोई भी उत्तर उपयुक्त होगा यदि आप इसे सही ठहरा सकते हैं।

7
यह कैसे काम करना चाहिए अगर कोड विभिन्न मशीनों पर चलता है (इसलिए स्पष्ट रूप से विभिन्न प्रक्रियाओं में)? प्रत्येक प्रक्रिया की एक अलग प्रति होगी x। और मुझे लगता है कि आपके मन में किस तरह के इंटरलॉकिंग तंत्र के बारे में कोई स्पष्टीकरण है, यह जवाब बहुत अस्पष्ट है।
डॉक्टर ब्राउन

7
@DocBrown "कई मशीनों द्वारा एक्सेस कॉन्क्लेरकेंटली" का अर्थ है कि कई मशीनें एक ही सर्वर पर एक ही फ़ंक्शन को एक्सेस करती हैं । अन्यथा यह कहा जाना चाहिए "एक ही समय में कई मशीनें इस फ़ंक्शन की एक प्रति
चलाएंगी

3
@LightnessRacesinOrbit: मुझे लगता है कि यह सी # होने के लिए है, और System.Threading.Interlockedवर्ग, जो परमाणु वेतन वृद्धि प्रदान करता है। लेकिन आप इसे किसी प्रकार के छद्म कोड के रूप में भी पढ़ सकते हैं।
डॉक्टर ब्राउन

3
अगर मैं पूछ रहा होता तो मैं इस प्रस्ताव से बहुत दुखी होता। आवश्यकताओं को समझने के बिना कुछ को लागू करना शुरू करना एक बड़ी लाल झंडी है। मुझे उम्मीद है कि आप पूछेंगे।
12

25

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


V4 GUIDs के साथ समस्या यह है कि वे केवल बहुत विशिष्ट हैं, अद्वितीय की गारंटी नहीं है। व्यवहार में एक बड़ा मुद्दा नहीं है, लेकिन आवश्यकताओं को संतुष्ट नहीं करता है अगर साक्षात्कारकर्ता उन्हें सचमुच लेता है।
कोडइन्चोस

विशेष रूप से, यदि मानक GUID तंत्र साक्षात्कारकर्ता की आवश्यकताओं को पूरा नहीं करता है, तो साक्षात्कारकर्ता और GUID के एक साधारण उपयोगकर्ता के बीच आवश्यकताओं में अंतर को छेड़ें। एक समझदार साक्षात्कारकर्ता इस तरह का सवाल पूछते हैं ("आप कैसे करते हैं <कुछ सामान्य रूप से ज्ञात मानक चीज शायद सामान्य आवश्यकताओं से थोड़े बदलाव के साथ") कला के राज्य के बारे में जानने वाले उम्मीदवारों से बहुत अलग तरह के उत्तर की उम्मीद करनी चाहिए GUID और उम्मीदवारों के लिए जो खरोंच से कुछ का आविष्कार कर रहे हैं।
स्टीव जेसोप

लचीली आवश्यकताओं को मानते हुए यह शायद सबसे सरल उत्तर है।
theMayer

9
+1 क्योंकि यह मूल रूप से समस्या है जो गाइड हल करती है। डुप्लिकेट गाइड का निर्माण, कोई फर्क नहीं पड़ता कि इसका प्रारूप, ग्रह पर सबसे कठिन लॉटरी है। जाहिरा तौर पर कई लोगों को टकराव के घातीय अनौचित्य के लिए कोई मतलब नहीं है।
यूएसआर

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

22

साक्षात्कारकर्ता ने कहा कि विधि को समवर्ती कहा जाएगा, समानांतर में नहीं; आप जितनी बार चाहें उतने दशमलव स्थानों पर तारीख / समय वापस कर सकते हैं।

हर कोई इस पर क्यों सोच रहा है? किसी भी परिमित राशि के खर्च होने से पहले आप लंबे समय तक मर चुके होंगे और आपके पास टक्कर का मौका नहीं होगा।

यदि आप उसी समय लौटने के बारे में चिंतित हैं, तो औसत दर्जे की समय की सबसे छोटी राशि के लिए विलंब जोड़ें।

यदि आप दिन के समय की बचत समय (1 बार दो बार अनुभव) के लिए घड़ी वापस सेट करने के बारे में चिंतित हैं, तो दूसरी बार जब आप इसे अनुभव करते हैं तो निरंतर जोड़ें।


12
या केवल अनुरोधकर्ताओं के समय की परवाह किए बिना UTC समय लौटाएं। चूंकि UTC स्थानीय नहीं है, इसलिए यह DST परिवर्तनों से प्रभावित नहीं होगा।
मौरो

1
System.currentTimeNanos () :-)
Falco

1
जब तक आप मानव-पठनीय प्रारूप में दिनांक और समय नहीं लौटा रहे हैं, तब तक आपके मूल्य में किसी भी समय इसके अंदर की जानकारी नहीं होनी चाहिए।
मोनिका

12
समय की सबसे छोटी राशि अभी भी टकराव पैदा करने जा रही है अगर अक्सर / समवर्ती पर्याप्त रूप से कहा जाता है। यह घड़ी तुल्यकालन बहाव, दुर्भावनापूर्ण घड़ी हेरफेर के कारण भी टकराव पैदा करेगा, और यदि आप सावधान नहीं हैं - दिन के उजाले की बचत।
तेलेस्टिन

1
बहुत रचनात्मक, कम से कम। एक ऐसी घड़ी पर भरोसा करना, जो अब हर बार समायोजित होने जा रही है और अभी भी ऐसा एक महान विचार नहीं है, IMHO। ऑफसेट आपको टकरावों से नहीं बचाएगा।
12

15

सबसे पहले, आप साक्षात्कारकर्ता से दो प्रश्न पूछना चाहेंगे।


प्रश्न 1।

क्या साक्षात्कारकर्ता को कुछ विशिष्ट संख्याओं, या विशिष्ट संख्याओं के ब्लॉक को असाइन करने के लिए एक या अधिक "केंद्रीय मशीनों" की उम्मीद है


प्रश्न 2।

क्या साक्षात्कारकर्ता टकराव का पता लगाने के लिए एक तंत्र की अपेक्षा करता है, या इसके बजाय स्पष्ट रूप से पता लगाने के बिना टकराव के एक शून्य से कम मौका की गणना जोखिम को स्वीकार करता है।

रक्षा-में-गहराई दृष्टिकोण भी है, जिसमें कोई उपयोगकर्ता-आईडी के कुछ हिस्से को यादृच्छिकता में शामिल करता है (इस प्रकार, पूरी तरह से यादृच्छिक नहीं)। उसी उपयोगकर्ता द्वारा बनाई गई सामग्री के भीतर समान उपयोगकर्ता के बीच टक्कर होने की संभावना कम होती है।


एक अंतर्निहित प्रश्न 3 है, ...

लेकिन यह एक ऐसा है जिसे आपको बिना पूछे खुद को गेज करना होगा, क्योंकि यह आपके साक्षात्कारकर्ता से पूछने के लिए बेहद अयोग्य है।

क्या साक्षात्कारकर्ता क्रिप्टोग्राफिक और सूचना-सुरक्षा प्रणालियों में नियोजित संभावना, जोखिम और कुछ सरल तकनीकों के ज्ञान को मानता है।

पहली तरह का ज्ञान सुनिश्चित करता है कि आप एक गैर-वैज्ञानिक व्यक्ति को वैज्ञानिक अवधारणा को स्वीकार करने के लिए मनाने की कोशिश नहीं कर रहे हैं जो वे स्वीकार नहीं करेंगे।

दूसरे प्रकार का ज्ञान यह सुनिश्चित करता है कि आप उन चिंताओं को संबोधित करते हैं जो केवल संभावना के अतिरिक्त हैं। दूसरे शब्दों में, "हमलावरों" के खिलाफ कैसे बचाव किया जाए जो मशीन को जोड़कर जानबूझकर आपकी यादृच्छिकता योजना को तोड़ सकते हैं, या उनके आभासी मेजबानों को दो मशीनों को एक ही मूल्य उत्पन्न करने के लिए मजबूर कर सकते हैं।


क्यों पूछें।

कारण यह है कि अगर साक्षात्कारकर्ता इसे एक या दूसरे तरीके से उम्मीद करता है, तो विपरीत दृष्टिकोण के साथ जवाब देने की कोशिश कभी भी साक्षात्कारकर्ता को खुश नहीं करेगी।

गहरा कारण यह है कि कुछ लोगों को कहने का विचार, 1.0e-20असफल होने का मौका पसंद नहीं है । (मैं यहाँ दार्शनिक या धार्मिक तर्कों को नहीं छेड़ने की कोशिश करूँगा।)


यादृच्छिक संख्याओं के सभी "नेमस्पेस" को पहले एक पदानुक्रम में बनाया जाता है, जिसमें कुछ संख्या में बिट्स को रैंडमाइजेशन के एक स्रोत को आवंटित किया जाता है, और अन्य संख्या के बिट्स को कुछ अन्य तरीकों से आवंटित किया जाता है, आदि।

केंद्रीकृत दृष्टिकोण बिट्स के पहले स्तर को विशिष्ट रूप से असाइन करने के लिए कुछ केंद्रीय प्राधिकरण पर निर्भर करता है। फिर, अन्य मशीनें बाकी बिट्स को भर सकती हैं।

कई विकेन्द्रीकृत दृष्टिकोण हैं:

  • बस एक के रूप में अच्छा के रूप में यादृच्छिक संख्या उत्पन्न करते हैं, और गणना द्वारा उचित असफल होने के व्यावहारिक रूप से शून्य मौका स्वीकार करते हैं।
  • निर्धारक स्रोत से यादृच्छिक मान उत्पन्न करने के क्रिप्टोग्राफ़िक साधनों का उपयोग करें, कहते हैं, एक वृद्धिशील मूल्य।

मुझे लगता है कि यह सबसे अच्छा जवाब है। अन्य आवश्यकताओं के बिना समाधान हैं।
बजे जैक एदले

अपने तीसरे प्रश्न पर टिप्पणी करना - ऐसा लगता है कि क्षमता एक सुरक्षित धारणा है, या कम से कम एक अप्रासंगिक है। यदि कोई कंपनी एक सक्षम साक्षात्कारकर्ता प्रदान नहीं करती है, तो चयन प्रक्रिया में बड़ी खामियां होने की संभावना होगी। यदि उन्होंने किया, तो वह / वह सवालों की सराहना करेंगे।
theMayer

1
"प्रश्न 3" को "की क्या ज़रूरत है", की तर्ज पर कुछ पूछकर संबोधित किया जा सकता है, "क्या हमें वास्तव में विशिष्टता की गारंटी चाहिए या टकराव की बहुत कम संभावना है?" और, "यह कितना सुरक्षित होना चाहिए? क्या हमें यह मानने की आवश्यकता है कि एक हमलावर तंत्र को तोड़ने की कोशिश कर रहा है? हम किस प्रकार के हमलों के बारे में चिंतित हैं?" उन सवालों के जवाब को स्पष्ट करना चाहिए कि क्या पूछने वाला इन मुद्दों को समझता है और वे क्या उम्मीद करते हैं।
jpmc26

12

इसलिए, यह ध्यान में रखते हुए कि यह एक साक्षात्कार प्रश्न है और वास्तविक वास्तविक जीवन परिदृश्य नहीं है, मेरा मानना ​​है कि सही दृष्टिकोण (और शायद साक्षात्कारकर्ता की तलाश है) एक स्पष्ट प्रश्न पूछना है, या यह लिखना नहीं है "यह नहीं कर सकता है। किया जाए ”और आगे बढ़ें। यहाँ पर क्यों।

साक्षात्कारकर्ता क्या पूछता है:

एक फ़ंक्शन लिखें जो दो बार एक ही मूल्य वापस न करने की गारंटी है। मान लें कि यह फ़ंक्शन कई मशीनों द्वारा समवर्ती रूप से एक्सेस किया जाएगा।

साक्षात्कारकर्ता को क्या चाहिए:

क्या यह उम्मीदवार आवश्यकताओं का प्रभावी ढंग से मूल्यांकन करता है और आवश्यकता होने पर अतिरिक्त इनपुट की तलाश करता है?

कभी ना माने।

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

अधिकांश उत्तर मान्यताओं की एक श्रृंखला के माध्यम से समस्या को हल करने में एक या दूसरे प्रयास करते हैं। एक विशेष रूप से इसे जल्दी से पूरा करने की सलाह देता है और अगर यह गलत है तो ग्राहक को इसके बारे में चिंता करने दें।

यह वास्तव में एक बुरा दृष्टिकोण है। एक ग्राहक के रूप में, यदि मैं एक अस्पष्ट आवश्यकता देता हूं, और इंजीनियर बंद हो जाता है और मुझे एक समाधान बनाता है जो काम नहीं करता है, तो मैं परेशान होने जा रहा हूं कि वे काम पर चले गए और मुझे पूछने के लिए परेशान किए बिना मेरे पैसे खर्च किए। उस तरह के घुड़सवार निर्णय लेने से टीम वर्क की कमी, गंभीर रूप से सोचने में असमर्थता, और खराब निर्णय का प्रदर्शन होता है। यह किसी भी तरह के नकारात्मक परिणामों को जन्म दे सकता है, जिसमें सुरक्षा महत्वपूर्ण प्रणाली में हानि-जीवन भी शामिल है।

प्रश्न क्यों पूछें?

बिंदु अगर यह अभ्यास है कि अस्पष्ट आवश्यकताओं के निर्माण के लिए यह महंगा और समय लेने वाला है। ओपी के मामले में, आपको एक असंभव काम दिया गया है। स्पष्टीकरण के लिए पूछने के लिए आपकी पहली कार्रवाई होनी चाहिए - यह क्या है जो आवश्यक है? विशिष्टता की क्या डिग्री की आवश्यकता है? यदि कोई मूल्य गैर-अद्वितीय है तो क्या होगा? इन सवालों का जवाब कई हफ्तों के समय और कुछ मिनटों के बीच का अंतर हो सकता है। वास्तविक दुनिया में, कॉम्प्लेक्स सिस्टम (कई सॉफ्टवेयर सिस्टम सहित) में लागत के सबसे बड़े ड्राइवरों में से एक अस्पष्ट और खराब समझ वाली आवश्यकताएं हैं। यह महंगा और समय लेने वाली कीड़े, फिर से डिजाइन, ग्राहक और टीम की हताशा, और मीडिया कवरेज को शर्मसार करता है अगर परियोजना काफी बड़ी है।

जब आप मान लेते हैं तो क्या होता है?

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

मार्स क्लाइमेट ऑर्बिटर - इस मामले को आमतौर पर उद्धृत किया जाता है जब नासा अंग्रेजी को मीट्रिक इकाइयों में बदलने की कोशिश करता है। हालाँकि, यह एक बहुत ही सरल और खराब प्रतिनिधित्व है जो वास्तव में प्रसारित होता है। सच है, रूपांतरण की समस्या थी, लेकिन यह डिज़ाइन चरण में खराब-संचारित आवश्यकताओं और एक अनुचित सत्यापन / सत्यापन योजना के कारण था। इसके अलावा, जब दो अलग-अलग इंजीनियरों ने समस्या पर ध्यान दिया क्योंकि यह उड़ान प्रक्षेपवक्र डेटा से स्पष्ट था, तो उन्होंने इस मुद्दे को उचित स्तर तक नहीं उठाया क्योंकि उन्होंने माना कि यह एक संचरण त्रुटि थी। क्या मिशन ऑप्स टीम को इस मुद्दे के बारे में अवगत कराया गया है, इसे सही करने और मिशन को बचाने के लिए पर्याप्त समय था। इस मामले में, एक असंभव तार्किक स्थिति थी जिसे मान्यता नहीं थी कि यह महंगा मिशन विफलता के लिए क्या है।

मंगल पोलर लैंडर- यह मामला थोड़ा कम जाना-पहचाना है, लेकिन संभवतः मार्स क्लाइमेट ऑर्बिटर की विफलता के कारण इसकी अधिक निकटता शर्मनाक है। इस मिशन में, सॉफ्टवेयर ने रॉकेट की थ्रस्टर्ड असिस्टेड डिसेंट को मार्टियन सतह में नियंत्रित किया। सतह से 40 मीटर ऊपर एक बिंदु पर, लैंडर के पैर लैंडिंग की तैयारी में तैनात हैं। पैरों पर एक सेंसर भी था जो इंजन को बंद करने के लिए सॉफ्टवेयर को बताने के लिए गति (जब वे प्रभावित हुए थे) का पता लगाने के लिए पता लगाया था। नासा का सबसे अच्छा अनुमान है कि क्या हुआ (क्योंकि कई कब्जे की विफलताएं और अपूर्ण डेटा हैं) यह है कि एक साथ उनकी तैनाती के कारण पैरों में यादृच्छिक कंपन और अनुचित तरीके से सतह से 40 मीटर ऊपर शटडाउन तंत्र को ट्रिगर किया गया, जिसके परिणामस्वरूप दुर्घटना और $ 110 का विनाश हुआ। एम अंतरिक्ष यान। इस संभावना को विकास में उठाया गया था, लेकिन कभी संबोधित नहीं किया गया था। आखिरकार, सॉफ्टवेयर टीम ने अवैध धारणाएं बनाईं कि इस कोड को चलाने के लिए कैसे आवश्यक है (एक ऐसी धारणा यह है कि एक नकली संकेत बहुत कम समय तक उठाया जाएगा, इसके विपरीत परीक्षण के बावजूद), और उन मान्यताओं पर कभी सवाल नहीं उठाया गया। तथ्य।

अतिरिक्त मुद्दो पर विचार करना

लोगों का साक्षात्कार लेना और उनका मूल्यांकन करना एक मुश्किल काम है। एक उम्मीदवार के कई आयाम हैं जो एक साक्षात्कारकर्ता को तलाशने की इच्छा हो सकती है, लेकिन सबसे महत्वपूर्ण में से एक एक विचारधारात्मक रूप से सोचने की क्षमता है। विभिन्न कारणों से, जिनमें से कम से कम यह नहीं है कि महत्वपूर्ण सोच को खराब तरीके से परिभाषित किया गया है, हमारे पास महत्वपूर्ण सोच कौशल का मूल्यांकन करने में बहुत मुश्किल समय है।

एक इंजीनियरिंग प्रशिक्षक के रूप में, एक छात्र की गंभीर रूप से सोचने की क्षमता का मूल्यांकन करने के लिए मेरे पसंदीदा तरीकों में से एक कुछ अस्पष्ट प्रश्न पूछना था। तेज छात्र सवाल के दोषपूर्ण आधार पर उठाते हैं, इसे नोट करते हैं, और या तो उत्तर या उत्तर को अस्वीकार कर दिया जाता है। आमतौर पर, मैं निम्नलिखित के समान एक प्रश्न पूछूंगा:

आप अपने काम के ढेर से एक ड्राइंग उठाते हैं। ड्राइंग में विभिन्न कॉलआउट की एक किस्म शामिल है, लेकिन एक क्षैतिज सतह के लिए सबसे महत्वपूर्ण बिंदु और कहते हैं "परफेक्टली फ्लैट"। सतह 5 "16 से चौड़ी" लंबी है, और हिस्सा एल्यूमीनियम से बना है। आप इस सुविधा को बनाने के लिए कैसे मशीन को काम करेंगे?

(वैसे, आप इस बात से हैरान होंगे कि कार्यस्थल में ऐसा खराब विनिर्देश कितनी बार दिखाई देता है।)

मुझे उम्मीद है कि छात्र यह पहचानेंगे कि एक आदर्श विशेषता बनाना संभव नहीं है, और वे अपने उत्तर में यह बताएंगे। मैं आम तौर पर एक बोनस बिंदु प्रदान करता हूं अगर वे कहते हैं कि वे डिजाइनर के पास जाएंगे और भाग बनाने से पहले स्पष्टीकरण मांगेंगे। यदि कोई छात्र मुझे यह बताने के लिए आगे बढ़ता है कि वे कैसे .001 प्लांटरिटी या कुछ अन्य निर्मित मूल्य प्राप्त करने जा रहे हैं, तो मैं शून्य अंक प्रदान करता हूं। इससे मुझे अपने छात्रों को यह बताने में मदद मिलती है कि उन्हें बड़ी तस्वीर के बारे में सोचने की जरूरत है।

जमीनी स्तर

यदि मैं एक इंजीनियर (या इसी तरह के पेशे) का साक्षात्कार कर रहा हूं, तो मैं किसी ऐसे व्यक्ति की तलाश कर रहा हूं जो गंभीर रूप से सोच सके और सवाल कर सके कि उसके सामने क्या रखा गया है। मुझे कोई ऐसा व्यक्ति चाहिए जो सवाल पूछता है "क्या यह समझ में आता है?" ।

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


5

अद्वितीयता की गारंटी देना मुश्किल है क्योंकि कंप्यूटर में असीम रूप से बड़े चर नहीं होते हैं। कोई वास्तविक दुनिया ट्यूरिंग मशीन नहीं कर सकती।

जिस तरह से मैं इसे देखता हूं, यहां दो समस्याएं हैं, और दोनों में अच्छी तरह से स्थापित समाधान हैं।

  • संगामिति। एक ही समय में कई मशीनों को एक मूल्य की आवश्यकता हो सकती है। शुक्र है, आधुनिक सीपीयू में कंसिस्टेंट बिल्ट-इन हैं और कुछ भाषाएं इसका लाभ उठाने के लिए डेवलपर के अनुकूल सुविधाएं प्रदान करती हैं।
  • विशिष्टता। विशिष्टता की गारंटी देने में असंभव होने पर, हमारे पास मनमाने ढंग से बड़े-बड़े वैरिएबल हो सकते हैं जो मूल्यों को इतने बड़े स्तर पर पकड़ सकते हैं कि एक वास्तविक-विश्व प्रणाली में सभी अद्वितीय मूल्यों को समाप्त करने में बहुत मुश्किल समय होगा।

यहाँ जावा में मेरा समाधान है:

public class Foo {
  private static BigInteger value = BigInteger.ZERO;
  private static final Lock lock = new ReentrantLock();

  public static BigInteger nextValue() {
    try {
      lock.lock();
      value = value.add(BigInteger.ONE);
      return value;
    }
    finally {
      lock.unlock();
    }
  }
}

BigInteger एक मनमाना आकार पूर्णांक प्रकार है। यह उन मूल्यों को धारण करने के लिए विकसित हो सकता है जो काफी बड़े हैं, भले ही अनंत न हों। ताला संगामिति सुनिश्चित करता है, इसलिए समान मूल्य दो अलग-अलग थ्रेड द्वारा सेवित दो एक साथ अनुरोधों द्वारा वापस नहीं किया जा सकता है।


मुझे लगता है कि पांच सौ से कम वर्षों के लिए कोड का उपयोग केवल एक मान्य धारणा है। यदि आप बस 64 बिट स्टोरेज में बढ़ते मूल्यों को वापस करते हैं, तो आप काफी समय से ठीक हैं। 584555 वर्षों में, 1 प्रति कॉल पर।
डक डक

1
कम से कम जावा में, यह 2 ^ 63 मान है (इसलिए आधा लंबा है)। मानव जाति की तुलना में अब भी एक-दूसरे को मारने की हमारी प्रवृत्ति को मौजूद होने की संभावना नहीं है। बावजूद, मैंने अधिक सैद्धांतिक दृष्टिकोण लिया। वास्तविक रूप से, 64 (या 63) बिट्स पर्याप्त होना चाहिए।

1
@ स्नोमैन: क्या? आपका समाधान केवल 250K वर्षों के लिए मान्य है?!?!? अगला ध्यान रखें !!!!!! :-)
बॉब जार्विस - मोनिका

0

मैं सर्वर पर पोर्ट के माध्यम से फ़ंक्शन को उजागर करूंगा; फ़ंक्शन को कॉल करने के लिए, अनुरोध करने वाली मशीन एक कनेक्शन का अनुरोध करती है और एक को दी जाती है, जबकि एक ही समय में एक पहचान कोड (सादगी के लिए अनुक्रमिक संख्या) आवंटित किया जाता है। जब भी किसी पोर्ट को अनन्य मान के लिए अनुरोध करने के लिए कोई संदेश भेजा जाता है, तो मान वर्तमान दिनांक के MD5 हैश और पहचान कोड के MD5 हैश के साथ मेल करके उत्पन्न होता है।

यदि वे अधिक बुलेटप्रूफ समाधान चाहते हैं, तो उन्हें चीजों के बारे में अस्पष्ट होने के बजाय अपनी वास्तविक आवश्यकताओं को निर्दिष्ट करना होगा।


-1
string uniq(string machine_id) 
{
   static long u = long.MinValue;
   Interlocked.Increment(ref u);

   //Time stamp with millisecond precison
   string timestamp = DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss.fff",
                                            CultureInfo.InvariantCulture);

   return machine_id + "-" + timestamp + "-" + u;
}

उपरोक्त तरीके से हम यह सुनिश्चित कर सकते हैं कि रिस्ट वैल्यू अलग-अलग होने पर भी अलग-अलग मशीनों से एक साथ रिसीव करने पर भी अलग हो।


प्रोग्रामर वैचारिक प्रश्नों के बारे में हैं और चीजों की व्याख्या करने के लिए उत्तर अपेक्षित हैं। स्पष्टीकरण के बजाय कोड डंप फेंकना आईडीई से व्हाइटबोर्ड पर कोड कॉपी करने जैसा है: यह परिचित लग सकता है और यहां तक ​​कि कभी-कभी समझ में आता है, लेकिन यह अजीब लगता है ... बस अजीब है। व्हाइटबोर्ड में संकलक नहीं है
gnat

यह इंगित करने के लिए धन्यवाद gnat, अगली बार से समाधान की व्याख्या करने के लिए ध्यान रखना होगा
TechExplorer
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.