Y 5 plataformas en las que puedes practicar para resolver problemas algorítmicos

La programación es un área aplicada en la que el éxito llega a través de la práctica. Cuantas más tareas resuelvas, más seguro te sentirás en la profesión. Esto es especialmente importante no solo para el crecimiento profesional, sino también para superar con éxito las entrevistas y realizar las tareas de prueba. Muchas empresas incluyen tareas de programación en el proceso de selección para evaluar el nivel de habilidades del candidato.

En este artículo, te contaremos con qué preguntas y tareas te puedes encontrar al ser contratado.

Ejemplos de tareas de prueba para principiantes

Enumeraremos ejemplos de tareas y preguntas para programadores principiantes que pueden aparecer en las entrevistas y en las tareas de prueba.

Tarea 1. ¿Qué mostrará en pantalla este código?

function b(x, y, a) {
arguments[2] = 10;
alert(a);
}
b(1, 2, 3);

Respuesta: El valor 10. La función b contiene tres argumentos, sus índices comienzan con [0]. Resulta que el argumento con el índice [2] es la función a. En la primera línea de la función, al tercer argumento se le asigna el valor 10.

Tarea 2. Explica en qué orden se ejecutan estas secuencias de comandos. ¿Por qué de esa manera?

<script async src="script-1.js"></script> // Tiempo de carga del script 1.5s
<script src="script-2.js"></script> // Tiempo de carga del script 1s
<script defer src="script-3.js"></script> // Tiempo de carga del script 3s
<script defer src="script-4.js"></script> // Tiempo de carga del script 1.5s
<script src="script-5.js"></script> // Tiempo de carga del script 2s
<script async src="script-6.js"></script> // Tiempo de carga del script 1s
<script defer src="script-7.js"></script> // Tiempo de carga del script 0.1s

Respuesta: 2 — 6 — 1 — 5 — 3 — 4 — 7. Cuando el navegador carga HTML y llega a la etiqueta <script>…</script>, no puede construir más el DOM. Primero necesita ejecutar el script. Con los scripts externos <script>…</script> es lo mismo: el navegador necesita esperar a que el script se cargue y solo después de eso procesar el resto de la página.

Consideremos las funciones con más detalle:

  • async: orden de carga (lo que se cargue primero, se activará). Se ejecuta antes de la carga completa de la página, si los scripts son pequeños o se almacenan en caché, y el documento es voluminoso.
  • defer: orden del documento (ubicación en el documento). Se ejecuta después de la carga y el procesamiento del documento antes de DOMContentLoaded.

Por lo tanto, primero se ejecutará el segundo script, porque es el primero en la cola y en la velocidad de carga. Luego el sexto: se carga con la misma velocidad, en un segundo. La carga asíncrona es sin cola, el primer script se carga durante un segundo y medio y se ejecuta después de la carga. Luego, los scripts tercero, cuarto, quinto y séptimo. Se cargan al final y en orden de cola de colocación en el DOM.

Tarea 3. ¿Qué mostrará en pantalla este código?

public class Main {
    public static void main(String[] args) {
        int x = 5;
        if (x == 5) 
            System.out.println("X is 5");
        else
            System.out.println("X is not 5");
    }
}

Respuesta: Como la condición x == 5 es verdadera, se mostrará X is 5.

Tarea 4. ¿Qué sucederá al compilar este código en Java?

public class Main {
    public static void main(String[] args) {
        int x = 5 / 0;
        System.out.println(x);
    }
}

Respuesta: Se lanzará una excepción ArithmeticException al intentar dividir entre cero.

Tarea 5. ¿Cuál será el resultado de la ejecución del código en Java?

public class Main {
    public static void main(String[] args) {
        int num = 10;
        while (num > 0) {
            System.out.println(num);
            num--;
        }
    }
}

Respuesta: En la pantalla se mostrarán los números del 10 al 1.

Tarea 6. ¿Funciona correctamente este código en Java?

public class Main {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        System.out.println(arr[3]);
    }
}

Respuesta: No, se lanzará una excepción ArrayIndexOutOfBoundsException, ya que el array no tiene un tercer elemento.

Tarea 7. ¿Qué está mal en este código en C++?

operator int() const {
    return *this;
}

Respuesta: Esta función causará recursión.

Tarea 8. Escribe un programa en Java. Debe leer un array de números enteros y mostrar en pantalla su suma y su promedio aritmético.

Respuesta:

Para crear una instancia para leer el array de datos, usa BufferedReader o Scanner. Para calcular la suma y el promedio aritmético, usa un bucle for.

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Introduce el número de elementos de la matriz: ");
        int n = scanner.nextInt();
        int[] numbers = new int[n];
        for (int i = 0; i < n; i++) {
            System.out.print("Introducir elemento " + (i + 1) + ": ");
            numbers[i] = scanner.nextInt();
        }
        int sum = 0;
        for (int i : numbers) {
            sum += i;
        }
        double average = (double) sum / n;
        System.out.println("Suma: " + sum);
        System.out.println("Promedio: " + average);
    }
}

Tarea 9. Cambia el orden de los elementos sin usar clases.

Respuesta:

Hay varias maneras de resolver este problema, pero es mejor elegir la más obvia y sencilla. Así, seguramente no te confundirás y podrás realizar la tarea rápidamente.

package Javatest.company;
public class Reverse {
    public static String reverseByArray(String s) {
        char[] a = s.toCharArray();
        char[] b = new char[a.length];
        for (int i = 0; i < a.length; i++) {
            b[(a.length - 1) - i] = a[i];
        }
        return new String(b);
    }
    public static void main(String[] args) {
        String string = "Java test";
        System.out.println(reverseByArray(string));
    }
}

Tarea 10. Escribe un programa para mostrar los números de Fibonacci.

Respuesta:

Los números de Fibonacci son una secuencia en la que cada número siguiente después de la unidad es la suma de los dos números que le preceden. Por ejemplo: 1, 1, 2, 3, 5, 8 y así sucesivamente.

package javatest.company;
import java.util.Scanner;
public class Main {
    public static void main(String args[]) {
        System.out.println("Introduce el número hasta el que se imprimirá la serie Fibonacci: ");
        int number = new Scanner(System.in).nextInt();
        System.out.println("Serie de Fibonacci hasta " + number +" números : ");
        for(int i=1; i<=number; i++){
            System.out.print(fibonacci2(i) +" ");
        }
    }
    public static int fibonacci(int number){
        if(number == 1 || number == 2){
            return 1;
        }
        return fibonacci(number-1) + fibonacci(number -2); 
    }
    public static int fibonacci2(int number){
        if(number == 1 || number == 2){
            return 1;
        }
        int fibo1=1, fibo2=1, fibonacci=1;
        for(int i= 3; i<= number; i++){
            fibonacci = fibo1 + fibo2; 
            fibo1 = fibo2;
            fibo2 = fibonacci;
        }
        return fibonacci;
    }
}

Tarea 11. Explica qué es un árbol binario de búsqueda y dónde se aplica.

A menudo, durante las entrevistas, se comprueban los conocimientos teóricos, por lo que se solicita que se explique un término o la esencia de algún fenómeno.

Respuesta:

Un árbol binario de búsqueda es un array de datos donde cada nodo contiene una clave (valor), así como referencias a otros dos nodos: izquierdo y derecho. Las claves de la izquierda son siempre menores que la clave del propio nodo, y las claves de la derecha son siempre mayores. Imagina una guía telefónica: para encontrar un número, revisas las páginas por orden alfabético. Un árbol binario funciona según el mismo principio, solo que en lugar de páginas, hay nodos del árbol, y en lugar de letras, hay claves.

Los árboles binarios de búsqueda se utilizan en diversas áreas: desde bases de datos y sistemas de búsqueda hasta la creación de otras estructuras de datos, como colas de prioridad o conjuntos.

Tarea 12. Explica qué es la recursión.

Respuesta:

La recursión es un proceso en el que una función se llama a sí misma. Visualmente, esto se puede representar de la siguiente manera: te paras frente a un espejo, y en el espejo también hay un espejo, en él también hay un espejo, y así sucesivamente. La recursión funciona según el mismo principio: una función se llama a sí misma hasta que alcanza una condición determinada.

Tarea 13. Explica las diferencias entre una lista doblemente enlazada y una lista simplemente enlazada.

Otra tarea frecuente es explicar la diferencia entre dos términos.

Respuesta:

La diferencia entre una lista doblemente enlazada y una lista simplemente enlazada radica en la conexión de los nodos entre sí. Una lista simplemente enlazada es una estructura lineal en la que cada nodo contiene datos y una referencia al siguiente nodo de la lista. Una lista doblemente enlazada también es una estructura lineal, pero cada nodo en ella contiene una referencia al siguiente y al nodo anterior de la lista.

Tarea 14. Explica cuál es la diferencia entre una pila (Stack) y una cola (Queue).

Respuesta:

Una pila y una cola no tienen acceso libre a todos los elementos de la estructura de datos; esa es su similitud. La principal diferencia es que una pila es una estructura LIFO (Last-In, First-Out): solo el último elemento agregado está disponible. Una cola, por otro lado, pertenece a FIFO (First-In, First-Out): solo el primer elemento agregado está disponible.

Tarea 15. Explica a un niño de primaria qué es una base de datos.

Una buena manera de entender qué tan bien una persona comprende un tema es pedirle que explique un concepto complejo a un niño. Los empleadores lo saben, así que no te sorprendas si te piden que hagas algo similar.

Respuesta:

Imagina una gran biblioteca, pero en lugar de libros, hay todos tus juguetes favoritos. Puedes encontrar fácilmente un coche, una muñeca o un juego de construcción, porque cada objeto tiene su lugar y sabes dónde buscarlo.

Una base de datos es como esa gran biblioteca, pero en lugar de juguetes o libros, almacena información. En lugar de buscar un coche o una muñeca, puedes encontrar información sobre amigos, dibujos animados favoritos, animales.

Cuando quieres encontrar algo, solo tienes que hacerle una pregunta a la computadora, y ella, como una bibliotecaria, encontrará la información necesaria en este gran conjunto de datos.

Tarea 16. Escribe un informe de error para un horno de microondas que no calienta la comida.

Estas tareas son frecuentes: es necesario escribir un informe sobre un error en el funcionamiento de un aparato simple. Aunque estas tareas pertenecen a las pruebas, también se las ofrecen a los programadores.

Respuesta:

Título: El horno de microondas no calienta los alimentos

Descripción: El horno de microondas no calienta los alimentos. Al encender el dispositivo y seleccionar el modo de funcionamiento, se inicia el temporizador, pero la comida no se calienta.

Pasos para reproducir:

  1. Conectar el horno de microondas a la red.
  2. Colocar un plato con comida en el horno de microondas.
  3. Seleccionar el modo de funcionamiento y configurar el temporizador.
  4. Presionar el botón «Inicio».

Resultado esperado: La comida debe calentarse a la temperatura establecida en el tiempo establecido.

Resultado real: La comida no se calienta, permanece fría.

Plataformas con tareas de programación

A continuación, hay varios sitios web donde puedes encontrar muchas tareas de programación que te ayudarán a perfeccionar tus habilidades y prepararte para las tareas de prueba.

Codeforces

Una plataforma popular con entrenamiento, tareas, competiciones y otras actividades para desarrolladores. Codeforces es una de las bases de datos de tareas más grandes, y también tiene una comunidad desarrollada. Si es necesario, puedes recurrir a un desarrollador experimentado en busca de ayuda, y es muy probable que te respondan.

Captura de pantalla de un problema de programación en la plataforma Codeforces.
Mejora tus habilidades de programación con Codeforces.

All Cups

Plataforma del equipo VK para especialistas en TI principiantes y experimentados. Aquí puedes resolver problemas, estudiar materiales útiles y competir con otros programadores.

En All Cups hay tareas de programación deportiva, aprendizaje automático, redes neuronales, administración de sistemas. Este es uno de los pocos sitios web en ruso que puede competir con los recursos extranjeros en cuanto a volumen de materiales.

Kaggle

En Kaggle hay muchas tareas para aquellos que trabajan con big data y aprendizaje automático. Además de las tareas, el sitio web contiene materiales útiles: estúdialos para mejorar en la profesión. También puedes no solo resolver problemas, sino también participar en competiciones con otros desarrolladores.

Captura de pantalla de un notebook de Kaggle mostrando un proyecto en Java.
Explora los datos y crea tus propios proyectos en Kaggle.

Codewars

En este sitio web se recopilan tareas y desafíos sobre diversos temas, desde lenguajes de programación hasta algoritmos. Podrás mejorar diferentes habilidades de desarrollo, y también mejorar la teoría gracias al blog con materiales útiles.

LeetCode

Una colección de tareas que particularmente les gustan a los programadores que buscan trabajar en grandes empresas como Amazon, Apple, Netflix y Google. La característica principal del sitio web es que las tareas son lo más parecidas posible a las que se encuentran en las entrevistas.

Consejos para superar las entrevistas para principiantes

Si deseas superar con éxito una entrevista, realizar correctamente una tarea de prueba y obtener una oferta, ten en cuenta estas recomendaciones:

  1. Si no sabes cómo resolver un problema, no te asustes. Ofrece diferentes opciones de solución para mostrar tu proceso de pensamiento. El empleador verá cómo intentas realizar la tarea. Además, demostrarás que no temes los desafíos complejos.
  2. Intenta no preocuparte. El empleador o el departamento de recursos humanos entienden que no eres un especialista de nivel medio o superior, por lo que no te darán tareas demasiado difíciles.
  3. Haz preguntas. Este es uno de los principales hábitos de un principiante que quiere desarrollarse en la profesión. También vale la pena hacer preguntas durante la entrevista para comprender mejor la tarea y, por lo tanto, ofrecer la solución correcta.

Después de completar la tarea de prueba, solicita comentarios. Más aún si no lograste obtener el trabajo. Así comprenderás tus deficiencias y podrás corregirlas para no volver a cometerlas la próxima vez.

Categorizado en:

Programación,