JavaRush /Blog Jawa /Random-JV /Masalah Jawa karo trik: Halo, wawancara!

Masalah Jawa karo trik: Halo, wawancara!

Diterbitake ing grup
Kanggo siswa JavaRush , tantangan pemrograman, Java, lan validator minangka kanca sing paling apik. Nanging, ana wektu kanggo saben pangembang Padawan nalika dheweke kudu miwiti metu saka trek, nggawe proyek mini kanggo awake dhewe lan nyiapake wawancara. Ing wawancara, mesthine sampeyan kudu nemoni masalah Jawa praktis sing padha karo kursus kasebut. Umume kasus iki bener, nanging sawetara perusahaan seneng takon pitakonan trick utawa sing ora biasa. Supaya ora bingung nalika wawancara sing stres, gunane nyoba ngrampungake masalah Jawa kasebut dhewe, ing omah.
Masalah Jawa karo trik: Halo, wawancara!  - 1
Ing artikel iki kita bakal katon ing setengah rolas saka tugas angel iki. Disaranake sampeyan maca kahanan kasebut lan nyoba ngatasi dhewe. Lan siji maneh: aja lali ngrampungake masalah Jawa saka kursus saben dina!

Masalah Jawa - 1: Nggawe daur ulang tanpa wates saka awal

Diwenehi blok kode. Rampungake supaya daur ulang dadi tanpa wates.
class ToInfinity {
    public static void main(String[] args) {

//впишите code сюда

        for (int i = start; i <= start + 1; i++) {
             /* тут должен быть бесконечный цикл, менять ничего нельзя*/
        }
    }
}
"Ora ana sing rumit," ujare. Paling kamungkinan, sampeyan wis ketemu dhewe ing kahanan iki luwih saka sapisan: nalika ngrampungake masalah Jawa, sampeyan nggawe loop tanpa wates lan mikir carane njaluk nyisihaken saka iku. Kosok baline. Trik kasebut yaiku siklus dhewe lan kondisi kanggo metu ora bisa diganti. Mung ana rong iterasi. Nanging, ana cukup kanggo nggawe loop tanpa wates. Kayane mung bisa digunakake kanggo rong iterasi, nanging bisa digawe tanpa wates kanthi nggunakake overflow. Apa sampeyan wis ngira carane?

Solusi

Amarga kebanjiran. Integer.MAX_VALUEpunika nilai maksimum sing intbisa disimpen ing Jawa. Yen sampeyan tekan Integer.MAX_VALUElan nambah nilai iki, sampeyan muter mudhun menyang Integer.MIN_VALUE, yaiku, menyang nilai minimal Integer. Mangkono, kanggo ngatasi masalah Jawa iki, kita mung kudu nemtokake startnilai kanggo variabel sing 1 kurang saka nilai maksimum kanggo jinis data int. Kode tugas ing Jawa:
class ToInfinity {
    public static void main(String[] args) {
        int start = Integer.MAX_VALUE - 1;
        for (int i = start; i <= start + 1; i++) {
            //бесконечный цикл
            System.out.println(i); //убеждаемся в бесконечности цикла
        }
    }
}
Apa sing kedadeyan? Kita miwiti karo wiwitan = 2147483645 (Integer.MAX_VALUE-1), ing pengulangan sabanjure nilai dadi 2147483645, banjur 2147483646, banjur -2147483648, -2147483647 ... lan sateruse.

Tugas Jawa-2. Gawe komentar sing bakal dieksekusi

Inggih, kene kita! Saka ceramah sing sepisanan, kita krungu manawa komentar ora ditindakake. Mulane padha komentar. Kita mikir sing solusi kanggo masalah iki ora tansah ketok kanggo programmer Jawa, malah siji experienced. Nanging, ana cara sing angel kanggo meksa mesin Java supaya "sah" mbukak komentar kanggo eksekusi. Apa sampeyan rumangsa angin saka ngendi? Coba tebak!

Solusi

