क्या अभ्यर्थियों का लिंक्ड-लिस्ट कार्यान्वयन से संबंधित साक्षात्कार करना बुरा है? [बन्द है]


43

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

हालाँकि, मैं मदद नहीं कर सकता, लेकिन लगता है कि यह निम्नलिखित कारणों से एक खराब अभ्यास हो सकता है:

  • आधुनिक उच्च स्तरीय भाषाएं जैसे C # और पायथन मूल रूप से सूचियों का बड़े पैमाने पर उपयोग करते हैं; अपनी स्वयं की लिंक की गई सूची ऑब्जेक्ट को लिखना केवल असामान्य परिस्थितियों में आवश्यक होगा और तब भी संभवतः बीमार होगा।
  • C ++ जैसी निचले स्तर की भाषाओं में पुनरावृत्तियों / सूची कंटेनरों और ऑब्जेक्ट्स के साथ मानक लाइब्रेरी हैं।
  • पहले दो बिंदुओं के प्रकाश में, कोडर स्वयं एक सूची (लिंक, डबल-लिंक्ड, आदि) को लागू करने के बारे में सोचने के बिना भी वर्षों तक जा सकते हैं। कुछ लोग वास्तव में कॉलेज के दिनों से ऐसी चीजें नहीं देख सकते हैं।
  • कम्प्यूटिंग पावर भी वह कारक नहीं है जो वह वर्षों पहले था, इसलिए पॉइंटर्स के माध्यम से दक्षता वह मुद्दा नहीं है जो वह (सामान्य रूप से) करता था।
  • "लिंक्ड लिस्ट उदाहरण" जैसी किसी चीज़ की एक सरल वेब खोज बहुत सारे कोड उदाहरणों को सामने लाएगी जो कि केवल याद किए जा सकते हैं और वापस बाहर जा सकते हैं, वास्तव में आवेदक की वास्तविक क्षमता का संकेत नहीं देते हैं।

मुझे कहना चाहिए कि उम्मीदवारों की समस्या को सुलझाने / महत्वपूर्ण सोच क्षमताओं के खुले-समाप्त प्रश्नों / चर्चाओं की ओर ले जाने के लिए एक लिंक की गई सूची का उपयोग करना ज्यादातर एक अच्छा साक्षात्कार अभ्यास है। किसी भी तरह से एक साक्षात्कारकर्ता वास्तव में देख सकता है कि एक आवेदक कैसा है और उन्हें कैसे लगता है कि यह व्यापक रूप से फायदेमंद है।

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

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


11
यह किस पद के लिए है? यह किस प्रकार की नौकरी है? यह किस डोमेन में है?
थॉमस ओवेन्स

1
मैं आपके संपादन देख रहा हूं, लेकिन फिर भी - यह किस प्रकार का काम है? क्या यह इंटर्नशिप है? एक प्रवेश स्तर की नौकरी? इंटरमीडिएट की नौकरी? क्या आप एक प्रोग्रामर या एक इंजीनियर या एक वैज्ञानिक को काम पर रखना चाहते हैं? यह किस डोमेन में है? क्या वे कभी ऐसी स्थिति में होंगे कि उन्हें किसी भी कारण से अपने स्वयं के एल्गोरिदम या डेटा संरचनाओं को रोल करने की आवश्यकता होगी?
थॉमस ओवेन्स

3
'सी # (...) मूल रूप से सूचियों का बड़े पैमाने पर उपयोग करते हैं' और 'पॉइंटर्स के माध्यम से दक्षता वह मुद्दा नहीं है जो यह हुआ करता था': क्या आप जानते हैं कि ये मूल सूचियाँ लिंक नहीं हैं, बल्कि सरणियों के आधार पर सूचियाँ हैं? कैशिंग के कारण ऐरे बेहतर प्रदर्शन करते हैं। वास्तव में, IIRC .NET फ्रेमवर्क में 2.0 तक लिंक लिस्ट भी नहीं थी। मुझे पूरा यकीन है कि C # प्रोग्रामों में से अधिकांश लिंक की गई सूचियों का उपयोग नहीं करते हैं।
एलेक्स दस ब्रिंक

1
@AlextenBrink दिलचस्प है, मुझे लगता है कि इसका मतलब है कि लिंक की गई सूची ज्ञान C # के लिए और भी कम महत्वपूर्ण है। जब मैं भाषा में निर्मित बेहतर संरचना का उपयोग कर सकता हूं, तो स्वयं (संभव बग के साथ) एक डेटा संरचना क्यों लागू करें?
joshin4colours

मेरे मन में सवाल यह है कि 'एक डेटा संरचना का उपयोग करने पर भी विचार क्यों किया गया है जो सभी मामलों में अन्य डेटा संरचना से हीन है?' लिंक की गई सूची सरणियों के आधार पर सूचियों की तुलना में अधिकांश परिचालनों के लिए धीमी है; केवल एक चीज जुड़ी हुई सूचियाँ निरंतर समय में विलोपन के लिए अच्छी हैं, लेकिन ऐसी बहुत कम स्थितियाँ हैं जिनमें इसकी आवश्यकता है। ध्यान दें कि मैं इस बारे में बात नहीं कर रहा हूं कि क्या यह एक साक्षात्कार प्रश्न के लिए एक अच्छी डेटा संरचना होगी: इसमें शामिल अवधारणाएं एक अच्छी परीक्षा हो सकती हैं, मुझे नहीं पता।
एलेक्स दस ब्रिंक

जवाबों:


52

यदि प्रश्न का उत्तर देना आपको बताता है कि आप एक उम्मीदवार के बारे में क्या जानना चाहते हैं, तो यह एक अच्छा साक्षात्कार प्रश्न है। यदि यह आपको नहीं बताता है, तो यह एक बुरा सवाल है।

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

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


आपके संपादन के बारे में:

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

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


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

5
आप इस बात की सीमा नहीं पा सकते हैं कि उम्मीदवार उस तरह से जानता है, क्योंकि आपके पास यह दावा करने का कोई तरीका नहीं है कि आप "जटिल" और "बुनियादी" क्या मानते हैं, उसी क्रम में अपने उम्मीदवार पर लागू होते हैं। लिंक्डलिस्ट शायद प्रोग्रामर द्वारा पढ़ाए जाने वाले विश्वविद्यालय के लिए एक बुनियादी है, लेकिन एक स्व-सिखाया गया प्रोग्रामर सबसे अधिक कभी भी एक लिखने के लिए नहीं था। आखिरकार उन्होंने शायद "LinkedList <string> ..." लिखा था, जब भी उन्हें एक की आवश्यकता थी। क्या इसका मतलब है कि उसका ज्ञान "लिंक्डलिस्ट" स्तर के तहत आंका गया है? वह अधिक जटिल विषयों के विशेषज्ञ हो सकते हैं और Google में 5min में LLs सीखने में सक्षम हो सकते हैं।
सिल्वरड्रेग

1
@Sylverdrag इसलिए मैंने कहा कि आपको एक से अधिक प्रश्नों की आवश्यकता है। एक बार जब आप लिंक की गई सूचियों के बारे में उनके ज्ञान की सीमा पा लेते हैं, तो दूसरे विषय पर चले जाएँ।
छिपकली का बिल

@ruakh जो निश्चित रूप से एक भूमिका निभाता है। यदि एक साक्षात्कार में मुझसे पूछा गया हर एक सवाल CRUD ऐप्स के सांसारिक पहलुओं के बारे में है (यानी, मुझे नहीं लगता कि मैं उस कंपनी में कुछ भी नया सीख सकता हूं), तो यह मुझे वहां काम करने के लिए उत्साहित नहीं करेगा।
छिपकली

34

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

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

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


उन्हें कुछ पूछने की जरूरत है, यह पहेली है या कुछ और है। कोई भी प्रश्न व्यक्ति को रिक्त कर सकता है।
हस्ताक्षर करें

2
@pdr - "यदि वे कोड-नमूने ला सकते हैं, तो शानदार।" अगर वे कोड नमूने लिखे, वे लाए, अनमोल।
रूबांबसुच

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

1
@pdr - "और यदि आप नहीं कर सकते हैं, तो आपको कब तक लगता है कि आपके पास नौकरी होगी?" - जितने भी एचआर शासन के माध्यम से आप पीड़ित हैं, उन्हें लंबे समय तक आग लगाने के लिए। फिर अपने उम्मीदवार खोज को पुनः आरंभ करने की अतिरिक्त लागत है। इस तथ्य में निहित अवसर की लागत भी है कि आपके द्वारा साक्षात्कार किया गया अगला व्यक्ति आपके पूरे विभाग की तकनीकी लिंचपिन बन सकता है। लेकिन निश्चित रूप से अब वे उपलब्ध नहीं हैं क्योंकि आपने गलत व्यक्ति को काम पर रखा है और उन्हें दूसरी नौकरी मिली है।
रॉब्राम्बुश

1
@robrambusch: उन्होंने उत्कृष्ट समस्या को सुलझाने के कौशल का प्रदर्शन किया और वर्ग संरचना के बारे में अच्छी तरह से बात की। लेकिन उन्होंने कोड नहीं लिखा। एक साक्षात्कार में कोड लिखने के विषय पर, हां, यह उपयोगी हो सकता है, लेकिन मैं इस बात को बनाए रखता हूं कि मैं आपसे एक घंटे में वंचित समस्या को हल करने की तुलना में आपके द्वारा हल की गई समस्याओं के बारे में बात करने के बारे में अधिक जान सकता हूं हल करने के लिए घंटा।
पीडीआर

25

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


ठीक ठीक। पिछले साल मैंने एक सामान्य उद्देश्य आनुवांशिक सॉर्ट घटक लिखा था, जिसमें थोड़ा सा सिम्युलेटेड एनीलिंग (क्लास शेड्यूल बनाने के लिए) का उपयोग किया गया था और इसे प्राप्त करने के लिए कई "उन्नत" डेटा संरचनाओं का उपयोग किया था। मुझे एक कोड की आवश्यकता नहीं थी। यदि .Net फ्रेमवर्क में वह नहीं था जो मुझे चाहिए था तो मैंने C5 या पावर कलेक्शंस का उपयोग किया।
एलग्रिन्गोग्रांड

4
सहमत, मैं पूरे दिन LOB एप्लिकेशन लिखता हूं, मेरे पास अतीत में लिखित सूची कार्यान्वयन ... कॉलेज में ... COBOL में है। मैं इसे फिर से कर सकता था, लेकिन क्यों? बहुत सारे सक्षम LOB डेवलपर्स ने शायद कभी नहीं लिखा है, और कभी भी ज़रूरत नहीं होगी।
कैफीक गीक

1
सामान्य रूप से सहमत हैं, लेकिन एक लिंक की गई सूची वास्तव में विदेशी कुछ भी नहीं है। यह मूल बातें है, बस एक स्तर FizzBuzz अतीत।
फ्रांसेस्को डी विटोरी

1
@FrancescoDeVittori: कभी-कभी यह मुद्दा नहीं है? कोई आपको हल करने के लिए एक समस्या देता है। यह काफी सरल लगता है, लेकिन आपने इसे पहले कभी नहीं किया है, इसलिए आपका मस्तिष्क दौड़ना शुरू कर देता है, गेदों को खोजने की कोशिश कर रहा है, जो चीज आपको साक्षात्कार के लिए खर्च करने जा रही है यदि आप इसके बारे में नहीं सोचते हैं। और यह वहाँ नहीं है, लेकिन यह आपको वास्तविक समस्या को हल करने से विचलित कर रहा है।
पीडीआर

@FrancescoDeVittori: क्या आप गैर-मूल साक्षात्कार प्रश्नों के कुछ उदाहरण दे सकते हैं? आत्म-सुधार के लिए मुझे इसकी आवश्यकता है। धन्यवाद।
डेन

9

मेरा जवाब है "यह निर्भर करता है"। मैं यह प्रश्न पूछूंगा कि क्या किसी उम्मीदवार ने अपने रिज्यूम पर C या C ++ को सूचीबद्ध किया है। लिंक की गई सूची को लागू करने के लिए कहना संकेतकर्ताओं की समझ के लिए एक अच्छी परीक्षा है जो सी या सी ++ प्रोग्रामर के लिए बिल्कुल आवश्यक है।

दूसरी ओर, यदि कोई उम्मीदवार C या C ++ जानने का दावा नहीं करता है, तो मैं उसे लिंक की गई सूची को लागू करने के लिए नहीं कहूंगा, लेकिन मैं इसके बारे में सवाल पूछने पर विचार करूंगा। उच्च स्तर पर बताएं कि लिंक की गई सूची कैसे काम करती है। सूची के प्रमुख में एक तत्व जोड़ने की जटिलता क्या है? सूची की पूंछ? सूची के बीच में एक तत्व सम्मिलित करना? आप किसी सरणी के विपरीत किसी सूची का उपयोग कब करेंगे? ये मौलिक डेटा संरचना अवधारणाएं हैं, जिन्हें IMHO, प्रत्येक प्रोग्रामर को पता होना चाहिए।


7

मैं इसे एक बुरा साक्षात्कार प्रश्न नहीं मानूंगा। बहुत सी डेटा संरचना समझ और प्रोग्रामिंग लिंक्ड सूचियों की बहुत अच्छी समझ के साथ शुरू होती है। कहा कि, कुछ चेतावनी हैं:

1) यह एक फ़िज़-बज़ प्रकार का प्रश्न है। आप बस कुछ बहुत ही बुनियादी मान्य कर रहे हैं: क्या व्यक्ति एक लिंक-सूची को समझता है। इसे पूछें और आगे बढ़ें।

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

3) इस बात को ध्यान में रखते हुए और "व्हाइटबोर्ड प्रोग्रामिंग" की सामान्य चुनौतियों के साथ, इस प्रकार का प्रश्न पूछने पर मैं छद्मकोड या आरेखों को स्वीकार कर लेता हूं, जब तक कि वे मूल सिद्धांतों की समझ प्रदर्शित करते हैं। मैं यह नहीं पूछता कि लोग एक ऐसे व्हाइटबोर्ड पर कोड लिखते हैं जो वाक्य-रचना और तार्किक रूप से परिपूर्ण हो, खासकर यदि वे तब फिर से घूम सकते हैं और किसी तार्किक समस्या की पहचान कर सकते हैं जब इसे फिर से देखने के लिए कहा जाए। YMMV।


6

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

यदि मैं कभी साक्षात्कार ले रहा था, तो मैं किसी प्रकार के लिंक्ड-लिस्ट कार्यान्वयन के लिए जाऊंगा, यह परीक्षण करने के लिए नहीं कि कोई व्यक्ति कोडिंग में कितना अच्छा है, बल्कि यह जांचने के लिए कि कोई व्यक्ति विवरणों पर कितना ध्यान देता है। कोई भी एक लिंक्ड सूची लिख सकता है, लेकिन यह सीमा के मामले हैं जो कुछ अच्छे प्रोग्रामर पर भी विफल होते हैं। उससे मत पूछो Write a code for linked list in C/C++:। उसे C (नहीं C ++), आदि में जेनेरिक लिंक्ड सूची लिखने के लिए कहें।

समस्या को ट्विस्ट करें, और लिंक की गई सूची पर कुछ अन्य शर्तें रखें, और आपके पास पूछने के लिए एक अच्छा प्रश्न होगा। कुछ लोग गलती करने के लिए बाध्य होते हैं।


2
सी। में कोई जेनेरिक लिंक्ड सूची जैसी कोई चीज नहीं है
डेडएमजी

1
गंभीरता से? मैंने सोचा था कि voidसंकेत केवल उसी के लिए हैं ... :) मुझे पहली बार Google पर "जेनेरिक लिंक्ड लिस्ट इन सी" के लिए मिला: daniweb.com/software-development/c/threads/109260 और एक अन्य तकनीकी-साक्षात्कार था .com /… मैंने सोचा कि हर कोई यह जानता था!
c0da

मैंने इन कोडों का परीक्षण नहीं किया है, लेकिन मेरे पास इस प्रकार की लिंक की गई सूची पहले है, और यह निश्चित रूप से ठीक काम किया है ...
c0da

यहाँ तक कि C # में एक जेनेरिक लिंक्ड लिस्ट लिखने पर एक या दो "गोचर्स" होते हैं (जैसे कि टाइप T के तत्वों की तुलना करना गैर-स्पष्ट है; अर्थात (T v1, T v2) => {रिटर्न v1 == v2;} संकलन करने में विफल रहेगा। जब तक आपके पास वर्ग की कमी नहीं होती है या डिफ़ॉल्ट समानता ऑपरेटर का उपयोग नहीं किया जाता है)
स्टीवन एवर्स

@ c0da मेरी राय में, एक सूची जो voidपॉइंटर्स का उपयोग करती है , सामान्य नहीं है, लेकिन किसी भी समय के लिए सामान्य है। वे इसमें किसी भी प्रकार की चीजें पकड़ सकते हैं, और यहां तक ​​कि उन सभी को भी मिला सकते हैं जो वे चाहते हैं - और वास्तव में यह मेरे लिए गैर-सामान्य बनाता है। यह objectऑब्जेक्ट ओरिएंटेड भाषाओं में आधार प्रकार का उपयोग करने जैसा है ...
प्रहार करें

5

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

सुनिश्चित करने के लिए, वहाँ लगभग निश्चित रूप से नौकरियां हैं जहां आपको सामान्य रूप से ज्ञात एल्गोरिदम के अधिक-या-कम-क्लीनररूम कार्यान्वयन लिखने की आवश्यकता होगी - जैसे खरोंच से एक लिंक की गई सूची को लागू करना। लेकिन अधिकांश प्रोग्रामिंग नौकरियों के लिए, कंपनी के लिए इसका क्या विशिष्ट मूल्य है जो एक उम्मीदवार एक साक्षात्कार के दौरान कर सकता है? क्या इस तरह की सेटिंग में वास्तव में इतना महत्वपूर्ण है कि उम्मीदवार एक सही कार्यान्वयन प्रदान करता है जो किनारे के मामलों को सही ढंग से संभालता है, भाषा या ढांचे में सामान्य अभ्यास के अनुसार विफलताओं की रिपोर्ट करता है, और इसी तरह? या क्या आप इसे नजरअंदाज कर सकते हैं और इसके बजाय इस बात पर ध्यान केंद्रित कर सकते हैं कि वे वास्तव में एक समस्या का सामना कैसे करते हैं, जिसका वे 10-20 वर्षों में सामना नहीं कर पाए हैं?

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

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

यदि उम्मीदवार व्यवसाय-मामले-प्रासंगिक प्रकार की समस्याओं को संभाल सकता है और नई चीजों को सीखने की दिशा में एक अच्छा रवैया रखता है, तो यह संभवतः उस विशेष स्थिति के लिए फिट होने का एक बेहतर संकेतक है , जो कि जाने-माने सवालों के जवाब में डिब्बाबंद प्रतिक्रिया प्रदान करने में सक्षम है। प्रश्न FizzBuzz, लिंक की गई सूचियों, या कुछ और के बारे में हैं। उम्मीदवार टीम के साथ कितनी अच्छी तरह फिट बैठता है और मुझे लगता है कि आप काफी सुरक्षित मैदान पर हैं।


4

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

मैं यह नहीं कह रहा हूं कि यह अनिवार्य रूप से सबसे अच्छा उपाय होगा, लेकिन केवल यह कि कुछ सहसंबंध है।


4

आप यह कहना शुरू करते हैं कि वे 'गिममे' प्रश्न हैं, लेकिन फिर आप बताते हैं कि लोग समझ नहीं पाएंगे। मैं उलझन में हूं।

यहां बताया गया है कि मैं इसके बारे में कैसे सोचता हूं:

  • जैसा कि आप कहते हैं, शायद ही कभी लिखने की आवश्यकता है, इसलिए लोग आसानी से भूल गए होंगे।
  • वे लिखने के लिए अविश्वसनीय रूप से मुश्किल नहीं हैं।
  • उन्हें लिखने के लिए इस्तेमाल की जाने वाली अवधारणाओं को मौलिक माना जा सकता है।
  • वे अविश्वसनीय रूप से अक्सर उपयोग किए जाते हैं (भले ही आप इससे अनजान हों)।

मुझे लगता है कि उन्हें पूछने के लिए अच्छे सवाल हैं। यदि आप साक्षात्कार के लिए उनके पूर्व अध्ययन के बारे में चिंतित हैं, तो एक सूची में फेंक दें। क्या वे इसे परिपत्र लिखते हैं और पूछते हैं कि उनके कार्यान्वयन का स्पर्शोन्मुख चलने का समय क्या है। या क्या उन्होंने एक और आम और / या त्वरित डेटा संरचना लिखी है ... एक बाइनरी सर्च ट्री? एक कतार (FIFO)? एक ढेर (FILO)? एक भोली ( O(n)) प्राथमिकता कतार? बहुत से लोग मुझे पता है कि एक BST O(log n) सिर्फ इसलिए है क्योंकि यह एक पेड़ है

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

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


यह व्यवहार में भ्रमित नहीं है। FizzBuzz एक और भी आसान सवाल है और फिर भी आवेदक नियमित रूप से इसका जवाब देना शुरू नहीं कर सकते हैं। वही जुड़ी हुई सूचियों के साथ जाता है। यह प्रोग्रामिंग की दुनिया का एक रहस्य है।
joshin4colours

@ joshin4colours: नहीं, मैं इस सवाल को लेकर उलझन में हूं। पहले तो ओपी कहता है कि एलएल के सवाल गिम्मे हैं, लेकिन फिर लिस्ट प्वाइंट्स पर जाता है कि क्वॉलिफाइड देव सवाल फेल क्यों करेगा।
स्टीवन एवर्स

3

क्या इस प्रश्न की पर्याप्त उपयोगिता है जिसका उपयोग आमतौर पर बोर्ड भर में प्रोग्रामिंग उम्मीदवारों के मूल्यांकन के लिए किया जाता है?

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

मैं यहां तक ​​कहूंगा कि यह कहना संभव है कि सभी अभ्यर्थियों का समान प्रश्नों का उपयोग करना संभव नहीं है। आपको उन कौशलों का आकलन करने के लिए अपने साक्षात्कार प्रश्नों को तैयार करने की आवश्यकता है जिन्हें आप उस स्थिति में देख रहे हैं।

यदि व्यक्ति कोड लिखने की स्थिति में होने जा रहा है, तो मुझे लगता है कि एल्गोरिथ्म और / या डेटा संरचना प्रश्न सहित, जब तक यह स्थिति के लिए प्रासंगिक था। मैं कुछ ऐसा लेने की कोशिश करूँगा, जिस पर चर्चा या पहले इस्तेमाल किया गया हो। मैं उक्त एल्गोरिदम और डेटा संरचनाओं के कार्यान्वयन के अलावा अन्य चीजों पर भी ध्यान केंद्रित करूँगा, जैसे कि रनिंग टाइम और मेमोरी खपत (बिग-ओ नोटेशन जैसी चीजें)। ये अवधारणाएं न केवल डेटा संरचना बनाने के लिए प्रासंगिक हैं, बल्कि यह भी चुनना है कि कौन सा कार्यान्वयन सबसे अनुकूल है (जैसे कि उदाहरण के लिए ArrayListबनाम LinkedList)।


3

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

तो, जैसा कि कुछ ने कहा, यदि कोई ऐसा काम होने जा रहा है जिसमें लिंक की गई सूची और बहुत सारे फैंसी एल्गोरिदम आदि के साथ काम करने की आवश्यकता है, तो ठीक है। अगर किसी फॉर्म पर सामान्य इनपुट डेटा के लिए, मान्य और शो थोड़े बेकार और अनुचित हैं।


2

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


2
लोकप्रिय प्रश्न भी ऐसे लोगों द्वारा गेमिंग के अधीन हैं जो याद रखने में अच्छे हैं।
पॉल नाथन

1
अगर आपको यह समझाना है कि एक लिंक्ड सूची किसी उम्मीदवार के लिए कैसे काम करती है, तो शायद आपको उसे प्रोग्रामिंग करने के लिए नौकरी पर नहीं रखना चाहिए ...
Dima

2

लिंक्ड-लिस्ट कार्यान्वयन लिखना एक अच्छा साक्षात्कार प्रश्न है, क्योंकि यह उम्मीदवार के कोडिंग के तरीके के बारे में बहुत कुछ बताएगा:

  • क्या वह जानता है कि एपीआई क्या है? क्या वह अन्य लोगों के कोड का उपयोग कर सकता है? क्या वह कोड लिख सकता है ताकि अन्य लोग उसका उपयोग कर सकें?

  • क्या वह जानता है कि एक लिंक्ड सूची क्या है? क्या वह कलेक्शंस, डेटा स्ट्रक्चर्स, एल्गोरिदम को जानता है?

यदि वह यह भी नहीं जानता है कि लिंक्ड सूची किन तरीकों की पेशकश करनी चाहिए, तो आप जानते हैं कि उसने शायद कभी एक का उपयोग नहीं किया है, या एक का उपयोग करने के लिए जानता है।

  • वह समस्या को कैसे संभालता है? क्या वह पहले एक विश्लेषण, एक छोटे विनिर्देश, कुछ परीक्षण पहले से शुरू करता है? या वह सिर्फ खुशी से दूर हैकिंग शुरू करता है?

  • क्या वह किनारे के मामलों को संभालता है? लिंक्ड सूची से अंतिम नोड को हटाने के बारे में क्या? क्या होगा यदि कोई लिंक्डइन से खुद को लिंकलिस्ट में जोड़ने का प्रयास करता है, और फिर पूरी चीज़ को हटा देता है?

  • क्या वह अपवादों को संभालता है? अपवादों से निपटने के लिए प्रत्येक प्रोग्रामिंग भाषा के अपने स्वयं के सम्मेलन हैं: जावा में, आप एक खाली सूची पर एक GetFirst () करने पर NoSuchElementException को फेंकने के लिए LinkedList से अपेक्षा करेंगे। अन्य भाषाएँ अपरिभाषित लौट सकती हैं, -1 या एक स्थिरांक।


एक साक्षात्कार कोडिंग अभ्यास में, जब तक कि यह विशेष रूप से नहीं पूछा जाता है, मैं सभी प्रकार के एज केस हैंडलिंग, त्रुटि हैंडलिंग आदि को छोड़ दूंगा, जो कि अवधारणा के प्रमाण के लिए आवश्यक है। लेकिन मैं यह भी स्पष्ट कर दूंगा कि यह एक विकल्प है जो मैं बना रहा हूं। एक घंटे या यहां तक ​​कि कुछ घंटों के साक्षात्कार के दौरान बाधाएं उस स्थिति से बहुत अलग हैं जब आप वास्तव में किसी ऐसी चीज पर काम कर रहे हैं जो वास्तविक उपयोग को देखेगा।
बजे एक CVn
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.