Netflix en 45 minutos: una historia rápida de una entrevista de diseño de sistemas, qué esperar + una selección de enlaces útiles





En nuestro blog, escribimos mucho sobre cómo construir una carrera en TI en diferentes países, encontrar trabajo , diferencias en el proceso de entrevistar a grandes empresas. En el artículo de hoy, iremos más allá y cubriremos el tema de las llamadas entrevistas de diseño de sistemas: esta es una de las etapas de las entrevistas con empresas de tecnología reconocidas, donde se eliminan muchos candidatos.



Entonces, ¿qué es el diseño de sistemas y cómo se supera este tipo de entrevista?



Lo que es



En el mundo actual, los sistemas de TI se han vuelto extremadamente complejos. Cada nueva "característica" del producto debe cumplir con muchos requisitos, siempre hay limitaciones entre las que los ingenieros deben equilibrar. Lo que parece muy fácil para el usuario promedio, como enviar una consulta de búsqueda a través de Google o Yandex , en realidad conlleva un gran nivel de complejidad.



La diferencia entre las entrevistas de diseño de sistemas y las entrevistas técnicas regulares es que esperan que el candidato responda preguntas ambiguas sobre estructuras de datos y algoritmos. Como regla general, las tareas en esta etapa son tales que para ellos no hay una solución inequívocamente correcta o incorrecta, provocan el proceso de pensamiento: es en él donde se revela el candidato.



En términos generales, una entrevista de diseño de sistema es algo así como una sesión de lluvia de ideas, donde una persona piensa en voz alta, analiza las posibles soluciones y analiza los defectos de cada una de ellas en tiempo real. Esta es la dificultad, pero también la principal ventaja: el proceso de pensamiento es más importante aquí que el resultado. Como regla general, estas entrevistas son realizadas por grandes empresas que desarrollan sistemas a gran escala ( FAANG y similares).



¿Cómo se supera una entrevista de diseño de sistemas? A continuación se ofrecen algunos consejos prácticos.



, , @g-jobbot. , Telegram , – , .






Dado que en una entrevista de diseño de sistemas, lo más importante es cómo se resuelve un problema, es extremadamente importante en la primera etapa comprenderlo claramente por sí mismo. El ex ingeniero de Microsoft y Facebook en su artículo muestra la importancia de este hecho con un ejemplo práctico.



Normalmente, la tarea es algo así como "¿Cómo diseñarías Netflix en 45 minutos?" A primera vista, estas preguntas son una completa tontería. Estos sistemas a gran escala han sido diseñados e implementados por cientos y miles de ingenieros a lo largo de los años. ¡Cuarenta y cinco minutos ni siquiera serán suficientes para comenzar a discutir al menos uno de los componentes de dicho producto!



Aquí es donde la comprensión de la tarea es muy importante. Necesita comprender lo que quiere el entrevistador. Y obviamente quiere que él:



  1. dio una respuesta en el formato "vista de helicóptero" de todo el sistema,
  2. luego lo descompuse en componentes
  3. describió por qué se necesita cada uno de ellos (centro de datos, almacenamiento de datos, frontend, backend, almacenamiento en caché, trabajo con colas, redes y equilibrio de carga, etc.)






Imagen: system-design-primer



Puede detenerse en algunos de estos componentes con más detalle; ellos le indicarán esto o tendrá que preguntar. Por lo general, ni siquiera necesita escribir código en una entrevista sobre diseño de sistemas, y si se adentra de inmediato en la jungla técnica, sin antes discutir todo el sistema como un todo, esto será una desventaja.



Haga preguntas aclaratorias



El propósito principal de la entrevista de diseño de sistemas es darle al candidato la oportunidad de demostrar su conocimiento y experiencia. Como se indicó anteriormente, no hay respuestas correctas o incorrectas. Es mucho más importante no resolver el problema como tal, especialmente porque puede ser simplemente imposible en el tiempo asignado, sino mostrar su proceso de pensamiento en todo su esplendor.



Por lo tanto, es extremadamente importante hacer preguntas, incluso si de repente resulta que sabe claramente la respuesta a la pregunta planteada. En tal situación, no solo necesita escribir una solución al problema, esto es contrario al propósito de la entrevista. Debe olvidar la solución conocida y comenzar a buscar una nueva, haciendo preguntas a lo largo del camino.



Esto permitirá al entrevistador comprender varias cosas a la vez:



  • ¿Cómo aborda el candidato la evaluación del problema?
  • ¿Evalúa inmediatamente las posibles limitaciones y cuellos de botella del sistema?
  • ¿Piensa inmediatamente en la optimización de las soluciones y eludir las restricciones?


En este artículo, un ingeniero de Twitter compartió su experiencia en entrevistas. En particular, dio una buena descripción de cómo hacer preguntas. Imagina que en una entrevista te dieron la tarea de diseñar una caja. No se proporciona más información de forma directa.



Las preguntas pueden ser:



  1. ¿Qué debería ser capaz de hacer exactamente el sistema (cuántos elementos caben en la caja, cuáles son sus tamaños)?
  2. ¿Quién es el público objetivo del producto?
  3. ¿Cuáles son las expectativas de los usuarios del producto?


Las respuestas a ellos te permitirán entender que necesitas crear un cuadro amarillo con un emoticón dibujado en él, en el que caben al menos una pelota de tenis. Sin embargo, la pelota no es del todo normal: su radio es de medio metro y su peso es de aproximadamente 1 kg. La caja será fácil de transportar al sostener la parte inferior, por lo que no se necesitan asas.



Hay mucha más información, ahora puede pensar en resolver un problema tan refinado.







Imagen: freecodecamp.com



No trates de impresionar



Un error común en las entrevistas sobre diseño de sistemas: muchos candidatos piensan que, dado que en esta etapa debe trabajar en el nivel de abstracción, será suficiente incluir términos geniales y nombres de tecnologías de moda durante la conversación para pasar por un experto. No funciona de esa manera.



En primer lugar, la entrevista sobre diseño de sistemas probablemente no será solo un reclutador, sino un ingeniero que busca una persona para unirse a su equipo. No es suficiente que una persona así escuche palabras como No-SQL, Mongo DB y Hadoop. Obviamente, comenzará a hacer preguntas aclaratorias, y si realmente no tiene mucha experiencia con las tecnologías mencionadas, esto se aclarará muy rápidamente.



Se honesto



Una entrevista de diseño de sistemas es una de esas ocasiones en las que está bien no estar seguro. Por lo tanto, respuestas como “Nunca he trabajado con esta tecnología en particular, pero sé que se usa a menudo para resolver este tipo de problemas” es una buena opción. Además de la honestidad, aquí el candidato mostró cierto conocimiento y dejó claro al entrevistador dónde comenzará a resolver el problema (intentará una solución conocida, si no funciona, “indagará” más).



Además, no debe hacer pasar su solución como ideal y sin ningún inconveniente. Siempre hay limitaciones, y un ingeniero-entrevistador experimentado entiende esto mejor que nadie. Por lo tanto, durante la entrevista, vale la pena decir honestamente que existen tales cuellos de botella en la solución, pero puede intentar sortearlos de esta o aquella manera, utilizar herramientas adicionales o realizar aún más investigaciones.



Esto dejará en claro que el candidato no solo encuentra una solución y luego trata de llevarla a cabo, sino que puede ser flexible, hacer ajustes y, en general, ser adecuado y comprender que siempre es posible hacerlo mejor.



Aquí hay un encantador diálogo ficticio en una entrevista de diseño de sistemas que le muestra cómo NO hacerlo:



: Twitter. ?



: NoSQL- MongoDB.



: MySQL?



: . MongoDB BigTable.



: Twitter MySQL, .



: , , , . - Facebook NO-SQL.



: Facebook MySQL.



: , , , . , MySQL , BigTable.



Entrevistador : No importa. ¿Dónde almacenaremos los datos analíticos?



Candidato : Obviamente en MySQL.



Entrevistador : ¿Pero no hay demasiados para MySQL? Ahora tenemos HDFS para esto.



Candidato : Parece que comenzó a desarrollar Twitter incluso antes de que MongoDB se desarrollara lo suficiente. MongoDB puede acomodar fácilmente tanto tweets como datos analíticos.



Entrevistador : Genial, gracias por su tiempo. Fue agradable charlar.


Cómo prepararse para una entrevista: enlaces útiles



Si bien el diseño de sistemas es una de las partes más confusas de una entrevista, puede prepararse para ello. Para ayudar a los candidatos, hemos compilado una lista de materiales útiles:






All Articles