curso
Las 24 mejores preguntas de la entrevista de programación de 2025
Tanto si buscas una nueva oportunidad en el desarrollo de software o en el análisis de datos, como si eres un responsable de contratación que va a interrogar a un candidato para un puesto vacante en tu empresa, conocer las preguntas y respuestas habituales de las entrevistas de programación es imprescindible.
Prepararse para estas preguntas suele ser un proceso difícil y largo desde el punto de vista del empresario y del candidato.
En este artículo, examinaremos 24 preguntas y respuestas esenciales sobre programación para principiantes, intermedios y avanzados. Estas preguntas y respuestas te ayudarán a prepararte mejor para la entrevista y a saber qué esperar de tu entrevistador/entrevistado.
Preguntas de la entrevista sobre programación básica
Empecemos con algunas de las preguntas más fáciles y comunes de las entrevistas de programación.
1. ¿Qué es una variable en programación?
Las variables son elementos fundamentales en la programación. Una variable es esencialmente un contenedor que almacena datos, y su valor puede modificarse durante la ejecución de un programa. Los lenguajes de programación modernos admiten varios tipos de variables, cada una diseñada para tipos de datos y casos de uso específicos.
Si quieres saberlo todo sobre las variables, nuestro Curso de Introducción a Python es un buen punto de partida.
2. Explicar los tipos de datos con ejemplos
En programación, los tipos de datos son los tipos de valores que pueden almacenar las variables. Cada tipo de dato viene con propiedades asociadas, que son esenciales para saber qué operaciones matemáticas, relacionales o lógicas se pueden realizar.
Por ejemplo, en Python hay varios tipos de datos numéricos, como los enteros, que almacenan números enteros, y los flotantes, que almacenan valores con puntos decimales. También existen las cadenas, que almacenan secuencias ordenadas de caracteres encerrados entre comillas simples o dobles.
integer_var = 25
float_var = 10.2
String_var = "Welcome to DataCamp"
Lee nuestro artículo aparte para descubrir los tipos de datos más comunes de Python.
3. Explica la diferencia entre lenguajes compilados e interpretados
La principal diferencia entre los lenguajes compilados e interpretados es cómo se traducen las instrucciones, también conocidas como algoritmos, a código máquina (es decir, código binario). Los lenguajes compilados se traducen antes de la ejecución, mientras que los lenguajes interpretados se traducen en tiempo de ejecución.
Eso hace que los lenguajes compilados sean más adecuados para tareas complejas que requieren velocidad, como el seguimiento del tráfico en tiempo real en los coches autónomos. Sin embargo, los lenguajes compilados, como C y C++, suelen ser más difíciles de entender y de trabajar que los lenguajes interpretados, como Python.
4. ¿Qué son los condicionales y los bucles?
Las sentencias condicionales, comúnmente conocidas como sentencias if-else, se utilizan para ejecutar determinados bloques de código basándose en condiciones específicas. Estas sentencias ayudan a controlar el flujo de un algoritmo, haciendo que se comporte de forma diferente en distintas situaciones.
Por el contrario, un bucle en programación es una secuencia de código que se repite continuamente hasta que se alcanza una determinada condición, lo que ayuda a reducir horas de trabajo a segundos. Los bucles más habituales son los bucles for y los bucles while. Puedes aprender más sobre ellos en nuestro tutorial sobre bucles.
5. ¿Cuál es la diferencia entre una matriz y una lista enlazada?
Las Matrices y las Listas Enlazadas se encuentran entre las estructuras de datos más importantes. Son estructuras que almacenan información utilizando diferentes estrategias.
Una matriz almacena elementos en posiciones de memoria contiguas, es decir, cada elemento se almacena en una posición de memoria adyacente a otro. Además, el tamaño de una matriz es inmutable y se declara de antemano.
Conjunto. Fuente
En cambio, las listas enlazadas utilizan punteros para almacenar la dirección de memoria del siguiente elemento, como se muestra a continuación.
Lista enlazada. Fuente
En general, las matrices son preferibles cuando se necesita un acceso rápido a los elementos y la memoria es un problema, mientras que las listas enlazadas son mejores en casos de inserciones y supresiones frecuentes.
6. Explica la recursividad con un ejemplo
En programación, la recursividad se produce cuando una función se llama a sí misma. Un gran ejemplo de recursividad es una función diseñada para calcular el factorial de un número. Recuerda que el factorial de un entero no negativo n es el producto de todos los enteros positivos menores o iguales que n.
def factorial(n):
if n < 2:
return 1
else:
return n * factorial(n-1)
factorial(5)
>>> 120
¿Te interesan las funciones recursivas? Lee nuestra Guía para entender las funciones recursivas en Python para empezar.
7. ¿Qué son los punteros y cómo funcionan?
Un puntero es una variable que almacena como valor la dirección de memoria de otra variable. Utilizados habitualmente en estructuras de datos como las listas enlazadas, los punteros permiten el acceso de bajo nivel a la memoria, la asignación dinámica de memoria y muchas otras funcionalidades.
8. ¿Qué es la notación Big-O y por qué es importante?
La notación Big-O es una notación matemática utilizada para describir la complejidad de los algoritmos. La notación Big O mide la complejidad en el peor de los casos de un algoritmo. Considera la complejidad temporal, es decir, el tiempo que tarda un algoritmo en ejecutarse completamente, y la complejidad espacial, el espacio de memoria adicional que necesita un algoritmo. En este tutorial te explicamos los fundamentos de la notación Big O.
Preguntas de la entrevista sobre programación intermedia
En esta sección, nos centramos en las preguntas más comunes para los candidatos que se preparan para puestos de nivel medio con cierta experiencia.
Preguntas de la entrevista sobre programación orientada a objetos
9. ¿Cuáles son los cuatro pilares de la programación orientada a objetos?
La programación orientada a objetos es un paradigma que se centra en los objetos. La OOP se basa en los cuatro pilares siguientes:
- Abstracción. La abstracción en la programación orientada a objetos nos permite manejar la complejidad ocultando al usuario detalles innecesarios. Eso permite al usuario implementar una lógica más compleja sobre la abstracción proporcionada, sin comprender ni siquiera pensar en toda la complejidad oculta.
- Encapsulación. Este proceso de agrupar tus datos y comportamiento en un objeto definido por una clase se llama encapsulación.
- Herencia. Esta propiedad permite crear nuevas clases que conservan la funcionalidad de las clases padre.
- Polimorfismo. El polimorfismo es un concepto que te permite utilizar el mismo nombre para distintos métodos que tienen comportamientos diferentes en función de la entrada.
Existen varios recursos para aprender a utilizar la programación orientada a objetos, como el curso de POO en Python de DataCamp, el curso de POO en R y el tutorial de POO en Java.
10. Explica la diferencia entre clase y objeto
En la programación orientada a objetos, los datos y los métodos se organizan en objetos definidos por su clase. Las clases se diseñan para dictar cómo debe comportarse cada objeto, y luego los objetos se diseñan dentro de esa clase.
11. ¿Qué es el polimorfismo y cómo se implementa en Java/Python?
En la programación orientada a objetos, el polimorfismo te permite utilizar el mismo nombre para distintos métodos que tienen comportamientos diferentes en función de la entrada. Se suele utilizar en combinación con la herencia.
Por ejemplo, supongamos que tenemos una clase padre llamada Forma que tiene un método para calcular el área de la forma. Puedes tener dos clases de niños, Círculo y Cuadrado. Aunque cada una tendrá el método llamado Área, la definición de ese método será diferente para cada forma. Compara los métodos para el área de las distintas formas en el bloque de código siguiente.
# Define the parent class Shape
class Shape:
# Initialize the attributes for the shape
def __init__(self, name):
self.name = name
# Define a generic method for calculating the area
def area(self):
print(f"The area of {self.name} is unknown.")
# Define the child class Circle that inherits from Shape
class Circle(Shape):
# Initialize the attributes for the circle
def __init__(self, name, radius):
# Call the parent class constructor
super().__init__(name)
self.radius = radius
# Override the area method for the circle
def area(self):
# Use the formula pi * r^2
area = 3.14 * self.radius ** 2
print(f"The area of {self.name} is {area}.")
# Define the child class Square that inherits from Shape
class Square(Shape):
# Initialize the attributes for the square
def __init__(self, name, side):
# Call the parent class constructor
super().__init__(name)
self.side = side
# Override the area method for the square
def area(self):
# Use the formula s^2
area = self.side ** 2
print(f"The area of {self.name} is {area}.")
12. Explica la diferencia entre herencia y composición
Tanto la herencia como la composición son técnicas utilizadas en la programación orientada a objetos para mejorar la reutilización del código. El primero es el mecanismo por el que una nueva clase deriva de una clase existente, heredando todas sus propiedades y métodos. Esto último implica construir objetos complejos combinando partes simples en lugar de heredar de una clase base.
En general, la composición ofrece varias ventajas sobre la herencia, como mayor flexibilidad, menor complejidad y mejor mantenibilidad.
Preguntas de la entrevista sobre programación funcional
13. ¿Qué es la programación funcional?
En informática, la programación funcional es un paradigma de programación en el que los programas se construyen aplicando y componiendo funciones. Es un subtipo del paradigma de programación declarativa.
La programación funcional destaca por su trazabilidad y previsibilidad. Esto se debe a que las funciones utilizadas son inmutables, lo que significa que no pueden alterarse. Las funciones se definen, a menudo en una sección separada del código (o a veces en un archivo diferente), y luego se utilizan en todo el código según sea necesario. Este atributo facilita la determinación de lo que ocurre en una sección de código, ya que la función actúa de la misma forma y se llama de la misma manera en todas partes.
¿Sigues confundido sobre las diferencias entre la programación funcional y la programación orientada a objetos? Consulta nuestra guía separada para aclarar las cosas.
14. ¿Cuál es la diferencia entre programación imperativa y declarativa?
En cuanto a los paradigmas de programación, hay dos grandes categorías en las que se encuadran muchos de los paradigmas más utilizados: la programación imperativa y la declarativa.
A un alto nivel, la programación imperativa es una categoría de paradigmas en la que el programador deletrea las instrucciones exactas para que el programa las siga paso a paso. La atención se centra en cómo ejecutar el programa. Este estilo de paradigma de programación podría concebirse como un diagrama de flujo, en el que el programa sigue una ruta determinada basándose en entradas especificadas. La mayoría de los lenguajes de programación convencionales utilizan la programación imperativa.
La programación declarativa, por el contrario, es una categoría de paradigmas en la que el programador define la lógica del programa, pero no da detalles sobre los pasos exactos que debe seguir el programa. La atención se centra en qué debe ejecutar el programa y no precisamente en cómo. Este tipo de programación es menos habitual, pero puede utilizarse en situaciones en las que las reglas están especificadas y no se conoce el camino preciso hacia la solución. Un ejemplo podría ser resolver un puzzle numérico como el Sudoku.
Hay mucho más que hablar sobre los paradigmas de programación. Por eso no podemos dejar pasar la oportunidad de recomendar nuestro Curso de Introducción a los Paradigmas de la Programación.
15. ¿Qué son las funciones puras y por qué son importantes?
Las funciones puras son un componente esencial de la programación funcional. Simplemente, una función pura es un proceso que toma valores de entrada y devuelve valores de salida basándose sólo en los valores de entrada. Las funciones puras no tienen "efectos secundarios", es decir, no influyen en otras variables del programa, no realizan escrituras en archivos ni alteran la información almacenada en una base de datos.
La naturaleza de las funciones puras las convierte en el compañero perfecto de los programadores. En primer lugar, son muy fáciles de depurar, ya que cualquier función pura con el mismo conjunto de parámetros siempre devolverá el mismo valor.
Por la misma razón, las funciones puras son más fáciles de paralelizar, a diferencia de las funciones impuras, que pueden interferir de tal manera que obtengas resultados distintos en ejecuciones diferentes porque actualizan o leen variables mutables en un orden distinto.
16. Explica las funciones de orden superior con un ejemplo
En programación funcional, a diferencia de las funciones puras, una función de orden superior es una función que, o bien toma una o más funciones como argumentos (es decir, un parámetro de procedimiento, que es un parámetro de un procedimiento que a su vez es un procedimiento), o bien devuelve una función, o ambas cosas.
Un ejemplo común de función de alto orden es map()
de Python. Común en muchos lenguajes de programación funcionales, map()
toma como argumentos una función f y una colección de elementos y devuelve una nueva colección con la función aplicada a cada elemento de la colección. Por ejemplo, supongamos que tienes una lista de números y quieres una nueva colección con los números convertidos en flotantes.
numbers = [1,2,3,4]
res = map(float, numbers)
print(list(numbers))
>>> [1.0, 2.0, 3.0, 4.0]
Preguntas de la entrevista sobre programación avanzada
Por último, veamos algunas de las preguntas más habituales para los candidatos con experiencia que se dirigen a las principales empresas tecnológicas.
Preguntas de la entrevista sobre programación dinámica
17. ¿Qué es la programación dinámica y cuándo se utiliza?
La programación dinámica es un método utilizado para resolver problemas complejos dividiéndolos en subproblemas más pequeños que se solapan.
En lugar de empezar de cero cada vez, mantienes un registro de las soluciones a esas partes más pequeñas, lo que significa que no tienes que hacer los mismos cálculos repetidamente. Este método es muy útil para encontrar la subsecuencia común más larga entre dos cadenas o encontrar el coste mínimo para llegar a un punto concreto de una cuadrícula.
18. Explica la diferencia entre memoización y tabulación
La memoización y la tabulación son dos potentes técnicas de la programación dinámica para optimizar el rendimiento de los algoritmos, a menudo de los algoritmos recursivos.
La memoización, también conocida como captura, consiste en almacenar el resultado de las llamadas a funciones caras y devolver los resultados almacenados cada vez que vuelvan a producirse las mismas entradas. De este modo, los subproblemas sólo se calculan una vez. La memoización sigue un enfoque descendente, lo que significa que partimos del "problema superior" y recurrimos hacia abajo para resolver y almacenar en caché múltiples subproblemas.
En cambio, la tabulación consiste en calcular todos los subproblemas más pequeños y almacenar los resultados en una tabla. Se considera un enfoque ascendente porque empieza resolviendo los subproblemas más pequeños, y una vez que tenemos todas las soluciones de estos subproblemas, calculamos la solución del problema superior.
19. Resuelve la secuencia de Fibonacci mediante programación dinámica
La secuencia de Fibonacci es la siguiente: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ... donde cada número de la secuencia se encuentra sumando los dos números que le preceden.
La forma más intuitiva de resolver el problema es mediante la recursividad, como se muestra a continuación.
# a simple recursive program for Fibonacci numbers
def fib(n):
if n <= 1:
return n
return fib(n - 1) + fib(n - 2)
Sin embargo, ésta no es la forma más eficaz de encontrar la secuencia. El algoritmo anterior tiene una complejidad temporal exponencial, señalada como O(2^N), lo que significa que el número de cálculos aumenta exponencialmente a medida que aumenta N.
Otra forma de ver el problema de la secuencia de Fibonacci es dividirlo en pequeños subproblemas, como se indica a continuación:
Secuencia de Fibonacci para fib(5). Fuente
Como puedes ver, si ejecutáramos nuestro código para n=5, la función fib()
calcula la misma operación varias veces, lo que supone un derroche de recursos informáticos.
La programación dinámica proporciona varias técnicas para optimizar el cálculo de la secuencia de Fibonacci.
Analicemos el problema de la memoización. Como ya se ha dicho, consiste en almacenar el resultado de costosas llamadas a funciones y devolver los resultados almacenados cada vez que vuelvan a producirse las mismas entradas. Esto se consigue con el siguiente código, que almacena los resultados de la función fibonacci_memo()
en un diccionario. Con esta optimización, el cálculo de todas las entradas sólo se computa una vez, lo que reduce la complejidad temporal a lineal, señalada como O(N).
cache = {0: 0, 1: 1}
def fibonacci_memo(n):
if n in cache: # Base case
return cache[n]
# Compute and cache the Fibonacci number
cache[n] = fibonacci_memo(n - 1) + fibonacci_memo(n - 2) # Recursive case
return cache[n]
[fibonacci_memo(n) for n in range(15)]
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]
20. Explica el concepto de subestructura óptima y subproblemas superpuestos
En programación dinámica, los subproblemas son versiones más pequeñas del problema original. Cualquier problema tiene subproblemas superpuestos si encontrar su solución implica resolver el mismo subproblema varias veces, como calcular la secuencia de Fibonacci más arriba.
Por otra parte, se considera que un problema tiene una subestructura óptima si la solución óptima del problema dado puede construirse a partir de soluciones óptimas de sus subproblemas.
Preguntas de la entrevista técnica de programación
21. Explica cómo funcionan las tablas hash
Los hashmaps, también conocidos como hashtables, representan una de las implementaciones más comunes del hashing. Hashmaps almacena pares clave-valor (por ejemplo, ID de empleado y nombre de empleado) en una lista accesible a través de su índice. Podríamos decir que un hashmap es una estructura de datos que aprovecha las técnicas de hashing para almacenar datos de forma asociativa.
La idea de los hashmaps es distribuir las entradas (pares clave/valor) en una matriz de cubos. Dada una clave, una función hash calculará un índice distinto que sugiera dónde se puede encontrar la entrada. El uso de un índice en lugar de la clave original hace que los hashmaps sean especialmente adecuados para múltiples operaciones con datos, como la inserción, eliminación y búsqueda de datos.
Un ejemplo ilustrativo de hashtables son los diccionarios de Python. Consulta nuestra Guía de Hashmaps de Python para saber más sobre estas potentes estructuras de datos.
22. ¿Qué es un bloqueo en multihilo?
Los hilos te permiten que distintas partes de tu proceso se ejecuten simultáneamente. Estas diferentes partes suelen ser individuales y tener una unidad de ejecución independiente perteneciente al mismo proceso. El proceso no es más que un programa en ejecución que tiene unidades individuales que pueden ejecutarse simultáneamente.
El bloqueo se produce cuando varios subprocesos se bloquean indefinidamente, esperando recursos que otros subprocesos tienen en su poder. Este escenario conduce a un ciclo irrompible de dependencias en el que ningún hilo implicado puede progresar.
Lee el tutorial sobre hilos de Python de DataCamp para saber más sobre los hilos y por qué son importantes para el análisis de datos,
23. ¿Cuál es la diferencia entre la búsqueda exhaustiva (BFS) y la búsqueda profunda (DFS)?
La búsqueda primero en profundidad (BFS) y la búsqueda primero en amplitud (DFS) son algoritmos de recorrido de grafos diseñados para explorar un grafo o árbol.
El BFS explora un grafo nivel a nivel, visitando todos los nodos de la profundidad actual antes de pasar a la siguiente. Por el contrario, DFS da prioridad a explorar una rama lo más profundamente posible antes de retroceder para investigar ramas alternativas.
El BFS es especialmente útil cuando el objetivo es encontrar el camino más corto en un grafo no ponderado. Sin embargo, el BFS puede utilizar mucha memoria, sobre todo en grafos anchos, porque debe llevar la cuenta de todos los nodos de cada nivel. BFS es una opción excelente para el análisis de redes sociales o problemas sencillos de encaminamiento.
La DFS, en cambio, es útil cuando el objetivo es explorar todos los caminos o soluciones posibles, como la resolución de puzzles o la búsqueda de ciclos en un grafo. A diferencia del BFS, el DFS no garantiza el camino más corto. Sin embargo, es más eficiente en cuanto a memoria, ya que sólo mantiene un registro de la ruta actual.
Puedes obtener más información sobre estos algoritmos en nuestra Guía de Búsqueda Amplia y en nuestra Guía de Búsqueda Profunda.
24. ¿Cuál es la complejidad temporal de quicksort y mergesort?
La ordenación por combinación funciona dividiendo recursivamente la matriz de entrada en submatrices más pequeñas y ordenando esas submatrices, para luego volver a combinarlas y obtener la salida ordenada. Tiene una complejidad temporal linealítmica, señalada como O(N log(N)).
En notación Big O, el tiempo linealítmico se comporta de forma similar al tiempo lineal, lo que significa que si se duplica la cantidad de datos de entrada, también se duplicará el tiempo que tarda la ordenación merge en procesar los datos.
El algoritmo de ordenación rápida utiliza una técnica de partición eligiendo un valor de la lista llamado pivote. Todos los elementos menores que el pivote terminarán a la izquierda del pivote, y los mayores a la derecha. La ordenación rápida se ejecutará recursivamente en los elementos situados a izquierda y derecha del pivote.
La ordenación rápida tiene una complejidad temporal exponencial, señalada como O(N^2), para el peor de los casos, que se produce cuando la elección del pivote da lugar sistemáticamente a particiones desequilibradas.
Conclusión
En este artículo, hemos tratado muchas preguntas de entrevistas de programación que abarcan temas básicos, intermedios y avanzados. Desde la comprensión de los conceptos básicos de las estructuras de datos, como las matrices y las listas enlazadas, hasta la inmersión en técnicas más complejas de las disciplinas de la programación orientada a objetos, la programación funcional y la programación dinámica, hemos explorado las áreas clave por las que podrían preguntar los posibles empleadores.
Si necesitas más formación en programación para tu entrevista o estás interesado en preguntas de entrevista para otros puestos en el campo de los datos y la IA, consulta los siguientes recursos:
- 28 preguntas principales de la entrevista a un científico de datos para todos los niveles
- Las 36 mejores preguntas y respuestas de entrevistas sobre Python para 2025
- Las 51 mejores preguntas y respuestas de la entrevista sobre el almacén de datos de 2025
- Las 30 mejores preguntas de la entrevista sobre aprendizaje automático para 2025
- 80 mejores preguntas y respuestas de entrevistas SQL [2025]
- Curso de Preguntas de Codificación para Entrevistas en Python
- Las 30 mejores preguntas de la entrevista sobre Big Data: Guía práctica completa
- Las 39 mejores preguntas y respuestas de entrevistas sobre ingeniería de datos en 2025
- Las 34 mejores preguntas y respuestas de entrevistas sobre MySQL para 2025
Preguntas frecuentes de la entrevista sobre programación
¿Por qué es importante practicar para las entrevistas de programación?
Tanto si buscas una nueva oportunidad en el desarrollo de software o en el análisis de datos, como si eres un responsable de contratación que va a interrogar a un candidato para un puesto vacante en tu empresa, conocer las preguntas y respuestas habituales de las entrevistas de programación es imprescindible. Debes ser capaz de demostrar tu amplitud de conocimientos aplicables al puesto para el que te entrevistas.
¿Son difíciles las preguntas de las entrevistas sobre programación?
Es difícil calcular la dificultad de las entrevistas de programación. Hay muchas variables que pueden afectar a su complejidad, como los conocimientos técnicos del entrevistador, la naturaleza del puesto y el nivel de antigüedad. Sin embargo, estar preparado es la mejor idea.
¿Cuál es la mejor manera de prepararse para las preguntas de una entrevista de programación?
Aquí tienes algunos consejos para preparar las entrevistas de programación:
- Refresca tus conceptos básicos
- Recopila experiencias previas y crea historias convincentes
- Practica la codificación y la resolución de problemas
- Practica con proyectos reales
- Estudia bien las preguntas de la entrevista
¿Por qué es importante aprender las preguntas de la entrevista de programación para contratar especialistas?
El objetivo de una entrevista de programación es evaluar las habilidades técnicas, la capacidad para resolver problemas y la creatividad del candidato. Para evaluar estas habilidades y sacar el máximo partido del candidato, los entrevistadores también deben estar familiarizados con los conceptos de programación.

Soy analista de datos autónomo y colaboro con empresas y organizaciones de todo el mundo en proyectos de ciencia de datos. También soy instructor de ciencia de datos con más de 2 años de experiencia. Escribo regularmente artículos relacionados con la ciencia de datos en inglés y español, algunos de los cuales se han publicado en sitios web consolidados como DataCamp, Towards Data Science y Analytics Vidhya Como científico de datos con formación en ciencias políticas y derecho, mi objetivo es trabajar en la interacción de las políticas públicas, el derecho y la tecnología, aprovechando el poder de las ideas para promover soluciones y narrativas innovadoras que puedan ayudarnos a abordar retos urgentes, como la crisis climática. Me considero autodidacta, aprendiz constante y firme partidaria de la multidisciplinariedad. Nunca es demasiado tarde para aprender cosas nuevas.
Los mejores cursos de DataCamp
curso
Introduction to Object-Oriented Programming in Java
curso
Parallel Programming in R
blog
Las 23 mejores preguntas y respuestas de entrevistas sobre Python

blog
Las 25 preguntas más frecuentes en las entrevistas sobre aprendizaje automático para 2024
blog
Las 20 preguntas más frecuentes en una entrevista sobre NumPy: De Básico a Avanzado

Tim Lu
20 min

blog
Las 39 mejores preguntas y respuestas de entrevistas sobre ingeniería de datos en 2025
blog
28 preguntas principales de la entrevista a un científico de datos para todos los niveles
tutorial