सामान्य जावा साक्षात्कार प्रश्नों के उत्तर

📚जावा मूल बातें

1. जावा की विशेषताएँ क्या हैं?

जावा भाषा की मुख्य विशेषताओं को समझें

  • वस्तु-उन्मुख:एनकैप्सुलेशन, इनहेरिटेंस और बहुरूपता जैसी सुविधाओं का समर्थन करता है
  • प्लेटफ़ॉर्म स्वतंत्रता:एक बार लिखें, कहीं भी चलाएं (WORA)
  • स्वचालित मेमोरी प्रबंधन:कचरा संग्रहण तंत्र स्वचालित रूप से मेमोरी जारी करता है
  • मल्टी-थ्रेडिंग समर्थन:समवर्ती प्रोग्रामिंग की सुविधा के लिए अंतर्निहित थ्रेड तंत्र
  • पुख्ता सुरक्षा:प्रकार की जाँच और अपवाद प्रबंधन जैसे सुरक्षा तंत्र प्रदान करें
  • गतिशील विशेषताएँ:रनटाइम प्रकार की जाँच और गतिशील लोडिंग

2. JDK, JRE और JVM के बीच क्या अंतर हैं?

जावा रनटाइम वातावरण की त्रि-स्तरीय संरचना को समझें

  • जेवीएम (जावा वर्चुअल मशीन):वर्चुअल मशीन, एक अमूर्त कंप्यूटर जो क्रॉस-प्लेटफ़ॉर्म सुविधाओं को प्राप्त करने के लिए बाइटकोड निष्पादित करता है
  • जेआरई (जावा रनटाइम एनवायरनमेंट):रनटाइम वातावरण, जिसमें चलने के लिए आवश्यक जेवीएम और क्लास लाइब्रेरी शामिल हैं
  • जेडीके (जावा डेवलपमेंट किट):विकास टूल किट, जिसमें जेआरई + कंपाइलर + डिबगिंग टूल और अन्य विकास उपकरण शामिल हैं
  • समावेशन संबंध:जेडीके > जेआरई > जेवीएम

3. बाइटकोड क्या है? जावा क्रॉस-प्लेटफ़ॉर्म क्यों है?

जावा के क्रॉस-प्लेटफ़ॉर्म तंत्र के सिद्धांतों को गहराई से समझें

  • बाइटकोड परिभाषा:जावा स्रोत कोड संकलन द्वारा उत्पन्न मध्यवर्ती कोड, फ़ाइल एक्सटेंशन .class है
  • क्रॉस-प्लेटफ़ॉर्म सिद्धांत:जावा स्रोत कोड → बाइटकोड → विभिन्न प्लेटफार्मों पर जेवीएम निष्पादन
  • लाभ:एक बार संकलित करें, कहीं भी चलाएँ; डेवलपर्स को विभिन्न प्लेटफार्मों के लिए कोड को फिर से लिखने की आवश्यकता नहीं है
  • निष्पादन प्रक्रिया:javac कंपाइलर .java फ़ाइल को एक .class फ़ाइल में संकलित करता है, जिसे फिर प्रत्येक प्लेटफ़ॉर्म के JVM द्वारा व्याख्या और निष्पादित किया जाता है।

4. जावा में बुनियादी डेटा प्रकार क्या हैं?

मास्टर जावा का प्रकार सिस्टम

  • पूर्णांक प्रकार:बाइट (1 बाइट), छोटा (2 बाइट), इंट (4 बाइट), लंबा (8 बाइट)
  • फ़्लोटिंग पॉइंट प्रकार:फ्लोट (4 बाइट्स), डबल (8 बाइट्स)
  • चरित्र प्रकार:चार (2 बाइट्स, यूनिकोड का समर्थन करता है)
  • बूलियन प्रकार:बूलियन (1 बाइट, सही/गलत)
  • डिफ़ॉल्ट मान:पूर्णांक 0, फ्लोट 0.0, बूलियन झूठा, चार '\u0000'
  • पैकेजिंग श्रेणी:इंटीजर, लॉन्ग, फ्लोट, डबल, बूलियन और अन्य संबंधित संदर्भ प्रकार

5. फाइनल, फाइनली और फाइनलाइज में क्या अंतर है?

तीन समान लेकिन पूरी तरह से अलग अवधारणाओं के बीच अंतर करें

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

🎯ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग

6. वस्तु-उन्मुख क्या है? चार प्रमुख विशेषताएँ क्या हैं?

OOP की मूल अवधारणाओं को समझें

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

7. बहुरूपता क्या है? बहुरूपता को लागू करने के तरीके क्या हैं?

जावा बहुरूपता तंत्र की गहन समझ

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

8. इंटरफ़ेस और एब्सट्रैक्ट क्लास के बीच क्या अंतर है?

दो अमूर्त तंत्रों के बीच समानताओं और अंतरों की तुलना करें

  • सार वर्ग:अमूर्त संशोधन का उपयोग करते हुए, अमूर्त विधियाँ और ठोस विधियाँ हो सकती हैं
  • इंटरफ़ेस:इंटरफ़ेस परिभाषा का उपयोग करें, डिफ़ॉल्ट विधि सार्वजनिक सार है (जावा 8+ डिफ़ॉल्ट कार्यान्वयन का समर्थन करता है)
  • वंशानुक्रम संबंध:एक वर्ग केवल एक अमूर्त वर्ग को प्राप्त कर सकता है, लेकिन कई इंटरफेस लागू कर सकता है
  • पहुँच संशोधक:सार वर्ग निजी/संरक्षित हो सकते हैं, और इंटरफ़ेस सदस्य डिफ़ॉल्ट रूप से सार्वजनिक हो सकते हैं।
  • चर:सार वर्गों में उदाहरण चर होते हैं, इंटरफेस में केवल स्थिर स्थिरांक होते हैं
  • उपयोग परिदृश्य:सार कक्षाओं का उपयोग कोड और इंटरफ़ेस परिभाषा विनिर्देशों को साझा करने के लिए किया जाता है

9. ओवरलोड और ओवरराइड क्या हैं?

दो समान लेकिन भिन्न अवधारणाओं के बीच अंतर स्पष्ट करें

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

10. एक्सेस संशोधक क्या हैं? कार्रवाई का दायरा क्या है?

जावा के अभिगम नियंत्रण तंत्र में महारत हासिल करें

  • सार्वजनिक:सार्वजनिक, सभी वर्गों के लिए सुलभ
  • संरक्षित:संरक्षित, एक ही पैकेज और उपवर्गों में पहुंच योग्य
  • डिफ़ॉल्ट (कोई संशोधक नहीं):डिफ़ॉल्ट रूप से, वही पैकेज पहुंच योग्य है
  • निजी:निजी, केवल कक्षा के भीतर ही पहुंच योग्य
  • पहुंच के दायरे की तुलना:सार्वजनिक > संरक्षित > डिफ़ॉल्ट > निजी
  • सर्वोत्तम प्रथाएँ:पहुंच अधिकार कम करें और इनकैप्सुलेशन के सिद्धांत का पालन करें

💾मेमोरी प्रबंधन और कचरा संग्रहण

11. जावा मेमोरी संरचना में क्या शामिल है?

जेवीएम मेमोरी आवंटन को समझना

  • ढेर:सभी थ्रेड्स द्वारा साझा किए गए ऑब्जेक्ट इंस्टेंसेस, कचरा संग्रहण के लिए मुख्य क्षेत्र, कॉन्फ़िगर करने योग्य आकार को संग्रहीत करता है
  • ढेर:प्रत्येक थ्रेड के लिए अद्वितीय स्थानीय चर और विधि कॉल संग्रहीत करें, और स्वचालित रूप से मेमोरी जारी करें
  • विधि क्षेत्र:स्टोरेज क्लास संरचनात्मक जानकारी, रनटाइम निरंतर पूल, स्थिर चर इत्यादि सभी थ्रेड्स द्वारा साझा किए जाते हैं
  • प्रोग्राम काउंटर:वर्तमान थ्रेड द्वारा निष्पादित बाइटकोड निर्देश पता रिकॉर्ड करें
  • स्थानीय विधि स्टैक:मूल विधि निष्पादित करें (C/C++ कोड)

12. कचरा संग्रहण क्या है? कचरा संग्रहण एल्गोरिदम क्या हैं?

जीसी तंत्र की गहरी समझ

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

13. ढेर और स्टैक में क्या अंतर है?

दो महत्वपूर्ण स्मृति क्षेत्रों की तुलना करें

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

14. मेमोरी लीक क्या है? इससे कैसे बचें?

सामान्य स्मृति समस्याओं को पहचानें

  • मेमोरी लीक परिभाषा:प्रोग्राम द्वारा अनुरोधित मेमोरी को रिलीज़ नहीं किया जा सकता है और मेमोरी लंबे समय तक व्याप्त रहती है।
  • सामान्य कारण:
  • लंबे समय तक जीवित रहने वाली वस्तुएं अल्पकालिक वस्तुओं को संदर्भित करती हैं
  • संग्रह में मौजूद वस्तुओं को समय पर साफ नहीं किया जाता है
  • श्रोता या कॉलबैक अपंजीकृत नहीं है
  • स्थैतिक संग्रह असीमित रूप से बढ़ता है
  • कैसे बचें:संदर्भ तुरंत जारी करें, संसाधनों के साथ प्रयास करें का उपयोग करें, और नियमित रूप से मेमोरी उपयोग की जांच करें

15. मजबूत संदर्भ, नरम संदर्भ, कमजोर संदर्भ और आभासी संदर्भ क्या हैं?

जावा के चार संदर्भ प्रकारों को समझें

  • सशक्त उद्धरण:साधारण सन्दर्भ, जब तक कोई मजबूत सन्दर्भ न हो तब तक वस्तु का पुनर्चक्रण नहीं होता
  • सॉफ़्टरेफ़रेंस:अपर्याप्त मेमोरी होने पर इसे पुनर्चक्रित किया जाता है और कैशिंग के लिए उपयोग किया जाता है।
  • कमजोर संदर्भ:इसे अगले GC में पुनर्चक्रित किया जाएगा और WeakHashMap के लिए उपयोग किया जाएगा
  • प्रेत संदर्भ:किसी भी समय पुनर्नवीनीकरण किया जा सकता है और वस्तु पुनर्चक्रण को ट्रैक करने के लिए संदर्भ कतार के साथ इसका उपयोग किया जाना चाहिए
  • पुनर्चक्रण प्राथमिकता:आभासी संदर्भ > कमजोर संदर्भ > नरम संदर्भ > मजबूत संदर्भ

📦 संग्रह ढांचा

16. जावा कलेक्शन फ्रेमवर्क की संरचना क्या है?

संग्रह ढांचे की समग्र अवधारणा में महारत हासिल करें

  • संग्रह इंटरफ़ेस:
  • सूची:क्रमबद्ध और दोहराने योग्य, जैसे ArrayList, LinkedList
  • सेट करें:अव्यवस्थित और गैर-दोहराया जाने वाला, जैसे हैशसेट, ट्रीसेट
  • कतार:कतारें, जैसे लिंक्डलिस्ट, प्रायोरिटीक्यू
  • मानचित्र इंटरफ़ेस:
  • कुंजी-मूल्य जोड़ी मैपिंग:हैश मैप, ट्री मैप, समवर्ती हैश मैप
  • समग्र स्तर:पुनरावर्तनीय → संग्रह/मानचित्र → ठोस कार्यान्वयन वर्ग

17. ArrayList और LinkedList में क्या अंतर है?

आमतौर पर इस्तेमाल होने वाले दो सूची कार्यान्वयनों की तुलना करें

  • डेटा संरचना:ArrayList सरणियों पर आधारित है, LinkedList दोगुनी लिंक की गई सूचियों पर आधारित है
  • यादृच्छिक अभिगम:ऐरेलिस्ट ओ(1), लिंक्डलिस्ट ओ(एन)
  • सम्मिलन और विलोपन:ऐरेलिस्ट ओ(एन), लिंक्डलिस्ट ओ(1)
  • मेमोरी उपयोग:ArrayList निरंतर है, LinkedList बिखरा हुआ है (पॉइंटर ओवरहेड)
  • धागा सुरक्षा:न तो सिंक्रनाइज़ है, आप Collections.synchronizedList() या CopyOnWriteArrayList का उपयोग कर सकते हैं
  • चुनें:लगातार प्रश्नों के लिए ArrayList और बार-बार सम्मिलन और विलोपन के लिए LinkedList का उपयोग करें।

18. हैशमैप का सिद्धांत और प्रदर्शन क्या है?

हैशमैप कैसे काम करता है इसकी गहरी समझ

  • डेटा संरचना:सारणी + लिंक्ड सूची + लाल-काला पेड़ (जेडीके 8+)
  • यह कैसे काम करता है:हैश(कुंजी) % तालिका.लंबाई विरोध की स्थिति में सरणी सबस्क्रिप्ट, लिंक या ट्री की गणना करें
  • लोडिंग फैक्टर:डिफ़ॉल्ट 0.75 है, उपयोग किए जाने पर क्षमता ≥ क्षमता × लोडिंग कारक का विस्तार करें
  • विस्तार तंत्र:क्षमता दोगुनी हो गई, तत्वों का पुनः उपयोग किया गया
  • समय जटिलता:औसत O(1), सबसे खराब O(n) (जब बहुत अधिक संघर्ष हों)
  • धागा सुरक्षा:सिंक्रनाइज़ नहीं है, मल्टी-थ्रेडिंग के लिए ConcurrentHashMap या Collections.synchronizedMap() का उपयोग करें

19. यह कैसे सुनिश्चित करें कि हैशसेट डुप्लिकेट न हो?

सेट के डिडुप्लीकेशन तंत्र को समझें

  • निम्न-स्तरीय कार्यान्वयन:हैश मैप के आधार पर, कुंजी तत्व है और मान निश्चित ऑब्जेक्ट है
  • डिडुप्लीकेशन तंत्र:पहले हैशकोड() की तुलना करें, फिर समानता निर्धारित करने के लिए बराबर() का उपयोग करें।
  • प्रक्रिया जोड़ें:हैश की गणना करें → जांचें कि क्या यह मौजूद है → जोड़ें यदि यह मौजूद नहीं है → यदि यह मौजूद है तो इसे अनदेखा करें
  • कस्टम ऑब्जेक्ट:एकरूपता सुनिश्चित करने के लिए बराबर () और हैशकोड () को फिर से लिखा जाना चाहिए
  • प्रदर्शन:हैश गुणवत्ता के आधार पर औसत O(1) जोड़ना, हटाना और खोजना

20. फेल-फास्ट और फेल-सेफ क्या हैं?

संग्रह के पुनरावर्तक सुरक्षा तंत्र को समझें

  • असफल-तेज़:
  • पुनरावृत्ति प्रक्रिया के दौरान संग्रह को संशोधित करने से ConcurrentModificationException उत्पन्न हो जाएगी
  • मॉडकाउंट और अपेक्षितमोडकाउंट के माध्यम से पता लगाया गया
  • जैसे ArrayList, HashMap (थ्रेड-सुरक्षित नहीं)
  • असफल-सुरक्षित:
  • पुनरावृत्ति संग्रह के स्नैपशॉट या प्रतिलिपि पर आधारित है। मूल संग्रह को संशोधित करने से पुनरावृत्ति पर कोई प्रभाव नहीं पड़ता है।
  • जैसे कि CopyOnWriteArrayList, ConcurrentHashMap
  • उपयोग के लिए सुझाव:पुनरावृति करते समय, पुनरावर्तक के रिमूव() का उपयोग करें, या विफल-सुरक्षित संग्रह का उपयोग करें।

⚠️अपवाद प्रबंधन

21. जावा अपवाद प्रणाली?

जावा अपवादों के वर्गीकरण को समझें

  • फेंकने योग्य (रूट क्लास):
  • अपवाद:पुनर्प्राप्ति योग्य अपवाद
  • त्रुटि:वर्चुअल मशीन स्तर की त्रुटि, पुनर्प्राप्ति योग्य नहीं
  • अपवाद श्रेणी:
  • जांचा गया अपवाद (जांचा गया):पकड़ा या घोषित किया जाना चाहिए, जैसे कि IOException
  • अनियंत्रित अपवाद (अनियंत्रित):पकड़ा नहीं जा सकता, जैसे NullPointerException, IndexOutOfBoundsException
  • सामान्य अपवाद:NPE, ClassCastException, ArrayIndexOutOfBoundsException, आदि।

22. प्रयास-पकड़-अंततः निष्पादन आदेश?

अपवाद प्रबंधन के निष्पादन प्रवाह में महारत हासिल करें

  • सामान्य स्थिति:प्रयास करें → अंततः → सामान्य रूप से लौटें
  • अपवाद:कोशिश करें → अपवाद होता है → पकड़ें → अंततः → अपवाद पारित हो जाता है या वापस आ जाता है
  • अंततः विशेषताएं:निष्पादित किया जाना चाहिए, भले ही रिटर्न, थ्रो, System.exit() कैच में हो
  • अपवाद:अंत में रिटर्न, ट्राई/कैच में रिटर्न को ओवरराइड कर देगा
  • संसाधन रिलीज़:संसाधनों को स्वचालित रूप से बंद करने के लिए प्रयास-के-संसाधनों का उपयोग करने की अनुशंसा की जाती है
  • सर्वोत्तम प्रथाएँ:अंत में रिटर्न वैल्यू न बदलें, क्योंकि इससे अपवाद खो जाएंगे

23. थ्रो और थ्रो में क्या अंतर है?

दो अपवाद हैंडलिंग कीवर्ड के बीच अंतर बताएं

  • फेंकना:
  • अपवाद उदाहरणों को मैन्युअल रूप से फेंकें, विधि के भीतर उपयोग किया जाना चाहिए
  • प्रारूप: नया अपवाद फेंकें ("संदेश")
  • फेंकता है:
  • विधि हस्ताक्षर में दिए गए संभावित अपवादों की घोषणा करें
  • प्रारूप: सार्वजनिक शून्य विधि() IOException फेंकता है
  • प्रसंस्करण विधि:थ्रो को थ्रो द्वारा घोषित किया जाता है और थ्रो को कॉलर द्वारा नियंत्रित किया जाता है
  • आवेदन:थ्रो का उपयोग विशिष्ट अपवाद प्रबंधन के लिए किया जाता है, थ्रो का उपयोग अपवाद डिलीवरी के लिए किया जाता है

24. अपवादों को कैसे अनुकूलित करें?

प्रोजेक्ट-विशिष्ट अपवाद वर्ग बनाएं

  • वंशानुक्रम संबंध:इनहेरिट अपवाद (चेक किया गया अपवाद) या रनटाइमएक्सेप्शन (अनचेक अपवाद)
  • आवश्यक भाग:
  • एक पैरामीटर रहित कंस्ट्रक्टर प्रदान करें
  • संदेश के साथ एक कंस्ट्रक्टर प्रदान करें
  • संदेश और कारण के साथ एक कंस्ट्रक्टर प्रदान करें
  • कोड उदाहरण:सार्वजनिक वर्ग CustomException अपवाद का विस्तार करता है { ... }
  • सर्वोत्तम प्रथाएँ:स्पष्ट नामकरण, स्पष्ट दस्तावेज़ीकरण, और उपयुक्त अपवाद वर्गों की विरासत

25. संसाधनों के साथ प्रयास सिंटैक्स के क्या लाभ हैं?

स्वचालित संसाधन प्रबंधन को समझें

  • सिंटेक्स:प्रयास करें (इनपुटस्ट्रीम = ...) {...} स्वचालित रूप से संसाधनों को बंद करें
  • आवश्यकताएँ:संसाधनों को ऑटोक्लोज़ेबल इंटरफ़ेस लागू करना होगा
  • लाभ:
  • मैन्युअल प्रबंधन के बिना स्वचालित रूप से क्लोज़() विधि को कॉल करें
  • दबाए जाने पर अपवादों का सही प्रबंधन
  • कोड अधिक संक्षिप्त है और संसाधन रिसाव से बचाता है
  • लागू परिदृश्य:संसाधन वर्ग जैसे फ़ाइल, स्ट्रीम, कनेक्शन, स्टेटमेंट इत्यादि।

🔤 स्ट्रिंग, स्ट्रिंगबिल्डर, स्ट्रिंगबफ़र

26. स्ट्रिंग अपरिवर्तनीय है और क्यों?

स्ट्रिंग डिज़ाइन के पीछे के गहरे विचारों को समझें

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

27. स्ट्रिंग, स्ट्रिंगबिल्डर और स्ट्रिंगबफ़र के बीच क्या अंतर हैं?

उपयुक्त स्ट्रिंग मैनिपुलेशन वर्ग चुनें

  • स्ट्रिंग:अपरिवर्तनीय, थ्रेड-सुरक्षित, खराब प्रदर्शन (लगातार संशोधन)
  • स्ट्रिंगबिल्डर:परिवर्तनीय, गैर-थ्रेड-सुरक्षित, उत्कृष्ट प्रदर्शन (एकल-थ्रेडेड)
  • स्ट्रिंगबफ़र:परिवर्तनशील, थ्रेड-सुरक्षित (सिंक्रनाइज़ विधियाँ), औसत प्रदर्शन (मल्टी-थ्रेडिंग)
  • प्रदर्शन तुलना:स्ट्रिंगबिल्डर > स्ट्रिंगबफ़र > स्ट्रिंग
  • उपयोग के लिए सुझाव:
  • स्ट्रिंगबिल्डर का उपयोग करके एकल-थ्रेडेड स्ट्रिंग संयोजन
  • बहु-थ्रेडेड स्ट्रिंग संयोजन के लिए स्ट्रिंगबफ़र
  • संशोधित करने की कोई आवश्यकता नहीं है, स्ट्रिंग का उपयोग करें

28. स्ट्रिंग स्थिरांक पूल क्या है?

स्ट्रिंग कैशिंग तंत्र को समझें

  • परिभाषा:जेवीएम द्वारा बनाए रखा गया स्ट्रिंग कैश, स्ट्रिंग शाब्दिक भंडारण
  • स्थान:JDK 7+ ढेर में, पहले विधि क्षेत्र में
  • निर्माण तंत्र:
  • "एबीसी" जैसे शाब्दिक शब्द स्वचालित रूप से निरंतर पूल में प्रवेश करते हैं
  • नई स्ट्रिंग ("एबीसी") यदि "एबीसी" पूल में नहीं है, तो इसे जोड़ें
  • इंटर्न() विधि:स्थिरांक पूल में एक स्ट्रिंग जोड़ें या मौजूदा संदर्भ लौटाएँ
  • अनुकूलन प्रभाव:मेमोरी सहेजें और स्ट्रिंग तुलनाओं को तेज़ करें

29. समानता के लिए स्ट्रिंग्स की तुलना कैसे करें?

स्ट्रिंग्स की तुलना करना सीखें

  • == तुलना करें:तुलना करता है कि क्या संदर्भ समान हैं, सामग्री की तुलना नहीं करता है
  • बराबर () तुलना:यह देखने के लिए कि क्या वे समान हैं, स्ट्रिंग सामग्री की तुलना करें। इसका उपयोग करने की अनुशंसा की जाती है
  • बराबर इग्नोरकेस() तुलना:केस तुलना सामग्री पर ध्यान न दें
  • CompareTo() तुलना:लेक्सिकोग्राफ़िक तुलना, एक पूर्णांक लौटाना
  • ऑब्जेक्ट.बराबर():शून्य मानों की सुरक्षित तुलना संभालना
  • सर्वोत्तम प्रथाएँ:स्ट्रिंग सामग्री की तुलना करने के लिए बराबर () का उपयोग करें, == का उपयोग करने से बचें

30. स्ट्रिंग संयोजन के साथ प्रदर्शन संबंधी समस्याएं क्या हैं?

स्ट्रिंग संयोजन के प्रदर्शन को अनुकूलित करें

  • प्रश्न:स्ट्रिंग s = "a" + "b" + "c" कई मध्यवर्ती ऑब्जेक्ट और प्रतियां उत्पन्न करता है
  • कारण:स्ट्रिंग अपरिवर्तनीय है, और हर बार इसे जोड़ने पर एक नई वस्तु बन जाती है।
  • प्रदर्शन प्रभाव:लूपों को जोड़ते समय O(n²) समय जटिलता
  • अनुकूलन योजना:
  • डायरेक्ट + लूप के बाहर: कंपाइलर स्ट्रिंगबिल्डर को अनुकूलित करेगा
  • स्ट्रिंगबिल्डर या स्ट्रिंगबफ़र का स्पष्ट रूप से उपयोग करें
  • String.join(), StringJoiner आदि जैसे टूल का उपयोग करें।

🔄 मल्टी-थ्रेडिंग और समवर्ती

31. धागा क्या है? थ्रेड कैसे बनाएं?

धागों की बुनियादी अवधारणाओं और निर्माण विधियों में महारत हासिल करें

  • थ्रेड परिभाषा:प्रक्रिया के भीतर स्वतंत्र निष्पादन प्रवाह, साझा मेमोरी लेकिन स्वतंत्र स्टैक
  • कैसे बनाएं:
  • इनहेरिट थ्रेड:सार्वजनिक वर्ग MyThread थ्रेड का विस्तार करता है { सार्वजनिक शून्य रन() { } }
  • रननेबल लागू करें:पब्लिक क्लास MyRunnable रननेबल को लागू करता है { सार्वजनिक शून्य रन() { } }
  • कॉल करने योग्य कार्यान्वित करें:वापसी मान और अपवाद समर्थन
  • अंतर:एकल वंशानुक्रम प्रतिबंधों से बचने के लिए रननेबल की अनुशंसा की जाती है
  • प्रारंभ:थ्रेड.स्टार्ट() को कॉल करें, आप सीधे रन() को कॉल नहीं कर सकते

32. थ्रेड जीवन चक्र और स्थिति?

धागों के विभिन्न अवस्था परिवर्तन को समझें

  • नया:थ्रेड बनाया गया लेकिन प्रारंभ नहीं हुआ
  • चलाने योग्य:चलाने योग्य स्थिति (निष्पादन या क्रियान्वयन की प्रतीक्षा)
  • अवरुद्ध:अवरुद्ध स्थिति, लॉक प्राप्त करने की प्रतीक्षा कर रहा है
  • इंतज़ार कर रहा हूँ:प्रतीक्षा की स्थिति, अन्य थ्रेड से अधिसूचना की प्रतीक्षा
  • समय_प्रतीक्षा:निर्दिष्ट समय तक प्रतीक्षा करें
  • समाप्त:धागा समाप्त हो गया
  • राज्य परिवर्तन:नया → चलाने योग्य → अवरुद्ध/प्रतीक्षारत → समाप्त

33. सिंक्रोनाइज़्ड कैसे काम करता है?

जावा के अंतर्निहित लॉकिंग तंत्र को समझें

  • तुल्यकालन तंत्र:ऑब्जेक्ट के अंतर्निर्मित लॉक का उपयोग करके सिंक्रनाइज़ेशन
  • कैसे उपयोग करें:
  • तुल्यकालन विधि:सार्वजनिक सिंक्रनाइज़ शून्य विधि() {}
  • सिंक ब्लॉक:सिंक्रनाइज़(ओबीजे) { ... }
  • यह कैसे काम करता है:
  • प्रत्येक वस्तु में एक मॉनिटर होता है
  • थ्रेड लॉक प्राप्त करता है और महत्वपूर्ण अनुभाग में प्रवेश करता है, परस्पर अनन्य निष्पादन
  • बाइटकोड: मॉनिटरएंटर, मॉनिटरएग्जिट
  • विशेषताएं:पुनर्प्रवेशक, अनन्य, स्वतः-रिलीज़

34. अस्थिर कीवर्ड की क्या भूमिका है?

मेमोरी दृश्यता को समझना और अनुदेश पुन: व्यवस्थित करना अक्षम करना

  • समारोह:
  • दृश्यता:सुनिश्चित करें कि परिवर्तन तुरंत अन्य थ्रेड्स पर दिखाई दें
  • पुनर्प्रवाह निषिद्ध:कंपाइलर और सीपीयू पुन:क्रमण अनुकूलन को रोकें
  • कार्यान्वयन:मेमोरी बाधा, मुख्य मेमोरी से पढ़ने और लिखने के लिए मजबूर करना
  • सीमाएँ:परमाणुता की गारंटी नहीं है और सिंक्रनाइज़ को प्रतिस्थापित नहीं किया जा सकता है
  • अनुप्रयोग परिदृश्य:फ़्लैग बिट, डबल चेक सिंगलटन, स्टेटस मार्क
  • सिंक्रनाइज़ की तुलना करें:वोलेटाइल अधिक हल्का है लेकिन इसकी कार्यक्षमता सीमित है

35. wait(), notify() और notifyAll() के कार्य और अंतर क्या हैं?

धागों के बीच संचार तंत्र में महारत हासिल करें

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

💡साक्षात्कार की तैयारी के टिप्स

बुनियादी बातों को गहरा करें:न केवल अवधारणाओं को जानें, बल्कि सिद्धांतों और कार्यान्वयन विवरणों को भी समझें

अधिक व्यायाम करें:कोडिंग अभ्यास के माध्यम से ज्ञान को समेकित करें, विशेष रूप से मल्टी-थ्रेडिंग और समवर्ती से संबंधित

स्रोत कोड पढ़ें:अपनी समझ को गहरा करने के लिए जावा लाइब्रेरी स्रोत कोड (संग्रह, समवर्ती, आदि) का अध्ययन करें

विवरण पर ध्यान दें:स्ट्रिंग तुलना, संग्रह संशोधन और बहुत कुछ जैसे सामान्य नुकसान और सर्वोत्तम प्रथाओं में महारत हासिल करें

उदाहरण:साक्षात्कार के दौरान अवधारणाओं को स्पष्ट करने और अपनी अभिव्यंजक शक्ति को बढ़ाने के लिए विशिष्ट उदाहरणों का उपयोग करें।