Frontend
¿Cómo vamos a revisar el historial de mensajes si es muy grande? ¿Cómo implementar la paginación?
¿Qué tan importante era cumplir con los requisitos de seguridad de la aplicación? ¿Había amenazas comunes contra las que había que protegerse?
¿Es correcto que un formulario, que el usuario ni siquiera ha comenzado a editar, ya haya generado un error de validación?
¿En qué se diferencia Promise.any de Promise.race?
Cuéntame sobre los métodos Promise: Promise.all, Promise.allSettled, Promise.race, Promise.any — ¿en qué se diferencian entre sí?
¿Qué formas de aislamiento de CSS conoces?
¿Qué es el mecanismo de inyección de dependencias en Angular y cómo lo ha aplicado? ¿En qué niveles y dónde, además de los servicios, se puede usar?
¿En qué escenarios utilizas useEffect y cuándo usas otros hooks?
¿Cómo evalúa su experiencia en Spring Boot? ¿Hasta qué punto ha tenido que profundizar en cómo funciona bajo el capó?
¿Por qué al usar splice pueden surgir problemas de reactividad en Vue 2, y cómo se resuelve esto en Vue 3?
¿Por qué elegiste TanStack Query en lugar de RTK Query?
¿Qué HTML llegará de Next.js antes de la hidratación?
¿Cuáles son las ventajas y desventajas de TypeScript en comparación con JavaScript?
¿En qué se diferencian las cookies de localStorage? ¿Cuál es el tamaño máximo de las cookies y localStorage? ¿En qué difiere su tiempo de vida?
¿Qué es useId y para qué se utiliza?
Cuéntenos sobre los tipos en JavaScript: cuáles existen, en qué dos grandes subgrupos se dividen y cómo podemos compararlos entre sí?
¿Qué hacer para que, con el valor predeterminado roles = [], el array no se vuelva a crear en cada renderizado?
¿Por qué una función en JavaScript se considera un objeto, aunque typeof devuelve "function" para ella?
¿Por qué usar setTimeout(fn, 0) ayuda a no bloquear la interfaz de usuario, pero crear una gran cantidad de promesas (microtareas) no? ¿Cuál es la diferencia entre macro tareas y micro tareas en el Event Loop?
/** * La función 'asyncAuth(callback)' recibe un callback, en el que puede * pasarse un error (como primer argumento) y datos * del backend (como segundo argumento). * asyncAuth((error, data) => {}); * * Debes implementar la función 'auth()', * que llama a 'asyncAuth()', pero devuelve una Promesa. * * @returns {Promise} */ function auth() { return new Promise((resolve, reject) => { asyncAuth((error, data) => { if (error) { reject(error) } else { resolve(data) } }); }) } /** * La función 'tryAuth()' usa 'auth()' y, en caso de error, * realiza N intentos adicionales. * Si todos los intentos fallan, devuelve el último error. * * @returns {Promise} */ function tryAuth(n) { return new Promise((resolve, reject) => { function attempt(attemptsLeft) { auth().then(resolve).catch((error) => { if (attemptsLeft <= 0) { // Se acabaron los intentos — lanzamos el último error reject(error); } else { // Aún quedan intentos — llamamos recursivamente con n - 1 attempt(attemptsLeft - 1); } }); } attempt(n); }); }