Kode kanggo ngrampungake masalah ing Jawa:
public class ExecutableComment {
    public static void main(String[] args) {
        // комментарий ниже будет выполнен!
        // \u000d System.out.println("выполняемый комментарий");
    }
}
Yen kita ngetik kode kanggo tugas iki ing Jawa ing IDE, iki kita entuk:
выполняемый комментарий
Alesane yaiku kompiler Jawa maca karakter Unicod \u000dminangka baris anyar, lan maca kode kita kaya ing ngisor iki: Kompiler nyimpulake kode kanggo ngrampungake masalah ing Jawa:
public class ExecutableComment {
    public static void main(String[] args) {
        // the line below this gives an output
        // \u000d
        System.out.println("comment executed");
    }
}

Tugas Jawa - 3: Nggawe loop sing dijenengi

Wakil liyane saka seri "masalah pemrograman praktis, Jawa ing vakum bola." Ing pangertèn sing ora cetha apa iki perlu, iku ora kamungkinan sing siklus ngrasa gelo dening kasunyatan sing impersonal. Inggih, oke, ana liyane sing penting: basa ngidini sampeyan menehi jeneng siklus.

Solusi

Cathetan: kanggo sawetara, "jeneng" kasebut dikenal minangka "tag", sing ora dianjurake kanggo digunakake ing praktik. Kode kanggo ngrampungake masalah ing Jawa, nuduhake loop sing dijenengi
public class NamedLoop {
    public static void main(String[] args) {
        loop1:
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 5; j++) {
                if (i == 3)
                    break loop1;
                System.out.println("i = " + i + " j = " + j);
            }
        }
    }
}
Iki minangka output yen sampeyan mbukak program:
i = 0 j = 0
i = 0 j = 1
i = 0 j = 2
i = 0 j = 3
i = 0 j = 4
i = 1 j = 0
i = 1 j = 1
i = 1 j = 2
i = 1 j = 3
i = 1 j = 4
i = 2 j = 0
i = 2 j = 1
i = 2 j = 2
i = 2 j = 3
i = 2 j = 4
Ing kene sampeyan uga bisa nggunakake terus menyang wiwitan daur ulang sing dijenengi. Lan yen perlu, sampeyan bisa nggunakake break(utawa continue) ing nested if-elsekaro for-loop kanggo break munggah sawetara puteran nggunakake if-else. Iki bakal mbantu supaya ora nyetel akeh panji lan nyoba if-elsekanggo nemtokake manawa bakal nerusake utawa metu saka daur ulang.

Masalah Jawa - 4. Babagan mung duplikat ing Uploaded wilangan bulat

Diwenehi larik (utawa ArrayList, sing disenengi) saka ongko ngemot unsur Integersaka 1 kanggo 100. Uploaded iki wis siji lan mung siji unsur duplikat. Carane nemokake iku? Tugas kasebut luwih akrab karo programmer Java tinimbang telung sadurunge. Amarga iku dudu babagan ngerti subtleties basa, sing meh ora tau digunakake, nanging babagan logika. Impuls unbridled pisanan kanggo ngatasi dening brute force ilang cukup cepet nalika sirah nguripake utawa ana sikap "Aku programmer, aku pinter." Siji-sijine sing ala yaiku sajrone wawancara, sajrone stres, iki bisa uga ora kedadeyan. Dadi mikir saiki sadurunge ndeleng solusi!

Algoritma solusi kaya ing ngisor iki:

Ngetung jumlah kabeh nomer saka 1 kanggo 100. Kita mikir sampeyan ngerti carane nindakake iki (contone, nggunakake metode Gauss misuwur) Saiki ngetung jumlah saka unsur Uploaded utawa ArrayList’а. Lan ... nyuda jumlah pisanan saka nomer loro. Bingo! Nomer sing diasilake yaiku nilai unsur duplikat. kode solusi masalah Jawa kanggo ArrayList.
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class FindDuplicate {
    private static void findDuplicate(List<Integer> elements) {
//находим сумму всех уникальных элементов списка
        int distinctSum = elements.stream().distinct().mapToInt(e -> e).sum();
//находим сумму всех элементов списка
        int totalSum = elements.stream().mapToInt(e -> e).sum();
        System.out.println("Элемент, который повторяется : " + (totalSum - distinctSum));
    }

    public static void main(String[] args) {
//создаем список последовательных элементов на промежутке [1..101).
        List <Integer> elements = IntStream.range(1, 101).boxed().collect(Collectors.toList());
//устанавливаем элементу с индексом 53 meaning 23
        elements.set(53, 23);
        findDuplicate(elements);
    }
}
Solusi liyane
import java.util.List;
import java.util.ArrayList;

public class Duplicate {

    public int findDuplicateNumber(List<Integer> numbers) {

        int highestNumber = numbers.size() - 1;
        int total = getSum(numbers);
        int duplicate = total - (highestNumber * (highestNumber + 1) / 2);
        return duplicate;
    }

    public int getSum(List<Integer> numbers) {

        int sum = 0;
        for (int num : numbers) {
            sum = sum + num;
        }
        return sum;
    }

    public static void main(String a[]) {
        List <Integer> numbers = new ArrayList <Integer>();
        for (int i = 1; i < 100; i++) {
            numbers.add(i);
        }
        //добавляем дубликат в список
        numbers.add(25);
        Duplicate dn = new Duplicate();
        System.out.println("Элемент, который повторяется: " + dn.findDuplicateNumber(numbers));
    }
}

Masalah Jawa - 5. Babagan duplikat non-unik ing array integer

Yen masalah sadurunge katon gampang banget kanggo sampeyan, banjur coba ngatasi masalah ing ngisor iki: diwenehi lembar wilangan bulat saka 1 nganti 100. Isine duplikat (luwih saka siji). Kepiye carane nemokake unsur sing kedadeyan luwih saka sepisan (goleki unsur kasebut dhewe lan nuduhake kaping pirang-pirang kedadeyan kasebut)?

Solusi

Solusi sing paling logis ing kene yaiku nggunakake struktur kayata HashMap, amarga nyimpen data ing pasangan kunci-nilai. Kode kanggo ngrampungake masalah Jawa:
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class SomeDuplicates {
    private static void findDuplicates(List<Integer> elements) {
        HashMap <Integer, Integer > duplicates = new HashMap < >();
//заполняем Map duplicates значениями по принципу:
// ключ – meaning element, meaning – сколько раз он встречается
        elements.forEach(e -> duplicates.put(e, duplicates.get(e) == null ? 1 : duplicates.get(e) + 1));
//из duplicates убираем все элементы, которые встретorсь не более 1 раза,
//и сохраняем //результат в список (для удобства обработки на следующем шаге)
        List <Map.Entry <Integer, Integer> >
        result = duplicates.entrySet().stream().filter(d -> d.getValue() > 1).collect(Collectors.toList());
//выводим результат для всех элементов в списке result
        result.forEach(e -> System.out.println(String.format("Элемент %d  встречается %d раз", e.getKey(), e.getValue())));
    }

    public static void main(String[] args) {
        List <Integer> elements = IntStream.range(1, 101).boxed().collect(Collectors.toList());
        elements.set(97, 23);
        elements.set(27, 51);
        elements.set(99, 23);
        findDuplicates(elements);
    }
}

Kesimpulan

Masalah Jawa praktis beda banget, lan sampeyan ora ngerti apa jenis teka-teki sing ora dingerteni sing bakal diwawancarai. Nanging, majikan sing nyukupi ngerti manawa luwih penting tinimbang kemampuan kanggo ngatasi masalah Jawa sing rumit yaiku kemampuan sampeyan kanggo ngatasi masalah praktis sing nyata , kayata sing bakal sampeyan temoni sajrone kerja. Supaya ngatasi wong-wong mau minangka akeh sabisa. Mulane JavaRush digawe. Bahan saka geeksforgeeks digunakake kanggo nyiapake artikel iki.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION