¡Saludos compañeros desarrolladores!
A lo largo de mi carrera, he realizado más de 100 entrevistas con desarrolladores de todos los niveles, desde desarrolladores junior hasta veteranos experimentados. ¿Y sabes qué? En ese tiempo, elaboré un conjunto de 10 preguntas difíciles que le planteo a cada nuevo candidato.
¿Por qué? Bueno, es simple: estas preguntas me permiten ir más allá de simplemente evaluar las habilidades técnicas de alguien. Profundizan en su proceso de pensamiento, enfoque de resolución de problemas, habilidades de trabajo en equipo y otras cualidades cruciales.
¿Estás listo para esta batalla intelectual? ¡Entonces prepárense, porque estas preguntas no son para los débiles de corazón!
Suponga que está implementando un sistema de edición de revistas donde los editores pueden editar artículos en el panel de administración. ¿Cómo evitaría que dos editores editaran simultáneamente el mismo artículo y sobrescribieran los cambios de cada uno?
¿Cuáles son los principios de la implementación con tiempo de inactividad cero, un enfoque que implementa una aplicación sin tiempo de inactividad del servicio? ¿Cómo se logra esto?
Nombra los aspectos de tu marco preferido que no te gustan o que no funcionan como te gustaría. Explique cómo y dónde surgen estos problemas y cómo podrían mejorarse.
4. Manejo de trabajos cron de larga duración
¿Qué podría pasar si su trabajo cron, que se ejecuta cada minuto, comienza a tardar más de un minuto en ejecutarse? ¿Cómo se puede prevenir esto?
5. Desnormalizar datos en bases de datos
¿Alguna vez se ha encontrado con la necesidad de desnormalizar datos en una base de datos? Si es así, ¿qué problema estaba tratando de resolver, qué desafíos enfrentó y cómo se podría haber hecho mejor?
6. Burlarse de llamadas externas en las pruebas
Si escribe pruebas, ¿cómo evita el problema de las llamadas externas realizadas por el código que está probando? Considere el escenario en el que las llamadas externas están prohibidas en CI (integración continua). ¿Por qué es esta una buena práctica?
7. Sincronización de cambios de correo electrónico con sistemas externos
Suponga que su sistema implementa la funcionalidad de cambio de correo electrónico. Sin embargo, el correo electrónico también se almacena en un sistema externo, como un procesador de pagos, que envía correos electrónicos a los usuarios (pero los usuarios no interactúan directamente con él). ¿Cómo implementaría la sincronización del correo electrónico con el sistema externo?
¿Cómo se entera de los errores que ocurren en la producción? ¿Confías en los informes de los usuarios o cuentas con mecanismos automatizados?
¿Cómo diseñarías una aplicación de chat sencilla? Puede preguntarle al ingeniero de backend sobre la parte de backend y al ingeniero de frontend sobre la parte de frontend. Podría haber muchas ramas en esta conversación.
10. Aislar pruebas en un entorno multiusuario
¿Cómo se garantiza el aislamiento de las pruebas cuando se ejecutan varias pruebas simultáneamente y acceden a la base de datos, modificándola potencialmente? Si su marco no proporciona aislamiento, ¿cómo lo implementaría o mejoraría?
Consejos adicionales:
Anime al candidato a desarrollar su proceso de pensamiento y el razonamiento detrás de sus respuestas.
Evaluar sus habilidades para resolver problemas, su capacidad de pensar críticamente y su conocimiento de las tecnologías relevantes.
Evalúe sus habilidades de comunicación y colaboración a lo largo de la entrevista.