garbage collector वे ऑब्जेक्ट ढूंढता है जो stack और globals जैसे roots से अब भी पहुंच में हैं, और बाकी सब वापस ले लेता है। ज्यादातर आधुनिक collectors generational होते हैं, इस observation पर बने कि ज्यादातर ऑब्जेक्ट जल्दी मर जाते हैं, तो वे छोटी nursery बार बार साफ करते हैं और पुरानी generation कभी कभार। यह तब समस्या बनती है जब pause times आपका latency budget खा जाएं, जब allocation collection से आगे निकल जाए, या जब आप भूले हुए references पकड़े रहकर लीक कर दें।
इंटरव्यूअर यह क्यों पूछते हैं
managed runtimes मेमोरी को तब तक छिपाए रखते हैं जब तक छिपा नहीं पाते, और इंटरव्यूअर जानना चाहता है कि उस दिन आप संभाल लेंगे। वे जांच रहे हैं कि आप reference counting की सुनी सुनाई बातों के बजाय reachability समझते हैं, जानते हैं कि generational collection की वजह से ही छोटी उम्र वाला allocation सस्ता है, और GC pressure के लक्षण बता सकते हैं: बढ़ता pause time, हर collection के बाद ऊपर चढ़ता heap, और लोड में गिरता throughput।
अपना जवाब कैसे स्ट्रक्चर करें
- reference counts नहीं, roots से reachability समझाइए।
- generational collection और उसकी मान्यता के टिकने की वजह बताइए।
- फेल होने के तरीके गिनाइए: pauses, allocation rate, leaks।
- बताइए कि असली tooling से आप इसकी जांच कैसे करेंगे।
उदाहरण जवाब
mental model reachability का है। collector roots से शुरू करता है, यानी stack, registers और globals, वहां से पहुंच में आने वाली हर चीज तक चलता है, और जहां वह कभी नहीं पहुंचा वह कचरा है। ज्यादातर collectors generational हैं क्योंकि बहुत बड़ा हिस्सा ऑब्जेक्ट्स का लगभग तुरंत मर जाता है, तो आप एक छोटी young space बार बार स्कैन करते हैं और पुरानी space को कभी कभार छूते हैं। इसीलिए छोटी उम्र वाला ऑब्जेक्ट बनाना लगभग मुफ्त है, और लंबी उम्र वाला cache ही महंगी चीज है। यह तीन तरीकों से समस्या बनता है। Pauses, अगर stop the world collection आपके p99 budget के अंदर आ गिरे। Allocation rate, जहां आप कचरा उससे तेज बनाते हैं जितनी तेजी से collector उसे लौटाता है और throughput ढह जाता है। और leaks, जिनका managed runtime में हमेशा मतलब होता है कि कोई चीज अब भी reference पकड़े है, आम तौर पर कोई static map या ऐसा listener जिसे किसी ने हटाया नहीं। जब मैंने इसका पीछा किया है तो मैं GC logs से शुरू करता हूं और हर collection के बाद heap occupancy देखता हूं। अगर वह लाइन घंटों में ऊपर की तरफ जा रही है तो यह leak है, और फिर heap dump लेकर पकड़ने वाले को ढूंढना पड़ता है।
जल्दी ही यह इंटरव्यू देने जा रहे हैं? GhostPilot आपकी लाइव कॉल सुनता है, सवाल पूछे जाते ही उसे पकड़ लेता है, और रियल-टाइम में एक स्ट्रक्चर्ड जवाब आपकी स्क्रीन पर डाल देता है। अगले मॉक में इसे आजमाएं, या ले लें एक $29 Session Pass, कोई सब्सक्रिप्शन नहीं, असली इंटरव्यू के लिए।
देखें यह कैसे काम करता हैफॉलो-अप सवाल जिनकी उम्मीद रखें
- leak और सिर्फ ज्यादा मेमोरी इस्तेमाल होने में क्या फर्क है?
- किसी hot path में आप allocation कैसे घटाएंगे?
- आप कोड के बजाय heap size कब ट्यून करेंगे?
सॉफ्टवेयर इंजीनियर के और सवाल
आपका इंटरव्यूअर इसका अपना वर्ज़न पूछेगा। फ्री Question Predictor में अपना असली जॉब डिस्क्रिप्शन पेस्ट कीजिए और वो 20 सवाल पाइए जो उस रोल में सबसे ज्यादा पूछे जाने की संभावना है, साथ में यह भी कि हर सवाल असल में क्या टटोल रहा है।
मेरे सवाल प्रेडिक्ट करें