JavaRush /Blogue Java /Random-PT /Análise de uma tarefa de teste típica para uma posição de...
Uniges
Nível 35
Санкт-Петербург

Análise de uma tarefa de teste típica para uma posição de desenvolvedor

Publicado no grupo Random-PT
Hoje gostaria de dar uma olhada nos termos de referência para o cargo de desenvolvedor estagiário. Era uma vez eu escrevi: quero compartilhar meus pensamentos sobre este assunto. Será útil para os iniciantes terem uma ideia do que os espera no futuro ao encontrar um emprego.
Análise de uma tarefa de teste típica para uma posição de desenvolvedor - 1
A vaga é a seguinte: Desenvolvedor Trainee PostgreSQL a partir de RUB 30.000. antes da dedução do imposto de renda pessoal LLC Business Technologies St. Petersburg, Kolomyazhsky Prospekt, 33k2 Business Technologies Experiência profissional necessária: não obrigatório
  • Tempo integral, tempo integral
Responsabilidades:
  • Implementação de tarefas de baixa complexidade sob orientação de um desenvolvedor
  • Crescimento constante das qualificações
Requisitos:
  • Compreensão dos princípios da programação estruturada e da teoria das bases de dados relacionais.
  • Responsabilidade, independência, iniciativa
  • Habilidades de comunicação, capacidade e desejo de trabalhar em equipe
  • Alta capacidade de aprendizagem
Desejável:
  • Conhecimento
  • SQL;
  • Pl\sql;
  • Pl\pgSql;
  • C++, java, pascal.
Condições:
  • Trabalhe em uma empresa estável e em desenvolvimento dinâmico
  • Condições de trabalho confortáveis
  • Falta de formalismo e burocracia
  • Amplas oportunidades de crescimento profissional e de carreira
  • Salário com base nos resultados da entrevista
  • Registo de acordo com o Código do Trabalho, férias remuneradas de acordo com a legislação laboral.
  • Por favor indique o código do trabalho no cabeçalho da carta: Project04
Descrição da tarefa do teste: O teste tem como objetivo o autocontrole, para que o candidato determine por si mesmo se vale a pena dedicar seu tempo a uma entrevista. Pseudocódigo Este pseudocódigo é usado para descrever algoritmos.
  1. O recuo da margem esquerda indica o nível de aninhamento.
  2. Loops while, for, repetições e construções condicionais têm o mesmo significado que em Pascal.
  3. O símbolo “--” indica um comentário
  4. O símbolo “:=” denota atribuição
  5. As variáveis ​​são locais para o procedimento, salvo indicação em contrário
  6. O índice da matriz é escrito entre colchetes, a construção A[i] significa o elemento i na matriz A
  7. É possível utilizar objetos compostos por vários campos ou com vários atributos; os valores dos campos são escritos como FieldName[ObjectName].

    Por exemplo, o comprimento da matriz A é escrito como Comprimento[A]; o que os colchetes significam é determinado pelo contexto (uma variável que denota uma matriz ou um objeto é um ponteiro para seus dados constituintes). Depois de atribuir y:=x para qualquer campo f a igualdade f[y]=f[x] será satisfeita; Determinar se um atributo é uma função, uma variável ou qualquer outra coisa é feito pelo contexto.

  8. Um ponteiro pode ter o valor especial NIL, que não aponta para nenhum objeto.
  9. Os parâmetros são passados ​​por valor: o procedimento chamado recebe sua própria cópia dos parâmetros; as alterações nos parâmetros dentro do procedimento não são visíveis do lado de fora. Ao passar objetos, um ponteiro para os dados correspondentes a esse objeto é copiado.
Problema Uma função que classifica um array de elementos 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) Exemplo de matriz: A = (5,2,4,6,1,3,2,6) Exemplo de execução: Sort(A,1 ,length[A ]) Obrigatório: Desenvolva um algoritmo para a função Merge(A,p,q,r) em qualquer linguagem conveniente para você, com ou sem o uso de memória adicional, o que for mais rápido ou mais conveniente para você implementar . Se você tiver sucesso, teremos prazer em recebê-lo para testes adicionais. Minha resposta: O algoritmo descrito no exemplo do pseudocódigo é o algoritmo Merge sort. A principal tarefa da nossa função é classificar um array de números não ordenados: por exemplo, em ordem crescente. O problema é dividido em subtarefas: a sequência de números do array é dividida em arrays menores até que o array se torne de valor único, os elementos dos arrays são comparados, são substituídos (menores por maiores, por índice) e mesclados.
Análise de uma tarefa de teste típica para uma posição de desenvolvedor - 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;
    }
}
Разбор типичного тестового задания на позицию разработчика - 3
Link com código de trabalho para Ideone: AQUI A tarefa foi concluída com sucesso, após a qual fui convidado para uma entrevista, onde, em vez de uma entrevista, eles me jogaram outro lote de tarefas semelhantes e saíram por duas horas, me dando uma caneta e 2 folhas de papel A4. Eles pegaram as folhas sem olhar para elas e disseram que ligariam de volta. Meu prazer com tal passatempo não pode ser descrito em palavras censuradas. Mas, no mínimo, esta é a dura realidade que muitos terão de enfrentar no início da sua jornada.
Разбор типичного тестового задания на позицию разработчика - 4
Sinceramente, desejo-lhe entrevistas interessantes e construtivas. Escolha seu empregador com sabedoria. Tudo de bom!) P.S.: minha análise das empresas empregadoras para abril de 2018 (São Petersburgo) pode ser vista AQUI
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION