En el proceso de entrevista de ingeniería de software, la ronda de diseño del sistema se ha convertido en una parte estándar de la entrevista. Si desea obtener el trabajo de sus sueños en algunas grandes empresas tecnológicas gigantes (especialmente como ingeniero senior), entonces debe contar su enfoque sobre la construcción de un sistema escalable grande y complejo.
No existe una respuesta precisa y estándar a los problemas de diseño. Puede tener diferentes conversaciones con diferentes entrevistadores para la misma pregunta. Debido a la falta de experiencia en la construcción de un sistema a gran escala y la naturaleza abierta de esta ronda, muchos candidatos luchan con esta ronda. No solo los desarrolladores junior y de nivel medio, sino también los desarrolladores experimentados se sienten incómodos en esta ronda.
Esta ronda no se centra mucho en la codificación. El entrevistador quiere saber cómo diseña todo el sistema y cómo los une. Debe cubrir una gran cantidad de componentes complejos en un plazo de 30 a 45 minutos. Debido al marco de tiempo limitado, la mayoría de los candidatos se pierden en cosas pequeñas y se pierden el panorama general.
En este blog, vamos a compartir algunos consejos para estructurar su entrevista de manera que pueda transmitir el panorama completo de su sistema al entrevistador. Antes de eso, te recomendamos leer el blog ¿Cómo descifrar la ronda de diseño de sistemas en las entrevistas?
1. Tomar posesión e impulsar el proceso de entrevista
Cuando el entrevistador le haga la pregunta de diseño, asuma la responsabilidad o la propiedad de conducir la entrevista. Trate a su entrevistador como un miembro del equipo y considere esta ronda como una oportunidad para trabajar con él. Eres tú quien tiene que liderar todo, no el entrevistador. Pero eso no significa que no permitirá que su entrevistador hable algo. Si el entrevistador comparte algo o señala algo, escúchalo con atención.
Serás tú quien hable más y serás quien explique todo en tu diseño. Debe abordar el problema de manera proactiva y también debe manejar los casos extremos si el entrevistador lo molesta.
2. Requisito funcional y no funcional
Mencione todos los requisitos funcionales y no funcionales claramente al entrevistador. Su requerimiento debe ser lo suficientemente grande como para encajar en el marco de tiempo dado y hacer que el problema sea un desafío para usted. Una vez que conozca los requisitos funcionales y no funcionales, construya el sistema que cumpla con esos requisitos.
En el software, la escalabilidad del desarrollo es muy importante, por lo que, teniendo en cuenta los requisitos no funcionales, es necesario construir el sistema a gran escala. No es divertido trabajar en un sistema con baja escalabilidad.
Cuando elimine los requisitos funcionales y no funcionales, revíselos con el entrevistador. Es posible que quieran agregar/quitar algo. A veces, el entrevistador quiere agregar algunos requisitos específicos o casos de uso en el sistema que va a construir.
3. Estimación de capacidad
Muchos candidatos se saltan esta parte y no tienen en cuenta la capacidad del sistema. La mayoría de los candidatos solo se enfocan en la parte de diseño y no calculan para estimar la capacidad del sistema. Asumen un número aproximado lo suficientemente grande para la cantidad de núcleos requeridos o la cantidad de espacio requerido. Tendrá que consultar con el entrevistador si quiere entrar en la estimación de capacidad o no.
4. planificar
Una vez que los requisitos funcionales y no funcionales están claros, debe planificar varias cosas para diseñar su sistema.
- Consulte el punto de interacción del usuario en su sistema. Cómo funcionará el flujo en todo el sistema cuando un usuario interactúe con él.
- En cada punto de interacción del usuario, debe verificar la latencia, la disponibilidad y el requisito de coherencia. Es posible que deba hacer algunas concesiones y eso depende totalmente del requisito.
- Realice un análisis rápido y evalúe si su sistema tiene una interacción de lectura intensa o una interacción de escritura intensa.
- Los tres puntos anteriores le aclararán algunas cosas en su sistema. Qué servicios necesita y qué base de datos es adecuada para que su sistema almacene los datos.
5. Diseño de alto nivel
Esta es la parte más importante y desafiante de la ronda de entrevistas del diseño del sistema. En el diseño de alto nivel, deberá cubrir las siguientes cosas.
- Todo el flujo del sistema debe dividirse en múltiples componentes funcionales. Verifique qué servicios están presentes y cómo necesita construir todo el sistema basado en estos servicios. Además, verifique si los requisitos o los servicios se ajustan a la arquitectura de microservicios o no. La mayoría de las veces, en las entrevistas de SDE, los candidatos prefieren utilizar un enfoque basado en microservicios.
- Compruebe cómo se conectan los servicios en el sistema y qué protocolo es bueno usar para la comunicación de servicios internos como Async/Sync-Rest, RPC, etc.
- Debe dejar en claro al entrevistador que todos los servicios están disponibles para los usuarios y cómo los usuarios van a interactuar con todo el sistema para usar estos servicios. ¿Cómo estará funcionando un flujo completo de los servicios en todo el sistema? ¿Necesitas el caché para reducir las latencias en el sistema?
- Debe identificar qué base de datos se ajusta a cuál de los servicios de su sistema.
- Compruebe si necesita almacenamiento en caché en cualquier lugar de todo su sistema. En caso afirmativo, ¿cuál debería ser la política de desalojo y necesita un vencimiento para las claves? ¿Es necesario que sea un caché de escritura simultánea?
- Con base en todos los análisis anteriores, dibuje un diseño de alto nivel de todo su sistema.
Cosas clave para tener en HLD
- Balanceadores de carga para distribuir todo el tráfico a diferentes servidores.
- Servicios
- Bases de datos y cachés
- Puntos de interacción del usuario
- Herramientas como una cola de mensajes, CDN, etc.
6. Recorra el diseño
Cuando un diagrama completo esté listo, recorra todo el diseño. Tome un componente/un caso de uso de su sistema y explíquele al entrevistador en un nivel alto cómo funcionará este componente en su sistema. También debe decirle a su entrevistador qué base de datos específica es adecuada para su sistema y por qué necesita usar un modo específico de comunicación como Sync/Async, etc.
Si ha elegido un diseño específico en su sistema, puede entrar en una conversación de tipo RPC vs HTTP. También debe verificar la estrategia de replicación de datos (por ejemplo, Master-Slave o una configuración Multi-Master) utilizada en su base de datos.
Nota: Cuando recorra el proceso de diseño, asegúrese de no entrar en muchos detalles sobre el diseño de la API o el esquema de la base de datos. Es posible que se le acabe el tiempo y se perderá algo importante en su sistema. Entre en detalles solo si el entrevistador lo solicita.
7. Implementación y Ejecución
Cuando haya terminado de explicar el diseño de todo el sistema y fluya al entrevistador, realice una revisión y pregúntele qué parte o flujo específico del sistema desea discutir en profundidad. Debido al marco de tiempo limitado, no es posible repasar todo el sistema y explicar cada parte en detalle.
Deje que el entrevistador decida en qué parte específica del sistema quiere profundizar. Según la elección del entrevistador, explique la implementación y ejecución de ese componente específico de su sistema. Necesitas cubrir lo siguiente…
- API: mencione qué API se necesitan en su sistema. Además, asegúrese de utilizar las mejores prácticas cuando explique la API a su entrevistador. Por ejemplo: si está usando la URL para GET API, en lugar de usar GET /user/getUserbyUserId, es bueno usar GET /user/{id}.
- Protocolos API: también debe verificar los protocolos en los que está exponiendo la API. Mucha gente elige API REST, pero dependiendo de los casos de uso/requisitos del sistema, puede elegir algo más eficiente como Thrift o Protobuf.
- Eventos: también debe verificar los eventos que escucha un servicio específico, cuál de los servicios generó ese evento, qué carga útil ingresa y qué tipo de procesamiento está ocurriendo en ese evento.
- Esquema de base de datos: consulte el esquema de base de datos en su sistema. Cuando habla sobre el diseño de alto nivel, debe aclarar qué base de datos es adecuada para su sistema y por qué eligió esa base de datos específica. Aquí debe decidir entre SQL y NoSQL.
Si ha elegido SQL, hable sobre los índices y la optimización de las consultas. Si su elección es NoSQL, asegúrese de comprobar la garantía de coherencia que proporciona su base de datos. ¿Es la causa de algún problema y el tipo de consultas que ejecuta en esa base de datos? Cuando tenga clara la selección de su base de datos y el esquema de la base de datos, llame las claves para el almacén de clave-valor o las claves de partición para un almacén de columnas, etc.
8. Manejar la Ley de Murphy
La mayoría de las personas se saltan esta parte en las entrevistas, pero esta es una de las cosas más importantes que debe cubrir en esta ronda. Esta parte habla sobre cuán resistente es su sistema. Las cosas se romperán en el mundo real, pero cuando suceda, debe asegurarse de tener el control total de su sistema.
Discuta cómo necesita monitorear el sistema en general y cómo ve cada parte de él. Mencione el mecanismo de alerta que tiene en su sistema. Discuta los KPI (Indicadores clave de rendimiento) y la forma en que realiza un seguimiento de ellos. ¿Cómo lidiaría con los problemas si las cosas se rompen si su sistema se cae si su servicio falla si el Node maestro de su base de datos se cae o los centros de datos se caen?
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.
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