JavaRush /Blog Jawa /Random-JV /String Jawa. Pitakonan lan jawaban wawancara, part 2
Andrey
tingkat

String Jawa. Pitakonan lan jawaban wawancara, part 2

Diterbitake ing grup
Sayange, artikel kasebut ora cocog karo siji fragmen; Aku kudu dibagi dadi rong bagean. Waca wiwitan kene String Jawa.  Pitakonan lan jawaban wawancara, bagean 2 - 1

12. Tulis fungsi kanggo nemokake palindrom paling dawa ing senar diwenehi

Senar bisa ngemot senar palindromik, lan nemokake palindrom paling dawa yaiku masalah pemrograman. Titik kunci ing kene yaiku saka tengah palindrome, yen kita pindhah nengen lan ngiwa kanthi 1 karakter, mesthine bakal dadi karakter sing padha. Contone, 12321, tengah 3, lan yen kita terus pindhah saka posisi saiki ing loro arah, kita bakal entuk 2 lan banjur 1. Kita nggunakake logika padha ing program Jawa kanggo nemokake palindrome paling dawa. Nanging, yen dawa palindrome malah, dawa tengah uga malah, supaya kita kudu nggawe manawa iki uga kasedhiya ing program kita, contone, 12333321, tengah 33, lan yen kita terus obah. ing loro arah, kita bakal entuk 3, 2 lan 1. Ing program kita, kita liwat senar asil karo tengah ing Panggonan pisanan lan mriksa karakter kiwa lan tengen. Kita uga duwe rong variabel global kanggo nyimpen posisi awal palindrome. Kita uga kudu mriksa yen ana palindrome maneh sing wis ditemokake, amarga kita bisa nemokake pirang-pirang palindrom ing senar sing diwenehake. Ing ngisor iki minangka conto program sing bisa digunakake ing kabeh kasus. Kita bisa nambah kode ing ndhuwur kanthi mindhah loop nalika menyang cara sing kapisah, nanging aku bakal ninggalake bagean kasebut kanggo sampeyan. Mangga kabari kula yen sampeyan duwe implementasine luwih apik utawa yen program gagal ing sawetara cara.
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);
    }
}
Program bakal output ing ngisor iki:
1
12321
12321
12333321
454454

13. Apa sing beda antarane String, StringBuffer lan StringBuilder

Senar ora bisa diganti lan dirampungake ing Jawa, mula kabeh manipulasi senar bakal tansah nggawe senar anyar. Manipulasi string intensif sumber daya, mula Jawa nyedhiyakake rong kelas migunani kanggo manipulasi string - StringBufferlan StringBuilder. StringBufferlan StringBuilderkelas mutable. Operasi kanthi StringBufferaman lan disinkronake, nanging cara StringBuilderora aman. Dadi nalika sawetara Utas digunakake ing senar padha kita kudu nggunakake StringBuffer, nanging ing lingkungan Utas siji kita kudu nggunakake StringBuilder. StringBuilderluwih produktif tinimbang StringBufferamarga ora dibebani karo sinkronisasi.

14. Kenging punapa senar menika boten saged dipunowahi lan dipunrampungaken wonten ing basa Jawi?

Ana sawetara kaluwihan kanggo immutability string:
  1. String pooling mung bisa amarga senar ora bisa diganti ing Jawa, saéngga mesin virtual ngirit akeh ruang tumpukan amarga variabel senar sing beda nuduhake variabel sing padha ing blumbang. Yen senar ora bisa diowahi, mula interning string ora bisa ditindakake, amarga yen ana variabel sing ngganti nilai, variabel liyane sing ngrujuk string kasebut uga bakal kena pengaruh.

  2. Yen senar iku mutable, banjur dadi resiko keamanan serius kanggo aplikasi. Contone, jeneng pangguna lan tembung sandhi database diterusake minangka senar kanggo entuk sambungan menyang database lan ing program soket, rincian host lan port diterusake minangka senar. Wiwit senar ora bisa diganti, regane ora bisa diganti, yen ora, peretas bisa ngganti nilai link kasebut lan nyebabake masalah keamanan aplikasi kasebut.

  3. Wiwit senar ora bisa diganti, iku aman kanggo benang lan siji conto senar bisa dienggo bareng ing antarane benang sing beda-beda. Iki ngindari sinkronisasi kanggo safety thread, strings rampung aman thread.

  4. String digunakake ing Jawa classloaderlan immutability njamin yen kelas dimuat kanthi bener nggunakake Classloader. Contone, mikir babagan conto kelas nalika sampeyan nyoba mbukak java.sql.Connectionkelas, nanging nilai referensi diganti dadi myhacked.Connectionkelas sing bisa nindakake perkara sing ora dikarepake ing database sampeyan.

  5. Wiwit senar iku immutable, iku hashcodecached nalika nggawe lan ora perlu kanggo ngetung maneh. Iki ndadekake senar kasebut minangka calon sing apik kanggo key in Maplan prosese bakal luwih cepet tinimbang tombol liyane HashMap. Iki minangka alesan kenapa senar minangka obyek sing paling umum digunakake minangka kunci HashMap.

15. Kepiye carane mbagi senar dadi bagean?

Kita bisa nggunakake cara split(String regex)kanggo pamisah string menyang Uploaded saka strings nggunakake expression biasa minangka delimiter.
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));
    }
}
Cara kasebut split(String regex, int numOfStrings)minangka cara sing kakehan kanggo misahake senar dadi sawetara garis sing ditemtokake. Kita bisa nggunakake backslash kanggo nggunakake ekspresi reguler karakter khusus minangka karakter biasa. Program kasebut bakal ngasilake ing ngisor iki:
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. Yagene array senar luwih disenengi tinimbang senar kanggo nyimpen sandhi?

Senar ora bisa diganti ing Jawa lan disimpen ing blumbang senar. Sawise digawe, iku tetep ing blumbang nganti uwuh diklumpukake, supaya nalika kita mikir wis rampung karo sandi, iku tetep kasedhiya ing memori kanggo sawetara wektu lan ora ana cara kanggo nyegah iki. Iki minangka risiko keamanan amarga sapa wae sing duwe akses menyang mbucal memori bakal bisa nemokake sandhi ing teks sing cetha. Yen kita nggunakake array karakter kanggo nyimpen sandi, kita bisa mbusak sandi sawise kita wis rampung karo. Kanthi cara iki kita bisa ngontrol suwene tetep ing memori, ngindhari risiko keamanan sing ana ing senar.

17. Kepriye carane nyemak senar loro ing basa Jawa?

Ana rong cara kanggo mriksa yen rong senar padha karo - nggunakake ==operator "", utawa nggunakake equals. Nalika kita nggunakake ==operator "", mriksa Nilai saka senar minangka referensi, nanging ing program paling wektu kita mriksa podo senar mung kanggo Nilai. Mulane, kita kudu nggunakake cara padha kanggo nyoba loro strings kanggo kesetaraan. Ana uga cara equalsIgnoreCasesing bisa digunakake kanggo nglirwakake kasus.
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. Apa iku blumbang string?

Kaya jeneng kasebut, blumbang senar yaiku kumpulan senar sing disimpen ing tumpukan Jawa. Kita ngerti yen Stringiki kelas khusus ing Jawa lan kita bisa nggawe obyek saka kelas iki nggunakake operator anyar kaya kita bisa nggawe obyek kanthi menehi nilai senar ing kuotasi pindho. Diagram ing ngisor iki nerangake carane blumbang senar diparengake ing tumpukan Jawa lan apa mengkono nalika kita nggunakake macem-macem cara kanggo nggawe strings. String Jawa.  Pitakonan lan jawaban wawancara, bagean 2 - 2String pooling mung bisa ditindakake amarga immutability strings Jawa lan implementasine gagasan string interning. Kolam senar uga minangka conto pola Flyweight. Kolam renang string mbantu nyimpen akeh memori, nanging ing sisih liya, nggawe baris mbutuhake wektu luwih akeh. Nalika kita nggunakake kuotasi pindho kanggo nggawe senar, pisanan katon kanggo senar ing blumbang karo Nilai padha, yen ketemu banjur mung bali referensi, digunakake senar anyar digawe ing blumbang lan banjur bali referensi. Nanging, nalika kita nggunakake operator anyar, kita meksa kelas Stringkanggo nggawe obyek senar anyar, lan banjur kita bisa nggunakake cara intern()kanggo sijine senar menyang blumbang, utawa njaluk referensi saka blumbang kanggo obyek liyane Stringkaro Nilai padha. Ing ngisor iki conto sing nuduhake carane blumbang senar dianggo.
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));
    }
}
Program bakal output ing ngisor iki:
s1 == s2 :true
s1 == s3 :false

19. Apa cara intern ()?

Nalika cara kasebut intern()diarani, yen blumbang senar wis ngemot senar sing padha karo obyek kita, kaya sing diverifikasi dening metode kasebut equals(Object), banjur referensi kanggo senar saka blumbang kasebut bali. Yen ora, obyek senar ditambahake menyang blumbang lan referensi kanggo obyek kasebut bali. Cara iki tansah ngasilake senar sing nduweni nilai sing padha karo senar saiki, nanging njamin yen bakal dadi senar saka blumbang senar unik. Ing ngisor iki conto cara kerjane 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. Apa aman benang ing Jawa?

String ora bisa diganti, mula kita ora bisa ngganti nilai ing program kasebut. Mulane padha aman thread lan bisa digunakake kanthi aman ing lingkungan multi-Utas.

21. Kenapa String dadi kunci populer ing HashMap ing Jawa?

Wiwit strings ora bisa diganti, kode hash kasebut di-cache nalika digawe lan ora mbutuhake recalculation. Iki ndadekake strings minangka calon sing apik kanggo kunci Maplan diproses luwih cepet tinimbang obyek kunci liyane HashMap. Mulane senar umume digunakake minangka kunci HashMap. Muga-muga pitakonan sing kadhaptar ing artikel iki bisa mbantu sampeyan ing wawancara, muga-muga aku ngerti yen aku ora kejawab. Link menyang artikel asli Pengarang: Pankaj Kumar
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION