CodeGym/Java-Blog/Random-DE/Java-Aufgaben mal anders: Hallo, Interviews!
Autor
Pavlo Plynko
Java Developer at CodeGym

Java-Aufgaben mal anders: Hallo, Interviews!

Veröffentlicht in der Gruppe Random-DE
Die besten Freunde von CodeGym- Studenten sind Programmieraufgaben, Java und der Task-Validator. Dennoch kommt irgendwann der Zeitpunkt, an dem jeder Padawan-Entwickler anfangen muss, ausgetretene Pfade zu verlassen, seine eigenen Miniprojekte zu erfinden und sich auf Interviews vorzubereiten. Man könnte meinen, dass das Interview genau die gleichen praktischen Java-Aufgaben beinhalten würde, die in diesem Kurs zu finden sind. Und das ist in den meisten Fällen der Fall, aber manche Unternehmen stellen gerne Fangfragen oder etwas Unbekanntes. Um während eines stressigen Vorstellungsgesprächs nicht verunsichert zu werden, ist es hilfreich, zu Hause zu versuchen, ähnliche Java-Aufgaben selbst zu lösen.
Java-Aufgaben mal anders: Hallo, Interviews!  - 1
In diesem Artikel gehen wir auf fünf dieser kniffligen Aufgaben ein. Wir empfehlen Ihnen, zunächst die Bedingungen zu lesen und selbst zu versuchen, sie zu lösen. Und noch etwas: Vergessen Sie nicht, jeden Tag Java-Aufgaben in diesem Kurs zu erledigen!

Aufgabe 1: Erstellen Sie eine Endlosschleife von Grund auf

Es wurde ein Codeblock bereitgestellt. Fügen Sie es hinzu, um die Schleife unendlich zu machen.
class ToInfinity {
    public static void main(String[] args) {

// Insert code here

        for (int i = start; i <= start + 1; i++) {
             /* This should be an infinite loop, but don't change anything here */
        }
    }
}
Das ist nicht schwer “, sagen Sie. Höchstwahrscheinlich haben Sie sich schon oft in diesem Szenario wiedergefunden: Während Sie eine Java-Aufgabe erledigten, haben Sie eine Endlosschleife erstellt und mussten darüber nachdenken, wie Sie diese wieder loswerden. Nun, das ist umgekehrt. Hier ist der knifflige Teil: Sie können die Schleife selbst oder ihre Beendigungsbedingungen nicht ändern. Es gibt nur zwei Iterationen. Sie reichen jedoch aus, um eine Endlosschleife zu erzeugen. Es sieht so aus, als ob es nur für zwei Iterationen ausgeführt werden sollte, aber Sie können es mit Überlauf auf unendlich machen. Haben Sie schon erraten, wie?

Lösung

Aufgrund eines Überlaufs Integer.MAX_VALUEist dies der maximale Wert, den ein intin Java speichern kann. Wenn Sie Integer.MAX_VALUEdiesen Wert erreichen und erhöhen, erfolgt ein Rollback auf Integer.MIN_VALUEbzw. auf den niedrigstmöglichen IntegerWert. Um diese Java-Aufgabe abzuschließen, müssen wir intder startVariablen lediglich 1 weniger als den Maximalwert zuweisen. Java-Code für diese Aufgabe:
class ToInfinity {
    public static void main(String[] args) {
        int start = Integer.MAX_VALUE - 1;
        for (int i = start; i <= start + 1; i++) {
            // Infinite loop
            System.out.println(i); // Be sure we are in an infinite loop
        }
    }
}
Was geschieht? Wir beginnen mit start=2147483645 (Integer.MAX_VALUE-1). In der nächsten Iteration wird der Wert zu 2147483645, dann zu 2147483646, dann zu -2147483648, -2147483647 ... und so weiter.

Aufgabe 2: Erstellen Sie einen ausführbaren Kommentar

Gut, da wären wir! Schon in den ersten Lektionen haben wir gehört, dass Kommentare nicht ausgeführt werden. Deshalb werden sie Kommentare genannt. Wir glauben, dass die Lösung dieser Aufgabe für Java-Programmierer, selbst für erfahrene, nicht immer offensichtlich sein wird. Es gibt jedoch eine knifflige (aber „legale“) Möglichkeit, die JVM dazu zu bringen, einen Kommentar auszuführen. Spüren Sie, wohin wir gehen? Versuchen zu erraten!

Lösung

Java-Code für diese Aufgabe:
public class ExecutableComment {
    public static void main(String[] args) {
        // The comment below will be executed!
        // \u000d System.out.println("executable comment");
    }
}
Wenn wir diesen Java-Code in eine IDE eingeben, erhalten wir Folgendes:
executable comment
Dies liegt daran, dass der Java-Compiler das Unicode-Zeichen \u000dals neue Zeile interpretiert und unseren Code wie folgt liest: Java-Code für diese Aufgabe, wie er vom Compiler interpretiert wird:
public class ExecutableComment {
    public static void main(String[] args) {
        // The comment below will be executed!
        // \u000d
        System.out.println("comment executed");
    }
}

Aufgabe 3: Erstellen Sie eine benannte Schleife

Hier ist ein weiteres Mitglied der Reihe mit dem Titel „Praktische Java-Programmierprobleme für sphärische Kühe“. In dem Sinne, dass unklar ist, warum dies überhaupt notwendig ist: Es ist unwahrscheinlich, dass die Schleife dadurch beleidigt wird, dass ihr kein Name gegeben wurde. Auf jeden Fall ist es aus einem anderen Grund wichtig: Mit der Sprache können Sie eine Schleife benennen.

Lösung

Hinweis: Einige Leute kennen diese „Namen“ als „Etiketten“ und ihre Verwendung in der Praxis wird nicht empfohlen. Java-Code zur Demonstration einer benannten Schleife
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);
            }
        }
    }
}
Folgendes wird ausgegeben, wenn Sie das Programm ausführen:
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
Sie können auch das Schlüsselwort continue verwenden, um zum Anfang einer benannten Schleife zurückzukehren. Und bei Bedarf können Sie break(oder continue) in einer if-elsemit einer forSchleife verschachtelten Schleife verwenden, um mehrere Schleifen mithilfe einer zu unterbrechen if-else. Dadurch wird vermieden, dass eine große Anzahl von Flags erstellt und in einer if-elseAnweisung überprüft wird, um zu bestimmen, ob die innere Schleife fortgesetzt oder verlassen werden soll.

Aufgabe 4: Finden Sie ein einzelnes Duplikat in einem Array von Ganzzahlen

Sie erhalten ein Ganzzahl-Array (oder ein ArrayList, wenn Sie es vorziehen), das alle Zahlen Integervon 1 bis 100 enthält. Das Array enthält ein und nur ein doppeltes Element. Wie findest Du es? Es kommt häufiger vor, dass ein Java-Programmierer diese Art von Aufgabe erhält als die vorherigen drei. Weil es eher um Logik als um Ihr Wissen über selten verwendete Feinheiten der Sprache geht. Ihr erster ungezügelter Impuls, rohe Gewalt anzuwenden, wird ziemlich schnell vergehen, wenn Ihr Gehirn einschaltet oder Ihnen klar wird: „Ich bin Programmierer. Ich bin schlau.“ Das einzige Problem besteht darin, dass dies während eines Vorstellungsgesprächs, wenn Sie unter Stress stehen, möglicherweise nicht passiert. Denken Sie also jetzt nach, bevor Sie sich die Lösung ansehen!

Hier ist der Algorithmus

Berechnen Sie die Summe aller Zahlen von 1 bis 100. Wir denken, Sie wissen, wie Sie das machen können (zum Beispiel mit der berühmten Methode von Gauß). Berechnen Sie nun die Summe der Elemente in Ihrem Array oder ArrayList. Und... subtrahiere die erste Summe von der zweiten. Bingo! Die resultierende Zahl ist der Wert des doppelten Elements. Java-Code für diese Aufgabe mit einer 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();
// Find the sum of all list elements
        int totalSum = elements.stream().mapToInt(e -> e).sum();
        System.out.println("The repeated element is: " + (totalSum - distinctSum));
    }

    public static void main(String[] args) {
// Create a list of sequential elements in the interval [1..101).
        List <Integer> elements = IntStream.range(1, 101).boxed().collect(Collectors.toList());
// Add the value 23 at index 53
        elements.set(53, 23);
        findDuplicate(elements);
    }
}

Eine andere Lösung

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);
        }
        // Add a duplicate to the list
        numbers.add(25);
        Duplicate dn = new Duplicate();
        System.out.println("The repeated element is: " + dn.findDuplicateNumber(numbers));
    }
}

Aufgabe 5: Finden Sie ein nicht eindeutiges Duplikat in einem Array von Ganzzahlen

Wenn die vorherige Aufgabe für Sie zu einfach war, versuchen Sie es mit dieser: Sie erhalten eine Liste mit ganzen Zahlen von 1 bis 100. Darin sind Duplikate (mehr als eine) enthalten. Wie finden Sie die Elemente, die mehr als einmal vorkommen (finden Sie die Elemente und geben Sie an, wie oft sie vorkommen)?

Lösung

Hier wäre die logische Lösung, so etwas wie eine HashMap zu verwenden, da diese die Daten in Schlüssel-Wert-Paaren speichert. Code für diese Aufgabe in Java:
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 <>();
// Use the following rule to populate the Map duplicates:
// the key is the element value, and the value is the number of times it occurs
        elements.forEach(e -> duplicates.put(e, duplicates.get(e) == null ? 1 : duplicates.get(e) + 1));
// Remove any elements that don't occur more than once from the Map duplicates
// and store the result as a list (to make it easy to work with in the next step)
        List <Map.Entry <Integer, Integer> >
        result = duplicates.entrySet().stream().filter(d -> d.getValue() > 1).collect(Collectors.toList());
// Write the results for all elements to the result list
        result.forEach(e -> System.out.println(String.format("Element %d  occurs %d times", 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);
    }
}

Abschluss

Es gibt viele verschiedene Arten praktischer Java-Aufgaben, und Sie wissen nicht, welche Art von Rätseln der Interviewer Sie lösen soll. Aber jeder vernünftige Arbeitgeber weiß, dass Ihre Fähigkeit, echte praktische Aufgaben zu erledigen , wie sie Ihnen bei der Arbeit begegnen, viel wichtiger ist als Ihre Fähigkeit, knifflige Fragen zu lösen. Tun Sie dies also so oft wie möglich. Deshalb haben wir CodeGym entwickelt. Für die Erstellung dieses Artikels wurde Material von geeksforgeeks verwendet.
Kommentare
  • Beliebt
  • Neu
  • Alt
Du musst angemeldet sein, um einen Kommentar schreiben zu können
Auf dieser Seite gibt es noch keine Kommentare