जूनियर डेवलपर पद के लिए क्यू एंड ए
सामान्य सवाल
1. आप किस डिज़ाइन पैटर्न को जानते हैं? हमें दो डिज़ाइन पैटर्न के बारे में बताएं जिनका आपने अपने काम में उपयोग किया है।
पैटर्न की एक विशाल विविधता है। आप में से उन लोगों के लिए जो डिजाइन पैटर्न के साथ खुद को अच्छी तरह से परिचित करना चाहते हैं, मैं "हेड फर्स्ट। डिजाइन पैटर्न" पुस्तक पढ़ने की सलाह देता हूं। यह आपको सबसे बुनियादी डिजाइन पैटर्न के विवरण को आसानी से जानने में मदद करेगा। डिज़ाइन पैटर्न के संदर्भ में, जिनका आप नौकरी के साक्षात्कार में उल्लेख कर सकते हैं, निम्नलिखित बातों का ध्यान रखें:- बिल्डर - अक्सर इस्तेमाल किया जाने वाला टेम्प्लेट, वस्तु निर्माण के क्लासिक दृष्टिकोण का एक विकल्प;
- रणनीति - एक पैटर्न जो अनिवार्य रूप से बहुरूपता का प्रतिनिधित्व करता है। यही है, हमारे पास एक इंटरफ़ेस है, लेकिन फ़ंक्शन को दिए गए विशिष्ट इंटरफ़ेस कार्यान्वयन के आधार पर प्रोग्राम का व्यवहार बदलता है (रणनीति पैटर्न अब जावा अनुप्रयोगों में लगभग हर जगह उपयोग किया जाता है)।
- फ़ैक्टरी - यह पैटर्न ApplicationContext (या BeanFactory) में पाया जा सकता है;
- सिंगलटन - डिफ़ॉल्ट रूप से सभी बीन्स सिंगलटन हैं;
- प्रॉक्सी - मूल रूप से, वसंत में सब कुछ इस पैटर्न का एक या दूसरे तरीके से उपयोग करता है, उदाहरण के लिए, एओपी;
- जिम्मेदारी की श्रृंखला — एक पैटर्न जो वसंत सुरक्षा को रेखांकित करता है;
- टेम्प्लेट - स्प्रिंग JDBC में उपयोग किया जाता है।
जावा कोर
2. जावा में कौन से डेटा प्रकार हैं?
जावा में निम्नलिखित आदिम डेटा प्रकार हैं:- बाइट - -128 से लेकर 127 तक के पूर्णांक, 1 बाइट लेता है;
- लघु - पूर्णांक -32768 से लेकर 32767 तक, 2 बाइट्स लेता है;
- int — पूर्णांक -2147483648 से लेकर 2147483647 तक, 4 बाइट लेता है;
- लंबा - पूर्णांक 9223372036854775808 से लेकर 9223372036854775807 तक, 8 बाइट्स लेता है;
- फ्लोट - फ्लोटिंग पॉइंट नंबर -3.4E+38 से 3.4E+38 तक, 4 बाइट्स लेता है;
- डबल - फ़्लोटिंग पॉइंट नंबर -1.7E+308 से लेकर 1.7E+308 तक, 8 बाइट्स लेता है;
- चार - UTF-16 में एकल वर्ण, 2 बाइट्स लेता है;
- बूलियन सही/गलत मान, 1 बाइट लेता है।
3. कोई वस्तु आदिम डेटा प्रकारों से कैसे भिन्न होती है?
पहला अंतर कब्जा की गई मेमोरी की मात्रा है: आदिम बहुत कम लेते हैं क्योंकि उनमें केवल अपना मूल्य होता है, लेकिन वस्तुओं में बहुत सारे अलग-अलग मूल्य हो सकते हैं - आदिम और अन्य वस्तुओं के संदर्भ। दूसरा अंतर यह है: जावा एक वस्तु-उन्मुख भाषा है, इसलिए जावा कार्यों में सब कुछ वस्तुओं के बीच एक अंतःक्रिया है। आदिम यहाँ बहुत अच्छी तरह से फिट नहीं होते हैं। वास्तव में, इसीलिए जावा 100% वस्तु-उन्मुख भाषा नहीं है। तीसरा अंतर, जो दूसरे से अनुसरण करता है, वह यह है कि क्योंकि जावा ऑब्जेक्ट इंटरैक्शन पर केंद्रित है, ऑब्जेक्ट्स के प्रबंधन के लिए कई अलग-अलग तंत्र हैं। उदाहरण के लिए, कंस्ट्रक्टर, विधियाँ, अपवाद (जो मुख्य रूप से वस्तुओं के साथ काम करते हैं), आदि। और इस वस्तु-उन्मुख वातावरण में आदिम को किसी तरह काम करने की अनुमति देने के लिए, जावा के निर्माता आएआदिम प्रकार के लिए रैपर ( पूर्णांक , चरित्र , डबल , बूलियन ...)4. सन्दर्भ और मूल्य के आधार पर तर्क पारित करने के बीच क्या अंतर है?
आदिम क्षेत्र अपना मान संग्रहीत करते हैं: उदाहरण के लिए, यदि हम int i = 9; , तब i फ़ील्ड मान 9 को संग्रहीत करता है। जब हमारे पास किसी वस्तु का संदर्भ होता है, तो इसका मतलब है कि हमारे पास वस्तु के संदर्भ के साथ एक फ़ील्ड है। दूसरे शब्दों में, हमारे पास एक ऐसा क्षेत्र है जो वस्तु के पते को स्मृति में संग्रहीत करता है।
Cat cat = new Cat();
इसका अर्थ यह है कि किसी वस्तु के संदर्भ वाले क्षेत्र भी मूल्यों को संग्रहित करते हैं । उनके मान मेमोरी एड्रेस हैं। यही है, बिल्ली नए कैट () ऑब्जेक्ट के मेमोरी एड्रेस को स्टोर करती है । जब हम किसी मेथड को आर्ग्युमेंट पास करते हैं, तो उसकी वैल्यू कॉपी हो जाती है। प्रिमिटिव के मामले में, प्रिमिटिव के मान को कॉपी किया जाता है। तदनुसार, विधि प्रतिलिपि के साथ काम करती है। जब प्रतिलिपि बदली जाती है, तो मूल प्रभावित नहीं होता है। संदर्भ प्रकार के मामले में, स्मृति पते का मान कॉपी किया जाता है। तदनुसार, दोनों संदर्भ चर एक ही वस्तु की ओर इशारा करते हुए पतों को संग्रहीत करेंगे। और अगर हम इस New Reference को Object को Change करने के लिए Use करते हैं तो हम पाएंगे की ये भी Old Reference के लिए Change हो गया है। आखिरकार, वे दोनों एक ही वस्तु की ओर इशारा करते हैं।
5. जेवीएम, जेडीके और जेआरई क्या है?
जेवीएम जावा वर्चुअल मशीन के लिए खड़ा है , जो कंपाइलर द्वारा प्री-जेनरेट किए गए जावा बाइटकोड को चलाता है। JRE का मतलब जावा रनटाइम एनवायरनमेंट है । मूल रूप से, यह जावा एप्लिकेशन चलाने के लिए एक वातावरण है। इसमें जावा प्रोग्रामिंग भाषा में लिखे एप्लेट्स और एप्लिकेशन चलाने के लिए जेवीएम, मानक पुस्तकालय और अन्य घटक शामिल हैं। दूसरे शब्दों में, जेआरई एक संकलित जावा प्रोग्राम को चलाने के लिए आवश्यक सभी चीजों का एक पैकेज है, लेकिन इसमें एप्लिकेशन विकसित करने के लिए कंपाइलर या डिबगर्स जैसे टूल और उपयोगिताओं को शामिल नहीं किया गया है। JDK का मतलब Java Development Kit है, जो JRE का एक विस्तार है. अर्थात्, यह न केवल जावा अनुप्रयोगों को चलाने के लिए बल्कि उन्हें विकसित करने के लिए भी एक वातावरण है। JDK में JRE में सब कुछ शामिल है, साथ ही विभिन्न अतिरिक्त उपकरण - कंपाइलर और डिबगर - जावा एप्लिकेशन बनाने के लिए आवश्यक हैं (जावा डॉक्स शामिल हैं)।6. जेवीएम का उपयोग क्यों करें?
जैसा कि ऊपर कहा गया है, जावा वर्चुअल मशीन एक वर्चुअल मशीन है जो जावा बाइटकोड चलाती है जिसे कंपाइलर द्वारा प्री-जेनरेट किया गया है। इसका मतलब है कि जेवीएम जावा सोर्स कोड को नहीं समझता है। तो, सबसे पहले, हम .java फ़ाइलें संकलित करते हैं। संकलित फाइलों में .class हैविस्तार और अब बायटेकोड के रूप में हैं, जिसे जेवीएम समझता है। JVM प्रत्येक OS के लिए अलग है। जब JVM बायटेकोड फ़ाइलें चलाता है, तो यह उन्हें उस OS के लिए अनुकूलित करता है जिस पर वह चल रहा है। वास्तव में, क्योंकि अलग-अलग JVM हैं, JDK (या JRE) भी अलग-अलग OS के लिए अलग-अलग हैं (प्रत्येक संस्करण को अपने स्वयं के JVM की आवश्यकता होती है)। आइए याद करें कि विकास अन्य प्रोग्रामिंग भाषाओं में कैसे काम करता है। आप एक प्रोग्राम लिखते हैं, फिर उसके कोड को एक विशिष्ट OS के लिए मशीन कोड में संकलित किया जाता है, और फिर आप उसे चला सकते हैं। दूसरे शब्दों में, आपको प्रत्येक प्लेटफ़ॉर्म के लिए प्रोग्राम के विभिन्न संस्करण लिखने होंगे। लेकिन जावा की कोड की दोहरी प्रोसेसिंग (बायटेकोड में सोर्स कोड का संकलन, और फिर जेवीएम द्वारा बाइटकोड की प्रोसेसिंग) आपको क्रॉस-प्लेटफ़ॉर्म समाधान के लाभों का आनंद लेने देती है। हम एक बार कोड बनाते हैं और इसे बाइटकोड में संकलित करते हैं। तब हम इसे किसी भी OS पर ले जा सकते हैं, और देशी JVM इसे चलाने में सक्षम है। और यह ठीक जावा की पौराणिक कथा हैएक बार लिखो, कहीं भी चलाओ सुविधा।7. बायटेकोड क्या है?
जैसा कि मैंने ऊपर कहा, कंपाइलर जावा कोड को इंटरमीडिएट बाइटकोड में परिवर्तित करता है (हम .java एक्सटेंशन वाली फाइलों से .class एक्सटेंशन वाली फाइलों में जाते हैं)। कई मायनों में, बायटेकोड मशीन कोड के समान है, सिवाय इसके कि इसका निर्देश सेट वास्तविक प्रोसेसर के लिए नहीं है, बल्कि एक आभासी है। उस ने कहा, इसमें जेआईटी कंपाइलर के लिए डिज़ाइन किए गए अनुभाग शामिल हो सकते हैं, जो प्रोग्राम चल रहे वास्तविक प्रोसेसर के लिए कमांड निष्पादन को अनुकूलित करता है। जेआईटी संकलन, जिसे ऑन-द-फ्लाई संकलन भी कहा जाता है, एक ऐसी तकनीक है जो प्रोग्राम चलने के दौरान मशीन कोड या किसी अन्य प्रारूप में बाइटकोड को संकलित करके बाइटकोड प्रोग्राम के प्रदर्शन को बढ़ाती है। जैसा कि आप अनुमान लगा सकते हैं, JVM जब bytecode चलाता है तो JIT कंपाइलर का उपयोग करता है। आइए कुछ नमूना बाइटकोड देखें: बहुत पठनीय नहीं, एह? अच्छी खबर यह है कि यह निर्देश हमारे लिए नहीं है। यह जेवीएम के लिए है।8. जावाबीन की विशेषताएं क्या हैं?
जावाबीन एक जावा वर्ग है जो कुछ नियमों का पालन करता है। JavaBean लिखने के कुछ नियम इस प्रकार हैं :-
क्लास में पब्लिक एक्सेस संशोधक के साथ एक खाली (बिना तर्क के) कंस्ट्रक्टर होना चाहिए। यह कंस्ट्रक्टर बिना किसी अनावश्यक समस्या के क्लास का एक ऑब्जेक्ट बनाना संभव बनाता है (ताकि तर्कों के साथ अनावश्यक फ़िडलिंग न हो)।
-
आंतरिक फ़ील्ड को गेट और सेट इंस्टेंस विधियों के माध्यम से एक्सेस किया जाता है, जिसमें मानक कार्यान्वयन होना चाहिए। उदाहरण के लिए, यदि हमारे पास एक नाम फ़ील्ड है, तो हमारे पास getName और setName आदि होने चाहिए। यह विभिन्न टूल (ढांचे) को बिना किसी कठिनाई के बीन्स की सामग्री को स्वचालित रूप से प्राप्त करने और सेट करने की अनुमति देता है।
-
वर्ग को बराबर () , हैशकोड () , और toString () विधियों को ओवरराइड करना चाहिए।
-
वर्ग क्रमबद्ध होना चाहिए। यही है, इसमें सीरियलज़ेबल मार्कर इंटरफ़ेस होना चाहिए या एक्सटर्नलाइज़ेबल इंटरफ़ेस लागू करना चाहिए। ऐसा इसलिए है ताकि बीन की स्थिति को मज़बूती से बचाया जा सके, संग्रहीत किया जा सके और पुनर्स्थापित किया जा सके।
9. OutOfMemoryError क्या है?
OutOfMemoryError जावा वर्चुअल मशीन (JVM) से संबंधित एक महत्वपूर्ण रनटाइम त्रुटि है। यह त्रुटि तब होती है जब JVM किसी ऑब्जेक्ट को आवंटित नहीं कर सकता क्योंकि इसके लिए पर्याप्त मेमोरी नहीं है, और कचरा संग्राहक अधिक मेमोरी आवंटित नहीं कर सकता है। कुछ प्रकार की OutOfMemoryError :-
OutOfMemoryError: जावा हीप स्पेस - अपर्याप्त मेमोरी के कारण ऑब्जेक्ट को जावा हीप पर आवंटित नहीं किया जा सकता है। यह त्रुटि मेमोरी लीक या डिफ़ॉल्ट हीप आकार के कारण हो सकती है जो वर्तमान एप्लिकेशन के लिए बहुत छोटा है।
-
OutOfMemoryError: GC ओवरहेड सीमा पार हो गई - क्योंकि एप्लिकेशन का डेटा बमुश्किल ढेर में फिट होता है, कचरा संग्राहक हर समय चलता रहता है, जिससे जावा प्रोग्राम बहुत धीमी गति से चलता है। नतीजतन, कचरा कलेक्टर ओवरहेड सीमा पार हो गई है और इस त्रुटि के साथ एप्लिकेशन क्रैश हो गया है।
-
OutOfMemoryError: अनुरोधित सरणी आकार VM सीमा से अधिक है - यह इंगित करता है कि एप्लिकेशन ने एक सरणी के लिए मेमोरी आवंटित करने का प्रयास किया है जो हीप आकार से अधिक है। दोबारा, इसका मतलब यह हो सकता है कि डिफ़ॉल्ट रूप से अपर्याप्त स्मृति आवंटित की गई थी।
-
OutOfMemoryError: मेटास्पेस - ढेर मेटाडेटा के लिए आवंटित स्थान से बाहर चला गया (मेटाडेटा कक्षाओं और विधियों के लिए निर्देश हैं)।
-
OutOfMemoryError: कारण के लिए आकार बाइट्स का अनुरोध करें। स्वैप स्थान से बाहर — हीप से स्मृति आबंटित करने का प्रयास करते समय कुछ त्रुटि उत्पन्न हुई, और परिणामस्वरूप, हीप में पर्याप्त स्थान का अभाव है।
10. स्टैक ट्रेस क्या है? मुझे यह कैसे मिलेगा?
एक स्टैक ट्रेस उन कक्षाओं और विधियों की एक सूची है जिन्हें किसी एप्लिकेशन के निष्पादन में इस बिंदु तक बुलाया गया है। आप ऐसा करके एप्लिकेशन में किसी विशिष्ट बिंदु पर स्टैक ट्रेस प्राप्त कर सकते हैं:
StackTraceElement[] stackTraceElements =Thread.currentThread().getStackTrace();
यह हमें लास्ट इन फ़र्स्ट आउट (LIFO) क्रम में व्यवस्थित StackTraceElements की एक सरणी देता है । जावा में, जब लोग स्टैक ट्रेस के बारे में बात करते हैं, तो उनका मतलब आमतौर पर एक त्रुटि (या अपवाद) होने पर कंसोल पर प्रदर्शित स्टैक ट्रेस होता है। आप इस तरह के अपवादों से स्टैक ट्रेस प्राप्त कर सकते हैं:
StackTraceElement[] stackTraceElements;
try{
...
} catch (Exception e) {
stackTraceElements = e.getStackTrace();
}
और अगर हम कंसोल पर अपवाद का स्टैक ट्रेस प्रदर्शित करना चाहते हैं:
try{
...
} catch (Exception e) {
e.printStackTrace();
}
इसके अतिरिक्त, यदि कोई त्रुटि, अनियंत्रित अपवाद, या अनियंत्रित जाँच अपवाद होता है, तो एप्लिकेशन क्रैश होने पर हमें स्वचालित रूप से कंसोल पर अपवाद का स्टैक ट्रेस मिलता है। यहां कंसोल पर स्टैक ट्रेस का एक छोटा सा उदाहरण दिया गया है: और इसी के साथ, आज हम इस विषय पर अपनी चर्चा समाप्त करेंगे।
GO TO FULL VERSION