Pregunta de entrevista para Desarrollador backend

Explica los niveles de aislamiento de transacciones y cuál usa tu base de datos por defecto.

Qué evalúa el entrevistador, cómo estructurar tu respuesta y un ejemplo hablado que puedes adaptar.

Respuesta rápida

Los cuatro niveles son read uncommitted, read committed, repeatable read y serializable, y cambian concurrencia por las anomalías que permiten: lecturas sucias, lecturas no repetibles, lecturas fantasma y write skew. PostgreSQL usa read committed por defecto, donde cada sentencia ve una instantánea nueva; MySQL con InnoDB usa repeatable read, donde toda la transacción ve una sola instantánea. Serializable es el único nivel que garantiza que el resultado equivale a algún orden serial.

Por qué lo preguntan los entrevistadores

Los bugs de concurrencia en sistemas de backend suelen ser bugs de aislamiento, y solo aparecen bajo carga, lo que los hace caros. El entrevistador quiere saber si entiendes qué garantiza realmente tu base de datos en vez de asumir que una transacción lo hace todo seguro. Nombrar el valor por defecto de tu motor y describir una anomalía real, como una comprobación de saldo que pasa dos veces, demuestra que has depurado esto y no memorizado una tabla.

Cómo estructurar tu respuesta

  • Enumera los niveles junto a la anomalía que elimina cada uno.
  • Di cuál es el valor por defecto de la base de datos que usas de verdad.
  • Describe una anomalía concreta con la que te hayas topado.
  • Explica cómo la arreglarías: subir el aislamiento o bloquear de forma explícita.

Ejemplo de respuesta

Ejemplo hablado, en primera persona

Van desde read uncommitted hasta serializable, y cada escalón elimina una anomalía a cambio de algo de concurrencia. Read committed corta las lecturas sucias, pero cada sentencia recibe su propia instantánea, así que la misma consulta dos veces dentro de una transacción puede devolver filas distintas. Repeatable read fija una instantánea para toda la transacción. Serializable además garantiza que el resultado equivale a ejecutar las transacciones una detrás de otra, lo que en Postgres se logra con seguimiento de predicados, así que en vez de bloquear puede abortar una transacción y tienes que estar listo para reintentar. Los valores por defecto importan: Postgres es read committed e InnoDB es repeatable read, lo que sorprende a quien salta de uno a otro. El bug que sufrí de verdad fue write skew en una tabla de reservas, donde dos peticiones comprobaron que no existía una reserva solapada, ambas vieron una instantánea limpia y ambas insertaron. Repeatable read no ayudó porque escribían filas distintas. Lo arreglamos con serializable más reintento, y luego con una restricción de exclusión, que sale más barata.

¿Tienes esta entrevista a la vuelta de la esquina? GhostPilot escucha tu llamada en vivo, detecta la pregunta en cuanto la hacen y pone una respuesta estructurada en tu pantalla en tiempo real. Pruébalo en tu próxima entrevista de práctica, o coge un Session Pass de $29, sin suscripción, para la de verdad.

Mira cómo funciona

Preguntas de seguimiento que puedes esperar

  • ¿Qué es el write skew y por qué lo permite repeatable read?
  • ¿Cómo gestionas los fallos de serialización en el código de aplicación?
  • ¿Cuándo usarías select for update en lugar de subir el nivel de aislamiento?

Más preguntas para Desarrollador backend

Tu entrevistador hará su propia versión de esta. Pega la descripción real del puesto en el Question Predictor gratuito y obtén las 20 preguntas que ese puesto tiene más probabilidades de hacerte, con lo que cada una busca en realidad.

Predecir mis preguntas

Ensaya las preguntas difíciles antes de que te las hagan

Practica con un copiloto en vivo y entra preparado. Un Session Pass de $29 te lleva a través de la entrevista sin suscripción y sin ataduras.

Consigue GhostPilot