Content

Die 50 wichtigsten Fragen für dein Java Vorstellungsgespräch

Wenn Sie ein Vorstellungsgespräch für eine Java-Programmierrolle führen, werden Ihre Programmierkenntnisse wahrscheinlich getestet. Unabhängig davon, ob Sie Anfänger in Java sind oder ein erfahrener Programmierer, bietet dieser Artikel Die 50 wichtigsten Java-Interviewfragen für Entwickler und Antworten, um Ihnen bei der Vorbereitung zu helfen.

1. Wie kehren Sie einen String in Java um? – Eine der 50 wichtigsten Java-Interviewfragen für Entwickler

Es gibt keine reverse()-Hilfsmethode in der String-Klasse. Sie können jedoch ein Zeichenarray aus dem String erstellen und es dann vom Ende zum Anfang iterieren. Sie können die Zeichen an einen StringBuilder anhängen und schließlich den umgekehrten String zurückgeben.

Der folgende Beispielcode zeigt eine Möglichkeit, einen String umzukehren:

public class StringPrograms {
    public static void main(String[] args) {
        String str = "123";
        System.out.println(reverse(str));
    }

    public static String reverse(String in) {
        if (in == null)
            throw new IllegalArgumentException("Null ist keine gültige Eingabe");

        StringBuilder out = new StringBuilder();

        char[] chars = in.toCharArray();

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

        return out.toString();
    }
}


Bonuspunkte für das Hinzufügen einer Nullprüfung in der Methode und die Verwendung von StringBuilder zum Anhängen der Zeichen. Beachten Sie, dass die Indizierung in Java bei 0 beginnt, sodass Sie in der for-Schleife bei chars.length – 1 beginnen müssen.

2. Wie tauschen Sie zwei Zahlen in Java ohne eine dritte Variable aus?

Das Tauschen von Zahlen ohne eine dritte Variable ist ein dreistufiger Prozess, der besser im Code visualisiert wird:

b = b + a; // jetzt ist b die Summe beider Zahlen
a = b - a; // b - a = (b + a) - a = b (a ist getauscht)
b = b - a; // (b + a) - b = a (b ist getauscht)


Der folgende Beispielcode zeigt eine Möglichkeit, die Zahlen-Tauschmethode zu implementieren:

public class SwapNumbers {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println("a ist " + a + " und b ist " + b);
        a = a + b;
        b = a - b;
        a = a - b;
        System.out.println("Nach dem Tauschen ist a " + a + " und b ist " + b);
    }
}


Der Ausdruck zeigt, dass die Integer-Werte getauscht wurden:

Ausgabe
a ist 10 und b ist 20
Nach dem Tauschen, a ist 20 und b ist 10

3. Schreiben Sie ein Java-Programm, um zu prüfen, ob ein Vokal in einem String vorhanden ist.

Der folgende Beispielcode zeigt, wie man einen regulären Ausdruck verwendet, um zu überprüfen, ob der String Vokale enthält:

public class StringContainsVowels {
    public static void main(String[] args) {
        System.out.println(stringContainsVowels("Hallo")); // wahr
        System.out.println(stringContainsVowels("TV")); // falsch
    }

    public static boolean stringContainsVowels(String input) {
        return input.toLowerCase().matches(".*[aeiou].*");
    }
}

4. Schreiben Sie ein Java-Programm, um zu überprüfen, ob die gegebene Zahl eine Primzahl ist.

Sie können ein Programm schreiben, um die gegebene Zahl n durch eine Zahl von 2 bis n/2 zu teilen und den Rest zu überprüfen. Wenn der Rest 0 ist, dann ist es keine Primzahl. Der folgende Beispielcode zeigt eine Möglichkeit, zu überprüfen, ob eine gegebene Zahl eine Primzahl ist:

public class PrimeNumberCheck {
    public static void main(String[] args) {
        System.out.println(isPrime(19)); // wahr
        System.out.println(isPrime(49)); // falsch
    }

    public static boolean isPrime(int n) {
        if (n == 0 || n == 1) {
            return false;
        }
        if (n == 2) {
            return true;
        }
        for (int i = 2; i <= n / 2; i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }
}


Obwohl dieses Programm funktioniert, ist es weder sehr speicher- noch zeiteffizient. Beachten Sie, dass, wenn es für eine gegebene Zahl N eine Primzahl M zwischen 2 und √N (Quadratwurzel von N) gibt, die N gleichmäßig teilt, dann ist N keine Primzahl.

5. Schreiben Sie ein Java-Programm, um eine Fibonacci-Sequenz mit Rekursion zu drucken. – Die 50 wichtigsten Java-Interviewfragen für Entwickler

Eine Fibonacci-Sequenz ist eine, in der jede Zahl die Summe der beiden vorherigen Zahlen ist. In diesem Beispiel beginnt die Sequenz mit 0 und 1. Der folgende Beispielcode zeigt, wie man eine for-Schleife verwendet, um eine Fibonacci-Sequenz zu drucken:

public class PrintFibonacci {
    public static void printFibonacciSequence(int count) {
        int a = 0;
        int b = 1;
        int c = 1;

        for (int i = 1; i <= count; i++) {
            System.out.print(a + ", ");
            a = b;
            b = c;
            c = a + b;
        }
    }

