¿Cómo descifrar la ronda de diseño del sistema en las entrevistas?

¿Puedes diseñar Netflix en 45 minutos?

¿¿¿Qué??? En serio ?? (Puedo verlo toda la noche pero…). ¿Es imposible explicar incluso un solo componente de Netflix y me pides que lo diseñe en solo 45 minutos de poco tiempo?

Sí, esto es lo que se espera que hagas en tus entrevistas de diseño de sistemas si quieres conseguir el trabajo de tus sueños en las grandes empresas tecnológicas. Tendrá que dar una explicación clara sobre el diseño de este tipo de grandes sistemas distribuidos escalables (como Twitter , Messenger , Netflix , Uber , etc.) al entrevistador. Esta ronda puede ser desafiante y compleja para usted porque se supone que debe cubrir todos los temas y compensaciones dentro de este marco de tiempo limitado que parece ser imposible. No queremos que esta ronda te asuste, así que discutiremos paso a paso cómo completar esta ronda y algunos consejos útiles para evitar errores comunes.

How-to-Crack-System-Design-Round-in-Interviews

Tratemos de hacerlo simple y analicemos algunos puntos clave antes de comenzar su preparación para esta ronda.

  • Considere a su entrevistador como un miembro del equipo y aproveche esta ronda como una oportunidad para trabajar con él donde se supone que ambos deben resolver un problema del mundo real relacionado con el objetivo de su empresa, pero aquí debe asumir la propiedad y liderar todo.
  • El objetivo principal de esta ronda es comprender qué tan capaz es usted de construir un sistema a gran escala y su proceso de pensamiento detrás del diseño de un servicio. La claridad de los pensamientos importa mucho porque si puedes explicárselo al entrevistador, también puedes hacerlo en tu equipo.
  • Una de las cosas buenas para ti en esta ronda es que se supone que debes encontrar la mejor solución para todo tipo de problemas abiertos en lugar de soluciones precisas. Su capacidad para articular su pensamiento es más importante que el diseño final que les presente.

Esperamos que a partir de los puntos anteriores hayamos simplificado algunas cosas para usted y le haga esta ronda un poco más fácil.

De acuerdo, lo entendí, pero por dónde empezar, dónde terminar, dígame la mejor manera de cubrir todo paso a paso dentro de este estricto marco de tiempo.

Sabemos que puede ser una ronda abrumadora para usted, así que comencemos a analizar el enfoque paso a paso e intentemos facilitarle la ronda.

1. Comprender el objetivo y reunir todos los requisitos

Primero debe comprender su objetivo final antes de saltar a la solución, así que reúna todos los requisitos básicos de su entrevistador. Haz preguntas pertinentes para despejar tus dudas. Las preguntas de diseño son básicamente una conversación abierta que no tiene una solución correcta, por lo que es bueno comenzar con algunas suposiciones básicas.

  • ¿Cuál es el objetivo final del sistema o servicio?
  • ¿Quiénes son los usuarios finales? ¿Cómo utilizarán el servicio? ¿Qué características quiere tu entrevistador que incluyas y cuáles excluyas?
  • ¿Cuál debe ser la entrada y su salida o resultado final?

Un producto como Facebook, Twitter o Reddit es un producto muy conocido, por lo que incluso si sabe cómo diseñar este tipo de sistema, es su responsabilidad compartir sus suposiciones y discutir con el entrevistador qué características les interesan y cuáles no. t. Es posible que deseen que incluya algunas funciones que no existen en este tipo de sistema o que excluya algunas funciones. Así que asegúrese de tener una mejor comprensión de todos los requisitos y características.
Considere el ejemplo del diseño de Twitter. Algunas de las preguntas son: ¿quién puede publicar un tweet? ¿Quién puede leer el tuit? ¿Quién puede seguir al usuario? Me gusta, comentarios, imágenes, usuarios activos, usuarios totales y discuta otras características que su entrevistador quiere que incluya.

2. Definición de la interfaz del sistema y establecimiento del alcance

Después del primer paso, debe identificar qué tipo de API necesita su sistema para realizar el trabajo en función de las características que haya incluido. Además, discuta el alcance y la disponibilidad del sistema, discuta algunas preguntas relevantes como, ¿a ambos les importa solo la experiencia de extremo a extremo o solo la API? Atención al cliente (móvil, web, etc). Autenticación, análisis, integración, rendimiento, etc. ¿Funcionará el sistema si el host está inactivo o todo el sistema de datos está inactivo? Entonces discuta con el entrevistador cuánta disponibilidad le importa el sistema. De ambos, los dos pasos anteriores aseguran que conoce el alcance exacto del problema y la complejidad del sistema.

3. Estimación de escalabilidad:

Diseñas un servicio que funcione para cien usuarios, pero ¿va a funcionar para mil usuarios o millones de usuarios? ¿Va a escalar y funcionar bien a medida que agreguemos más usuarios o más requests? Básicamente, debe considerar la misma característica para diferentes escalas y es muy importante obtener la escala correcta porque una respuesta diferente requiere un diseño diferente. La escalabilidad también ayuda en el equilibrio de carga, el almacenamiento en caché y la partición para que pueda hacer preguntas como:

  • ¿Cuál es el límite de los datos, la red o el ancho de banda que necesitamos?
  • ¿Cuánto almacenamiento necesitamos?
  • ¿Cuál es el tiempo de respuesta promedio?

4. Comience con Componentes de alto nivel y luego pase a Diseño detallado

Comience a cubrir el proceso de extremo a extremo en función de su objetivo, así que identifique cada componente para resolver el problema real o para implementar su sistema completo. ¿Cómo se unen todos los componentes para cumplir con el requisito real? A continuación hay algunos puntos rápidos para guiarlo correctamente mientras explica los componentes:

  • Divida su sistema completo en 6-7 componentes principales o de nivel superior .
  • Profundice más y analice el rol y la responsabilidad de cada componente y cómo van a interactuar o comunicarse entre sí. Mientras explica los componentes, su entrevistador puede guiarlo hacia 1 o 2 componentes y quiere que explique esos componentes en profundidad. Así que hay que discutir eso más en detalle.
  • Discuta el frontend, el backend, las redes, el almacenamiento en caché, el equilibrio de carga, la cola, la base de datos, las llamadas a API externas, la interacción del usuario, los procesos fuera de línea, etc.
  • Dígale al entrevistador cuáles son las tecnologías o la base de datos que puede usar en su sistema.

5. Compensaciones y resolución de cuellos de botella

Las entrevistas de diseño son conversaciones abiertas, por lo que no hay una respuesta única y cada decisión tendrá un compromiso cuando presente su arquitectura y su proceso de pensamiento al entrevistador. El sistema complejo siempre requiere compromisos , por lo que debe decirles diferentes enfoques, sus ventajas y desventajas, y por qué elegiría uno sobre otro.

  • ¿Qué base de datos cabe en su sistema y por qué?
  • ¿Por qué elegiría una tecnología específica en diferentes capas o componentes?
  • ¿Qué marcos pueden ser buenos para su diseño y cuál debe elegir?
  • ¿Cuáles son las diferentes opciones de seguridad disponibles para mantener sus datos seguros y cuál elegiría?

También debe pensar y resolver los cuellos de botella, como qué tipo de falla puede ocurrir en su sistema y cuál es la solución para eso. ¿Necesita mantener una copia de seguridad o tomará la ayuda de cualquier otro recurso? ¿Tiene alguna copia de seguridad de sus datos en caso de que su servidor falle y pierda todos los datos? ¿Cómo monitorearía el desempeño del servicio? Si algún componente falla, ¿cuál es la solución para ejecutar su sistema sin problemas y correctamente? Básicamente, debe tener un plan claro y organizado para hacer frente a todos estos tipos de fallas críticas en su sistema.

Consejos rápidos:

  • Trate de seguir la regla 80-20 durante su entrevista, donde el 80% del tiempo hablará y explicará todo y el 20% del tiempo su entrevistador.
  • No use palabras de moda y pretenda ser un experto si no sabe algo. Usted lee algunas publicaciones de blog o algunos temas hoy y mañana es su entrevista, durante su entrevista si lanza algunas palabras de moda como «No-SQL», «Mongo DB» y «Cassandra», entonces puede resultarle contraproducente. No puede engañar al entrevistador que es un experto en la industria, siempre considere que su entrevistador puede solicitar más detalles y justificación, por lo que si está utilizando la tecnología X o la base de datos Y, entonces «¿por qué?», ​​Prepárese para este tipo de pregunta.
  • No entre en detalles prematuramente . Muchas veces sucede que cuando un candidato comienza a explicar una parte del sistema, entra en demasiados detalles del componente y se olvida del estricto marco de tiempo y otros componentes. Tal vez el entrevistador quiera que te detengas en algún lugar donde no necesiten demasiados detalles. Entonces, para evitar este error, espere la retroalimentación o respuesta del entrevistador. Ellos le darán algunos consejos o lo dirigirán a cualquier parte del sistema que quieran que explique con más detalle.
  • No tenga en mente una arquitectura establecida como MVC o impulsada por eventos e intente cumplir el requisito de alguna manera en esa arquitectura. Tal vez no sea adecuado según el requisito. Los requisitos pueden cambiar durante la entrevista para poner a prueba su flexibilidad, así que trate de evitar este error.
  • Sea honesto durante sus entrevistas y si nunca ha usado la tecnología X, entonces no necesita ser falso en esa situación. Trate de encontrar soluciones comunes y muéstreles su honestidad, confianza y disposición para aprender algo. Eso causará una buena impresión en el entrevistador.
  • Su experiencia práctica, su conocimiento, comprensión del sistema de software moderno y cómo se expresa claramente durante su entrevista son muy importantes para diseñar un sistema con éxito.

Curso de diseño de sistemas GeeksforGeeks

¿Quiere conseguir un trabajo de desarrollador/ingeniero de software en una empresa de tecnología líder? o ¿Quiere hacer una transición sin problemas de SDE I a SDE II o perfiles de desarrollador sénior? En caso afirmativo, ¡entonces debe sumergirse profundamente en el mundo del diseño de sistemas! Un dominio decente sobre los conceptos de diseño de sistemas es muy esencial, especialmente para los profesionales que trabajan, para obtener una ventaja muy necesaria sobre los demás durante las entrevistas técnicas.

System-Design-Course-By-GeeksforGeeks

Y es por eso que GeeksforGeeks le brinda un Diseño de sistemas en vivo centrado en una entrevista en profundidad que lo ayudará a prepararse para las preguntas relacionadas con Diseños de sistemas para Google, Amazon, Adobe, Uber y otras empresas basadas en productos.

Publicación traducida automáticamente

Artículo escrito por anuupadhyay y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *