Diseño para elevador de un edificio
Escenarios
Un elevador típico tiene botones (botones de elevador) dentro de la cabina para permitir que el usuario que obtuvo el elevador seleccione su piso deseado. De manera similar, cada piso tiene botones (botones de piso) para llamar al elevador para que vaya a los pisos superiores y a los pisos inferiores respectivamente. Los botones se iluminan para indicar que se acepta la solicitud. Además, el botón deja de iluminarse cuando el elevador llega al piso solicitado.
Casos de uso:
Usuario
• Presiona el botón del piso para llamar al ascensor
• Presiona el botón del elevador para moverse al piso deseado
Botón de piso y botón de elevador
• Se ilumina cuando el usuario lo presiona
• Coloca una solicitud de ascensor cuando se presiona
Ascensor
• Se mueve hacia arriba / abajo según las instrucciones
• Abre / cierra la puerta
Diseño
Cada vez que se presiona un botón se genera una solicitud de elevador que debe ser atendida. Cada una de estas solicitudes se rastrea en un lugar centralizado. Las solicitudes de elevador, la clase que almacena, las solicitudes de elevador pueden usar algo diferente para programar las solicitudes de elevador. El elevador es administrado por una clase de controlador, que llamamos Controlador de elevador. La clase de controlador de elevador proporciona instrucciones al elevador. El controlador del elevador lee la siguiente solicitud de elevador para ser procesada y atendida.
El botón es una clase abstracta que define un comportamiento común como illuminate, doNotIlluminate. FloorButton, Elevator Button extiende el tipo de botón y define el método placeRequest () que se invoca cuando se presiona un botón. Cuando se presiona un botón de piso o de ascensor, se agregan solicitudes a una cola común.
ElevatorController lee la siguiente solicitud e indica la siguiente acción al elevador.
¿Cómo podemos extender esto a múltiples ascensores?
En el escenario de elevador único, hay un elevador único y un controlador de elevador y un servidor común donde se almacenan las solicitudes de piso y la solicitud de botón de elevador. Que se procesan según el algoritmo de programación.
Para extender esto a múltiples escenarios de elevadores, todavía habrá un controlador de elevador único. Las solicitudes basadas en el piso pueden ser atendidas por cualquier elevador, mientras que las solicitudes de botones del elevador serán atendidas solo por el elevador al que pertenece el botón.
PlaceRequest () de FloorButton agrega una solicitud a la cola común, a la que accede el controlador del elevador, asignando la solicitud a uno de los elevadores. PlaceReutButton’s placeRequest agrega una solicitud al elevador directamente, ya que se supone que sirve. El controlador del elevador ejecutará varios algoritmos, como la búsqueda más corta, etc., para decidir qué elevador debe manejar cada solicitud.

Los dos tipos de problemas de diseño planteados en las entrevistas son:
- La primera familia de problemas de diseño está relacionada con el diseño de sitios web de la vida real. Estos problemas aplican la teoría de la escalabilidad, el equilibrio de carga, la redundancia, etc. Por ejemplo, Diseño de Facebook, Diseño de bits, Diseño de Quora, Diseño de Uber, Diseño de IRCTC, etc.
- La segunda familia de problemas de diseño son los diagramas de clase. Por ejemplo, diseño del sistema de elevador, diseño de valet parking, diseño de sistema de restaurante, etc.
Enfoque de 5 pasos para resolver problemas de diseño del sistema:
- Generación de casos de uso: reúna todos los casos de uso posibles
- Restricciones y análisis: cuántos usuarios, cuántos datos, etc.
- Diseño básico: diseño más básico. Pocos usuarios caso.
- Cuellos de botella: encuentre los cuellos de botella y resuélvalos.
- Escalabilidad: gran cantidad de usuarios. Los pasos 4 y 5 irán en bucle hasta que obtengamos una respuesta satisfactoria.
” Resolución de problemas en estructuras de datos y algoritmos ” escrito en varios lenguajes como C, C ++, Java, C #, Python, etc. El libro está escrito para el punto de vista de preparación de entrevistas explicando la lista vinculada, el árbol, el hash, el montón, etc. Número de diagramas para explicar varios conceptos. También contiene un capítulo de Diseño del sistema al final que brindará un enfoque sistemático para resolver los problemas de diseño en una Entrevista.
Algunos problemas que había discutido en el último capítulo son:
- ¿Cómo diseñarías Facebook? ¿Cómo diseñarías un poco? etc.
- También se discute cómo diseñaría un sistema de ascensor o un sistema de restaurante, etc.
Los enlaces de los libros en Amazon están abajo:
1. Resolución de problemas en estructuras de datos y algoritmos utilizando C
2. Resolución de problemas en estructuras de datos y algoritmos usando C ++
3. Resolución de problemas en estructuras de datos y algoritmos utilizando Java
4. Resolución de problemas en estructuras de datos y algoritmos con C #
5. Resolución de problemas en estructuras de datos y algoritmos usando Python
6. Resolución de problemas en estructuras de datos y algoritmos con Visual Basic .Net