JavaRush /Blog Java /Random-ES /Análisis de una tarea de prueba típica para un puesto de ...
Uniges
Nivel 35
Санкт-Петербург

Análisis de una tarea de prueba típica para un puesto de desarrollador

Publicado en el grupo Random-ES
Hoy me gustaría ver los términos de referencia para el puesto de desarrollador en prácticas. Érase una vez lo escribí: quiero compartir mis pensamientos sobre este tema, será útil para que los principiantes tengan una idea de lo que les espera en el futuro a la hora de encontrar trabajo.
Análisis de una tarea de prueba típica para un puesto de desarrollador - 1
La vacante es la siguiente: Desarrollador PostgreSQL en prácticas desde 30.000 rublos. antes de la deducción del impuesto sobre la renta personal LLC Business Technologies San Petersburgo, Kolomyazhsky Prospekt, 33k2 Business Technologies Experiencia laboral requerida: no requerida
  • Tiempo completo, tiempo completo
Responsabilidades:
  • Implementación de tareas de baja complejidad bajo la guía de un desarrollador.
  • Crecimiento constante de calificaciones.
Requisitos:
  • Comprensión de los principios de la programación estructurada y la teoría de bases de datos relacionales.
  • Responsabilidad, independencia, iniciativa.
  • Habilidades comunicativas, capacidad y ganas de trabajar en equipo.
  • Alta capacidad de aprendizaje
Deseable:
  • Conocimiento
  • SQL;
  • Pl\sql;
  • Pl\pgSql;
  • C++, Java, Pascal.
Condiciones:
  • Trabajar en una empresa estable y en desarrollo dinámico.
  • Condiciones de trabajo cómodas
  • Falta de formalismo y burocracia.
  • Amplias oportunidades de crecimiento profesional y profesional.
  • Salario basado en los resultados de la entrevista.
  • Registro según el Código del Trabajo, licencia retribuida de acuerdo con la legislación laboral.
  • Por favor indique el código de trabajo en el encabezado de la carta: Proyecto04
Descripción de la tarea de la prueba: La prueba está destinada al autocontrol para que el solicitante pueda determinar por sí mismo si vale la pena dedicar su tiempo a una entrevista. Pseudocódigo Este pseudocódigo se utiliza para describir algoritmos.
  1. La sangría desde el margen izquierdo indica el nivel de anidamiento.
  2. Los bucles while, for, repetir y las construcciones condicionales tienen el mismo significado que en Pascal.
  3. El símbolo “--” indica un comentario
  4. El símbolo “:=" denota asignación
  5. Las variables son locales para el procedimiento a menos que se indique lo contrario.
  6. El índice de la matriz está escrito entre corchetes, la construcción A[i] significa el elemento i en la matriz A
  7. Es posible utilizar objetos que consten de varios campos o que tengan varios atributos; los valores de los campos se escriben como Nombre de campo[Nombre de objeto].

    Por ejemplo, la longitud de la matriz A se escribe como Longitud[A]; lo que significan los corchetes está determinado por el contexto (una variable que denota una matriz, o un objeto es un puntero a sus datos constituyentes). Después de asignar y:=x para cualquier campo f, se cumplirá la igualdad f[y]=f[x]; La determinación de si un atributo es una función, una variable o cualquier otra cosa se realiza mediante el contexto.

  8. Un puntero puede tener el valor especial NIL, que no apunta a ningún objeto.
  9. Los parámetros se pasan por valor: el procedimiento llamado recibe su propia copia de los parámetros; los cambios en los parámetros dentro del procedimiento no son visibles desde el exterior. Al pasar objetos, se copia un puntero a los datos correspondientes a ese objeto.
Problema Una función que ordena una matriz de elementos A: Sort(A,p,r) 1 si p < r 2 entonces q := round_half_down((p+r)/2) 3 Sort(A,p,q) 4 Sort (A,q +1,r) 5 Merge(A,p,q,r) Ejemplo de matriz: A = (5,2,4,6,1,3,2,6) Ejemplo de ejecución: Sort(A,1 ,longitud[A ]) Requerido: Desarrolle un algoritmo para la función Merge(A,p,q,r) en cualquier idioma que le resulte conveniente, con o sin el uso de memoria adicional, lo que le resulte más rápido o más conveniente de implementar. . Si tiene éxito, estaremos encantados de darle la bienvenida para realizar pruebas adicionales. Mi respuesta: el algoritmo descrito en el ejemplo de pseudocódigo es el algoritmo de ordenación por combinación. La tarea principal de nuestra función es ordenar una serie de números desordenados: por ejemplo, en orden ascendente. El problema se divide en subtareas: la secuencia de números de la matriz se divide en matrices más pequeñas hasta que la matriz se vuelve de un solo valor, los elementos de las matrices se comparan, se reemplazan (más pequeño por más grande, por índice) y se fusionan.
Análisis de una tarea de prueba típica para un puesto de desarrollador - 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;
    }
}
Análisis de una tarea de prueba típica para un puesto de desarrollador - 3
Enlace con código de trabajo a Ideone: AQUÍ La tarea se completó con éxito, luego de lo cual me invitaron a una entrevista, donde, en lugar de una entrevista, me arrojaron otra tanda de tareas similares y se fueron por dos horas, dándome un bolígrafo y 2 hojas de papel A4. Tomaron las hojas sin mirarlas y dijeron que volverían a llamar. El placer que siento por tal pasatiempo no se puede describir con palabras censuradas. Pero, como mínimo, ésta es la dura realidad que muchos tendrán que afrontar al comienzo de su viaje.
Análisis de una tarea de prueba típica para un puesto de desarrollador - 4
Sinceramente les deseo entrevistas interesantes y constructivas. Elija sabiamente a su empleador. ¡Todo lo mejor!) P.D.: mi reseña de las empresas empleadoras para abril de 2018 (San Petersburgo) se puede ver AQUÍ
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION