परिचय: Java लापरवाही को माफ क्यों नहीं करता
\n\nआपने अपना रिज्यूमे भेज दिया, HR स्क्रीनिंग पास कर ली, और अब — तकनीकी साक्षात्कार का निमंत्रण आ गया है। यदि आप pythonlib.ru पर यह लेख पढ़ रहे हैं, तो इसका मतलब है कि आप या तो Python से Java पर स्विच कर रहे हैं, या बस 'ज्ञान का आधार' इकट्ठा कर रहे हैं। किसी भी स्थिति में — आप सही रास्ते पर हैं।
\n\nJava वह भाषा नहीं है जहाँ आप करिश्मे से 'निकल' सकते हैं। एंटरप्राइज़ इकोसिस्टम में स्पष्ट समझ की आवश्यकता होती है: JMM (Java Memory Model) से लेकर Garbage Collector के काम करने के तरीके तक। Java साक्षात्कार कोई परीक्षा नहीं है, यह एक संवाद है। लेकिन एक ऐसा संवाद जिसमें आपकी क्षमता की परीक्षा ली जाएगी।
\n\nइस लेख में मैंने एक वास्तविक चेकलिस्ट संकलित की है: क्या पढ़ना है, कैसे उत्तर देना है और — सबसे महत्वपूर्ण — live-coding में कैसे शर्मिंदा न हों। बिना पानी के, केवल अभ्यास।
\n\n1. Java Core: वह नींव जिसे कंठस्थ करना आवश्यक है
\n\nआधार से शुरू करते हैं। Java Core के बिना आपकी बात कोई नहीं सुनेगा। यहाँ उन विषयों की सूची है जिन्हें हर उम्मीदवार को जानना चाहिए:
\n\n1.1. OOP (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)
\nआपको पॉलीमॉर्फिज़्म, इनहेरिटेंस, एनकैप्सुलेशन और एब्स्ट्रैक्शन को सरल शब्दों में समझाने में सक्षम होना चाहिए। वह भी उदाहरणों के साथ।
\n\nट्रैप प्रश्न: 'एब्स्ट्रैक्ट क्लास और इंटरफ़ेस में क्या अंतर है?'
\nसही उत्तर: Java 8+ में इंटरफ़ेस में default-मेथड आ गए हैं, लेकिन एब्स्ट्रैक्ट क्लास में स्टेट (फ़ील्ड) हो सकता है, जबकि इंटरफ़ेस में नहीं।
\n\n// उदाहरण: एब्स्ट्रैक्ट क्लास\nabstract class Animal {\n protected String name;\n abstract void makeSound();\n}\n\n// default-मेथड वाला इंटरफ़ेस\ninterface Movable {\n default void move() {\n System.out.println("Moving...");\n }\n}\n\n1.2. कलेक्शन (Java Collections Framework)
\nयह must-have है। HashMap, ArrayList, HashSet, TreeMap को जानना पर्याप्त नहीं है। यह समझना आवश्यक है:
\n- \n
- HashMap कैसे काम करता है (ऐरे + लिंक्ड लिस्ट + Java 8 से रेड-ब्लैक ट्री) \n
- fail-fast और fail-safe इटरेटर के बीच अंतर \n
- ArrayList के बजाय LinkedList का उपयोग कब करें (स्पॉइलर: लगभग कभी नहीं) \n
सलाह: साक्षात्कार में आपको अपना खुद का HashMap इम्प्लीमेंटेशन लिखने के लिए कहा जा सकता है। पहले से अभ्यास करें।
\n\n1.3. अपवाद (Exceptions)
\nChecked vs Unchecked — क्लासिक। याद रखें: RuntimeException और इसके वंशज unchecked हैं, बाकी सब checked हैं। और कभी, सुनिए, कभी catch (Exception e) {} का उपयोग न करें — यह एक एंटीपैटर्न है।
2. मल्टीथ्रेडिंग: वह विषय जहाँ 80% उम्मीदवार असफल होते हैं
\n\nJava उन कुछ भाषाओं में से एक है जहाँ मल्टीथ्रेडिंग भाषा स्तर पर अंतर्निहित है। साक्षात्कार में आपसे निश्चित रूप से synchronized, volatile, AtomicInteger, Lock, Semaphore के बारे में पूछा जाएगा।
\n\n2.1. volatile कीवर्ड
\nमुख्य प्रश्न: 'क्या volatile परमाणुता (atomicity) की गारंटी देता है?' उत्तर: नहीं। यह केवल थ्रेड्स के बीच परिवर्तनों की दृश्यता (visibility) की गारंटी देता है।
\n\npublic class VolatileExample {\n private volatile boolean flag = true;\n\n public void stop() {\n flag = false; // दूसरा थ्रेड इस परिवर्तन को तुरंत देखेगा\n }\n}\n\n2.2. Deadlock और इससे कैसे बचें
\nआपको ऐसा कोड लिखने के लिए कहा जा सकता है जो deadlock की ओर ले जाता है, और फिर उसे ठीक करने के लिए कहा जा सकता है।
\n\n// क्लासिक deadlock\npublic class DeadlockExample {\n private final Object lock1 = new Object();\n private final Object lock2 = new Object();\n\n public void method1() {\n synchronized (lock1) {\n synchronized (lock2) { /* ... */ }\n }\n }\n\n public void method2() {\n synchronized (lock2) {\n synchronized (lock1) { /* ... */ }\n }\n }\n}\n\nसमाधान: हमेशा एक ही क्रम में लॉक प्राप्त करें, या java.util.concurrent.locks पैकेज से tryLock() का उपयोग करें।