    public static void main(String[] args) {
        printFibonacciSequence(10);
    }
}


Ausgabe
0, 1, 1, 2, 3, 5, 8, 13, 21, 34,

Sie können auch Rekursion verwenden, um eine Fibonacci-Sequenz zu drucken, da die Fibonacci-Zahl durch Addieren der vorherigen beiden Zahlen in der Sequenz erzeugt wird:

public class PrintFibonacciRecursive {
    public static int fibonacci(int count) {
        if (count <= 1)
            return count;
        return fibonacci(count - 1) + fibonacci(count - 2);
    }

    public static void main(String args[]) {
        int seqLength = 10;
        System.out.print("Eine Fibonacci-Sequenz von " + seqLength + " Zahlen: ");
        for (int i = 0; i < seqLength; i++) {
            System.out.print(fibonacci(i) + " ");
        }
    }
}


Ausgabe
Eine Fibonacci-Sequenz von 10 Zahlen: 0 1 1 2 3 5 8 13 21 34

6. Wie überprüfen Sie, ob eine Liste von Ganzzahlen nur ungerade Zahlen in Java enthält? Definitiv eine der 50 wichtigsten Java-Interviewfragen für Entwickler

Sie können eine for-Schleife verwenden und überprüfen, ob jedes Element ungerade ist:

public static boolean onlyOddNumbers(List list) {
    for (int i : list) {
        if (i % 2 == 0)
            return false;
    }
    return true;
}


Wenn die Liste groß ist, können Sie einen parallelen Stream für eine schnellere Verarbeitung verwenden, wie im folgenden Beispielcode gezeigt:

public static boolean onlyOddNumbers(List list) {
    return list
            .parallelStream() // paralleler Stream für schnellere Verarbeitung
            .anyMatch(x -> x % 2 != 0); // Rückgabe, sobald ein Element der Bedingung entspricht
}


Um mehr über die Mathematik hinter der Bestimmung zu erfahren, ob eine Ganzzahl ungerade ist, siehe den Modulo-Operation-Artikel auf Wikipedia.

7. Wie überprüfen Sie, ob ein String in Java ein Palindrom ist?

Ein Palindrom-String ist der gleiche String rückwärts wie vorwärts. Um auf ein Palindrom zu überprüfen, können Sie den Eingabe-String umkehren und überprüfen, ob das Ergebnis mit dem Eingang übereinstimmt. Der folgende Beispielcode zeigt, wie man die String charAt(int index)-Methode verwendet, um auf Palindrom-Strings zu überprüfen:

boolean checkPalindromeString(String input) {
    boolean result = true;
    int length = input.length();
    for (int i = 0; i < length/2; i++) {
        if (input.charAt(i) != input.charAt(length - i - 1)) {
            result = false;
            break;
        }
    }
    return result;
}

8. Wie entfernen Sie Leerzeichen aus einem String in Java?

Der folgende Beispielcode zeigt eine Möglichkeit, Leerzeichen aus einem String mit der Character.isWhitespace()-Methode zu entfernen:

String removeWhiteSpaces(String input) {
    StringBuilder output = new StringBuilder();
    
    char[] charArray = input.toCharArray();
    
    for (char c : charArray) {
        if (!Character.isWhitespace(c))
            output.append(c);
    }
    
    return output.toString();
}

9. Wie entfernen Sie führende und abschließende Leerzeichen aus einem String in Java?

Die String-Klasse enthält zwei Methoden, um führende und abschließende Leerzeichen zu entfernen: trim() und strip(). Die strip()-Methode wurde in Java 11 zur String-Klasse hinzugefügt. Die strip()-Methode verwendet die Character.isWhitespace()-Methode, um zu überprüfen, ob das Zeichen ein Leerzeichen ist. Diese Methode verwendet Unicode-Codepunkte, während die trim()-Methode jedes Zeichen mit einem Codepunktwert kleiner oder gleich U+0020 als Leerzeichen identifiziert.

Die strip()-Methode ist die empfohlene Methode zur Entfernung von Leerzeichen, da sie den Unicode-Standard verwendet. Der folgende Beispielcode zeigt, wie man die strip()-Methode verwendet, um Leerzeichen zu entfernen:

String s = "  abc  def\t";
        
s = s.strip();
        
System.out.println(s);


Da String in Java unveränderlich ist, müssen Sie den Ausgabewert von strip() dem String zuweisen. Absolut eine der 50 wichtigsten Java-Interviewfragen für Entwickler

10. Wie sortieren Sie ein Array in Java?

Die Utility-Klasse Arrays hat viele überladene sort()-Methoden, um primitive und Objekt-Arrays zu sortieren. Wenn Sie ein primitives Array in der natürlichen Reihenfolge sortieren möchten, können Sie die Arrays.sort()-Methode verwenden, wie im folgenden Beispiel gezeigt:

int[] array = {1, 2, 3, -1, -2, 4};

Arrays.sort(array);

System.out.println(Arrays.toString(array));


Wenn Sie jedoch ein Array von Objekten sortieren möchten, dann muss das Objekt das Comparable-Interface implementieren. Wenn Sie das Sortierkriterium angeben möchten, können Sie den Comparator für die Sortierlogik übergeben.

11. Wie erzeugen Sie programmatisch ein Deadlock-Szenario in Java?

Das ist definitiv eine der wichtigen Interviewfragen für Java-Entwickler. Ein Deadlock ist ein Szenario in einer mehrfädigen Java-Umgebung, in dem zwei oder mehr Threads für immer blockiert sind. Die Deadlock-Situation entsteht bei mindestens zwei oder mehr Threads. Der folgende Beispielcode erstellt ein Deadlock-Szenario:

public class ThreadDeadlock {
    public static void main(String[] args) throws InterruptedException {
        Object obj1 = new Object();
        Object obj2 = new Object();
        Object obj3 = new Object();
    
        Thread t1 = new Thread(new SyncThread(obj1, obj2), "t1");
        Thread t2 = new Thread(new SyncThread(obj2, obj3), "t2");
        Thread t3 = new Thread(new SyncThread(obj3, obj1), "t3");
        
        t1.start();
        Thread.sleep(5000);
        t2.start();
        Thread.sleep(5000);
        t3.start();        
    }
}

class SyncThread implements Runnable {
    private Object obj1;
    private Object obj2;

    public SyncThread(Object o1, Object o2) {
        this.obj1 = o1;
        this.obj2 = o2;
    }

    @Override
    public void run() {
        String name = Thread.currentThread().getName();

        System.out.println(name + " erwirbt Lock auf " + obj1);
        synchronized (obj1) {
            System.out.println(name + " hat Lock auf " + obj1 erworben);
            work();
            System.out.println(name + " erwirbt Lock auf " + obj2);
            synchronized (obj2) {
                System.out.println(name + " hat Lock auf " + obj2 erworben");
                work();
            }
            System.out.println(name + " hat Lock auf " + obj2 freigegeben");
        }
        System.out.println(name + " hat Lock auf " + obj1 freigegeben");
        System.out.println(name + " hat die Ausführung beendet.");
    }

    private void work() {
        try {
            Thread.sleep(30000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}


Alle drei Threads können ein Lock auf das erste Objekt erwerben. Jedoch verwenden sie gemeinsame Ressourcen und sind so gestartet, dass sie unbestimmt auf das Lock des zweiten Objekts warten werden. Sie können den Java-Thread-Dump verwenden, um die Deadlocks zu erkennen.

12. Wie finden Sie die Fakultät einer Ganzzahl in Java?

Die Fakultät einer Ganzzahl wird berechnet, indem alle Zahlen von 1 bis zur gegebenen Zahl multipliziert werden:

F(n) = F(1)*F(2)...*F(n-1)*F(n)


Der folgende Beispielcode zeigt, wie man Rekursion verwendet, um die Fakultät einer Ganzzahl zu finden:

public static long factorial(long n) {
    if (n == 1)
        return 1;
    else
        return (n * factorial(n - 1));
}

13. Wie kehren Sie eine verkettete Liste in Java um?

LinkedList descendingIterator() gibt einen Iterator zurück, der über das Element in umgekehrter Reihenfolge iteriert. Der folgende Beispielcode zeigt, wie man diesen Iterator verwendet, um eine neue verkettete Liste mit Elementen in umgekehrter Reihenfolge zu erstellen:

LinkedList ll = new LinkedList<>();

ll.add(1);
ll.add(2);
ll.add(3);

System.out.println(ll);

LinkedList ll1 = new LinkedList<>();

ll.descendingIterator().forEachRemaining(ll1::add);

System.out.println(ll1);

14. Wie implementieren Sie eine Binärsuche in Java?

Die Elemente des Arrays müssen sortiert sein, um eine Binärsuche zu implementieren. Der Binärsuchalgorithmus basiert auf den folgenden Bedingungen:

  • Wenn der Schlüssel kleiner als das mittlere Element ist, müssen Sie jetzt nur noch im ersten Teil des Arrays suchen.
  • Wenn der Schlüssel größer als das mittlere Element ist, müssen Sie nur im zweiten Teil des Arrays suchen.
  • Wenn der Schlüssel gleich dem mittleren Element im Array ist, dann endet die Suche.
  • Schließlich, wenn der Schlüssel im gesamten Array nicht gefunden wird, dann sollte es -1 zurückgeben. Dies zeigt an, dass das Element nicht vorhanden ist.

Der folgende Beispielcode implementiert eine Binärsuche:

public static int binarySearch(int arr[], int low, int high, int key) {
    int mid = (low + high) / 2;

    while (low <= high) {
        if (arr[mid] < key) { low = mid + 1; } else if (arr[mid] == key) { return mid; } else { high = mid - 1; } mid = (low + high) / 2; } if (low > high) {
        return -1;
    }

    return -1;
}

15. Schreiben Sie ein Java-Programm, das Merge Sort illustriert.

Merge Sort ist einer der effizientesten Sortieralgorithmen. Er basiert auf dem Prinzip von „Teilen und Herrschen“. Er basiert auf der Idee, eine Liste in mehrere Unterlisten zu unterteilen, bis jede Unterliste nur ein Element enthält, und dann diese Unterlisten so zusammenzuführen, dass eine sortierte Liste entsteht. Der folgende Beispielcode zeigt eine Möglichkeit, Merge Sort zu verwenden:

public class MergeSort {
    public static void main(String[] args) {
        int[] arr = { 70, 50, 30, 10, 20, 40, 60 };

        int[] merged = mergeSort(arr, 0, arr.length - 1);

        for (int val : merged) {
            System.out.print(val + " ");
        }
    }

    public static int[] mergeTwoSortedArrays(int[] one, int[] two) {
        int[] sorted = new int[one.length + two.length];

        int i = 0;
        int j = 0;
        int k = 0;

        while (i < one.length && j < two.length) {
            if (one[i] < two[j]) {
                sorted[k] = one[i];
                k++;
                i++;
            } else {
                sorted[k] = two[j];
                k++;
                j++;
            }
        }

        if (i == one.length) {
            while (j < two.length) {
                sorted[k] = two[j];
                k++;
                j++;
            }
        }

        if (j == two.length) {
            while (i < one.length) {
                sorted[k] = one[i];
                k++;
                i++;
            }
        }

        return sorted;
    }

    public static int[] mergeSort(int[] arr, int lo, int hi) {
        if (lo == hi) {
            int[] br = new int[1];
            br[0] = arr[lo];
            return br;
        }

        int mid = (lo + hi) / 2;

        int[] fh = mergeSort(arr, lo, mid);
        int[] sh = mergeSort(arr, mid + 1, hi);

        int[] merged = mergeTwoSortedArrays(fh, sh);

        return merged;
    }
}

16. Können Sie eine Pyramide aus Zeichen in Java erstellen?

Musterprogramme sind ein sehr beliebtes Interviewthema. Diese Art von Frage wird verwendet, um die logischen Denkfähigkeiten des Bewerbers zu verstehen.

17. Schreiben Sie ein Java-Programm, das überprüft, ob zwei Arrays die gleichen Elemente enthalten.

Um zu überprüfen, ob zwei Arrays die gleichen Elemente enthalten, müssen Sie zuerst eine Menge von Elementen aus beiden Arrays erstellen und dann die Elemente in diesen Mengen vergleichen, um festzustellen, ob es ein Element gibt, das nicht in beiden Sets vorhanden ist. Der folgende Beispielcode zeigt, wie man überprüft, ob zwei Arrays nur gemeinsame Elemente enthalten:

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class ArraySameElements {
public static void main(String[] args) {
Integer[] a1 = {1,2,3,2,1};
Integer[] a2 = {1,2,3};
Integer[] a3 = {1,2,3,4};
System.out.println(sameElements(a1, a2));
System.out.println(sameElements(a1, a3));
}
static boolean sameElements(Object[] array1, Object[] array2) {
Set<Object> uniqueElements1 = new HashSet<>(Arrays.asList(array1));
Set<Object> uniqueElements2 = new HashSet<>(Arrays.asList(array2));
// wenn die Größe unterschiedlich ist, bedeutet dies, dass es eine Nichtübereinstimmung geben wird
wenn (uniqueElements1.size() != uniqueElements2.size()) return false;
für (Object obj : uniqueElements1) {
// Element nicht in beiden vorhanden?
wenn (!uniqueElements2.contains(obj)) return false;
}
return true;
}
}

</pre>

18. Wie erhalten Sie die Summe aller Elemente in einem Ganzzahlen-Array in Java?

Das ist eine wichtige Interviewfrage für Java-Entwickler: Sie können eine for-Schleife verwenden, um über die Array-Elemente zu iterieren und sie zu addieren, um die endgültige Summe zu erhalten:

int[] array = { 1, 2, 3, 4, 5 };

int sum = 0;

for (int i : array)
	sum += i;

System.out.println(sum);

19. Wie finden Sie die zweitgrößte Zahl in einem Array in Java?

private static int findSecondHighest(int[] array) {
int highest = Integer.MIN_VALUE;
int secondHighest = Integer.MIN_VALUE;

for (int i : array) {
if (i > highest) {
secondHighest = highest;
highest = i;
} else if (i > secondHighest) {
secondHighest = i;
}

}
return secondHighest;
}

20. Wie mischen Sie ein Array in Java?

Der folgende Beispielcode zeigt, wie man die Random-Klasse verwendet, um zufällige Indexnummern zu generieren und die Elemente zu mischen:

int[] array = { 1, 2, 3, 4, 5, 6, 7 };

Random rand = new Random();

for (int i = 0; i < array.length; i++) {
	int randomIndexToSwap = rand.nextInt(array.length);
	int temp = array[randomIndexToSwap];
	array[randomIndexToSwap] = array[i];
	array[i] = temp;
}

System.out.println(Arrays.toString(array));

Sie können den Mischcode in einer weiteren for-Schleife ausführen, um mehrere Runden zu mischen.

21. Wie finden Sie einen String in einer Textdatei in Java?

Der folgende Beispielcode zeigt, wie man die Scanner-Klasse verwendet, um die Dateiinhalte zeilenweise zu lesen und dann die String contains()-Methode verwendet, um zu überprüfen, ob der String in der Datei vorhanden ist:

boolean findStringInFile(String filePath, String str) throws FileNotFoundException {
	File file = new File(filePath);

	Scanner scanner = new Scanner(file);

	// die Datei zeilenweise lesen
	while (scanner.hasNextLine()) {
		String line = scanner.nextLine();
		if (line.contains(str)) {
			scanner.close();
			return true;
		}
	}
	scanner.close();

	return false;
}

Beachten Sie, dass der Beispielcode davon ausgeht, dass der in der Datei gesuchte String keine Zeilenumbruchzeichen enthält.

22. Wie drucken Sie ein Datum im spezifischen Format in Java?

Der folgende Beispielcode zeigt, wie man die SimpleDateFormat-Klasse verwendet, um den Datum-String zu formatieren:

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

String date = simpleDateFormat.format(new Date());
System.out.println(date); // 06-23-2020


Erfahren Sie mehr über das Java SimpleDateFormat.

23. Wie vereinigen Sie zwei Listen in Java?

Der folgende Beispielcode zeigt, wie man die addAll()-Methode verwendet, um mehrere Listen in Java zusammenzuführen:

List list1 = new ArrayList<>();
list1.add("1");
List list2 = new ArrayList<>();
list2.add("2");

List mergedList = new ArrayList<>(list1);
mergedList.addAll(list2);
System.out.println(mergedList); // [1, 2]

24. Schreiben Sie ein Java-Programm, das HashMap nach Wert sortiert.

HashMap ist keine geordnete Sammlung. Der folgende Beispielcode zeigt, wie man die Einträge basierend auf dem Wert sortiert und sie in LinkedHashMap speichert, die die Reihenfolge der Einfügung beibehält:

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 SortHashMapByValue {

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

		scores.put("David", 95);
		scores.put("Jane", 80);
		scores.put("Mary", 97);
		scores.put("Lisa", 78);
		scores.put("Dino", 65);

		System.out.println(scores);

		scores = sortByValue(scores);

		System.out.println(scores);
	}

	private static Map<String, Integer> sortByValue(Map<String, Integer> scores) {
		Map<String, Integer> sortedByValue = new LinkedHashMap<>();

		// das Eintrags-Set erhalten
		Set<Entry<String, Integer>> entrySet = scores.entrySet();
		System.out.println(entrySet);

		// eine Liste erstellen, da das Set ungeordnet ist
		List<Entry<String, Integer>> entryList = new ArrayList<>(entrySet);
		System.out.println(entryList);

		// die Liste nach Wert sortieren
		entryList.sort((x, y) -> x.getValue().compareTo(y.getValue()));
		System.out.println(entryList);

		// die neue HashMap füllen
		for (Entry<String, Integer> e : entryList)
			sortedByValue.put(e.getKey(), e.getValue());

		return sortedByValue;
	}

}

25. Wie entfernen Sie alle Vorkommen eines gegebenen Zeichens aus einem Eingabestring in Java?

Die String-Klasse hat keine Methode, um Zeichen zu entfernen. Der folgende Beispielcode zeigt, wie man die replace()-Methode verwendet, um einen neuen String ohne das gegebene Zeichen zu erstellen:

String str1 = "abcdABCDabcdABCD";
		
str1 = str1.replace("a", ""); 

System.out.println(str1); // bcdABCDbcdABCD

String ist in Java unveränderlich. Alle String-Manipulationsmethoden geben einen neuen String zurück, weshalb Sie ihn einer anderen Variablen zuweisen müssen.

26. Wie erhalten Sie unterschiedliche Zeichen und deren Anzahl in einem String in Java?

Sie können das Zeichenarray aus dem String erstellen. Dann iterieren Sie darüber und erstellen eine HashMap mit dem Zeichen als Schlüssel und deren Anzahl als Wert. Der folgende Beispielcode zeigt, wie man die Zeichen eines Strings extrahiert und zählt:

String str1 = "abcdABCDabcd";

char[] chars = str1.toCharArray();

Map<Character, Integer> charsCount = new HashMap<>();

for (char c : chars) {
	if (charsCount.containsKey(c)) {
		charsCount.put(c, charsCount.get(c) + 1);
	} else
		charsCount.put(c, 1);
}

System.out.println(charsCount); // {a=2, A=1, b=2, B=1, c=2, C=1, d=2, D=1}

27. Können Sie beweisen, dass ein String-Objekt in Java unveränderlich ist, programmatisch?

Der folgende Beispielcode zeigt, wie man beweist, dass ein String-Objekt unveränderlich ist, und die Kommentare im Code erklären jeden Schritt:

String s1 = "Java"; // "Java" String erstellt im Pool und Referenz zugewiesen zu s1

String s2 = s1; //s2 hat auch dieselbe Referenz zu "Java" im Pool

System.out.println(s1 == s2); // Beweis, dass s1 und s2 dieselbe Referenz haben

s1 = "Python"; 
//s1-Wert wurde oben geändert, also wie ist String unveränderlich?

//im obigen Fall wurde ein neuer String "Python" im Pool erstellt
//s1 bezieht sich jetzt auf den neuen String im Pool 
//ABER, der ursprüngliche String "Java" ist immer noch unverändert und bleibt im Pool
//s2 bezieht sich immer noch auf den ursprünglichen String "Java" im Pool

// Beweis, dass s1 und s2 unterschiedliche Referenzen haben
System.out.println(s1 == s2); 

System.out.println(s2); 
// gibt "Java" aus, was die Tatsache unterstützt, dass der ursprüngliche String-Wert unverändert ist, daher ist String unveränderlich

28. Können Sie etwas Code schreiben, um Vererbung in Java zu veranschaulichen?

Der folgende Beispielcode zeigt, wie man das Schlüsselwort `extends` verwendet, um eine Unterklasse der Klasse `Animal` zu erstellen. Die neue Klasse `Cat` erbt die Variable von der Klasse `Animal` und fügt weitere Codes hinzu, die nur zur Klasse `Cat` gehören:

class Animal {
	String color;
}

class Cat extends Animal {
	void meow() {
		System.out.println("Miau");
	}
}

29. Wie zeigen Sie ein Diamant-Problem mit Mehrfachvererbung in Java?

Das Diamant-Problem tritt auf, wenn eine Klasse von mehreren Klassen erbt und Unklarheit entsteht, welche Methode von welcher Klasse ausgeführt werden soll. Java erlaubt es nicht, mehrere Klassen zu erweitern, um das Diamant-Problem zu vermeiden, wie im folgenden Beispiel dargestellt:

interface I {
	void foo();
}
class A implements I {
	public void foo() {}
}

class B implements I {
	public void foo() {}
}

class C extends A, B { // wird nicht kompilieren
	public void bar() {
		super.foo();
	}
}

30. Wie veranschaulichen Sie ein try-catch-Beispiel in Java?

Der folgende Beispielcode zeigt ein Beispiel für try-catch:

try {
	FileInputStream fis = new FileInputStream("test.txt");
} catch(FileNotFoundException e) {
	e.printStackTrace();
}


Ab Java 7 können Sie auch mehrere Ausnahmen in einem einzigen catch-Block fangen, wie im folgenden Beispiel gezeigt. Es ist nützlich, wenn Sie denselben Code in allen catch-Blöcken haben.

public static void foo(int x) throws IllegalArgumentException, NullPointerException {
	// etwas Code
}

public static void main(String[] args) {
	try {
		foo(10);
	} catch (IllegalArgumentException | NullPointerException e) {
		System.out.println(e.getMessage());
	}
}

[/dm_code_snippet]

31. Schreiben Sie ein Java-Programm, das eine NullPointerException zeigt.

Wenn Sie eine Funktion auf null aufrufen, wird eine NullPointerException geworfen, wie im folgenden Beispielcode gezeigt:

public static void main(String[] args) {
	printString(null, 3);
	
}

static void printString(String s, int count) {
	for (int i = 0; i < count; i++) {
		System.out.println(s.toUpperCase()); // Exception im Thread "main" java.lang.NullPointerException
	}
}


Sie sollten eine Null-Prüfung an Ort und Stelle für eine frühe Validierung haben, wie im folgenden Beispielcode gezeigt:

static void printString(String s, int count) {
	if (s == null) return;
	for (int i = 0; i < count; i++) {
		System.out.println(s.toUpperCase());
	}
}

Sie können auch IllegalArgumentException werfen, je nach Projektanforderungen.

32. Wie erstellen Sie einen Record in Java?

Records wurden als Standardfunktion in Java 16 hinzugefügt. Records ermöglichen es Ihnen, eine POJO-Klasse mit minimalem Code zu erstellen. Records generieren automatisch hashCode(), equals(), Getter-Methoden und toString()-Methodencode für die Klasse. Records sind final und erweitern implizit die java.lang.Record-Klasse. Der folgende Beispielcode zeigt eine Möglichkeit, einen Record zu erstellen:

import java.util.Map;
 
public record EmpRecord(int id, String name, long salary, Map<String, String> addresses) {
}

Erfahren Sie mehr über Records in Java. Weitere Details zu POJO finden Sie unter Plain old Java object auf Wikipedia.

33. Wie erstellen Sie Textblöcke in Java?

Java 15 fügte die Funktion Textblöcke hinzu. Sie können mehrzeilige Strings mit Textblöcken erstellen. Der mehrzeilige String muss innerhalb eines Paares von dreifachen Anführungszeichen geschrieben werden, wie im folgenden Beispiel gezeigt:

String textBlock = """
		Hi
		Hallo
		Ja""";

Es ist dasselbe wie das Erstellen eines Strings wie Hi\\nHallo\\nJa.

34. Zeigen Sie ein Beispiel für Switch-Ausdrücke und Multi-Label-Case-Anweisungen in Java.

Switch-Ausdrücke wurden als Standardfunktion in Java 14 hinzugefügt. Die folgenden Beispiele zeigen Switch-Ausdrücke sowie Multi-Label-Case-Anweisungen:

int choice = 2;

int x = switch (choice) {
    case 1, 2, 3:
	    yield choice;
    default:
	    yield -1;
};

System.out.println("x = " + x); // x = 2

Sie können auch Lambda-Ausdrücke in Switch-Ausdrücken verwenden.

String day = "TH";
String result = switch (day) {
    case "M", "W", "F" -> "MWF";
    case "T", "TH", "S" -> "TTS";

    default -> {
	    if (day.isEmpty())
		    yield "Bitte geben Sie einen gültigen Tag ein.";
	    else
		    yield "Sieht aus wie ein Sonntag.";
    }
};

System.out.println(result); // TTH

35. Wie kompilieren und führen Sie eine Java-Klasse von der Kommandozeile aus?

Dieses Beispiel bezieht sich auf die folgende Java-Datei:

public class Test {

public static void main(String args[]) {
		System.out.println("Hi");
	}

}


Sie können sie mit dem folgenden Befehl in Ihrem Terminal kompilieren:Um die Klasse auszuführen, verwenden Sie den folgenden Befehl in Ihrem Terminal:Für die neuesten Releases kompiliert der java-Befehl das Programm auch, wenn die Klassendatei nicht vorhanden ist. Wenn die Klasse in einem Paket ist, wie z.B. com.example, dann sollte sie im Ordner com/example sein. Der Befehl zum Kompilieren und Ausführen ist:

java com/example/Test.java

Wenn Ihre Klasse einige zusätzliche JARs benötigt, um zu kompilieren und auszuführen, können Sie die Option java -cp verwenden. Zum Beispiel:

java -cp .:~/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar  com/example/Test.java

36. Wie erstellen Sie ein Enum in Java?

Der folgende Beispielcode zeigt, wie man ein grundlegendes Enum erstellt:

public enum ThreadStates {
	START,
	RUNNING,
	WAITING,
	DEAD;
}

ThreadStates ist das Enum mit festen Konstantenfeldern START, RUNNING, WAITING und DEAD. Alle Enums erweitern implizit die Klasse java.lang.Enum und implementieren die Schnittstellen Serializable und Comparable. Enums können auch Methoden haben.

37. Wie verwenden Sie die forEach()-Methode in Java?

Die forEach()-Methode bietet eine Abkürzung, um eine Aktion auf alle Elemente eines Iterierbaren auszuführen. Der folgende Beispielcode zeigt, wie man über die Elemente der Liste iteriert und sie ausdruckt:

List list = new ArrayList<>();

Iterator it = list.iterator();

while (it.hasNext()) {
	System.out.println(it.next());
}


Sie können die forEach()-Methode mit einem Lambda-Ausdruck verwenden, um die Codegröße zu reduzieren, wie im folgenden Beispielcode gezeigt:

List list = new ArrayList<>();

list.forEach(System.out::print);

38. Wie schreiben Sie ein Interface mit Default- und Static-Methode?

Java 8 führte Default- und Static-Methoden in Interfaces ein. Seitdem zählt dies zu den 50 wichtigsten Java-Interviewfragen für Entwickler. Dies überbrückte die Lücke zwischen Interfaces und abstrakten Klassen. Der folgende Beispielcode zeigt eine Möglichkeit, ein Interface mit Default- und Static-Methode zu schreiben:

public interface Interface1 {
	
	// reguläre abstrakte Methode
	void method1(String str);
	
	default void log(String str) {
		System.out.println("I1 logging::" + str);
	}
	
	static boolean isNull(String str) {
		System.out.println("Interface Null Check");

		return str == null ? true : "".equals(str) ? true : false;
	}

}

39. Wie erstellen Sie ein funktionales Interface?

Ein Interface mit genau einer abstrakten Methode wird als funktionales Interface bezeichnet. Der große Vorteil von funktionalen Interfaces besteht darin, dass Sie Lambda-Ausdrücke verwenden können, um sie zu instanziieren und sperrige anonyme Klassenimplementierungen zu vermeiden. Die Annotation `@FunctionalInterface` zeigt ein funktionales Interface an, wie im folgenden Beispielcode gezeigt:

@FunctionalInterface
interface Foo {
	void test();
}

40. Zeigen Sie ein Beispiel für die Verwendung von Lambda-Ausdrücken in Java.

Runnable ist ein hervorragendes Beispiel für ein funktionales Interface. Sie können Lambda-Ausdrücke verwenden, um ein Runnable zu erstellen, wie im folgenden Beispielcode gezeigt:

Runnable r1 = () -> System.out.println("Mein Runnable");

41. Zeigen Sie Beispiele für Überladung und Überschreibung in Java.

Wenn eine Klasse zwei oder mehr Methoden mit demselben Namen hat, werden sie als überladene Methoden bezeichnet. Der folgende Beispielcode zeigt eine überladene Methode namens print:

class Foo {
	void print(String s) {
		System.out.println(s);
	}

	void print(String s, int count) {
		while (count > 0) {
			System.out.println(s);
			count--;
		}
	}

}


Wenn eine Methode der Superklasse auch in der Unterklassen implementiert ist, spricht man von Überschreibung. Der folgende Beispielcode zeigt, wie man die Methode printName() annotiert, die in beiden Klassen implementiert ist:

class Base {
	void printName() {
		System.out.println("Base Klasse");
	}
}

class Child extends Base {
	@Override
	void printName() {
		System.out.println("Kind Klasse");
	}
}

42.-49. Erraten Sie den Output

Testen Sie sich selbst, indem Sie den Output der folgenden Code-Snippets erraten. Das ist wirklich wichtig, wenn Sie cie 50 wichtigsten Java-Interviewfragen für Entwickler meistern wollen.

Output 1

String s1 = "abc";
String s2 = "abc";

System.out.println("s1 == s2 ist:" + s1 == s2);

Output 2

String s3 = "JournalDev";
int start = 1;
char end = 5;

System.out.println(s3.substring(start, end));

Output 3

HashSet shortSet = new HashSet();

	for (short i = 0; i < 100; i++) {
    shortSet.add(i);
    shortSet.remove(i - 1);
}

System.out.println(shortSet.size());

Output 4

try {
	if (flag) {
  		while (true) {
   		}
   	} else {
   		System.exit(1);
   	}
} finally {
   	System.out.println("In Finally");
}

Output 5

String str = null;
String str1="abc";

System.out.println(str1.equals("abc") | str.equals(null));

Output 6

String x = "abc";
String y = "abc";

x.concat(y);

System.out.print(x);

Output 7

public class MathTest {

 	public void main(String[] args) {  		
   		int x = 10 * 10 - 10;
   		
   		System.out.println(x);
   	}
   
}

Output 8

public class Test {
   
  	public static void main(String[] args) {
   		try {
   			throw new IOException("Hallo");
   		} catch(IOException | Exception e) {
   			System.out.println(e.getMessage());
   		}
   	}
}

50. Finden Sie 5 Fehler im folgenden Codeausschnitt. Eine gute Übung für die 50 wichtigsten Java-Interviewfragen für Entwickler

Antworten

package com.digitalocean.programming-interviews;

public class String Programs {

	static void main(String[10] args) {
		String s = "abc"
		System.out.println(s);
	}
}

Schlussfolgerung

Diese Sammlung der Top 50 Java-Interviewfragen umfasste Fragen von Anfänger- bis Expertenniveau, um Ihnen bei Ihrer Vorbereitung auf Ihr Interview zu helfen.

Kostenlosen Account erstellen

Registrieren Sie sich jetzt und erhalten Sie Zugang zu unseren Cloud Produkten.

Das könnte Sie auch interessieren: