Preguntas para Entrevistas de Desarrollador Frontend Junior: React, Herramientas y Temas Avanzados

Milad Bonakdar
Autor
Domina React, herramientas de construcción, optimización del rendimiento, depuración, accesibilidad, pruebas y habilidades blandas con 23 preguntas esenciales para entrevistas. Preparación perfecta para entrevistas de desarrollador frontend junior en 2024-2025.
Introducción
Esta guía exhaustiva contiene 21 preguntas de entrevista cuidadosamente seleccionadas que cubren temas avanzados de desarrollo frontend: React y frameworks, herramientas de construcción y control de versiones, optimización del rendimiento, depuración, accesibilidad, pruebas y habilidades blandas. Estas son las preguntas que los desarrolladores frontend junior realmente encuentran en las entrevistas de 2024-2025. Cada pregunta incluye una respuesta completa, una evaluación de rareza y una calificación de dificultad basada en el análisis de cientos de entrevistas reales de las principales empresas tecnológicas y startups.
Esta es la Parte 2 de nuestra guía completa de entrevistas. Para conocer los fundamentos de HTML, CSS y JavaScript, consulta la Parte 1: Fundamentos de HTML, CSS y JavaScript.
React & Frameworks (8 Preguntas)
33. ¿Qué es JSX y por qué lo usamos en React?
Respuesta: JSX (JavaScript XML) es una extensión de sintaxis para JavaScript que se parece a HTML y se utiliza para describir la estructura de la interfaz de usuario en React.
Ejemplo:
Beneficios:
- Más legible e intuitivo que
React.createElement() - Se parece a HTML pero con toda la potencia de JavaScript
- Admite expresiones dentro de llaves
{} - Type-safe cuando se usa TypeScript
- Sintaxis familiar para los desarrolladores
Diferencias clave con HTML:
- Usar
classNameen lugar declass - Usar
htmlForen lugar defor - Todos los atributos son camelCase (
onClick,onChange) - Debe cerrar todas las etiquetas (incluidas
<img />,<br />)
Rareza: Común Dificultad: Fácil
34. Explica la diferencia entre props y state en React
Respuesta:
Props (Propiedades):
- Datos pasados DESDE el componente padre AL componente hijo
- De solo lectura (inmutable desde la perspectiva del hijo)
- Se utiliza para la configuración del componente
- Los cambios provienen de la renderización del padre
State (Estado):
- Datos gestionados DENTRO de un componente
- Mutable (se puede cambiar con la función setter)
- Los cambios activan las re-renderizaciones
- Privado para el componente
Diferencia clave: Props fluyen hacia abajo (padre a hijo), state es local al componente.
Rareza: Común Dificultad: Fácil
35. ¿Qué es el hook useState y cómo lo usas?
Respuesta: useState es un Hook de React que agrega gestión de estado a los componentes funcionales.
Sintaxis:
Ejemplos:
Puntos clave:
- Las actualizaciones de estado activan re-renderizaciones
- Las actualizaciones de estado son asíncronas
- Utiliza actualizaciones funcionales para el estado basado en el estado anterior:
setCount(prev => prev + 1)
Rareza: Común Dificultad: Fácil-Medio
36. ¿Qué hace el hook useEffect? Explica el array de dependencias.
Respuesta: useEffect ejecuta efectos secundarios después de la renderización (obtención de datos, suscripciones, manipulación del DOM).
Sintaxis:
Comportamiento del array de dependencias:
Casos de uso comunes:
Rareza: Común Dificultad: Medio
37. ¿Cómo renderizas una lista de elementos en React? ¿Por qué necesitamos keys?
Respuesta:
Renderizar listas:
Por qué las keys son importantes: Las keys ayudan a React a identificar qué elementos han cambiado, se han añadido o se han eliminado. Permiten actualizaciones eficientes al:
- Minimizar la manipulación del DOM
- Preservar el estado del componente
- Mantener la identidad adecuada del elemento
- Optimizar el algoritmo de reconciliación
Directrices para las keys:
Cuando el índice es aceptable: Listas estáticas que nunca se reordenan ni cambian.
Rareza: Común Dificultad: Fácil-Medio
38. ¿Qué es el DOM Virtual y por qué React lo usa?
Respuesta: El DOM Virtual es una representación ligera de JavaScript del DOM real que React mantiene en memoria.
Cómo funciona:
- Renderización: React crea un árbol DOM Virtual cuando cambia el estado
- Diff: React compara el nuevo DOM Virtual con la versión anterior (reconciliación)
- Actualización: React calcula los cambios mínimos necesarios
- Patch: React actualiza solo las partes modificadas del DOM real
Por qué es beneficioso:
- Rendimiento: La manipulación directa del DOM es lenta; React agrupa y minimiza las actualizaciones
- Eficiencia: Solo actualiza los elementos modificados, no todo el árbol
- Experiencia del desarrollador: Escribe código declarativo, React gestiona las actualizaciones eficientes
- Abstracción: El mismo código puede dirigirse a diferentes plataformas (React Native, VR)
Ejemplo:
Nota: El React moderno (arquitectura Fiber) no compara literalmente dos DOM Virtuales, sino que utiliza un concepto similar con los nodos Fiber.
Rareza: Común Dificultad: Medio
39. ¿Cómo manejas los formularios en React?
Respuesta:
Componentes controlados (recomendado): Los valores de los elementos del formulario están controlados por el estado de React.
Componentes no controlados (menos común): Utiliza refs para acceder directamente a los valores del DOM.
Mejor práctica: Utiliza componentes controlados para la mayoría de los casos.
Rareza: Común Dificultad: Medio
40. ¿Cuál es la diferencia entre componentes funcionales y de clase?
Respuesta:
Componentes funcionales (Moderno, preferido):
Componentes de clase (Legado):
Diferencias clave:
- Sintaxis: Funciones vs clases
- Estado: Hooks (useState) vs this.state
- Ciclo de vida: Hooks (useEffect) vs métodos de ciclo de vida
- Palabra clave this: No es necesaria en los componentes funcionales
- Boilerplate: Menos código en los componentes funcionales
- Rendimiento: Ligeramente mejor con los componentes funcionales
Estándar moderno: Los componentes funcionales con Hooks son ahora el enfoque recomendado (desde React 16.8). Los componentes de clase siguen funcionando, pero se consideran heredados.
Rareza: Común Dificultad: Fácil-Medio
Herramientas de construcción y control de versiones (5 preguntas)
41. ¿Qué es npm y para qué se utiliza package.json?
Respuesta: npm (Node Package Manager) es el gestor de paquetes predeterminado para JavaScript, que se utiliza para instalar, gestionar y compartir paquetes de código.
package.json es el archivo de manifiesto que contiene:
- Metadatos: Nombre del proyecto, versión, descripción, autor
- Dependencias: Paquetes necesarios para la producción (
dependencies) - DevDependencies: Paquetes necesarios solo para el desarrollo (
devDependencies) - Scripts: Comandos para tareas comunes (start, build, test)
Ejemplo de package.json:
Comandos comunes:
npm install- Instalar todas las dependenciasnpm install package-name- Instalar un paquete específiconpm install --save-dev package-name- Instalar como dependencia de desarrollonpm run script-name- Ejecutar un script de npmnpm update- Actualizar paquetes
Rareza: Común Dificultad: Fácil
42. ¿Qué es Git y por qué los equipos lo usan?
Respuesta: Git es un sistema de control de versiones distribuido que rastrea los cambios en el código a lo largo del tiempo.
Por qué los equipos usan Git:
- Colaboración: Múltiples desarrolladores trabajan en la misma base de código sin conflictos
- Historial: Registro completo de todos los cambios (quién, qué, cuándo, por qué)
- Branching (Ramificación): Trabajar en características de forma independiente sin afectar al código principal
- Backup (Copia de seguridad): Código almacenado en múltiples ubicaciones (local + remoto)
- Rollback (Reversión): Revertir fácilmente a versiones de trabajo anteriores
- Code review (Revisión de código): Revisar los cambios antes de fusionarlos (pull requests)
- Experimentación: Probar nuevas ideas en ramas sin riesgo
Conceptos básicos:
- Repository (repo): Carpeta del proyecto rastreada por Git
- Commit: Instantánea de los cambios con un mensaje
- Branch (Rama): Línea de desarrollo independiente
- Merge (Fusión): Combinar los cambios de diferentes ramas
- Remote (Remoto): Repositorio alojado en línea (GitHub, GitLab)
Estándar de la industria: Más del 93% de los desarrolladores usan Git en todo el mundo.
Rareza: Común Dificultad: Fácil
43. Explica los comandos y el flujo de trabajo comunes de Git
Respuesta:
Flujo de trabajo básico:
Comandos esenciales que los juniors deben conocer:
clone- Copiar el repositorio remotoadd- Agregar cambios al stagecommit- Guardar la instantánea con un mensajepush- Subir al remotopull- Descargar + fusionar los cambios remotosbranch- Listar/crear ramascheckout/switch- Cambiar de ramastatus- Ver el estado actuallog- Ver el historial de commits
Rareza: Común Dificultad: Fácil-Medio
44. ¿Qué es un conflicto de fusión y cómo lo resolverías?
Respuesta: Un conflicto de fusión se produce cuando Git no puede fusionar automáticamente los cambios porque existen modificaciones en competencia en las mismas líneas de código.
Escenario común:
Marcadores de conflicto:
Pasos para la resolución:
- Identificar los conflictos: Git marca los archivos con conflictos
- Abrir los archivos en conflicto: Busca los marcadores de conflicto
- Decidir qué mantener: Revisar ambos cambios
- Editar el código: Eliminar los marcadores, mantener el código deseado
- Probar: Asegurarse de que el código funciona correctamente
- Agregar los archivos resueltos al stage:
git add file.js - Completar la fusión:
git commit
Mejores prácticas:
- Comunicarse con el equipo
- Hacer pull con frecuencia para minimizar los conflictos
- Mantener los commits pequeños y enfocados
- Probar a fondo después de la resolución
Rareza: Común Dificultad: Medio
45. ¿Qué hace Webpack? ¿Qué es Vite?
Respuesta:
Webpack: Un empaquetador de módulos que toma JavaScript, CSS, imágenes y otros activos, los procesa y los empaqueta en archivos optimizados para el navegador.
Qué hace:
- Empaqueta múltiples archivos en menos archivos
- Transforma el código (Babel para JSX/ES6, Sass a CSS)
- Optimiza para la producción (minificación, tree shaking)
- Maneja las dependencias
- Code splitting para el rendimiento
Concepto básico:
Vite: Herramienta de construcción moderna que es significativamente más rápida que los empaquetadores tradicionales como Webpack.
Por qué Vite es más rápido:
- Utiliza módulos ES nativos durante el desarrollo (no necesita empaquetado)
- Hot Module Replacement (HMR) es instantáneo
- Solo empaqueta para la producción
- Mejor experiencia para el desarrollador
Cuándo usar:
- Vite: Nuevos proyectos, frameworks modernos (React, Vue)
- Webpack: Proyectos existentes, necesita una configuración compleja
Rareza: Común Dificultad: Fácil-Medio
Rendimiento web y optimización (3 preguntas)
46. ¿Cómo optimizarías el rendimiento de carga de un sitio web?
Respuesta:
Optimización de imágenes:
- Comprimir las imágenes (JPG para fotos, PNG para gráficos, WebP para ambos)
- Usar tamaños apropiados (no cargar una imagen de 4000px para una visualización de 300px)
- Cargar las imágenes por lazy loading debajo del pliegue
- Usar
srcsetpara imágenes responsive
Optimización del código:
- Minificar JavaScript, CSS, HTML (eliminar espacios en blanco, comentarios)
- Empaquetar y comprimir los archivos (gzip o Brotli)
- Eliminar CSS/JS no utilizados (tree shaking)
- Code splitting (cargar solo el código necesario por página)
Caching (Almacenamiento en caché):
- Caching del navegador con los encabezados de caché adecuados
- Usar CDN para los activos estáticos
- Service workers para las capacidades offline
Estrategias de carga:
- CSS crítico en línea en
<head> - Diferir el JavaScript no crítico
- Precargar los recursos importantes
- Reducir las peticiones HTTP
Métricas de rendimiento:
- Medir con Lighthouse, PageSpeed Insights
- Objetivo: FCP < 1.8s, LCP < 2.5s, CLS < 0.1
Rareza: Común Dificultad: Medio
47. ¿Qué herramientas usarías para medir el rendimiento de un sitio web?
Respuesta:
Herramientas de desarrollo del navegador:
- Pestaña Red de Chrome DevTools: Analizar el tiempo de las peticiones, el tamaño de los archivos, el orden de carga
- Pestaña Rendimiento/Lighthouse: Generar informes de rendimiento con puntuaciones
- Pestaña Cobertura: Encontrar JavaScript/CSS no utilizados
- Consola: Medir con
console.time()y la API de rendimiento
Herramientas en línea:
- Google PageSpeed Insights: Obtener puntuaciones de rendimiento y recomendaciones
- WebPageTest: Gráficos de cascada detallados, múltiples ubicaciones
- GTmetrix: Análisis de rendimiento con calificaciones
Métricas a monitorizar:
- First Contentful Paint (FCP): Cuándo aparece el primer contenido
- Largest Contentful Paint (LCP): Cuándo se carga el contenido principal
- Time to Interactive (TTI): Cuándo la página se vuelve interactiva
- Cumulative Layout Shift (CLS): Estabilidad visual
- Total Blocking Time (TBT): Tiempo de bloqueo del hilo principal
Para los juniors: Es suficiente una familiaridad básica con Chrome DevTools y Lighthouse. No se esperan habilidades de creación de perfiles profundas.
Rareza: Común Dificultad: Fácil-Medio
48. ¿Qué es el lazy loading y cuándo lo usarías?
Respuesta: El lazy loading (carga diferida) retrasa la carga de los recursos no críticos hasta que son necesarios, normalmente cuando están a punto de entrar en el viewport.
Casos de uso comunes:
Imágenes:
Lazy loading nativo (navegadores modernos):
JavaScript/React:
Beneficios:
- Carga inicial de la página más rápida
- Reducción del uso de ancho de banda
- Mejor rendimiento en conexiones lentas
- Mejora de la experiencia del usuario (el contenido aparece más rápido)
Cuándo usar:
- Imágenes debajo del pliegue
- Componentes pesados que no son visibles inmediatamente
- Contenido en pestañas/acordeones
- Implementaciones de scroll infinito
Rareza: Poco común Dificultad: Medio
Depuración y herramientas de desarrollo (2 preguntas)
49. ¿Cómo depuras un error de JavaScript en el navegador?
Respuesta:
Proceso de depuración paso a paso:
1. Comprobar la consola:
2. Usar Breakpoints (Puntos de interrupción):
- Abrir el panel Fuentes/Depurador de DevTools
- Hacer clic en el número de línea para establecer un breakpoint
- La ejecución del código se pausa en el breakpoint
- Inspeccionar las variables en el panel Alcance
- Recorrer el código (Step Over, Step Into, Step Out)
3. Examinar el Stack Trace (Rastro de la pila):
- Los mensajes de error muestran los nombres de los archivos y los números de línea
- Seguir la pila de llamadas para encontrar el origen del error
- Comprobar los errores de red en la pestaña Red
4. Depurar los problemas del DOM:
- Inspeccionar los elementos en el panel Elementos
- Comprobar los estilos calculados
- Usar el forzado del estado
:hover - Verificar que los event listeners están adjuntos
5. Comprobar las peticiones de red:
- La pestaña Red muestra las llamadas a la API fallidas
- Examinar los encabezados de la petición/respuesta
- Comprobar los códigos de estado (404, 500, etc.)
Técnicas de depuración comunes:
- Añadir la declaración
debugger;para pausar la ejecución - Usar breakpoints condicionales
- Observar las expresiones
- Poner en black box el código de terceros
Rareza: Común Dificultad: Fácil-Medio
50. ¿Cuáles son los principales paneles de Chrome DevTools y para qué los usas?
Respuesta:
Paneles esenciales:
1. Consola:
- Ver los errores y los registros de JavaScript
- Ejecutar comandos de JavaScript
- Probar expresiones de forma interactiva
- Pruebas de API
2. Elementos (Inspector):
- Inspeccionar y modificar la estructura HTML
- Editar el CSS en tiempo real
- Depurar los problemas de diseño
- Ver los estilos calculados, el modelo de caja
- Probar diseños responsive
3. Fuentes (Depurador):
- Ver los archivos de código fuente
- Establecer breakpoints
- Recorrer la ejecución del código
- Editar y guardar los cambios (workspaces)
- Ver la pila de llamadas
4. Red:
- Monitorizar las peticiones/respuestas HTTP
- Comprobar los tiempos de carga y el tamaño de los archivos
- Depurar las llamadas a la API
- Filtrar por tipo (JS, CSS, XHR, imágenes)
- Limitar la velocidad de la red
5. Rendimiento/Lighthouse:
- Analizar el rendimiento en tiempo de ejecución
- Generar auditorías de rendimiento
- Identificar los cuellos de botella
- Comprobar las Core Web Vitals
6. Aplicación:
- Inspeccionar el almacenamiento local, el almacenamiento de sesión
- Ver y borrar las cookies
- Comprobar los service workers
- Gestionar la caché
Para los juniors: Se espera una gran familiaridad con Consola, Elementos, Fuentes y Red. La creación de perfiles de rendimiento es un plus.
Rareza: Común Dificultad: Fácil
Accesibilidad y mejores prácticas (2 preguntas)
51. ¿Qué es la accesibilidad web y por qué es importante?
Respuesta: La accesibilidad web significa diseñar y desarrollar sitios web que puedan ser utilizados por todos, incluidas las personas con discapacidades (visuales, auditivas, motoras, cognitivas).
Por qué es importante:
1. Diseño inclusivo: El 15% de la población mundial tiene alguna forma de discapacidad 2. Requisitos legales: ADA (Americans with Disabilities Act), Sección 508, cumplimiento de WCAG 3. Mejor UX para todos: Los subtítulos ayudan en entornos ruidosos, la navegación con el teclado ayuda a los usuarios avanzados 4. Beneficios para el SEO: El HTML semántico y la estructura adecuada mejoran la clasificación en las búsquedas 5. Mayor audiencia: No excluir a los usuarios/clientes potenciales 6. Responsabilidad ética: La igualdad de acceso es un derecho humano
Discapacidades comunes a tener en cuenta:
- Visual: Ceguera, baja visión, daltonismo
- Auditiva: Sordera, pérdida de audición
- Motora: Movilidad limitada, temblores, parálisis
- Cognitiva: Dificultades de aprendizaje, problemas de memoria
Caso de negocio: Los sitios web accesibles llegan a más usuarios, se clasifican mejor en las búsquedas, evitan demandas, demuestran la responsabilidad corporativa.
Rareza: Común Dificultad: Fácil-Medio
52. ¿Cuáles son algunas formas básicas de hacer que un sitio web sea más accesible?
Respuesta:
Estructura HTML:
- Usar elementos semánticos (
<header>,<nav>,<main>,<article>,<footer>) - Jerarquía de encabezados adecuada (H1 → H2 → H3, sin saltarse)
- Etiquetar correctamente los inputs del formulario
Imágenes:
- Incluir siempre un texto
altdescriptivo - Usar alt vacío para las imágenes decorativas:
alt=""
Navegación con el teclado:
- Todos los elementos interactivos deben ser accesibles con el teclado
- Orden de tabulación lógico
- Indicadores de enfoque visibles
- No eliminar el contorno de
:focus
Color y contraste:
- Contraste de color suficiente (4.5:1 para el texto normal, 3:1 para el texto grande)
- No depender únicamente del color para transmitir información
- Probar con simuladores de daltonismo
Atributos ARIA (cuando sea necesario):
Pruebas:
- Usar lectores de pantalla (VoiceOver, NVDA, JAWS)
- Navegación solo con el teclado
- Herramientas de accesibilidad del navegador (Lighthouse, axe)
Rareza: Común Dificultad: Medio
Conciencia de las pruebas (1 pregunta)
53. ¿Qué son las pruebas unitarias y por qué son importantes?
Respuesta: Las pruebas unitarias implican la prueba de funciones o componentes individuales de forma aislada para verificar que funcionan correctamente.
Qué prueba:
- ¿La función devuelve la salida esperada para una entrada dada?
- ¿El componente se renderiza correctamente con las props dadas?
- ¿Los casos extremos funcionan correctamente?
Ejemplo (Jest):
Por qué son importantes:
- Detecta los errores pronto: Encontrar los problemas antes de la producción
- Confianza en los cambios: Refactorizar sin miedo
- Documentación: Las pruebas muestran cómo se debe usar el código
- Depuración más rápida: Señalar la ubicación exacta del fallo
- Mejor diseño: El código que se puede probar suele ser un código más limpio
Pirámide de pruebas:
- Muchas pruebas unitarias (rápidas, baratas)
- Menos pruebas de integración (probar los componentes juntos)
- Pocas pruebas de extremo a extremo (flujos de usuario completos, lentos)
Para los juniors: Es suficiente entender por qué las pruebas son importantes y los conceptos básicos. No se espera que se escriban conjuntos de pruebas completos para los puestos de nivel de entrada, pero la voluntad de aprender a probar es importante.
Frameworks comunes: Jest, React Testing Library, Mocha, Jasmine
Rareza: Común Dificultad: Fácil-Medio
Total: 21 preguntas
Esta colección representa los temas y herramientas avanzados que los desarrolladores frontend junior encuentran en las entrevistas. Combinado con Parte 1: Fundamentos de HTML, CSS y JavaScript, tendrás una cobertura completa de 55 preguntas esenciales para la entrevista de 2024-2025.


