कनिष्ठ विकासक पदासाठी प्रश्नोत्तरे
सामान्य प्रश्न
1. तुम्हाला कोणते डिझाइन नमुने माहित आहेत? तुम्ही तुमच्या कामात वापरलेल्या दोन डिझाइन पॅटर्नबद्दल आम्हाला सांगा.
नमुन्यांची प्रचंड विविधता आहेत. तुमच्यापैकी ज्यांना स्वतःला डिझाईन नमुन्यांसह पूर्णपणे परिचित करायचे आहे त्यांच्यासाठी मी "हेड फर्स्ट. डिझाइन पॅटर्न" हे पुस्तक वाचण्याची शिफारस करतो. हे तुम्हाला सर्वात मूलभूत डिझाइन पॅटर्नचे तपशील सहजपणे जाणून घेण्यास मदत करेल. तुम्ही नोकरीच्या मुलाखतीत उल्लेख करू शकता अशा डिझाइन पॅटर्नच्या बाबतीत, खालील गोष्टी लक्षात येतात:- बिल्डर — वारंवार वापरले जाणारे टेम्पलेट, ऑब्जेक्ट निर्मितीसाठी क्लासिक दृष्टिकोनाचा पर्याय;
- धोरण - एक नमुना जो मूलत: बहुरूपता दर्शवतो. म्हणजेच, आमच्याकडे एक इंटरफेस आहे, परंतु फंक्शनला पास केलेल्या विशिष्ट इंटरफेस अंमलबजावणीवर अवलंबून प्रोग्रामचे वर्तन बदलते (स्ट्रॅटेजी पॅटर्न आता Java ऍप्लिकेशन्समध्ये जवळपास सर्वत्र वापरला जातो).
- फॅक्टरी — हा नमुना ApplicationContext (किंवा BeanFactory मध्ये) मध्ये आढळू शकतो;
- सिंगलटन — सर्व बीन्स डीफॉल्टनुसार सिंगलटन असतात;
- प्रॉक्सी — मुळात, वसंत ऋतूतील प्रत्येक गोष्ट या पॅटर्नचा एक ना एक प्रकारे वापर करते, उदाहरणार्थ, AOP;
- जबाबदारीची साखळी - एक नमुना जो स्प्रिंग सिक्युरिटी अधोरेखित करतो;
- टेम्पलेट — स्प्रिंग JDBC मध्ये वापरले.
जावा कोर
2. Java मध्ये कोणते डेटा प्रकार आहेत?
Java मध्ये खालील आदिम डेटा प्रकार आहेत:- बाइट — -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 बाइट्स घेते;
- char — UTF-16 मधील एकल वर्ण, 2 बाइट्स घेते;
- बुलियन सत्य/असत्य मूल्ये, 1 बाइट घेते.
3. एखादी वस्तू आदिम डेटा प्रकारांपेक्षा कशी वेगळी असते?
पहिला फरक म्हणजे व्यापलेल्या मेमरीचे प्रमाण: आदिमानव फारच कमी घेतात कारण त्यात फक्त त्यांचे स्वतःचे मूल्य असते, परंतु वस्तूंमध्ये बरीच भिन्न मूल्ये असू शकतात - दोन्ही आदिम आणि इतर वस्तूंचे संदर्भ. दुसरा फरक हा आहे: जावा ही ऑब्जेक्ट-ओरिएंटेड भाषा आहे, म्हणून Java मधील प्रत्येक गोष्ट ऑब्जेक्ट्समधील परस्परसंवाद आहे. आदिम इथे फारसे बसत नाहीत. खरं तर, म्हणूनच Java ही 100% ऑब्जेक्ट ओरिएंटेड भाषा नाही. तिसरा फरक, जो दुसऱ्यापासून पुढे येतो तो म्हणजे जावा ऑब्जेक्टच्या परस्परसंवादावर केंद्रित असल्यामुळे, ऑब्जेक्ट्स व्यवस्थापित करण्यासाठी अनेक भिन्न यंत्रणा आहेत. उदाहरणार्थ, कन्स्ट्रक्टर, पद्धती, अपवाद (जे प्रामुख्याने ऑब्जेक्ट्ससह कार्य करतात), इ. आणि आदिम लोकांना या ऑब्जेक्ट-ओरिएंटेड वातावरणात कसे तरी काम करण्याची परवानगी देण्यासाठी, Java चे निर्माते आलेआदिम प्रकारांसाठी आवरणे ( पूर्णांक , वर्ण , दुहेरी , बुलियन ...)4. संदर्भ आणि मूल्यानुसार युक्तिवाद पास करणे यात काय फरक आहे?
आदिम फील्ड त्यांचे मूल्य साठवतात: उदाहरणार्थ, जर आपण int i = 9 सेट केले; , नंतर i फील्ड मूल्य 9 साठवते. जेव्हा आपल्याकडे ऑब्जेक्टचा संदर्भ असतो, याचा अर्थ आपल्याकडे ऑब्जेक्टचा संदर्भ असलेले फील्ड असते. दुसऱ्या शब्दांत, आमच्याकडे एक फील्ड आहे जे मेमरीमध्ये ऑब्जेक्टचा पत्ता संग्रहित करते.
Cat cat = new Cat();
याचा अर्थ असा की ऑब्जेक्टच्या संदर्भासह फील्ड देखील मूल्ये संग्रहित करतात . त्यांची मूल्ये मेमरी पत्ते आहेत. म्हणजेच, cat नवीन Cat() ऑब्जेक्टचा मेमरी अॅड्रेस साठवते . जेव्हा आपण एखाद्या पद्धतीवर युक्तिवाद पास करतो, तेव्हा त्याचे मूल्य कॉपी केले जाते. आदिमच्या बाबतीत, आदिमचे मूल्य कॉपी केले जाते. त्यानुसार, पद्धत कॉपीसह कार्य करते. जेव्हा प्रत बदलली जाते तेव्हा मूळवर परिणाम होत नाही. संदर्भ प्रकाराच्या बाबतीत, मेमरी पत्त्याचे मूल्य कॉपी केले जाते. त्यानुसार, दोन्ही संदर्भ व्हेरिएबल्स एकाच ऑब्जेक्टकडे निर्देश करणारे पत्ते संग्रहित करतील. आणि जर आपण हा नवीन संदर्भ ऑब्जेक्ट बदलण्यासाठी वापरला तर आपल्याला आढळेल की तो जुन्या संदर्भासाठी देखील बदलला आहे. शेवटी, ते दोघे एकाच वस्तूकडे निर्देश करतात.
5. JVM, JDK आणि JRE म्हणजे काय?
JVM म्हणजे Java Virtual Machine , जे कंपाइलरने पूर्व-व्युत्पन्न केलेले Java bytecode चालवते. JRE म्हणजे Java Runtime Environment . मूलभूतपणे, हे Java अनुप्रयोग चालविण्यासाठी एक वातावरण आहे. यात JVM, मानक लायब्ररी आणि जावा प्रोग्रामिंग भाषेत लिहिलेल्या ऍपलेट आणि ऍप्लिकेशन्स चालवण्यासाठी इतर घटक समाविष्ट आहेत. दुसऱ्या शब्दांत, JRE हे संकलित Java प्रोग्राम चालविण्यासाठी आवश्यक असलेल्या प्रत्येक गोष्टीचे पॅकेज आहे, परंतु त्यात ऍप्लिकेशन्स विकसित करण्यासाठी कंपायलर किंवा डीबगर सारख्या साधनांचा आणि उपयोगितांचा समावेश नाही. जेडीके म्हणजे जावा डेव्हलपमेंट किट , जे जेआरईचा विस्तार आहे. म्हणजेच, हे केवळ Java ऍप्लिकेशन्स चालवण्यासाठीच नाही तर ते विकसित करण्यासाठी देखील एक वातावरण आहे. JDK मध्ये JRE मधील सर्व काही आहे, तसेच Java ऍप्लिकेशन्स तयार करण्यासाठी आवश्यक असलेली विविध अतिरिक्त साधने — कंपायलर आणि डीबगर आहेत (जावा डॉक्सचा समावेश आहे).6. JVM का वापरावे?
वर म्हटल्याप्रमाणे, जावा व्हर्च्युअल मशीन हे एक आभासी मशीन आहे जे जावा बायकोड चालवते जे कंपाइलरने आधीच तयार केले आहे. याचा अर्थ JVM ला Java सोर्स कोड समजत नाही. तर, प्रथम, आम्ही .java फाइल्स संकलित करतो. संकलित केलेल्या फाइल्समध्ये .class आहेएक्स्टेंशन आणि आता बायकोडच्या स्वरूपात आहेत, जे JVM ला समजते. JVM प्रत्येक OS साठी भिन्न आहे. जेव्हा JVM बायटेकोड फाइल्स चालवते, तेव्हा ते ज्या OS वर चालत आहे त्यासाठी ते त्यांना अनुकूल करते. खरं तर, भिन्न JVM असल्यामुळे, JDK (किंवा JRE) देखील भिन्न OS साठी भिन्न आहेत (प्रत्येक आवृत्तीला स्वतःचे JVM आवश्यक आहे). इतर प्रोग्रामिंग भाषांमध्ये विकास कसा कार्य करतो हे लक्षात ठेवूया. तुम्ही प्रोग्राम लिहा, त्यानंतर त्याचा कोड विशिष्ट OS साठी मशीन कोडमध्ये संकलित केला जाईल आणि नंतर तुम्ही तो चालवू शकता. दुसऱ्या शब्दांत, तुम्हाला प्रत्येक प्लॅटफॉर्मसाठी प्रोग्रामच्या वेगवेगळ्या आवृत्त्या लिहिण्याची आवश्यकता आहे. परंतु Java ची कोडची दुहेरी प्रक्रिया (स्रोत कोडचे बाइटकोडमध्ये संकलित करणे, आणि नंतर JVM द्वारे बाइटकोडवर प्रक्रिया करणे) तुम्हाला क्रॉस-प्लॅटफॉर्म सोल्यूशनच्या फायद्यांचा आनंद घेऊ देते. आम्ही कोड एकदा तयार करतो आणि तो बायकोडमध्ये संकलित करतो. मग आम्ही ते कोणत्याही OS वर नेऊ शकतो आणि मूळ JVM ते चालवण्यास सक्षम आहे. आणि हे तंतोतंत जावाचे पौराणिक आहेएकदा लिहा, कुठेही चालवा वैशिष्ट्य.7. बाइटकोड म्हणजे काय?
मी वर म्हटल्याप्रमाणे, कंपाइलर जावा कोडला इंटरमीडिएट बायकोडमध्ये रूपांतरित करतो (आम्ही .java एक्स्टेंशन असलेल्या फायलींमधून .class एक्स्टेंशनच्या फायलींकडे जातो). बर्याच मार्गांनी, बाइटकोड हा मशीन कोडसारखाच असतो, त्याशिवाय त्याचा निर्देश संच वास्तविक प्रोसेसरसाठी नसून आभासी आहे. ते म्हणाले, यात JIT कंपाइलरसाठी डिझाइन केलेले विभाग समाविष्ट असू शकतात, जे प्रोग्राम चालू असलेल्या वास्तविक प्रोसेसरसाठी कमांड एक्झिक्यूशन ऑप्टिमाइझ करतात. JIT संकलन, ज्याला ऑन-द-फ्लाय कंपाइलेशन देखील म्हणतात, हे एक तंत्रज्ञान आहे जे बाइटकोड प्रोग्रामचे कार्यप्रदर्शन वाढवते आणि प्रोग्राम चालू असताना मशीन कोडमध्ये किंवा अन्य फॉरमॅटमध्ये संकलित करून बायकोड प्रोग्रामची कार्यक्षमता वाढवते. तुम्ही अंदाज लावला असेल, JVM JIT कंपाइलर वापरते जेव्हा ते बायकोड चालवते. चला काही नमुना बायटेकोड पाहू: खूप वाचनीय नाही, हं? चांगली बातमी अशी आहे की ही सूचना आमच्यासाठी नाही. हे JVM साठी आहे.8. JavaBean ची वैशिष्ट्ये काय आहेत?
JavaBean हा जावा वर्ग आहे जो काही नियमांचे पालन करतो . JavaBean लिहिण्यासाठी येथे काही नियम आहेत :-
वर्गामध्ये पब्लिक ऍक्सेस मॉडिफायरसह रिक्त (विवाद नाही) कन्स्ट्रक्टर असणे आवश्यक आहे. हा कन्स्ट्रक्टर कोणत्याही अनावश्यक समस्यांशिवाय क्लासचा एक ऑब्जेक्ट तयार करणे शक्य करतो (जेणेकरून वितर्कांसह अनावश्यक गोंधळ होणार नाही).
-
गेट आणि सेट इन्स्टन्स पद्धतींद्वारे अंतर्गत फील्डमध्ये प्रवेश केला जातो , ज्याची मानक अंमलबजावणी असावी. उदाहरणार्थ, जर आमच्याकडे नाव फील्ड असेल, तर आमच्याकडे getName आणि setName इ. असणे आवश्यक आहे. यामुळे विविध टूल्स (फ्रेमवर्क) आपोआप बीन्सची सामग्री कोणत्याही अडचणीशिवाय मिळवू आणि सेट करू शकतात.
-
वर्गाने equals() , hashCode() आणि toString() पद्धती ओव्हरराइड करणे आवश्यक आहे.
-
वर्ग क्रमिक असणे आवश्यक आहे. म्हणजेच, त्यात अनुक्रमे करण्यायोग्य मार्कर इंटरफेस असणे आवश्यक आहे किंवा एक्सटर्नलायझ करण्यायोग्य इंटरफेस लागू करणे आवश्यक आहे. हे असे आहे की बीनची स्थिती विश्वसनीयरित्या जतन, संग्रहित आणि पुनर्संचयित केली जाऊ शकते.
9. OutOfMemoryError म्हणजे काय?
OutOfMemoryError ही Java Virtual Machine (JVM) शी संबंधित एक गंभीर रनटाइम त्रुटी आहे. ही त्रुटी उद्भवते जेव्हा JVM एखाद्या वस्तूचे वाटप करू शकत नाही कारण त्यासाठी पुरेशी मेमरी नसते आणि कचरा गोळा करणारा अधिक मेमरी वाटप करू शकत नाही. OutOfMemoryError चे काही प्रकार :-
OutOfMemoryError: Java हीप स्पेस — अपुऱ्या मेमरीमुळे जावा हीपवर ऑब्जेक्ट वाटप करता येत नाही. ही त्रुटी मेमरी गळतीमुळे किंवा वर्तमान अनुप्रयोगासाठी खूप लहान असलेल्या डीफॉल्ट हीप आकारामुळे होऊ शकते.
-
OutOfMemoryError: GC ओव्हरहेड मर्यादा ओलांडली — कारण ऍप्लिकेशनचा डेटा ढीगमध्ये बसत नाही, कचरा गोळा करणारा सर्व वेळ चालतो, ज्यामुळे Java प्रोग्राम खूप हळू चालतो. परिणामी, कचरा संकलक ओव्हरहेड मर्यादा ओलांडली आहे आणि या त्रुटीसह अनुप्रयोग क्रॅश होतो.
-
OutOfMemoryError: विनंती केलेल्या अॅरेचा आकार VM मर्यादेपेक्षा जास्त आहे — हे सूचित करते की अॅप्लिकेशनने हीप आकारापेक्षा जास्त असलेल्या अॅरेसाठी मेमरी वाटप करण्याचा प्रयत्न केला. पुन्हा, याचा अर्थ असा होऊ शकतो की अपुरी मेमरी डीफॉल्टनुसार वाटप केली गेली होती.
-
OutOfMemoryError: मेटास्पेस — मेटाडेटासाठी वाटप केलेली जागा संपली आहे (मेटाडेटा वर्ग आणि पद्धतींसाठी सूचना आहेत).
-
OutOfMemoryError: कारणास्तव आकार बाइट्सची विनंती करा. स्वॅप स्पेसच्या बाहेर — हीपमधून मेमरी वाटप करण्याचा प्रयत्न करताना काही त्रुटी आली आणि परिणामी, हीपमध्ये पुरेशी जागा नाही.
10. स्टॅक ट्रेस म्हणजे काय? मला ते कसे मिळेल?
स्टॅक ट्रेस ही वर्गांची आणि पद्धतींची यादी आहे ज्यांना अनुप्रयोगाच्या अंमलबजावणीमध्ये आतापर्यंत कॉल केले गेले आहे. तुम्ही हे करून अॅप्लिकेशनमधील विशिष्ट बिंदूवर स्टॅक ट्रेस मिळवू शकता:
StackTraceElement[] stackTraceElements =Thread.currentThread().getStackTrace();
यामुळे आम्हाला लास्ट इन फर्स्ट आउट (LIFO) क्रमाने मांडलेल्या StackTraceElements चा एक अॅरे मिळतो . Java मध्ये, जेव्हा लोक स्टॅक ट्रेसबद्दल बोलतात, तेव्हा त्यांचा अर्थ सामान्यत: जेव्हा एखादी त्रुटी (किंवा अपवाद) येते तेव्हा कन्सोलवर प्रदर्शित केलेला स्टॅक ट्रेस असा होतो. तुम्ही यासारख्या अपवादांमधून स्टॅक ट्रेस मिळवू शकता:
StackTraceElement[] stackTraceElements;
try{
...
} catch (Exception e) {
stackTraceElements = e.getStackTrace();
}
आणि आम्ही कन्सोलवर अपवादाचा स्टॅक ट्रेस प्रदर्शित करू इच्छित असल्यास:
try{
...
} catch (Exception e) {
e.printStackTrace();
}
याव्यतिरिक्त, जर एरर, अनचेक केलेला अपवाद किंवा न हाताळलेला चेक केलेला अपवाद आढळल्यास, अनुप्रयोग क्रॅश झाल्यावर आम्हाला कन्सोलवर अपवादाचा स्टॅक ट्रेस आपोआप मिळतो. कन्सोलवरील स्टॅक ट्रेसचे हे एक लहान उदाहरण आहे: आणि त्या नोटवर, आम्ही आज या विषयावरील आमची चर्चा पूर्ण करू.
GO TO FULL VERSION