त्वचेखालील पद्धत स्ट्रिंग क्लासमधून ही जावा मधील सर्वात जास्त वापरल्या जाणाऱ्या पद्धतींपैकी एक आहे – ती मजाचा एक भाग आहे तणावपूर्ण मुलाखत प्रश्न उदाहरणार्थ, जावामध्ये उपभाषा कशी कार्य करते किंवा कधीकधी विचारते की उपभाषा जावामध्ये मेमरी लीक कशी निर्माण करते. या प्रश्नांची उत्तरे देण्यासाठी, आपल्याला अंमलबजावणीचे तपशील माहित असणे आवश्यक आहे. माझा एक मित्र अलीकडेच ड्रिल झाला होता जावा मध्ये सबस्ट्रिंग पद्धत जावाला दिलेल्या मुलाखतीत त्याने हे वापरले: सबलेयर () ही पद्धत बर्‍याच काळापासून आहे, अर्थात, आपण सर्वांनी ती वापरली आहे, परंतु मुलाखतीतील सहभागींच्या जावा ओळींच्या वेडाने ते आश्चर्यचकित झाले – अंमलबजावणीच्या पातळीवर खोलवर जाण्यासाठी.

रिंग स्ट्रिंग जावा मध्ये एक विशेष धडा आहे का բազմաթիվ उदाहरणार्थ, अनेक मुलाखत प्रश्नांचा विषय आहे पासवर्ड संचयित करण्यासाठी स्ट्रिंगपेक्षा चार अॅरे चांगले का आहे?. या प्रकरणात, ही सबवूफर पद्धत होती जी केंद्रस्थानी आली. जेव्हा आपल्याबद्दल चित्र रंगवण्याचा प्रश्न येतो तेव्हा आपल्यापैकी बहुतेकांमध्ये शांतता असते सबलेयर(..) आणि मग विसरलो. प्रत्येक जावा प्रोग्रामर कोडमध्ये प्रवेश करत नाही आणि ते कसे कार्य करते ते पाहतो. सुरुवातीला, तिची मुलाखत कशी होती ते जाणवा.

अपडेट: हा प्रश्न प्रत्यक्षात चुकीचा होता
http://bugs.sun.com/view_bug.do?bug_id=6294060:, जे जावा 7 सबडोमेनच्या अंमलबजावणीमध्ये अंतर्भूत आहे. आता, मूळ वर्ण वस्तुमान विभाजित करण्याऐवजी, सबस्ट्रिंग पद्धत त्याची एक प्रत तयार करते. थोडक्यात,
सबलेयर पद्धत आवश्यकतेनुसार फक्त डेटा वाचवते. धन्यवाद Yves il ile हे सूचित करण्यासाठी.

माझ्या काही वाचकांनी नमूद केल्याप्रमाणे, java.lang. स्ट्रिंग वर्ग जावा 1.7 मधील ऑफसेट काऊंट व्हेरिएबलमध्ये सुधारणा देखील झाली आहे, जी स्ट्रिंगमधून काढलेल्या पोझिशन्सचा मागोवा घेण्यासाठी वापरली जाते.

हे प्रत्येकासह काही बाइट जतन करू शकते स्ट्रिंग: उदाहरणार्थ, परंतु सुरुवातीच्या वस्तुमानाचे विभाजन न केल्याने सबवूफर पूर्वीच्या स्थिर वेळेच्या तुलनेत रेषीय कामगिरी करतात. कोणत्याही परिस्थितीत, जावामधील वायर्ड मेमरी लीक साफ करणे योग्य आहे. मी काय म्हणत आहे की जर तुम्ही तुमचा जावा 7 सर्व्हर अजून अपडेट केला नसेल आणि तरीही जावा 1.6 अपडेटवर काम करत असाल तर हे जाणून घेण्यासारखे आहे.


प्रश्न सामान्य चिटपासून सुरू होतो, և मुलाखतकार विचारतो.तुम्ही जावा मध्ये सबलेयर पद्धत वापरली आहे का?“आणि माझ्या मित्राने अभिमानाने हो म्हटले, बर्याच वेळा, जे वार्ताहराच्या चेहऱ्यावर हास्य आणते. तो म्हणतो, हे चांगले आहे.

पुढील प्रश्न खालीलप्रमाणे होता सबजंक्टिव्ह काय करते हे तुम्ही समजावून सांगू शकता का? माझ्या मित्राला त्याची प्रतिभा दाखवण्याची संधी मिळाली – त्याला जावा API बद्दल किती माहिती आहे. ते म्हणाले की जावामध्ये स्ट्रिंग पुनर्प्राप्त करण्यासाठी स्ट्रिंग पद्धत वापरली जाते. परिभाषित java.lang. स्ट्रिंग वर्ग, և ते ओव्हरलोड पद्धत.

त्वचेखालील पद्धतीची फक्त एक आवृत्ती आहे startIndex: : स्ट्रिंगचा तो भाग मिळवते जिथून ती सुरू झाली startIndex: शेवटपर्यंत, आणि दुसरे दोन पॅरामीटर्स घेतात, startIndex, आणि endIndex, the पासून स्ट्रिंगचा एक भाग मिळवते startIndex: करण्यासाठी: endIndex-1:. त्याने असेही निदर्शनास आणले की प्रत्येक वेळी जेव्हा आपण जावामध्ये सबस्ट्रिंग () पद्धतीला कॉल करता तेव्हा ती एक नवीन स्ट्रिंग परत करेल कारण जावामध्ये स्ट्रिंग अपरिवर्तित आहे.

पुढील प्रश्न खालीलप्रमाणे होता. जर startIndex सबस्ट्रिंगच्या लांबीच्या समान असेल (int startIndex), नाही, फेकणार नाही IndexOutOfBoundException: त्याऐवजी परत येईल रिक्त दोर.

त्याच वेळी जेव्हा startIndex: आणि endIndex: दुसऱ्या पद्धतीच्या बरोबरीचे आहे. ते फक्त फेकेल StringIndexBoundException: कधी: startIndex: पेक्षा जास्त, नकारात्मक आहे endIndex: किंवा लांबीपेक्षा जास्त स्ट्रिंग:.

आतापर्यंत सर्वकाही ठीक आहे, माझा मित्र आनंदी होता, the मुलाखत त्याला विचारत नाही तोपर्यंत मुलाखत चांगली होत असल्याचे दिसत होतेजावामध्ये उपभाषा कशी कार्य करते हे तुम्हाला माहिती आहे का?? बहुतेक जावा प्रोग्रामर येथे अपयशी ठरतात कारण त्यांना कोड पाहिल्याशिवाय सबट्री पद्धत कशी कार्य करते हे माहित नसते. java.lang. स्ट्रिंग.

जर तुम्ही स्ट्रिंग वर्गाच्या आत सबस्ट्रिंग पद्धत पाहिली तर तुम्हाला दिसेल की याला म्हणतात: स्ट्रिंग (int offset, int calculation, char value []) कन्स्ट्रक्टर नवीन स्ट्रिंग ऑब्जेक्ट तयार करा. येथे मनोरंजक गोष्ट आहे मूल्य[], जे मूळ रेषेचे प्रतिनिधित्व करण्यासाठी वापरल्या जाणार्या समान स्वभावाचा अॅरे आहे. तर, हे किती वाईट आहे?

जर तुम्हाला आधीच समजले नसेल, जर स्टार्ट लाईन खूप लांब असेल तर – 1 जीबीचे वस्तुमान असेल, सबवूफर कितीही लहान असला तरीही, तो 1 जीबी धरेल. ही सुरवातीची ओळ देखील थांबेल कचरा गोळा केला, जर त्याचा थेट संदर्भ नसेल. जावामध्ये मेमरी गळतीचे हे एक स्पष्ट प्रकरण आहे जेथे मेमरी आवश्यक नसली तरीही साठवली जाते. बस एवढेच सबलेयर पद्धत तयार करते: स्मृती गळती.

जावा मध्ये सबस्ट्रिंग कसे कार्य करते

हे स्पष्ट आहे की मुलाखतकर्त्याचा पुढील प्रश्न असेल: तुम्हाला या समस्येबद्दल कसे वाटते? जरी आपण जाऊ शकत नाही – जावा स्ट्रिंगची पद्धत बदला, तरीही आपण लक्षणीय लांब डोरी तयार केल्यास आपण एक उपाय शोधू शकता.

एक सोपा उपाय म्हणजे रेषा कापणे – रेषेच्या लांबीनुसार वर्ण वस्तुमानाचा आकार राखणे. सुदैवाने java.lang. स्ट्रिंग खालील उदाहरणात दाखवल्याप्रमाणे हे करण्यासाठी कन्स्ट्रक्टर आहे.

// comma separated stock symbols from NYSE
String listOfStockSymbolsOnNYSE = getStockSymbolsForNYSE(); 

//calling String(string) constructor
String apple = new String( 
               listOfStockSymbolsOnNYSE.substring(appleStartIndex, appleEndIndex)
               );

पासवर्ड बघितला तर java.lang. स्ट्रिंग वर्ग, तुम्हाला हे दिसेल कन्स्ट्रक्टर अॅरे स्वतः स्ट्रिंगपेक्षा मोठी असल्यास ती लहान करा.

public String(String original) {
        ...

        if (originalValue.length > size) {
            // The array representing the String is bigger than the new
            // String itself.  Perhaps this constructor is being called
            // in order to trim the baggage, so make a copy of the array.
            int off = original.offset;
            v = Arrays.copyOfRange(originalValue, off, off+size);

        } else {

            // The array representing the String is the same
            // size as the String, so no point in making a copy.
            v = originalValue;
        }
    ...
 }

या समस्येचे निराकरण करण्याचा दुसरा मार्ग म्हणजे कॉल करणे इंटर्न () पद्धत: सबस्ट्रिंगवर, जे नंतर एक असेल विद्यमान ओळ पूलमधून किंवा आवश्यक असल्यास ते जोडा. स्टूल हे पूलमधील एक वास्तविक स्ट्रिंग असल्याने, ते आवश्यक तेवढीच जागा घेते. हे देखील लक्षात घेतले पाहिजे की जेव्हा आपण कॉल करता तेव्हा दोरांचे अंतर्गतकरण होत नाही इंटर्न () मूळ लॅरीवरील पद्धत.

सर्वात प्रभावी विकसकाने उप-स्तर वापराशी संबंधित पहिल्या तीन प्रश्नांची यशस्वीरित्या उत्तरे दिली, परंतु ते शेवटच्या दोनमध्ये राहतात: उप-स्तर मेमरी गळती कशी तयार करते किंवा उप-स्तर कसे कार्य करते. तो पूर्णपणे त्यांचा दोष नाही, कारण तुम्हाला जे माहित आहे ते प्रत्येक वेळी सबलेयर () एक नवीन ओळ परत करते जी चुकीची आहे कारण ती तीच प्रदान केली गेली आहे वर्णांची श्रेणी.

हा एकमेव मुलाखत प्रश्न होता जो माझ्या मित्राला त्रास देत नव्हता, तो भारतातील त्याच्या मानक सेवा स्तरावर जावा मुलाखत होता. तसे, त्याने थोड्या दिवसांनी फोन केला, जरी ते थोडे कठीण होते जावा मध्ये सबस्ट्रिंग पद्धत कशी कार्य करते: म्हणूनच त्याने या मुलाखतीचा अनुभव माझ्याशी शेअर केला.

संबंधित जावा शिकवण्या: