सॉफ्टवेयर इंजीनियर इंटरव्यू सवाल

race condition क्यों होती है, और जो सिर्फ प्रोडक्शन में दिखती है उसे आप कैसे ढूंढते हैं?

इंटरव्यूअर असल में क्या परख रहा है, अपना जवाब कैसे स्ट्रक्चर करें, और एक बोला हुआ उदाहरण जिसे आप अपना सकते हैं।

छोटा जवाब

race condition तब होती है जब दो threads या requests एक ही shared mutable state को छूते हैं और नतीजा timing पर टिक जाता है। इसका क्लासिक रूप है read, modify, write, वह भी तीनों steps पर lock पकड़े बिना। प्रोडक्शन में इसे ढूंढने के लिए ऐसी state देखिए जिसे पहले चेक किया जाता है और फिर उस पर काम होता है, उस क्रम के आसपास correlated logging लगाइए, unit test के बजाय असली concurrency में उसे दोबारा पैदा कीजिए, और डेटाबेस के constraints को उल्लंघन पकड़ने दीजिए।

इंटरव्यूअर यह क्यों पूछते हैं

ये बग महंगे होते हैं और डिबग करने का तरीका तजुर्बेकार इंजीनियरों को बाकियों से अलग कर देता है। इंटरव्यूअर चाहते हैं कि आप read modify write वाला pattern नाम लेकर बताएं, यह समझें कि lock लगा देना अपने आप सही नहीं हो जाता अगर उसका दायरा गलत हो, और ऐसा तरीका बताएं जो यह मानता हो कि timing बग को लोकल में क्लिक करके दोबारा नहीं बनाया जा सकता। invariant को डेटाबेस में धकेल देना वही जवाब है जिसकी वे उम्मीद करते हैं।

अपना जवाब कैसे स्ट्रक्चर करें

  • race को shared mutable state और timing के जोड़ के रूप में परिभाषित कीजिए।
  • read modify write वाले pattern का साफ नाम लीजिए।
  • बताइए कि आप उसे concurrency में दोबारा कैसे पैदा करेंगे।
  • ऐसा फिक्स सुझाइए जो invariant को डेटाबेस में ले जाए।

उदाहरण जवाब

बोला हुआ उदाहरण, पहले व्यक्ति में

race के लिए दो चीजें चाहिए: shared mutable state, और दो रास्ते जो एक ही वक्त उस तक पहुंचें। मैंने जितनी भी डिबग की हैं, लगभग सबकी शक्ल एक ही है, एक चेक और उसके बाद एक action, और बीच में एक खाली जगह। balance पढ़ो, तय करो कि काफी है, नया balance लिखो। दो requests आपस में गुंथ जाती हैं और नंबर गलत निकलता है। प्रोडक्शन में इन्हें ढूंढना ज्यादातर इस बात को मान लेने पर टिका है कि आप क्लिक करके repro तक नहीं पहुंच सकते। मैं एक स्क्रिप्ट लिखता हूं जो वही request दो सौ बार एक साथ भेजती है, क्योंकि खिड़की शायद दो मिलीसेकंड चौड़ी हो। फिर मैं read और write के दोनों तरफ request id के साथ लॉग करता हूं, ताकि टाइमलाइन में गुंथाव दिख जाए। फिक्स के लिए मैं invariant को ऐप से हटाकर डेटाबेस में ले जाने की कोशिश करता हूं: अपेक्षित वैल्यू पर where clause वाला update, या एक unique constraint, ताकि डेटाबेस ही उसे लागू करे। एप्लिकेशन लेवल के locks तभी काम करते हैं जब हर लिखने वाला आपके कोड से गुजरे, और कभी न कभी कोई नहीं गुजरेगा।

जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।

देखें यह कैसे काम करता है

फॉलो-अप सवाल जिनकी उम्मीद रखें

  • distributed lock आपका जवाब कैसे बदल देता है?
  • race condition और data race में क्या फर्क है?
  • CI में इसे पकड़ने वाला टेस्ट आप कैसे लिखेंगे?

सॉफ्टवेयर इंजीनियर के और सवाल

आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।

मेरे सवाल प्रेडिक्ट करें

मुश्किल सवाल पूछे जाने से पहले उनकी रिहर्सल कीजिए

एक लाइव कोपायलट के साथ प्रैक्टिस कीजिए, फिर तैयार होकर अंदर जाइए। $29 Session Pass आपको इंटरव्यू पार करा देता है, न कोई सब्सक्रिप्शन, न कोई लॉक-इन।

GhostPilot पाएं