Java डेवलपर इंटरव्यू सवाल

streams अंदर से कैसे काम करते हैं, और आप parallel stream कब इस्तेमाल करेंगे?

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

छोटा जवाब

stream lazy intermediate operations की एक pipeline बनाता है जो terminal operation चलने तक कुछ नहीं करती, और फिर elements एक ही पास में बहते हैं, इसीलिए map से पहले filter रखना मायने रखता है। Parallel streams source को साझा common ForkJoinPool पर बांट देते हैं। इन्हें सिर्फ बड़े, आसानी से बंटने वाले, CPU bound काम के लिए इस्तेमाल करें जिसमें कोई साझा mutable state न हो, और blocking I/O के लिए कभी नहीं, क्योंकि तब आप वह pool बांध देंगे जिसे पूरी application साझा करती है।

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

इंटरव्यूअर जानना चाहते हैं कि आप laziness, statelessness और parallel streams कहां बिगड़ते हैं यह समझते हैं या नहीं, क्योंकि गलत इस्तेमाल आम है और साझा pool के जरिए बिल्कुल असंबंधित कोड को नुकसान पहुंचाता है। वे side effect रहित lambdas और सही collector इस्तेमाल भी सुन रहे होते हैं। इससे पता चलता है कि आप streams इसलिए लिखते हैं कि वे साफ हैं या इसलिए कि वे आधुनिक दिखते हैं।

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

  • laziness और terminal operation पर होने वाला एकल पास समझाएं।
  • सही parallel execution की शर्तें बताएं।
  • साझा common pool और blocking calls को लेकर चेतावनी दें।
  • बताएं कि आप कैसे तय करते हैं: नापें, मान न लें।

उदाहरण जवाब

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

Intermediate operations सिर्फ pipeline बनाते हैं; तब तक कुछ नहीं होता जब तक कोई terminal operation elements को खींच न ले, और हर element पूरी चेन से गुजरता है, बजाय इसके कि हर operation के लिए collection एक बार घूमे। इसीलिए क्रम मायने रखता है, जल्दी filter करने से काम कम होता है, और इसीलिए findFirst जैसे short circuiting operations पूरे source को जल्दी रोक सकते हैं। Parallel streams को लेकर मैं सतर्क रहता हूं। वे source को बांटकर common ForkJoinPool पर चलते हैं, जिसे पूरा JVM साझा करता है, तो एक request में एक धीमा parallel stream बाकी सबको देर करा सकता है। इससे हर blocking काम बाहर हो जाता है: मैंने देखा है कि HTTP calls करता एक parallel stream उस process के हर दूसरे parallel stream को भूखा मार देता है। जहां ये सच में मदद करते हैं वह है किसी array या ArrayList पर बड़ी in memory गणना, जो बराबर बंटते हैं, जिसमें कोई साझा mutable state न हो और क्रम पर निर्भरता न हो। तब भी मैं benchmark करता हूं, क्योंकि कुछ हजार elements की collections पर split और merge का ओवरहेड अक्सर फायदा खा जाता है। अगर मुझे अलग pool चाहिए तो मैं stream को common pool की जगह अपने ForkJoinPool के अंदर चलाता हूं।

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

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

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

  • LinkedList और iterator से बने streams parallelism के लिए खराब उम्मीदवार क्यों हैं?
  • reduce और collect में क्या फर्क है?
  • stateful lambdas parallel stream को कैसे तोड़ देते हैं?

Java डेवलपर के और सवाल

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

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

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

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

GhostPilot पाएं