जावा स्ट्रिंग मुलाखत प्रश्न आणि उत्तरे परिचय

ब्लॉग

जावा स्ट्रिंग मुलाखत प्रश्न आणि उत्तरे परिचय

1. परिचय

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



या ट्यूटोरियल मध्ये, आम्ही मुलाखतीबद्दल काही सामान्य प्रश्नांमधून जाऊ स्ट्रिंग .

2. स्ट्रिंग मूलभूत गोष्टी

या विभागात प्रश्न आहेत जे संबंधित आहेत स्ट्रिंग अंतर्गत रचना आणि स्मृती.



Q1. काय आहे अ स्ट्रिंग जावा मध्ये?

जावा मध्ये, ए स्ट्रिंग च्या अॅरे द्वारे अंतर्गत प्रतिनिधित्व केले जाते बाइट मूल्ये (किंवा चार JDK 9 च्या आधी मूल्य).

angularjs रेडिओ बटण तपासले

जावा 8 पर्यंतच्या आवृत्त्यांमध्ये आणि ए स्ट्रिंग युनिकोड वर्णांच्या अपरिवर्तनीय अॅरेने बनलेला होता. तथापि, बहुतेक वर्णांना फक्त 8 बिट्स आवश्यक असतात (1 बाइट) 16 बिट्सऐवजी त्यांचे प्रतिनिधित्व करण्यासाठी (चार आकार).



मेमरी वापर आणि कार्यप्रदर्शन सुधारण्यासाठी, जावा 9 सादर केले कॉम्पॅक्ट स्ट्रिंग्स . याचा अर्थ असा की जर ए स्ट्रिंग फक्त 1-बाइट वर्ण आहेत, ते वापरून दर्शविले जाईल लॅटिन -1 एन्कोडिंग. जर अ स्ट्रिंग कमीतकमी 1 मल्टी-बाइट वर्ण आहे, ते UTF-16 एन्कोडिंग वापरून प्रति वर्ण 2 बाइट म्हणून दर्शविले जाईल.

C आणि C ++ मध्ये, स्ट्रिंग वर्णांची एक श्रेणी देखील आहे, परंतु जावामध्ये, ती स्वतःची API असलेली एक स्वतंत्र वस्तू आहे.

Q2. आपण अ कसे तयार करू शकतो स्ट्रिंग जावा मध्ये ऑब्जेक्ट ?

java.lang.String परिभाषित करते तयार करण्याचे 13 वेगवेगळे मार्ग स्ट्रिंग . सर्वसाधारणपणे, तथापि, तेथे दोन आहेत:

  • ए द्वारे स्ट्रिंग शाब्दिक:
String s = 'abc';
  • द्वारे नवीन कीवर्ड:
String s = new String('abc');

जावा मधील सर्व स्ट्रिंग लिटरल्स ची उदाहरणे आहेत स्ट्रिंग वर्ग.

Q3. आहे स्ट्रिंग एक आदिम किंवा व्युत्पन्न प्रकार?

एक स्ट्रिंग हा एक व्युत्पन्न प्रकार आहे कारण त्यात राज्य आणि वर्तन आहे. उदाहरणार्थ, त्याच्यासारख्या पद्धती आहेत सबस्ट्रिंग () , indexOf () , आणि _equals (), _ज्या आदिम असू शकत नाहीत.

परंतु, आपण सर्वजण ते वारंवार वापरत असल्याने, त्यात काही विशेष वैशिष्ट्ये आहेत ज्यामुळे ती आदिमसारखी वाटते:

  • कॉल स्टॅकवर आदिम सारख्या तार साठवल्या जात नसल्या तरी, ते ** नावाच्या एका विशेष मेमरी प्रदेशात साठवले जातात स्ट्रिंग पूल **
  • आदिमांप्रमाणे, आम्ही स्ट्रिंगवर _+ _ ऑपरेटर वापरू शकतो
  • आणि पुन्हा, आदिमांप्रमाणे, आपण _नव्या _कीवर्डशिवाय _स्ट्रिंगचे उदाहरण तयार करू शकतो

Q4. तार अपरिवर्तनीय असण्याचे काय फायदे आहेत?

नुसार एक मुलाखत जेम्स गॉसलिंग द्वारे, कार्यप्रदर्शन आणि सुरक्षा सुधारण्यासाठी तार अपरिवर्तनीय आहेत.

आणि प्रत्यक्षात, आम्ही अनेक पाहतो अपरिवर्तनीय तार असण्याचे फायदे :

  • स्ट्रिंग पूल तेव्हाच शक्य आहे जेव्हा एकदा स्ट्रिंग तयार केल्या गेल्या, कधीही बदलल्या नाहीत, कारण त्यांचा पुन्हा वापर केला जाईल
  • कोड करू शकतो स्ट्रिंग सुरक्षितपणे दुसऱ्या पद्धतीला द्या , त्या पद्धतीद्वारे ते बदलले जाऊ शकत नाही हे जाणून घेणे
  • निःसंशयपणे हा वर्ग आपोआप धागा-सुरक्षित बनवतो
  • हा वर्ग धागा-सुरक्षित असल्याने, सामान्य डेटा समक्रमित करण्याची आवश्यकता नाही , ज्यामुळे कामगिरी सुधारते
  • ते न बदलण्याची हमी असल्याने, त्यांचा हॅशकोड सहज कॅश केला जाऊ शकतो

Q5. अ कसे आहे स्ट्रिंग मेमरीमध्ये संग्रहित?

JVM स्पेसिफिकेशन नुसार, स्ट्रिंग अक्षर a मध्ये साठवले जातात रनटाइम स्थिर पूल , जे JVM कडून वाटप केले जाते पद्धत क्षेत्र .

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

क्लास किंवा इंटरफेससाठी हा रनटाइम सतत पूल बांधला जातो जेव्हा क्लास किंवा इंटरफेस JVM द्वारे तयार केला जातो.

Q6. जावा मध्ये कचरा गोळा करण्यासाठी आंतरिक स्ट्रिंग पात्र आहेत का?

होय, प्रोग्राममधून कोणतेही संदर्भ नसल्यास स्ट्रिंग पूलमधील सर्व _स्ट्रिंग_ कचरा गोळा करण्यास पात्र आहेत.

Q7. काय आहे स्ट्रिंग सतत पूल?

स्ट्रिंग पूल , म्हणून देखील ओळखले जाते स्ट्रिंग सतत पूल किंवा स्ट्रिंग इंटर्न पूल, एक विशेष मेमरी प्रदेश आहे जेथे JVM स्टोअर करतो स्ट्रिंग उदाहरणे.

हे अनुप्रयोग कार्यक्षमता अनुकूल करते किती वेळा आणि किती तारांचे वाटप केले जाते ते कमी करून:

  • JVM एका विशिष्ट गोष्टीची फक्त एक प्रत साठवते स्ट्रिंग पूल मध्ये
  • नवीन तयार करताना स्ट्रिंग , JVM तलावामध्ये a साठी शोधतो स्ट्रिंग समान मूल्य असणे
  • सापडल्यास, जेव्हीएम त्याचा संदर्भ परत करतो स्ट्रिंग कोणतीही अतिरिक्त मेमरी वाटप न करता
  • जर ते सापडले नाही, तर JVM ते पूलमध्ये जोडते (ते इंटर्न करते) आणि त्याचा संदर्भ परत करते

Q8. आहे स्ट्रिंग धागा-सुरक्षित? कसे?

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

उदाहरणार्थ, जर धागा स्ट्रिंगचे मूल्य बदलतो, नवीन स्ट्रिंग विद्यमान सुधारित करण्याऐवजी तयार केले जाते.

Q9. ज्यासाठी _स्ट्रिंग _ ऑपरेशन्स ए पुरवठा करणे महत्वाचे आहे स्थानिक ?

च्या स्थानिक वर्ग आम्हाला सांस्कृतिक लोकलमध्ये फरक करण्यास तसेच आमची सामग्री योग्यरित्या स्वरूपित करण्यास अनुमती देते.

जेव्हा _String _class येतो, तेव्हा स्ट्रिंग्स रेंडर करताना आम्हाला त्याची आवश्यकता असते स्वरूप किंवा जेव्हा लोअर- किंवा अप्पर-केसिंग स्ट्रिंग्स.

खरं तर, जर आपण हे करणे विसरलो, तर आपण पोर्टेबिलिटी, सुरक्षा आणि वापरण्यायोग्य समस्यांमध्ये येऊ शकतो.

Q10. तारांसाठी अंतर्निहित वर्ण एन्कोडिंग काय आहे?

_String’_s Javadocs नुसार जावा 8 पर्यंत आणि त्यासह आवृत्त्यांसाठी, स्ट्रिंग्स UTF-16 स्वरूपात अंतर्गत साठवले जातात.

च्या चार डेटा प्रकार आणि java.lang.Character वस्तू मूळ युनिकोड तपशीलावर देखील आधारित आहेत , ज्याने अक्षरे निश्चित-रुंदी 16-बिट संस्था म्हणून परिभाषित केली.

JDK 9 पासून प्रारंभ, तार ज्यात फक्त 1-बाइट वर्णांचा वापर आहे लॅटिन -1 एन्कोडिंग, तर तार कमीतकमी 1 मल्टी-बाइट कॅरेक्टरसह UTF-16 एन्कोडिंग वापरा.

3. स्ट्रिंग आग

या विभागात, आम्ही संबंधित काही प्रश्नांवर चर्चा करू स्ट्रिंग आग.

Q11. आपण दोघांची तुलना कशी करू शकतो? तार जावा मध्ये? मध्ये काय फरक आहे str1 == str2 आणि str1.equals (str2) ?

आम्ही करू शकतो तारांची तुलना करा दोन वेगवेगळ्या प्रकारे: ऑपरेटर (==) च्या समान वापरून आणि समान () पद्धत

दोन्ही एकमेकांपेक्षा बरेच वेगळे आहेत:

  • ** ऑपरेटर ( str1 == str2 ) ** संदर्भात्मक समानतेसाठी तपासते
  • **पद्धत ( str1.equals (str2) ) ** शाब्दिक समानतेसाठी तपासते

जरी, हे खरे आहे की जर दोन तार शब्दावलीने समान असतील तर _str1.intern () == str2.intern () _ देखील आहे खरे .

सहसा, दोन तुलना करण्यासाठी तार त्यांच्या सामग्रीसाठी, आम्ही नेहमी वापरला पाहिजे String.equals .

Q12. आपण अ कसे विभाजित करू शकतो स्ट्रिंग जावा मध्ये?

च्या स्ट्रिंग वर्गच आपल्याला पुरवतो _स्ट्रिंग #__ विभाजित _ पद्धती , जे रेग्युलर एक्सप्रेशन डिलीमीटर स्वीकारते. हे आम्हाला परत करते a स्ट्रिंग [] रचना:

String[] parts = 'john,peter,mary'.split(','); assertEquals(new String[] { 'john', 'peter', 'mary' }, parts);

एक अवघड गोष्ट विभाजित रिक्त स्ट्रिंग विभाजित करताना ते आहे , आम्हाला रिक्त नसलेला अॅरे मिळू शकतो:

assertEquals(new String[] { '' }, ''.split(','));

अर्थात, _split _ अनेक मार्गांपैकी फक्त एक आहे जावा विभाजित करा स्ट्रिंग .

Q13. काय आहे StringJoiner ?

_ StringJoiner _ जावा 8 मध्ये वेगळ्या स्ट्रिंगमध्ये सामील होण्यासाठी एक वर्ग सुरू केला आहे, जसे रंगांची यादी घेणे आणि त्यांना स्वल्पविराम-सीमांकित स्ट्रिंग म्हणून परत करणे . आम्ही एक डिलिमीटर तसेच उपसर्ग आणि प्रत्यय देऊ शकतो:

StringJoiner joiner = new StringJoiner(',', '[', ']'); joiner.add('Red') .add('Green') .add('Blue'); assertEquals('[Red,Green,Blue]', joiner.toString());

Q14. मध्ये फरक स्ट्रिंग , स्ट्रिंगबफर आणि StringBuilder ?

तार अपरिवर्तनीय आहेत. याचा अर्थ असा की जर आपण त्याची मूल्ये बदलण्याचा किंवा बदलण्याचा प्रयत्न केला तर जावा पूर्णपणे नवीन तयार करतो _ स्ट्रिंग . _

उदाहरणार्थ, जर आपण स्ट्रिंग _str1 _ जोडल्यानंतर ती तयार केली असेल:

String str1 = 'abc'; str1 = str1 + 'def';

नंतर JVM, त्याऐवजी सुधारित str1 , पूर्णपणे नवीन तयार करते स्ट्रिंग .

तथापि, बहुतेक साध्या प्रकरणांसाठी, संकलक अंतर्गत वापरतो StringBuilder आणि वरील कोड ऑप्टिमाइझ करतो.

परंतु, लूपसारख्या अधिक जटिल कोडसाठी, तो पूर्णपणे नवीन तयार करेल स्ट्रिंग , बिघडलेली कामगिरी . हे कुठे आहे StringBuilder आणि स्ट्रिंगबफर उपयुक्त आहेत.

दोन्ही StringBuilder आणि स्ट्रिंगबफर जावा मध्ये अक्षरांचा एक उत्परिवर्तनीय क्रम असलेली वस्तू तयार करा. ** स्ट्रिंगबफर सिंक्रोनाइझ केले आहे आणि म्हणून थ्रेड-सुरक्षित आहे StringBuilder नाही.**

_StringBuffer _ मधील अतिरिक्त सिंक्रोनायझेशन सामान्यतः अनावश्यक असल्याने, आम्ही अनेकदा निवडून कार्यप्रदर्शन वाढवू शकतो StringBuilder.

Q15. A मध्ये पासवर्ड संग्रहित करणे अधिक सुरक्षित का आहे? चार [] a पेक्षा aray स्ट्रिंग ?

तार अपरिवर्तनीय असल्याने, ते बदल करण्यास परवानगी देत ​​नाहीत. हे वर्तन आपल्याला अधिलिखित, सुधारित किंवा त्यातील सामग्री शून्य करण्यापासून, बनवण्यापासून रोखते तार संवेदनशील माहिती साठवण्यासाठी अयोग्य.

स्ट्रिंगमधील सामुग्री काढण्यासाठी आम्हाला कचरा गोळा करणाऱ्यावर अवलंबून राहावे लागते. शिवाय, जावा आवृत्त्या 6 आणि त्याखाली, स्ट्रिंग्स PermGen मध्ये साठवल्या गेल्या, म्हणजे एकदा स्ट्रिंग तयार करण्यात आला, तो कधीही कचरा गोळा केला गेला नाही.

अ वापरून चार [] अरे, त्या माहितीवर आमचे पूर्ण नियंत्रण आहे. कचरा गोळा करणाऱ्यावर अवलंबून न राहता आम्ही ते सुधारू शकतो किंवा पूर्णपणे पुसून टाकू शकतो.

वापरणे चार [] प्रती स्ट्रिंग माहिती पूर्णपणे सुरक्षित करत नाही; हे फक्त एक अतिरिक्त उपाय आहे जे दुर्भावनापूर्ण वापरकर्त्याला संवेदनशील माहितीमध्ये प्रवेश मिळवण्याची संधी कमी करते.

Q16. _String'_s काय करते अंतर्गत () पद्धत करू?

पद्धत अंतर्गत () a ची अचूक प्रत तयार करते स्ट्रिंग ढीग मध्ये ऑब्जेक्ट आणि _String _constant पूल मध्ये साठवते, जे JVM सांभाळते.

जावास्क्रिप्ट अॅरे फिल्टर एकाधिक वितर्क

जावा आपोआप स्ट्रिंग लिटरल्स वापरून तयार केलेल्या सर्व स्ट्रिंग इंटर्न करते, परंतु जर आपण ए स्ट्रिंग नवीन ऑपरेटर वापरणे, उदाहरणार्थ, स्ट्रिंग str = नवीन स्ट्रिंग (abc) , नंतर जावा इतर कोणत्याही ऑब्जेक्ट प्रमाणेच ढीग मध्ये जोडते.

आम्ही कॉल करू शकतो अंतर्गत () JVM ला स्ट्रिंग पूलमध्ये आधीपासून अस्तित्वात नसल्यास ते जोडण्यासाठी सांगण्याची पद्धत, आणि त्या इंटर्न केलेल्या स्ट्रिंगचा संदर्भ परत करा:

String s1 = 'Baeldung'; String s2 = new String('Baeldung'); String s3 = new String('Baeldung').intern(); assertThat(s1 == s2).isFalse(); assertThat(s1 == s3).isTrue();

Q17. आम्ही धर्मांतर कसे करू शकतो स्ट्रिंग ला पूर्णांक आणि पूर्णांक ला स्ट्रिंग जावा मध्ये?

साठी सर्वात सरळ दृष्टिकोन a मध्ये रूपांतरित करा स्ट्रिंग एक पूर्णांक वापरून आहे पूर्णांक# parseInt :

int num = Integer.parseInt('22');

उलट करण्यासाठी, आम्ही वापरू शकतो पूर्णांक# toString :

String s = Integer.toString(num);

Q18. काय आहे String.format () आणि आम्ही ते कसे वापरू शकतो?

स्ट्रिंग#स्वरूप निर्दिष्ट स्वरूप स्ट्रिंग आणि वितर्क वापरून स्वरूपित स्ट्रिंग मिळवते.

String title = 'Baeldung'; String formatted = String.format('Title is %s', title); assertEquals('Title is Baeldung', formatted);

आम्हाला वापरकर्त्याचे _Locale निर्दिष्ट करणे देखील लक्षात ठेवणे आवश्यक आहे, _unless आम्ही फक्त ऑपरेटिंग सिस्टम डीफॉल्ट स्वीकारण्यास ठीक आहोत:

Locale usersLocale = Locale.ITALY; assertEquals('1.024', String.format(usersLocale, 'There are %,d shirts to choose from. Good luck.', 1024))

Q19. आपण a चे रूपांतर कसे करू शकतो? स्ट्रिंग अपरकेस आणि लोअरकेसला?

स्ट्रिंग स्पष्टपणे प्रदान करते स्ट्रिंग#toUpperCase केसिंग अपरकेसमध्ये बदलण्यासाठी.

जरी, जावाडोक्स आम्हाला आठवण करून देतात की आम्हाला वापरकर्त्याचे निर्दिष्ट करणे आवश्यक आहे स्थानिक अचूकता सुनिश्चित करण्यासाठी:

String s = 'Welcome to Baeldung!'; assertEquals('WELCOME TO BAELDUNG!', s.toUpperCase(Locale.US));

त्याचप्रमाणे, लोअरकेसमध्ये रूपांतरित करण्यासाठी, आपल्याकडे आहे स्ट्रिंग#toLowerCase :

String s = 'Welcome to Baeldung!'; assertEquals('welcome to baeldung!', s.toLowerCase(Locale.UK));

Q20. आपण कडून एक वर्ण श्रेणी कशी मिळवू शकतो स्ट्रिंग ?

स्ट्रिंग प्रदान करते toCharArray , जे त्याच्या अंतर्गत ची एक प्रत परत करते चार अॅरे प्री-जेडीके 9 (आणि रूपांतरित करते स्ट्रिंग नवीन साठी चार JDK9+मधील अॅरे:

char[] hello = 'hello'.toCharArray(); assertArrayEquals(new String[] { 'h', 'e', 'l', 'l', 'o' }, hello);

Q21. आपण जावा कसे रूपांतरित करू स्ट्रिंग मध्ये a बाइट रचना?

डीफॉल्टनुसार, पद्धत स्ट्रिंग#getBytes () प्लॅटफॉर्मचा डीफॉल्ट चारसेट वापरून स्ट्रिंगला बाइट अॅरेमध्ये एन्कोड करते.

आणि एपीआयची आवश्यकता नसताना आम्ही एक वर्णसेट निर्दिष्ट करतो, आम्ही सुरक्षा आणि पोर्टेबिलिटी सुनिश्चित करण्यासाठी केले पाहिजे :

byte[] byteArray2 = 'efgh'.getBytes(StandardCharsets.US_ASCII); byte[] byteArray3 = 'ijkl'.getBytes('UTF-8');

चार. स्ट्रिंग -आधारित अल्गोरिदम

या विभागात, आम्ही _String_s शी संबंधित काही प्रोग्रामिंग प्रश्नांवर चर्चा करू.

Q22. दोन असल्यास आम्ही कसे तपासू शकतो तार जावा मध्ये अॅनाग्राम आहेत का?

अॅनाग्राम हा एक शब्द आहे जो दुसर्या दिलेल्या शब्दाच्या अक्षरांची पुनर्रचना करून तयार होतो, उदाहरणार्थ, कार आणि चाप.

सुरू करण्यासाठी, आम्ही प्रथम दोन्ही तपासतो की नाही तार समान लांबीचे आहेत किंवा नाहीत.

कॅश्ड नेटवर्क प्रतिमा फडफडणे

नंतर आम्ही त्यांना रूपांतरित करा चार [] अॅरे, त्यांना क्रमवारी लावा आणि नंतर समानता तपासा .

Q23. A मध्ये दिलेल्या वर्णांच्या घटनांची संख्या आपण कशी मोजू शकतो? स्ट्रिंग ?

जावा 8 या सारख्या एकत्रीकरण कार्ये खरोखर सुलभ करते:

long count = 'hello'.chars().filter(ch -> (char)ch == 'l').count(); assertEquals(2, count);

आणि, इतर अनेक उत्तम मार्ग आहेत एल मोजा , लूप, पुनरावृत्ती, नियमित अभिव्यक्ती आणि बाह्य लायब्ररीसह.

Q24. आपण कसं उलटा करू शकतो स्ट्रिंग जावा मध्ये?

असे करण्याचे अनेक मार्ग असू शकतात, सर्वात सोपा दृष्टिकोन उलट पासून पद्धत StringBuilder (किंवा स्ट्रिंगबफर ):

String reversed = new StringBuilder('baeldung').reverse().toString(); assertEquals('gnudleab', reversed);

Q25. आम्ही कसे तपासू शकतो की अ स्ट्रिंग पॅलिंड्रोम आहे की नाही?

TO पॅलिंड्रोम मॅडम, रडार किंवा लेव्हल सारख्या फॉरवर्ड सारख्याच पाठीमागे वाचणाऱ्या वर्णांचा कोणताही क्रम आहे.

ला स्ट्रिंग पॅलिंड्रोम आहे का ते तपासा , आम्ही दिलेल्या स्ट्रिंगला पुढे आणि मागे एकाच लूपमध्ये, एका वेळी एक वर्ण पुन्हा सुरू करू शकतो. लूप पहिल्या बेमेलवर बाहेर पडतो.

5. निष्कर्ष

या लेखात, आम्ही काही सर्वात प्रचलित गोष्टींमधून गेलो स्ट्रिंग मुलाखत प्रश्न.

येथे वापरलेले सर्व कोड नमुने आहेत GitHub वर उपलब्ध .

#जावा #स्ट्रिंग #इंटरव्ह्यू #मुलाखत-प्रश्न