JavaRush /جاوا بلاگ /Random-SD /جاوا اسٽرنگ. انٽرويو سوال ۽ جواب، حصو 2
Andrey
سطح

جاوا اسٽرنگ. انٽرويو سوال ۽ جواب، حصو 2

گروپ ۾ شايع ٿيل
بدقسمتي سان، مضمون هڪ ٽڪرا ۾ مناسب نه هو؛ مون کي ان کي ٻن حصن ۾ ورهائڻو پيو. شروعات هتي ڏسو جاوا اسٽرنگ.  انٽرويو سوال ۽ جواب، حصو 2 - 1

12. ڏنل اسٽرنگ ۾ سڀ کان ڊگھي پيلنڊروم ڳولڻ لاءِ فنڪشن لکو

هڪ تار ۾ پيلنڊرومڪ تارن تي مشتمل ٿي سگھي ٿو، ۽ سڀ کان ڊگھو پيلنڊروم ڳولڻ پروگرامنگ جو معاملو آهي. هتي اهم نقطو اهو آهي ته ڪنهن به پيلنڊروم جي وچ کان، جيڪڏهن اسان ساڄي ۽ کاٻي 1 ڪردار سان وڃون ٿا، اهو هميشه ساڳيو ڪردار هوندو. مثال طور، 12321، وچ ۾ 3 آهي، ۽ جيڪڏهن اسان ٻنهي طرفن ۾ موجوده پوزيشن کان حرڪت جاري رکون ٿا، اسان کي 2 ۽ پوء 1 حاصل ڪنداسين. اسان پنهنجي جاوا پروگرام ۾ ساڳئي منطق استعمال ڪندا آهيون سڀ کان ڊگهو پيلينڊوم ڳولڻ لاء. بهرحال، جيڪڏهن پيلينڊوم جي ڊيگهه برابر آهي، وچ واري ڊيگهه به برابر آهي، تنهنڪري اسان کي پڪ ڪرڻ گهرجي ته اهو پڻ اسان جي پروگرام ۾ مهيا ڪيو ويو آهي، مثال طور، 12333321، وچ 33 آهي، ۽ جيڪڏهن اسان اڳتي وڌندا آهيون. ٻنهي طرفن ۾، اسان حاصل ڪنداسين 3، 2 ۽ 1. اسان جي پروگرام ۾، اسان نتيجي واري اسٽرنگ ذريعي وڃون ٿا جيڪو وچ ۾ پهرين جاء تي آهي ۽ کاٻي ۽ ساڄي اکرن کي چيڪ ڪريو. اسان وٽ پڻ ٻه عالمي متغير آهن پيلينڊوم جي شروعاتي پوزيشن کي ذخيرو ڪرڻ لاء. اسان کي اهو به جانچڻ جي ضرورت آهي ته ڇا اڳ ۾ ئي هڪ ڊگهو پيلنڊروم مليل آهي، ڇو ته اسان هڪ ڏنل تار ۾ ڪيترن ئي پيلنڊروم ڳولي سگهون ٿا. هيٺ ڏنل هڪ مثال پروگرام آهي جيڪو سڀني ڪيسن ۾ ٺيڪ ڪم ڪري ٿو. اسان مٿي ڏنل ڪوڊ کي بهتر ڪري سگھون ٿا جڏهن لوپ کي الڳ طريقي سان منتقل ڪري، پر مان اھو حصو توھان لاءِ ڇڏيندس. مهرباني ڪري مون کي خبر ڏيو ته توهان وٽ بهتر عمل آهي يا جيڪڏهن پروگرام ڪنهن طريقي سان ناڪام ٿئي.
package com.journaldev.util;

public class LongestPalindromeFinder {

    public static void main(String[] args) {
        System.out.println(longestPalindromeString("1234"));
        System.out.println(longestPalindromeString("12321"));
        System.out.println(longestPalindromeString("9912321456"));
        System.out.println(longestPalindromeString("9912333321456"));
        System.out.println(longestPalindromeString("12145445499"));
    }

    public static String longestPalindromeString(String in) {
        char[] input = in.toCharArray();
        int longestPalindromeStart = 0;
        int longestPalindromeEnd = 0;

        for (int mid = 0; mid < input.length; mid++) {
            // для случая нечетного палиндрома How 12321, 3 будет серединой
            int left = mid-1;
            int right = mid+1;
            // нам необходимо двигаться влево и вправо на 1 позицию до конца
            while (left >= 0 && right < input.length) {
                // ниже проверка, является ли это палиндромом
                if (input[left] == input[right]) {
                    // обновление глобальных позиций, только если палиндром длиннее имеющегося
                    if (right - left > longestPalindromeEnd
                            - longestPalindromeStart) {
                        longestPalindromeStart = left;
                        longestPalindromeEnd = right;
                    }
                }
                left--;
                right++;
            }
            // для четного палиндрома у нас должна быть подобная логика с размером середины 2
            // для этого мы начнем на одну позицию правее
            left = mid-1;
            right = mid + 2;// к примеру, для 12333321 мы выбрали 33 в качестве середины
            while (left >= 0 && right < input.length)
            {
                if (input[left] == input[right]) {
                    if (right - left > longestPalindromeEnd
                            - longestPalindromeStart) {
                        longestPalindromeStart = left;
                        longestPalindromeEnd = right;
                    }
                }
                left--;
                right++;
            }
        }
        // теперь у нас есть позиции для самого длинного палиндрома
        return in.substring(longestPalindromeStart, longestPalindromeEnd + 1);
    }
}
پروگرام ھيٺ ڏنل ٻاھر ڪڍندو:
1
12321
12321
12333321
454454

13. String، StringBuffer ۽ StringBuilder جي وچ ۾ ڪهڙا فرق آهن

هڪ اسٽرنگ جاوا ۾ ناقابل تبديل ۽ حتمي آهي، تنهنڪري اسان جا سڀئي اسٽرنگ ميپيپليشن هميشه هڪ نئين اسٽرنگ ٺاهي سگهندا. اسٽرنگ مينيپوليشن وسيع وسيع آھي، تنھنڪري جاوا اسٽرنگ مينيپوليشن لاءِ ٻه مفيد ڪلاس مهيا ڪري ٿو - StringBuffer۽ StringBuilder. StringBuffer۽ StringBuilderتبديل ٿيندڙ طبقا آهن. آپريشنز سان StringBufferٿريڊ محفوظ ۽ هم وقت سازي ٿيل آهن، پر طريقا StringBuilderٿريڊ محفوظ نه آهن. تنهن ڪري جڏهن هڪ ئي اسٽرنگ تي ڪيترائي موضوع ڪم ڪري رهيا آهن ته اسان کي استعمال ڪرڻ گهرجي StringBuffer، پر هڪ واحد موضوع واري ماحول ۾ اسان کي استعمال ڪرڻ گهرجي StringBuilder. StringBuilderجي ڀيٽ ۾ وڌيڪ پيداوار StringBufferڇاڪاڻ ته ان کي هم وقت سازي سان بار نه آهي.

14. جاوا ۾ اسٽرنگ غير بدليل ۽ حتمي ڇو آهي؟

تار جي بدلجڻ جا ڪيترائي فائدا آھن:
  1. اسٽرنگ پولنگ صرف ممڪن آهي ڇو ته اسٽرنگ جاوا ۾ ناقابل تبديلي آهي، اهڙيء طرح ورچوئل مشين تمام گهڻو هيپ اسپيس بچائيندو آهي جيئن مختلف اسٽرنگ ويريئبل پول ۾ هڪ ئي متغير ڏانهن اشارو ڪن ٿا. جيڪڏهن هڪ اسٽرنگ تبديل نه ٿئي ها ته پوءِ اسٽرنگ انٽرنگ ممڪن نه ٿي سگهي ها، ڇاڪاڻ ته جيڪڏهن ڪو به ويريئبل پنهنجي قدر کي تبديل ڪري ٿو ته ان اسٽرنگ جي حوالي سان ٻيا متغير به متاثر ٿيندا.

  2. جيڪڏهن تار بدلجي وڃي ٿي، ته پوءِ اها ايپليڪيشن لاءِ هڪ سنگين سيڪيورٽي خطرو بڻجي وڃي ٿي. مثال طور، ڊيٽابيس يوزرنيم ۽ پاسورڊ ڊيٽابيس سان ڪنيڪشن حاصل ڪرڻ لاءِ اسٽرنگ جي طور تي منظور ڪيا ويا آهن ۽ ساکٽ پروگرامنگ ۾، ميزبان ۽ بندرگاهن جا تفصيل اسٽرنگ طور گذري ويا آهن. جيئن ته اسٽرنگ ناقابل تبديلي آهي، ان جي قيمت تبديل نه ٿي ڪري سگھجي، ٻي صورت ۾ ڪو به هيڪر لنڪ جي قيمت کي تبديل ڪري سگهي ٿو ۽ ايپليڪيشن جي حفاظت ۾ مسئلا پيدا ڪري سگهي ٿو.

  3. جيئن ته اسٽرنگ غير بدليل آهي، اهو ڌاڳو-محفوظ آهي ۽ تار جو هڪ مثال مختلف موضوعن ۾ حصيداري ڪري سگهجي ٿو. هي ٿريڊ جي حفاظت لاءِ هم وقت سازي کان بچي ٿو، تار مڪمل طور تي ڌاڳو محفوظ آهن.

  4. جاوا ۾ اسٽرنگ استعمال ڪيا ويا آهن classloader۽ بي ترتيبيت يقيني بڻائي ٿي ته ڪلاس صحيح طريقي سان لوڊ ڪيو ويو آهي استعمال ڪندي Classloader. مثال طور، هڪ ڪلاس مثال جي باري ۾ سوچيو جڏهن توهان java.sql.Connectionهڪ ڪلاس لوڊ ڪرڻ جي ڪوشش ڪري رهيا آهيو، پر حوالو قدر myhacked.Connectionهڪ ڪلاس ۾ تبديل ڪيو ويو آهي جيڪو توهان جي ڊيٽابيس ۾ ناپسنديده شيون ڪري سگهي ٿو.

  5. جيئن ته اسٽرنگ ناقابل تبديل آهي، ان کي hashcodeتخليق جي وقت تي محفوظ ڪيو ويندو آهي ۽ ان کي ٻيهر ڳڻڻ جي ڪا ضرورت ناهي. اهو اسٽرنگ کي هڪ بهترين اميدوار بڻائي ٿو ان ۾ ڪيئي لاءِ Map۽ ان جي پروسيسنگ ٻين ڪنجين کان تيز ٿي ويندي HashMap. اهو ئي سبب آهي ته string سڀ کان وڌيڪ استعمال ٿيل شئي آهي جنهن کي ڪيئي طور استعمال ڪيو ويندو آهي HashMap.

15. هڪ تار کي حصن ۾ ڪيئن ورهايو وڃي؟

اسان هڪ طريقو استعمال ڪري سگهون ٿا split(String regex)هڪ تار کي ورهائڻ لاءِ تارن جي هڪ صف ۾ هڪ باقاعده اظهار استعمال ڪندي ڊيليميٽر.
import java.util.Arrays;

public class JavaSplitString {
    public static void main(String[] args) {
        String line = "I am a java developer";
        String[] words = line.split(" ");
        String[] twoWords = line.split(" ", 2);
        System.out.println("String split with delimiter: "+Arrays.toString(words));
        System.out.println("String split into two: "+Arrays.toString(twoWords));
        //split string delimited with special characters
        String wordsWithNumbers = "I|am|a|java|developer";
        String[] numbers = wordsWithNumbers.split("\\|");
        System.out.println("String split with special character: "+Arrays.toString(numbers));
    }
}
طريقه split(String regex, int numOfStrings)هڪ اوور لوڊ ٿيل طريقو آهي هڪ اسٽرنگ کي ورهائڻ لاءِ مخصوص تعداد ۾ لائينن جي. اسان باڪس سليش استعمال ڪري سگھون ٿا ريگيولر ايڪسپريس خاص اکر استعمال ڪرڻ لاءِ ريگولر اکرن وانگر. پروگرام ھيٺ ڏنل ٻاھر ڪڍندو:
String split with delimiter: [I, am, a, java, developer]
String split into two: [I, am a java developer]
String split with special character: [I, am, a, java, developer]

16. پاس ورڊ محفوظ ڪرڻ لاءِ اسٽرنگ جي ڀيٽ ۾ اسٽرنگ ايري ڇو بهتر آهي؟

هڪ اسٽرنگ جاوا ۾ ناقابل تبديلي آهي ۽ اسٽرنگ پول ۾ ذخيرو ٿيل آهي. هڪ دفعو اهو ٺهيل آهي، اهو تلاء ۾ رهي ٿو جيستائين اهو ڪچرو گڏ نه ڪيو وڃي، تنهنڪري جڏهن اسان سوچيو ته اسان پاسورڊ سان ڪيو ويو آهي، اهو ڪجهه دير تائين ياداشت ۾ موجود رهي ٿو ۽ ان کان بچڻ جو ڪو طريقو ناهي. اهو هڪ سيڪيورٽي خطرو آهي ڇاڪاڻ ته هر ڪنهن کي ميموري ڊمپ تائين رسائي سان صاف متن ۾ پاسورڊ ڳولڻ جي قابل هوندو. جيڪڏهن اسان پاسورڊ کي ذخيرو ڪرڻ لاء هڪ ڪردار صف استعمال ڪندا آهيون، اسان ان کي ختم ڪرڻ کان پوء صاف ڪري سگهون ٿا. هن طريقي سان اسان ڪنٽرول ڪري سگهون ٿا ته اهو ميموري ۾ ڪيترو وقت رهي ٿو، هڪ تار ۾ موجود حفاظتي خطرن کان بچڻ.

17. توهان جاوا ۾ هڪجهڙائي لاءِ ٻه اسٽرنگ ڪيئن چيڪ ڪندا؟

چيڪ ڪرڻ جا ٻه طريقا آهن ته ڇا ٻه تار برابر آهن - استعمال ڪندي " ==" آپريٽر، يا استعمال ڪندي equals. جڏهن اسان " ==" آپريٽر استعمال ڪندا آهيون، اهو هڪ حوالن جي طور تي اسٽرنگ جي قيمت کي جانچيندو آهي، پر پروگرامنگ ۾ اڪثر وقت اسان صرف قيمت لاء اسٽرنگ برابري کي چيڪ ڪندا آهيون. تنهن ڪري، اسان کي استعمال ڪرڻ گهرجي برابري جو طريقو برابري لاءِ ٻن تارن کي جانچڻ لاءِ. اتي پڻ ھڪڙو طريقو آھي equalsIgnoreCaseجيڪو اسان استعمال ڪري سگھون ٿا ڪيس کي نظر انداز ڪرڻ لاء.
String s1 = "abc";
String s2 = "abc";
String s3= new String("abc");
System.out.println("s1 == s2 ? "+(s1==s2)); //true
System.out.println("s1 == s3 ? "+(s1==s3)); //false
System.out.println("s1 equals s3 ? "+(s1.equals(s3))); //true

18. اسٽرنگ پول ڇا آهي؟

جيئن ته نالو مشورو ڏئي ٿو، هڪ اسٽرنگ پول تارن جو هڪ مجموعو آهي جيڪو جاوا هيپ ۾ ذخيرو ٿيل آهي. اسان ڄاڻون ٿا ته Stringهي جاوا ۾ هڪ خاص ڪلاس آهي ۽ اسان نئين آپريٽر کي استعمال ڪندي هن ڪلاس جون شيون ٺاهي سگهون ٿا جيئن اسان ڊبل ڪوٽس ۾ اسٽرنگ جي قيمت مهيا ڪري شيون ٺاهي سگهون ٿا. هيٺ ڏنل ڊراگرام وضاحت ڪري ٿو ته ڪيئن اسٽرنگ پول جاوا هيپ ۾ مختص ڪيو ويو آهي ۽ ڇا ٿيندو جڏهن اسان اسٽرنگ ٺاهڻ لاء مختلف طريقا استعمال ڪندا آهيون. جاوا اسٽرنگ.  انٽرويو سوال ۽ جواب، حصو 2 - 2اسٽرنگ پولنگ صرف جاوا جي تارن جي بي ترتيبي ۽ اسٽرنگ انٽرننگ جي خيال کي لاڳو ڪرڻ جي ڪري ممڪن آهي. هڪ اسٽرنگ پول پڻ Flyweight نموني جو هڪ مثال آهي. اسٽرنگ پول تمام گھڻي ياداشت کي بچائڻ ۾ مدد ڪري ٿو، پر ٻئي طرف، قطار ٺاھڻ ۾ وڌيڪ وقت لڳندو آھي. جڏهن اسان هڪ اسٽرنگ ٺاهڻ لاءِ ڊبل اقتباس استعمال ڪندا آهيون، اهو سڀ کان پهريان پول ۾ ساڳئي قدر سان هڪ اسٽرنگ ڳولي ٿو، جيڪڏهن ملي ٿو ته صرف هڪ حوالو ڏئي ٿو، ٻي صورت ۾ پول ۾ هڪ نئين اسٽرنگ ٺاهي ٿي ۽ پوء هڪ حوالو واپس ڪري ٿو. بهرحال، جڏهن اسان نئون آپريٽر استعمال ڪريون ٿا، اسان ڪلاس کي مجبور ڪريون ٿا Stringته هڪ نئون اسٽرنگ آبجیکٹ ٺاهي، ۽ پوءِ اسان اهو طريقو استعمال ڪري سگهون ٿا intern()ته پول ۾ اسٽرنگ وجھي، يا پول مان حوالو حاصل ڪري Stringساڳي قدر سان ٻي شئي ڏانهن. هيٺ هڪ مثال آهي ڏيکاريو ته ڪيئن اسٽرنگ پول ڪم ڪندو آهي.
public class StringPool {
    public static void main(String[] args) {
        String s1 = "Cat";
        String s2 = "Cat";
        String s3 = new String("Cat");

        System.out.println("s1 == s2 :"+(s1==s2));
        System.out.println("s1 == s3 :"+(s1==s3));
    }
}
پروگرام ھيٺ ڏنل ٻاھر ڪڍندو:
s1 == s2 :true
s1 == s3 :false

19. intern() طريقو ڇا ڪندو آهي؟

جڏهن طريقو intern()سڏيو ويندو آهي، جيڪڏهن اسٽرنگ پول ۾ اڳ ۾ ئي هڪ اسٽرنگ آهي جيڪو اسان جي اعتراض جي برابر آهي، جيئن طريقي سان تصديق ٿيل آهي equals(Object)، پوء پول مان اسٽرنگ جو حوالو واپس ڪيو ويندو. ٻي صورت ۾، اسٽرنگ اعتراض پول ۾ شامل ڪيو ويو آهي ۽ انهي اعتراض جو حوالو ڏنو ويو آهي. اهو طريقو هميشه هڪ اسٽرنگ کي موٽائي ٿو جيڪو موجوده اسٽرنگ وانگر ساڳيو قدر آهي، پر اهو ضمانت ڏئي ٿو ته اهو منفرد اسٽرنگ جي تلاء مان هڪ تار هوندو. هيٺ ڏنل هڪ مثال آهي ته طريقو ڪيئن ڪم ڪري ٿو intern():
public class StringPool {
    public static void main(String[] args) {
        String a = "string a";
        String b = new String("string a");
        String c = b.intern();

        System.out.println(a == b);
        System.out.println(b == c);
        System.out.println(a == c);
    }
}
Программа выведет следующее:false
false
true

20. ڇا جاوا ۾ اسٽرنگ ٿريڊ محفوظ آھن؟

اسٽرنگ ناقابل بدلجندڙ آھن، تنھنڪري اسان پروگرام ۾ انھن جي قيمت تبديل نٿا ڪري سگھون. تنهن ڪري اهي ڌاڳو محفوظ آهن ۽ محفوظ طور تي گھڻن موضوعن واري ماحول ۾ استعمال ڪري سگھجن ٿا.

21. جاوا ۾ HashMap ۾ String هڪ مشهور ڪيئي ڇو آهي؟

جيئن ته اسٽرنگ ناقابل تبديل آهن، انهن جو هيش ڪوڊ ٺاھڻ جي وقت تي محفوظ ٿيل آهي ۽ ٻيهر حساب جي ضرورت ناهي. هي تارن کي ڪنجي لاءِ هڪ بهترين اميدوار بڻائي ٿو Map۽ انهن کي ٻين اهم شين جي ڀيٽ ۾ تيزيءَ سان پروسيس ڪيو وڃي ٿو HashMap. اهو ئي سبب آهي ته تارن کي اڪثر ڪري چاٻين طور استعمال ڪيو ويندو آهي HashMap. مون کي اميد آهي ته هن مضمون ۾ درج ڪيل سوال توهان جي انٽرويو ۾ توهان جي مدد ڪندا، مهرباني ڪري مون کي خبر ڏيو ته جيڪڏهن مون کي ڪجهه ياد ڪيو. اصل مضمون جي لنڪ ليکڪ: پنڪج ڪمار
تبصرا
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION