JavaRush /Java Blog /Random-IT /Analisi di un'attività di test tipica per una posizione d...
Uniges
Livello 35
Санкт-Петербург

Analisi di un'attività di test tipica per una posizione di sviluppatore

Pubblicato nel gruppo Random-IT
Oggi vorrei esaminare i termini di riferimento per la posizione di sviluppatore stagista. L'ho scritto una volta: voglio condividere il mio pensiero su questo argomento. Sarà utile ai principianti per avere un'idea di cosa li attende in futuro quando troveranno un lavoro.
Analisi di un tipico compito di test per una posizione di sviluppatore - 1
Il posto vacante è il seguente: tirocinante sviluppatore PostgreSQL da RUB 30.000. al lordo dell'imposta sul reddito delle persone fisiche LLC Business Technologies San Pietroburgo, Kolomyazhsky Prospekt, 33k2 Business Technologies Esperienza lavorativa richiesta: non richiesta
  • A tempo pieno, a tempo pieno
Responsabilità:
  • Implementazione di attività a bassa complessità sotto la guida di uno sviluppatore
  • Crescita costante delle qualifiche
Requisiti:
  • Comprensione dei principi della programmazione strutturata, teoria dei database relazionali.
  • Responsabilità, indipendenza, iniziativa
  • Capacità comunicative, capacità e voglia di lavorare in team
  • Elevata capacità di apprendimento
Auspicabile:
  • Conoscenza
  • SQL;
  • Pl\sql;
  • Pl\pgSql;
  • C++, Java, Pascal.
Condizioni:
  • Lavorare in un'azienda stabile e in sviluppo dinamico
  • Condizioni di lavoro confortevoli
  • Mancanza di formalismo e burocrazia
  • Ampie opportunità di crescita professionale e di carriera
  • Stipendio in base ai risultati del colloquio
  • Registrazione secondo il Codice del lavoro, ferie retribuite in conformità con la legislazione sul lavoro.
  • Si prega di indicare nell'intestazione della lettera il codice della commessa: Project04
Descrizione del compito del test: Il test è destinato all'autocontrollo affinché il richiedente possa determinare da solo se vale la pena dedicare il suo tempo a un colloquio. Pseudocodice Questo pseudocodice viene utilizzato per descrivere gli algoritmi.
  1. Il rientro dal margine sinistro indica il livello di nidificazione.
  2. I cicli while, for, Repeat e i costrutti condizionali hanno lo stesso significato di Pascal.
  3. Il simbolo “--” indica un commento
  4. Il simbolo “:=" denota l'assegnazione
  5. Le variabili sono locali alla procedura se non diversamente specificato
  6. L'indice dell'array è scritto tra parentesi quadre, la costruzione A[i] indica l'elemento i nell'array A
  7. È possibile utilizzare oggetti costituiti da più campi o aventi più attributi; i valori dei campi vengono scritti come NomeCampo[NomeOggetto].

    Ad esempio, la lunghezza dell'array A viene scritta come Lunghezza[A]; il significato delle parentesi quadre è determinato dal contesto (una variabile che denota un array o un oggetto è un puntatore ai suoi dati costitutivi). Dopo aver assegnato y:=x per qualsiasi campo f l'uguaglianza f[y]=f[x] sarà soddisfatta; Determinare se un attributo è una funzione, una variabile o qualsiasi altra cosa viene fatto dal contesto.

  8. Un puntatore può avere il valore speciale NIL, che non punta ad alcun oggetto.
  9. I parametri vengono passati per valore: la procedura chiamata riceve una propria copia dei parametri; le modifiche ai parametri all'interno della procedura non sono visibili dall'esterno. Quando si passano oggetti, viene copiato un puntatore ai dati corrispondenti a quell'oggetto.
Problema Una funzione che ordina un array di elementi A: 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) Esempio di array: A = (5,2,4,6,1,3,2,6) Esempio di esecuzione: Sort(A,1 ,length[A ]) Obbligatorio: sviluppare un algoritmo per la funzione Merge(A,p,q,r) in qualsiasi linguaggio conveniente per te, con o senza l'uso di memoria aggiuntiva, a seconda di quale sia più veloce o più conveniente da implementare . Se avrai successo, saremo lieti di accoglierti per ulteriori test. La mia risposta: l'algoritmo descritto nell'esempio dello pseudocodice è l'algoritmo Merge sort. Il compito principale della nostra funzione è ordinare un array di numeri non ordinati: ad esempio, in ordine crescente. Il problema è suddiviso in sottoattività: la sequenza di numeri dell'array viene divisa in array più piccoli fino a quando l'array diventa a valore singolo, gli elementi degli array vengono confrontati, sostituiti (più piccoli con più grandi, con l'indice) e uniti.
Analisi di un tipico compito di test per una posizione di sviluppatore - 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;
    }
}
Analisi di un tipico compito di test per una posizione di sviluppatore - 3
Link con codice funzionante a Ideone: QUI L'attività è stata completata con successo, dopodiché sono stato invitato a un colloquio, dove, invece di un colloquio, mi hanno lanciato un'altra serie di compiti simili e sono partiti per due ore, dandomi una penna e 2 fogli di carta A4. Presero le foglie senza guardarle e dissero che avrebbero richiamato. Il mio piacere per un simile passatempo non può essere descritto con parole censurate. Ma, come minimo, questa è la dura realtà che molti dovranno affrontare all’inizio del loro viaggio.
Analisi di un tipico compito di test per una posizione di sviluppatore - 4
Vi auguro di cuore interviste interessanti e costruttive. Scegli saggiamente il tuo datore di lavoro. Ti auguro il meglio!) P.S.: la mia recensione sulle aziende che assumono per aprile 2018 (San Pietroburgo) può essere visualizzata QUI
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION