CodeGym/Java blogg/Slumpmässig/Java-uppgifter med en twist: hej, intervjuer!
John Squirrels
Nivå
San Francisco

Java-uppgifter med en twist: hej, intervjuer!

Publicerad i gruppen
CodeGym- studenternas bästa vänner är programmeringsuppgifter, Java och uppgiftsvalideraren. Ändå kommer det en tid då varje padawan-utvecklare måste börja gå utanför stigen, uppfinna sina egna miniprojekt och förbereda sig för intervjuer. Man skulle kunna tro att intervjun skulle ha exakt samma praktiska Java-uppgifter som finns i den här kursen. Och så är det i de flesta fall, men vissa företag gillar att ställa knepfrågor eller något obekant. För att undvika att bli skramlade under en stressig intervju är det bra att försöka lösa liknande Java-uppgifter på egen hand hemma.
Java-uppgifter med en twist: hej, intervjuer!  - 1
I den här artikeln kommer vi att utforska 5 sådana knepiga uppgifter. Vi rekommenderar att du först läser igenom villkoren och försöker lösa dem själv. Och en sak till: glöm inte att göra Java-uppgifter i den här kursen varje dag!

Uppgift 1: Skapa en oändlig loop från grunden

Ett kodblock har tillhandahållits. Lägg till det för att göra slingan oändlig.
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 */
        }
    }
}
" Det är inte svårt ", säger du. Du har mer än sannolikt hamnat i det här scenariot upprepade gånger: när du slutförde en Java-uppgift skapade du en oändlig loop och var tvungen att tänka på hur du skulle bli av med den. Tja, det här är tvärtom. Här är den knepiga delen: du kan inte ändra själva slingan eller dess utgångsförhållanden. Det finns bara två iterationer. Men de räcker för att skapa en oändlig loop. Det ser ut som att det bara ska köras i två iterationer, men du kan göra det oändligt med överflöde. Har du redan gissat hur?

Lösning

På grund av spill Integer.MAX_VALUEär det maximala värdet som en intkan lagra i Java. Om du når Integer.MAX_VALUEoch ökar detta värde, rullar du tillbaka till, Integer.MIN_VALUEeller snarare, till lägsta möjliga Integervärde. För att slutföra denna Java-uppgift behöver vi alltså helt enkelt tilldela variabeln 1 mindre än intmaxvärdet . startJava-kod för denna uppgift:
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
        }
    }
}
Vad händer? Vi börjar med start=2147483645 (Integer.MAX_VALUE-1). I nästa iteration blir värdet 2147483645, sedan 2147483646, sedan -2147483648, -2147483647... och så vidare.

Uppgift 2: Skapa en körbar kommentar

Nåväl, här är vi! Från de allra första lektionerna har vi hört att kommentarer inte körs. Det är därför de kallas kommentarer. Vi tror att lösningen på denna uppgift inte alltid kommer att vara självklar för Java-programmerare, inte ens erfarna. Det finns dock ett knepigt (men "lagligt") sätt att få JVM att exekvera en kommentar. Kan du ana vart vi är på väg? Försöka gissa!

Lösning

Java-kod för denna uppgift:
public class ExecutableComment {
    public static void main(String[] args) {
        // The comment below will be executed!
        // \u000d System.out.println("executable comment");
    }
}
Om vi ​​anger den här Java-koden i en IDE får vi det här:
executable comment
Detta beror på att Java-kompilatorn tolkar Unicode-tecknet \u000dsom en ny rad och läser vår kod så här: Java-kod för denna uppgift, som den tolkas av kompilatorn:
public class ExecutableComment {
    public static void main(String[] args) {
        // The comment below will be executed!
        // \u000d
        System.out.println("comment executed");
    }
}

Uppgift 3: Skapa en namngiven loop

Här är en annan medlem i serien med titeln "Praktiska Java-programmeringsproblem för sfäriska kor". I den meningen att det är oklart varför detta ens är nödvändigt: det är inte troligt att slingan kommer att bli förolämpad av att den inte har fått ett namn. Hur som helst, det är viktigt av en annan anledning: språket låter dig namnge en loop.

Lösning

Notera: dessa "namn" är kända för vissa människor som "etiketter", och de rekommenderas inte att använda i praktiken. Java-kod för att demonstrera en namngiven loop
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);
            }
        }
    }
}
Här är vad som kommer att matas ut om du kör programmet:
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
Du kan också använda nyckelordet fortsätt för att återgå till början av en namngiven loop. Och om det behövs kan du använda break(eller continue) i en kapslad if-elsemed en forloop för att bryta upp flera loopar med en if-else. Detta kommer att hjälpa till att undvika att skapa ett stort antal flaggor och kontrollera dem i ett if-elseuttalande för att avgöra om du ska fortsätta eller lämna den inre slingan.

Uppgift 4: Hitta en enda dubblett i en uppsättning heltal

Du får en heltalsmatris (eller en , ArrayListom du föredrar det) som innehåller varje Integerfrån 1 till 100. Matrisen har ett, och bara ett, duplikatelement. Hur hittar du det? Det är vanligare att en Java-programmerare får den här typen av uppgifter än de tre tidigare. För det handlar om logik snarare än dina kunskaper om sällan använda finesser i språket. Din första ohämmade impuls att använda brute force kommer att passera ganska snabbt när din hjärna slår in eller du inser "Jag är en programmerare. Jag är smart." Det enda problemet är att under en intervju, när du är stressad, kanske detta inte händer. Så tänk efter nu innan du tittar på lösningen!

Här är algoritmen

Beräkna summan av alla tal från 1 till 100. Vi tror att du vet hur du kan göra detta (till exempel med Gauss berömda metod). Beräkna nu summan av elementen i din array eller ArrayList. Och... subtrahera den första summan från den andra. Bingo! Det resulterande numret är värdet på det duplicerade elementet. Java-kod för denna uppgift med en 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);
    }
}

En annan lösning

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));
    }
}

Uppgift 5: Hitta en icke-unik dubblett i en uppsättning heltal

Om den föregående uppgiften var för lätt för dig, försök att göra den här: Du får en lista med heltal från 1 till 100. Det finns dubbletter i den (fler än en). Hur hittar man de element som förekommer mer än en gång (hitta elementen och ange hur många gånger de förekommer)?

Lösning

Här skulle den logiska lösningen vara att använda något som en HashMap, eftersom den lagrar data i nyckel-värdepar. Kod för denna uppgift i 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);
    }
}

Slutsats

Det finns många olika typer av praktiska Java-uppgifter, och du vet inte vilken typ av pussel intervjuaren kommer att be dig lösa. Men varje förnuftig arbetsgivare förstår att din förmåga att utföra verkliga praktiska uppgifter , som de du kommer att stöta på på jobbet, är mycket viktigare än din förmåga att lösa knepfrågor. Så gör dessa så mycket som möjligt. Det är därför vi skapade CodeGym. Material från geeksforgeeks användes för att skapa denna artikel.
Kommentarer
  • Populär
  • Ny
  • Gammal
Du måste vara inloggad för att lämna en kommentar
Den här sidan har inga kommentarer än