JavaRush /Blog Java /Random-MS /Coffee break #92. 20 Soalan Temuduga Java yang Lazim Dita...

Coffee break #92. 20 Soalan Temuduga Java yang Lazim Ditanya

Diterbitkan dalam kumpulan
Sumber: Dev.to Hello rakan pembangun, saya telah menyusun senarai soalan temu bual Java asas yang perlu diketahui oleh setiap pengekod.

1. Bagaimana untuk membalikkan rentetan dalam Java tanpa menggunakan kaedah reverse()?

Jawapan: Tiada kaedah reverse() standard dalam Java , walaupun kaedah reverse() wujud dalam beberapa perpustakaan seperti StringBuffer atau StringBuilder . Oleh itu, persoalan pembalikan tatasusunan sering timbul dalam temu bual. Di bawah ialah algoritma ringkas yang boleh digunakan untuk membalikkan tatasusunan.
public class StringReverse {

    public static void main(String[] args) {

        String str = "Flexiple";
        System.out.println(reverse(str));
    }

    public static String reverse(String in) {
        if (in == null)
            throw new IllegalArgumentException("Null is not valid");

        StringBuilder out = new StringBuilder();

        char[] chars = in.toCharArray();

        for (int i = chars.length - 1; i >= 0; i--)
            out.append(chars[i]);

        return out.toString();
    }
}

2. Tulis coretan kod untuk melaksanakan jujukan Fibonacci menggunakan rekursi

Jawapan: Coretan kod di bawah melaksanakan jujukan Fibonacci menggunakan rekursi. Soalan ini juga sangat biasa dalam temu bual Java.
public class FibonacciNumbers {
    public static int fibonacci(int n) {
        if (n <= 1)
            return n;
        return fibonacci(n - 1) + fibonacci(n - 2);
    }


    public static void main(String args[]) {
        int n = 10;
        System.out.println(fibonacci(n));
    }
}

3. Bagaimanakah anda mengalih keluar ruang daripada rentetan di Jawa?

Jawapan: Kaedah jalur() ialah kaedah rentetan yang mengalih keluar semua ruang hadapan dan belakang. Strip() menggunakan kaedah Character.isWhitespace() secara dalaman untuk menyemak ruang putih. Ia mengesan ruang menggunakan aksara Unicodes dan merupakan cara yang disyorkan untuk mengalih keluar ruang. Kaedah alternatif stripLeading() dan stripTrailing() juga boleh digunakan . Mereka akan membantu jika anda mahu mengalih keluar hanya ruang hadapan atau belakang masing-masing. Kod di bawah ialah contoh penggunaan kaedah strip() .
String s = "  flexiple ";

s = s.strip();

System.out.println(s);

4. Apakah yang menyebabkan senario kebuntuan? Tulis kod untuk membuat kebuntuan

Jawapan: Senario kebuntuan berlaku apabila dua utas memerlukan kunci yang sama untuk dilaksanakan. Senario ini berlaku apabila kedua-dua utas telah memperoleh satu kunci dan sedang menunggu untuk memperoleh satu lagi kunci. Walau bagaimanapun, memandangkan kedua-dua utas sedang menunggu satu sama lain untuk dilaksanakan, mereka menyekat satu sama lain, menyebabkan kebuntuan. Program berbilang benang mengalami kebuntuan kerana kata kunci yang disegerakkan digunakan untuk menjadikan benang kaedah selamat. Ini bermakna hanya satu utas boleh menyekat dan menggunakan kaedah yang disegerakkan. Utas lain mesti menunggu urutan semasa selesai. Kod di bawah mencipta dua utas yang buntu.
class Util
{
    static void sleep(long millis)
    {
        try
        {
            Thread.sleep(millis);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
    }
}
class Shared
{
    synchronized void test1(Shared s2)
    {
        System.out.println("test1-begin");
        Util.sleep(1000);

        s2.test2();
        System.out.println("test1-end");
    }

    synchronized void test2()
    {
        System.out.println("test2-begin");
        Util.sleep(1000);

        System.out.println("test2-end");
    }
}

class Thread1 extends Thread
{
    private Shared s1;
    private Shared s2;

    public Thread1(Shared s1, Shared s2)
    {
        this.s1 = s1;
        this.s2 = s2;
    }

    @Override
    public void run()
    {
        s1.test1(s2);
    }
}

class Thread2 extends Thread
{
    private Shared s1;
    private Shared s2;

    public Thread2(Shared s1, Shared s2)
    {
        this.s1 = s1;
        this.s2 = s2;
    }

    @Override
    public void run()
    {
        s2.test2(s1);
    }
}

public class Deadlock
{
    public static void main(String[] args)
    {
        Shared s1 = new Shared();

        Shared s2 = new Shared();

        Thread1 t1 = new Thread1(s1, s2);
        t1.start();

        Thread2 t2 = new Thread2(s1, s2);
        t2.start();

        Util.sleep(2000);
    }
}

5. Tulis Kod Java untuk Cetak Tarikh dalam Format Tertentu

Jawapan: Kelas SimpleDateFormat membantu menukar tarikh daripada satu format kepada format yang lain. Kaedah ini juga membolehkan pengguna menggunakan format rentetan tarikh dan menukarnya kepada format yang dikehendaki. Kod di bawah menukar tarikh kepada format standard: DD/MM/YYYY
import java.text.SimpleDateFormat;
import java.util.Date;
public class CurrentDateTimeExample2 {
public static void main(String[] args) {
    SimpleDateFormat formatter = new SimpleDateFormat("DD/MM/YYYY HH:mm:ss");
    Date date = new Date();
    System.out.println(formatter.format(date));
}
}
Coretan kod untuk menukar tarikh kepada MM/DD/YYYY:
import java.text.SimpleDateFormat;
import java.util.Date;
public class CurrentDateTimeExample2 {
public static void main(String[] args) {
    SimpleDateFormat formatter = new SimpleDateFormat("MM/DD/YYYY HH:mm:ss");
    Date date = new Date();
    System.out.println(formatter.format(date));
}
}

6. Bagaimana untuk mengisih HashMap mengikut nilainya?

Jawapan: HashMaps digunakan untuk melaksanakan antara muka peta. Mereka membenarkan pengguna menyimpan pasangan nilai kunci, tetapi kunci mestilah unik. HashMaps bukanlah koleksi yang dipesan dan menyusunnya tidak masuk akal, tetapi memandangkan menyusun peta hash boleh menjadi agak rumit, ia adalah soalan biasa dalam temu bual Java. Kod di bawah menunjukkan pelaksanaan HashMaps .
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class SortHashMap {

    public static void main(String[] args) {
        Map scores = new HashMap<>();

        scores.put("John", 6);
        scores.put("Carol", 8);
        scores.put("Martin", 9);
        scores.put("Mona", 7);
        scores.put("Eric", 5);

        System.out.println(scores);

        scores = sortByValue(scores);

        System.out.println(scores);

    }

    private static Map sortByValue(Map scores) {
        Map sorted = new LinkedHashMap<>();

        Set> entrySet = scores.entrySet();
        System.out.println(entrySet);

        List> entryList = new ArrayList<>(entrySet);
        System.out.println(entryList);

        entryList.sort((x, y) -> x.getValue().compareTo(y.getValue()));
        System.out.println(entryList);

        for (Entry e : entryList)
            sorted.put(e.getKey(), e.getValue());

        return sorted;
    }

}

7. Apakah yang dilakukan oleh kaedah forEach()? Terangkan dengan contoh

Jawapan: forEach() ialah kaedah yang digunakan untuk mengulangi objek dalam Java. Tetapi tidak seperti gelung lain, di sini pembilang gelung tidak diisytiharkan atau dimulakan, sebaliknya pembolehubah diluluskan sebagai lelaran. Oleh itu, forEach() biasanya digunakan dengan tatasusunan atau kelas koleksi. Sintaks:
for (type var : array)
{
    statements using var;
}
Contoh penggunaan forEach() :
class ExampleForEach
{
    public static void main(String[] arg)
    {
        {
            int[] scores = { 10, 13, 9, 11, 11};

            int highest_score = maximum(scores);
            System.out.println(highest_scores);
        }
    }
    public static int maximum(int[] numbers)
    {
        int max = numbers[0];

        // for each loop
        for (int n : numbers)
        {
            if (n > max)
            {
                max = n;
            }
        }
    return max;
    }
}

8. Apakah antara muka berfungsi dan bagaimana ia dicipta?

Jawapan: Antara muka yang mengandungi hanya satu kaedah abstrak dipanggil antara muka berfungsi. Selepas itu, antara muka berfungsi hanya boleh mempunyai satu fungsi, namun ia boleh mengandungi berbilang kaedah lalai. Dalam Java 8, ungkapan lambda boleh digunakan untuk membuat contoh antara muka berfungsi, menjadikan perkara lebih mudah. Contoh antara muka berfungsi: ActionListener , Comparable . Berikut ialah kod yang digunakan untuk menentukan antara muka berfungsi.
@FunctionalInterface
interface Foo {
    void test();
}

9. Terangkan Overloading dengan contoh

Jawapan: Overloading ialah proses menyelesaikan berbilang kaedah dengan nama yang sama tetapi berbeza bergantung pada tandatangan, jenis data atau bilangan parameternya. Lebihan beban membolehkan pengguna menggunakan semula satu kaedah dan bukannya mencipta dan mengingati pelbagai kaedah. Ringkasnya, beban berlebihan berkaitan dengan polimorfisme masa kompilasi. Contoh kod lebihan kaedah:
public class Sum {

    public int sum(int x, int y)
    {
        return (x + y);
    }

    public int sum(int x, int y, int z)
    {
        return (x + y + z);
    }

    public double sum(double x, double y)
    {
        return (x + y);
    }

    public static void main(String args[])
    {
        Sum s = new Sum();
        System.out.println(s.sum(10, 20));
        System.out.println(s.sum(10, 20, 30));
        System.out.println(s.sum(10.5, 20.5));
    }
}

10. Terangkan Overriding dengan contoh

Jawapan: Overriding ialah ciri dalam Java yang membenarkan subkelas atau kelas anak menyediakan pelaksanaan berasingan untuk kaedah sedia ada dalam kelas induk. Apabila kaedah dalam subkelas mempunyai nama, parameter dan jenis pulangan yang sama seperti kelas induk, kaedah tersebut mengatasi kaedah dalam kelas induk. Dan versi kaedah yang dipanggil menentukan kaedah mana yang akan dilaksanakan. Mengatasi ialah cara untuk mencapai polimorfisme pada masa jalanan. Contoh kod mengatasi kaedah:
class Parent {
    void show()
    {
        System.out.println("Parent's show()");
    }
}

class Child extends Parent {
    @Override
    void show()
    {
        System.out.println("Child's show()");
    }
}

class Main {
    public static void main(String[] args)
    {
        Parent obj1 = new Parent();
        obj1.show();

        Parent obj2 = new Child();
        obj2.show();
    }
}

11. Apakah carian binari? Bagaimana ini dilaksanakan?

Jawapan: Algoritma carian binari digunakan untuk mencari nilai dalam tatasusunan yang diisih atau jenis koleksi. Kaedah carian ini jauh lebih pantas daripada kaedah carian linear. Carian binari memecahkan tatasusunan kepada set yang lebih kecil dan kemudian menggunakan peraturan untuk menyemak kunci input. Peringkat melaksanakan carian binari (binari):
  • Isih tatasusunan dalam tertib menaik.
  • Cari nilai purata tatasusunan dan bandingkan dengan kunci.
  • Jika kunci adalah sama dengan min, kembalikan benar.
  • Jika palsu, semak sama ada kunci lebih besar atau kurang daripada nilai purata.
  • Seterusnya, berdasarkan keputusan, semak kunci di bahagian atas atau bawah, masing-masing.
  • Lelaran dan bandingkan setiap nilai dengan kunci.
Coretan kod yang melaksanakan carian binari:
import java.util.Scanner;

public class BinarySearch {

    public static void main(String[] args) {

        Scanner commandReader = new Scanner(System.in);
        System.out.println("Enter total number of elements : ");
        int length = commandReader.nextInt();
        int[] input = new int[length];

        System.out.printf("Enter %d integers %n", length);
        for (int i = 0; i < length; i++) {
            input[i] = commandReader.nextInt();
        }

        System.out.println("Please enter number to be searched in array
                                    (sorted order)");
        int key = commandReader.nextInt();

        int index = performBinarySearch(input, key);

        if (index == -1) {
            System.out.printf("Sorry, %d is not found in array %n", key);
        } else {
            System.out.printf("%d is found in array at index %d %n", key,
                                                         index);
        }

        commandReader.close();

    }


    public static int performBinarySearch(int[] input, int number) {
        int low = 0;
        int high = input.length - 1;

        while (high >= low) {
            int middle = (low + high) / 2;
            if (input[middle] == number) {
                return middle;
            } else if (input[middle] < number) {
                low = middle + 1;
            } else if (input[middle] > number) {
                high = middle - 1;
            }
        }
        return -1;
    }

}

12. Apakah kaedah terbaik untuk mengelakkan kebuntuan di Jawa?

Jawapan:
  • Kunci Bersarang: Punca utama kebuntuan adalah apabila kunci disalurkan kepada berbilang benang. Mengelakkan menyekat berbilang benang sekiranya benang dengan blok sudah wujud boleh membantu mengelakkan kebuntuan.
  • Menggunakan Thread.join() : Kebuntuan juga boleh berlaku apabila utas sedang menunggu sumber daripada utas lain. Walau bagaimanapun, dalam kes sedemikian, Thread.join() boleh digunakan dengan masa pelaksanaan maksimum.
  • Menggunakan penguncian hanya apabila perlu: Amalkan menggunakan kunci hanya pada elemen apabila perlu. Kunci yang tidak diperlukan adalah punca utama kebuntuan.

13. Tulis kod untuk melaksanakan caching LRU di Java

Jawapan: LRU adalah singkatan kepada Least Used Cache. Skim caching LRU digunakan untuk mengalih keluar cache yang terakhir digunakan. Proses ini berlaku apabila cache sedia ada penuh dan halaman baharu yang dirujuk tiada dalam cache sedia ada. Kod di bawah menunjukkan pelaksanaan:
import java.util.Deque;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Iterator;

public class LRUCache {

    private Deque doublyQueue;

    private HashSet hashSet;

    private final int CACHE_SIZE;

    LRUCache(int capacity) {
        doublyQueue = new LinkedList<>();
        hashSet = new HashSet<>();
        CACHE_SIZE = capacity;
    }

    public void refer(int page) {
        if (!hashSet.contains(page)) {
            if (doublyQueue.size() == CACHE_SIZE) {
                int last = doublyQueue.removeLast();
                hashSet.remove(last);
            }
        }
        else {/* The found page may not be always the last element, even if it's an
            intermediate element that needs to be removed and added to the start
            of the Queue */
            doublyQueue.remove(page);
        }
        doublyQueue.push(page);
        hashSet.add(page);
    }

    public void display() {
        Iterator itr = doublyQueue.iterator();
        while (itr.hasNext()) {
            System.out.print(itr.next() + " ");
        }
    }

    public static void main(String[] args) {
        LRUCache cache = new LRUCache(4);
        cache.refer(1);
        cache.refer(2);
        cache.refer(3);
        cache.refer(1);
        cache.refer(4);
        cache.refer(5);
        cache.refer(2);
        cache.refer(2);
        cache.refer(1);
        cache.display();
    }
}

14. Bagaimanakah tatasusunan diputarkan bergantung pada kedudukan K, contohnya k = 2?

Jawapan: Serpihan kod berputar (mengembalikan) tatasusunan bergantung pada kedudukan yang ditentukan. Walaupun ia kelihatan mudah, ia menguji pemahaman anda tentang gelung dan tatasusunan dan oleh itu merupakan soalan biasa dalam temu bual Java.
public static int[] rotateBruteForce(int[] nums, int k) {
 for (int i = 0; i < k; i++) {
 for (int j = nums.length - 1; j > 0; j--) {
 // move each number by 1 place
 int temp = nums[j];
 nums[j] = nums[j - 1];
 nums[j - 1] = temp;
 }
 System.out.println("Array rotation after "+(i+1)+" step");
 printArray(nums);
 System.out.println();
 }
 return nums;
 }

15. Apakah itu Baris di Jawa? Laksanakannya menggunakan tatasusunan.

Jawapan: Baris gilir ialah struktur linear yang menunjukkan susunan operasi dengan cara siapa cepat dia dapat. Java menyediakan pelaksanaan yang lebih mudah untuk jenis data abstrak seperti baris gilir, tindanan dan sebagainya. Walau bagaimanapun, melaksanakannya menggunakan tatasusunan ialah soalan yang menguji pemahaman anda tentang konsep tersebut. Ingat bahawa pelaksanaan tatasusunan baris gilir tidak dinamik.
package org.arpit.java2blog;

public class QueueUsingArrayMain {

    private int capacity;
    int queueArr[];
    int front;
    int rear;
    int currentSize = 0;

    public QueueUsingArrayMain(int sizeOfQueue) {
        this.capacity = sizeOfQueue;
        front = 0;
        rear = -1;
        queueArr = new int[this.capacity];
    }

16. Apakah HeapSort? Tulis kod untuk melaksanakannya

Jawapan: HeapSort ialah kaedah pengisihan berdasarkan struktur data timbunan binari. Timbunan binari ialah pokok binari di mana unsur disimpan sedemikian rupa sehingga nilai dalam nod induk sama ada lebih besar (timbunan maks) atau kurang (timbunan min) daripada nilai dalam nod anak. Kod untuk melaksanakan HeapSort kelihatan seperti ini:
public class HeapSort {
    public void sort(int arr[])
    {
        int n = arr.length;

        // Build heap (rearrange array)
        for (int i = n / 2 - 1; i >= 0; i--)
            heapify(arr, n, i);

        // One by one extract an element from heap
        for (int i = n - 1; i > 0; i--) {
            // Move current root to end
            int temp = arr[0];
            arr[0] = arr[i];
            arr[i] = temp;

            // call max heapify on the reduced heap
            heapify(arr, i, 0);
        }
    }

    // To heapify a subtree rooted with node i which is
    // an index in arr[]. n is size of heap
    void heapify(int arr[], int n, int i)
    {
        int largest = i; // Initialize largest as root
        int l = 2 * i + 1; // left = 2*i + 1
        int r = 2 * i + 2; // right = 2*i + 2

        // If left child is larger than root
        if (l < n && arr[l] > arr[largest])
            largest = l;

        // If right child is larger than largest so far
        if (r < n && arr[r] > arr[largest])
            largest = r;

        // If largest is not root
        if (largest != i) {
            int swap = arr[i];
            arr[i] = arr[largest];
            arr[largest] = swap;

            // Recursively heapify the affected sub-tree
            heapify(arr, n, largest);
        }
    }

    /* A utility function to print array of size n */
    static void printArray(int arr[])
    {
        int n = arr.length;
        for (int i = 0; i < n; ++i)
            System.out.print(arr[i] + " ");
        System.out.println();
    }

    // Driver code
    public static void main(String args[])
    {
        int arr[] = { 12, 11, 13, 5, 6, 7 };
        int n = arr.length;

        HeapSort ob = new HeapSort();
        ob.sort(arr);

        System.out.println("Sorted array is");
        printArray(arr);
    }
}

17. Apakah Memoisasi?

Jawapan: Memoisasi ialah pendekatan yang membantu menyelesaikan masalah yang disebabkan oleh pengaturcaraan dinamik. Proses ini memastikan bahawa kaedah yang diberikan tidak akan dilaksanakan lebih daripada sekali untuk data input yang sama. Nilai pulangan disimpan dalam jadual cincang atau peta cincang dan digunakan semula mengikut keperluan. Kod di bawah ialah contoh hafalan dalam jujukan Fibonacci.
import java.io.*;

class GFG
{

// Fibonacci Series
// using Recursion
static int fib(int n)
{

    // Base case
    if (n <= 1)
        return n;

    // recursive calls
    return fib(n - 1) +
        fib(n - 2);
}

// Driver Code
public static void main (String[] args)
{
    int n = 6;
    System.out.println(fib(n));
}
}

18. Tulis sekeping kod untuk melaksanakan pengisihan gelembung

Jawapan: Kod di bawah ialah penyelesaian untuk jenis gelembung, yang juga merupakan soalan biasa dalam temu bual Java.
public class BubbleSortExample {
    static void bubbleSort(int[] arr) {
        int n = arr.length;
        int temp = 0;
         for(int i=0; i < n; i++){
                 for(int j=1; j < (n-i); j++){
                          if(arr[j-1] > arr[j]){
                                 //swap elements
                                 temp = arr[j-1];
                                 arr[j-1] = arr[j];
                                 arr[j] = temp;
                         }
                 }
         }
    }
    public static void main(String[] args) {
                int arr[] ={3,60,35,2,45,320,5};
                System.out.println("Array Before Bubble Sort");
                for(int i=0; i < arr.length; i++){
                        System.out.print(arr[i] + " ");
                }
                System.out.println();
                bubbleSort(arr);//sorting array elements using bubble sort
                System.out.println("Array After Bubble Sort");
                for(int i=0; i < arr.length; i++){
                        System.out.print(arr[i] + " ");
                }

        }
}

19. Apakah struktur data percubaan di Jawa?

Jawapan: Trie ialah struktur data yang menyimpan data dalam struktur pepohon tersusun menggunakan kekunci storan. Kedudukan nod dalam pepohon menentukan kunci yang dikaitkan dengan nod, dan keturunan nod berkongsi awalan yang sama. Terima kasih kepada struktur ini, percubaan menawarkan prestasi yang lebih baik dan juga mendapatkan data dengan lebih cepat. Walau bagaimanapun, satu-satunya kelemahan untuk menggunakan kayu ialah ia memerlukan lebih banyak ruang penyimpanan.

20. Tulis coretan kod untuk menukar HashMap kepada ArrayList

Jawapan: Kod di bawah digunakan untuk menukar HashMap kepada ArrayList .
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
public class Java8MapToListExamples
{
    public static void main(String[] args)
    {
        //Creating a HashMap object

        HashMap studentPerformanceMap = new HashMap();

        //Adding elements to HashMap

        studentPerformanceMap.put("John Kevin", "Average");

        studentPerformanceMap.put("Rakesh Sharma", "Good");

        studentPerformanceMap.put("Prachi D", "Very Good");

        studentPerformanceMap.put("Ivan Jose", "Very Bad");

        studentPerformanceMap.put("Smith Jacob", "Very Good");

        studentPerformanceMap.put("Anjali N", "Bad");

        //Getting Set of keys

        Set keySet = studentPerformanceMap.keySet();

        //Creating an ArrayList of keys

        ArrayList listOfKeys = new ArrayList(keySet);

        System.out.println("ArrayList Of Keys :");

        for (String key : listOfKeys)
        {
            System.out.println(key);
        }

        System.out.println("--------------------------");

        //Getting Collection of values

        Collection values = studentPerformanceMap.values();

        //Creating an ArrayList of values

        ArrayList listOfValues = new ArrayList(values);

        System.out.println("ArrayList Of Values :");

        for (String value : listOfValues)
        {
            System.out.println(value);
        }

        System.out.println("--------------------------");

        //Getting the Set of entries

        Set> entrySet = studentPerformanceMap.entrySet();

        //Creating an ArrayList Of Entry objects

        ArrayList> listOfEntry = new ArrayList>(entrySet);

        System.out.println("ArrayList of Key-Values :");

        for (Entry entry : listOfEntry)
        {
            System.out.println(entry.getKey()+" : "+entry.getValue());
        }
    }
}
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION