Pregunta de entrevista para Ingeniero de software

¿Qué causa una condición de carrera y cómo encuentras una que solo aparece en producción?

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

Respuesta rápida

Una condición de carrera ocurre cuando dos hilos o peticiones tocan estado mutable compartido y el resultado depende del momento. La forma clásica es leer, modificar y escribir sin mantener un lock durante los tres pasos. Para encontrar una en producción, busca estado que se comprueba y luego se usa, añade logging correlacionado alrededor de esa secuencia, reproduce bajo concurrencia real en vez de en un test unitario, y deja que las restricciones de la base de datos pillen la violación.

Por qué lo preguntan los entrevistadores

Estos bugs son caros y el enfoque de depuración separa a los ingenieros con experiencia del resto. Los entrevistadores quieren que nombres el patrón leer, modificar, escribir, que entiendas que añadir un lock no es correcto de forma automática si el alcance está mal, y un enfoque de diagnóstico que acepte que no puedes reproducir un bug de temporización haciendo clics en local. Empujar el invariante hacia la base de datos es la respuesta que esperan.

Cómo estructurar tu respuesta

  • Define la carrera como estado mutable compartido más temporización.
  • Nombra explícitamente el patrón leer, modificar, escribir.
  • Describe cómo la reproducirías bajo concurrencia.
  • Ofrece un arreglo que mueva el invariante a la base de datos.

Ejemplo de respuesta

Ejemplo hablado, en primera persona

Una carrera necesita dos cosas: estado mutable compartido y dos caminos llegando a la vez. Casi todas las que he depurado tienen la misma forma, una comprobación seguida de una acción con un hueco en medio. Lee el saldo, decide que es suficiente, escribe el saldo nuevo. Dos peticiones se intercalan y el número está mal. Encontrarlas en producción va sobre todo de aceptar que no vas a llegar a una reproducción a base de clics. Escribo un script que lanza la misma petición un par de cientos de veces en paralelo, porque la ventana puede ser de dos milisegundos. Después registro con un id de petición a ambos lados de la lectura y de la escritura, para ver el entrelazado en la línea temporal. Para el arreglo intento mover el invariante a la base de datos en vez de a la aplicación: un update con un where sobre el valor esperado, o una restricción única, para que lo imponga la base de datos. Los locks a nivel de aplicación solo funcionan si todos los escritores pasan por tu código, y tarde o temprano uno no lo hará.

¿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

  • ¿Cómo cambia tu respuesta un lock distribuido?
  • ¿Cuál es la diferencia entre una condición de carrera y un data race?
  • ¿Cómo escribirías un test que pille esto en CI?

Más preguntas para Ingeniero de software

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