JavaRush /Java-Blog /Random-DE /Analyse einer typischen Testaufgabe für eine Entwicklerpo...
Uniges
Level 35
Санкт-Петербург

Analyse einer typischen Testaufgabe für eine Entwicklerposition

Veröffentlicht in der Gruppe Random-DE
Heute möchte ich mir die Aufgabenstellung für die Position des Praktikanten im Entwicklerbereich ansehen. Ich habe es einmal geschrieben: Ich möchte meine Gedanken zu diesem Thema mitteilen. Es wird für Anfänger nützlich sein, eine Vorstellung davon zu bekommen, was sie in Zukunft bei der Jobsuche erwartet.
Analyse einer typischen Testaufgabe für eine Entwicklerposition - 1
Die Stelle ist wie folgt: Trainee PostgreSQL-Entwickler ab 30.000 RUB. vor Abzug der Einkommensteuer LLC Business Technologies St. Petersburg, Kolomyazhsky Prospekt, 33k2 Business Technologies Erforderliche Berufserfahrung: nicht erforderlich
  • Vollzeit, Vollzeit
Verantwortlichkeiten:
  • Umsetzung von Aufgaben geringer Komplexität unter Anleitung eines Entwicklers
  • Ständiges Wachstum der Qualifikationen
Anforderungen:
  • Verständnis der Prinzipien der strukturierten Programmierung, der Theorie relationaler Datenbanken.
  • Verantwortung, Unabhängigkeit, Initiative
  • Kommunikationsfähigkeit, Fähigkeit und Lust zur Teamarbeit
  • Hohe Lernfähigkeit
Wünschenswert:
  • Wissen
  • SQL;
  • Pl\sql;
  • Pl\pgSql;
  • C++, Java, Pascal.
Bedingungen:
  • Arbeiten Sie in einem stabilen, sich dynamisch entwickelnden Unternehmen
  • Angenehme Arbeitsbedingungen
  • Mangel an Formalismus und Bürokratie
  • Umfangreiche Möglichkeiten zur beruflichen und beruflichen Weiterentwicklung
  • Gehalt basierend auf den Ergebnissen des Vorstellungsgesprächs
  • Anmeldung gemäß Arbeitsgesetzbuch, bezahlter Urlaub gemäß Arbeitsgesetz.
  • Bitte geben Sie im Kopf des Briefes den Stellencode an: Projekt04
Beschreibung der Testaufgabe: Der Test dient der Selbstkontrolle, damit der Bewerber selbst feststellen kann, ob es sich lohnt, Zeit für ein Vorstellungsgespräch aufzuwenden. Pseudocode Dieser Pseudocode wird zur Beschreibung von Algorithmen verwendet.
  1. Der Einzug vom linken Rand zeigt die Verschachtelungsebene an.
  2. Schleifen während, for, Wiederholung und bedingte Konstrukte haben die gleiche Bedeutung wie in Pascal.
  3. Das Symbol „--“ kennzeichnet einen Kommentar
  4. Das Symbol „:=“ kennzeichnet die Zuweisung
  5. Sofern nicht anders angegeben, sind Variablen lokal für die Prozedur
  6. Der Array-Index wird in eckigen Klammern geschrieben, die Konstruktion A[i] bedeutet das i-Element im Array A
  7. Es ist möglich, Objekte zu verwenden, die aus mehreren Feldern bestehen oder mehrere Attribute haben; die Feldwerte werden als FieldName[ObjectName] geschrieben.

    Beispielsweise wird die Länge von Array A als Länge[A] geschrieben; Was die eckigen Klammern bedeuten, wird durch den Kontext bestimmt (eine Variable, die ein Array bezeichnet, oder ein Objekt ist ein Zeiger auf seine konstituierenden Daten). Nach der Zuweisung von y:=x für ein beliebiges Feld f wird die Gleichheit f[y]=f[x] erfüllt; Die Feststellung, ob ein Attribut eine Funktion, eine Variable oder etwas anderes ist, erfolgt über den Kontext.

  8. Ein Zeiger kann den Sonderwert NIL haben, der auf kein Objekt zeigt.
  9. Parameter werden als Wert übergeben: Die aufgerufene Prozedur erhält eine eigene Kopie der Parameter; Änderungen an den Parametern innerhalb der Prozedur sind von außen nicht sichtbar. Beim Übergeben von Objekten wird ein Zeiger auf die diesem Objekt entsprechenden Daten kopiert.
Problem Eine Funktion, die ein Array von Elementen A sortiert: Sort(A,p,r) 1 if p < r 2 then q := Round_half_down((p+r)/2) 3 Sort(A,p,q) 4 Sort (A,q +1,r) 5 Merge(A,p,q,r) Array-Beispiel: A = (5,2,4,6,1,3,2,6) Beispiel ausführen: Sort(A,1 ,length[A ]) Erforderlich: Entwickeln Sie einen Algorithmus für die Merge(A,p,q,r)-Funktion in einer beliebigen für Sie geeigneten Sprache, mit oder ohne Verwendung von zusätzlichem Speicher, je nachdem, was für Sie schneller oder bequemer zu implementieren ist . Bei Erfolg freuen wir uns, Sie zu weiteren Tests begrüßen zu dürfen. Meine Antwort: Der im Pseudocode-Beispiel beschriebene Algorithmus ist der Merge-Sort-Algorithmus. Die Hauptaufgabe unserer Funktion besteht darin, ein Array ungeordneter Zahlen zu sortieren, beispielsweise in aufsteigender Reihenfolge. Das Problem ist in Teilaufgaben unterteilt: Die Zahlenfolge aus dem Array wird in kleinere Arrays aufgeteilt, bis das Array einwertig wird, die Elemente der Arrays werden verglichen, ersetzt (kleiner durch größer, durch Index) und zusammengeführt.
Analyse einer typischen Testaufgabe für eine Entwicklerposition - 2
public class Main {
    public static void main(String[] args) {
        int[] massif = {13, 3, 8, 1, 15, 2, 3, 7, 4};
        System.out.print("Массив до сортировки: ");
        for (int i = 0; i < massif.length; i++)
            System.out.print(massif[i] + " ");
        System.out.println("");
        massif = sort(massif);
        System.out.print("Массив после сортировки: ");
        for (int i = 0; i < massif.length; i++)
            System.out.print(massif[i] + " ");
    }

    public static int[] sort(int x[]) {
        if (x.length == 1) //Рекурсия идет до тех пор, пока массив делится
            return x;
        else {
            int half = (int) Math.floor(x.length / 2); //Разбиваем массив на 2 части
            int halfFirst[] = new int[half]; //1 часть, пустой массив
            int halfSecond[] = new int[x.length - half]; //2 часть, пустой массив
            for (int i = 0; i < x.length; i++) { //Заполняем новосозданные массивы значениями
                if (i < half)
                    halfFirst[i] = x[i];
                else
                    halfSecond[i - half] = x[i];
            }
            halfFirst = sort(halfFirst); //Рекурсия
            halfSecond = sort(halfSecond); //Рекурсия
            x = sortNext(halfFirst, halfSecond); //Отправляем заполненные значениями массивы в следующий метод
            return x;
        }
    }

    public static int[] sortNext(int x[], int y[]) {
        int c[] = new int [x.length + y.length]; //Создаем результирующий массив из суммы длин массивов из аргументов метода
        int a = 0, b = 0;
        for (int i = 0; i < x.length + y.length; i++) { //Сравниваем массивы, меняем местами элементы, заполняем новосозданный массив
            if (a == x.length) {
                c[i] = y[b];
                b++;
            }
            else if (b == y.length) {
                c[i] = x[a];
                a++;
            }
            else if (x[a] > y[b]) {
                c[i] = y[b];
                b++;
            }
            else {
                c[i] = x[a];
                a++;
            }
        }
        return c;
    }
}
Analyse einer typischen Testaufgabe für eine Entwicklerposition - 3
Link mit Arbeitscode zu Ideone: HIER Die Aufgabe wurde erfolgreich abgeschlossen, woraufhin ich zu einem Vorstellungsgespräch eingeladen wurde, bei dem sie mir anstelle eines Vorstellungsgesprächs einen weiteren Stapel ähnlicher Aufgaben zuwarfen und für zwei Stunden gingen, mir einen Stift gaben und 2 A4-Blätter. Sie nahmen die Blätter entgegen, ohne sie anzusehen, und sagten, sie würden zurückrufen. Meine Freude an einem solchen Zeitvertreib kann nicht mit zensierten Worten beschrieben werden. Aber zumindest ist dies die harte Realität, mit der sich viele zu Beginn ihrer Reise auseinandersetzen müssen.
Analyse einer typischen Testaufgabe für eine Entwicklerposition - 4
Ich wünsche Ihnen von Herzen interessante und konstruktive Interviews. Wählen Sie Ihren Arbeitgeber mit Bedacht aus. Alles Gute!) P.S.: Meine Bewertung der Arbeitgeber für April 2018 (St. Petersburg) kann HIER eingesehen werden
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION