¿Cómo responder preguntas relacionadas con el diseño, como diseñar un estacionamiento, en una entrevista con Amazon? ¿Necesitamos escribir código para preguntas de diseño?

La publicación 8 cosas que debe saber antes de una entrevista de diseño del sistema tiene un excelente resumen para comenzar.

Desde mi experiencia con las entrevistas de diseño de sistemas en Google, Amazon y Facebook, las preguntas son generalmente abiertas y la discusión fue completamente diferente de lo que esperaba, aunque he preparado problemas similares. Por ejemplo, me pidieron que diseñara el autocompletado de Google, que es una de las preguntas de diseño más populares. Sin embargo, el entrevistador y yo hemos discutido muchos temas, como el aprendizaje automático, la optimización de la memoria, la estructura de los datos, etc.

Con eso en mente, diría que no hay una respuesta estándar a la pregunta de diseño. Mientras su enfoque sea razonable y pueda comparar los pros y los contras de diferentes opciones, su rendimiento no puede ser malo.

Aquí hay algunos consejos que daría:

  • Describa el panorama general primero. Es importante explicar brevemente su enfoque general para ayudar al entrevistador a comprender lo que está tratando de hacer. Si su diseño incluye 3 componentes principales, descríbalos primero. Lo contrario es profundizar en los detalles demasiado pronto. Dado que las preguntas de diseño del sistema son bastante amplias, de hecho hay infinitos detalles técnicos y saltar a los detalles demasiado pronto puede distraer tanto al entrevistador como a usted mismo.
  • Comience con algo simple. Me gustaría separar el enfoque de referencia de la optimización. Nadie espera que diseñe un sistema perfecto en 45 minutos. Si puede obtener el enfoque básico correcto, definitivamente está en el camino correcto. Para resolver un problema en particular, sugeriría que las personas solo brinden un enfoque ingenuo si funciona bien en general, pero dígale al entrevistador que sabe que esto puede optimizarse. Si el entrevistador le pide que lo haga, puede comenzar a considerar la optimización.
  • Compara diferentes opciones. Difícilmente puede haber una solución única para cualquier problema técnico. Es mejor para usted enumerar brevemente varias posibilidades y analizar la compensación. Al final del día, es posible que deba tomar una decisión en función de circunstancias particulares.

Le recomiendo que consulte el blog Preguntas sobre la entrevista de diseño del sistema para aprender de ejemplos reales. Con algo de práctica, las entrevistas de diseño de sistemas pueden ser mucho más fáciles de lo que la gente espera.

Entrevista de diseño de sistemas para empresa de TI

Cómo preparar preguntas de diseño de sistema para la empresa de TI:

El diseño del sistema es un tema muy amplio. Incluso un ingeniero de software con muchos años de experiencia laboral en la principal empresa de TI puede no ser un experto en diseño de sistemas. Si desea convertirse en un experto, debe leer muchos libros, artículos y resolver problemas reales de diseño de sistemas a gran escala.

Este blog solo le enseña a manejar la entrevista de diseño del sistema con un enfoque sistemático en poco tiempo. Puedes sumergirte en cada tema si tienes tiempo. Por supuesto, bienvenido a agregar sus pensamientos!

Consejos para la entrevista de diseño del sistema:

Aclarar las restricciones e identificar los casos de los usuarios.

Dedique unos minutos a interrogar al entrevistador y a ponerse de acuerdo sobre el alcance del sistema. Recuerde asegurarse de conocer todos los requisitos que el entrevistador no le dijo al principio.

Los casos de usuario indican las funciones principales del sistema y las restricciones enumeran la escala del sistema, como solicitudes por segundo, tipos de solicitudes, datos escritos por segundo, datos leídos por segundo.

Diseño de arquitectura de alto nivel.

Dibuje los componentes importantes y las conexiones entre ellos, pero no entre en algunos detalles. Por lo general, un sistema escalable incluye servidor web (equilibrador de carga), servicio (partición de servicio), base de datos (caché de conexión de clúster de base de datos maestra / esclava).

Diseño de componentes

Para cada componente, debe escribir las API específicas para cada componente. Es posible que deba finalizar el diseño detallado de OOD para una función en particular. También es posible que deba diseñar el esquema de la base de datos para la base de datos.

Entrevista de diseño de sistemas para empresa de TI

Hay dos tipos de preguntas de diseño, que se hacen en una entrevista, y el tipo de preguntas depende del tipo de empresas.

1. Diagrama de la clase : el primer tipo de preguntas es diseñar algún tipo de sistema de ascensor, sistema de valet parking, etc. En esto, el entrevistador solo quiere probar qué tan bien puede diseñar un sistema, especialmente qué tan bien están sus clases. interactuando

2. Problema de escalabilidad : el segundo tipo de problemas de diseño del sistema es más interesante, en el que el entrevistador le pide que diseñe algún tipo de sitio web o algún tipo de servicio o alguna interfaz API. Por ejemplo, diseñe el motor de búsqueda de Google o diseñe alguna característica de Facebook, como cómo se realiza el mapeo de amigos en Facebook, diseñe un juego basado en la web que permita que 4 personas jueguen al póker, etc. Son interesantes y, en esto, el entrevistador puede preguntar sobre la escalabilidad aspecto.

No había visto un solo libro, que solo maneja las preguntas de diseño del sistema en una entrevista. Esta habilidad está un poco dispersa en la web.

Mientras me preparaba para las entrevistas de diseño del sistema, preparé mis notas, que finalmente se convirtieron en el último capítulo de mis libros. Mi libro es para prepararme para la entrevista.

Los enlaces de los libros en Amazon son:

Resolución de problemas en estructuras de datos y algoritmos con C

Resolución de problemas en estructuras de datos y algoritmos utilizando Java

Resolución de problemas en estructuras de datos y algoritmos con C #

Resolución de problemas en estructuras de datos y algoritmos con Python

Resolución de problemas en estructuras de datos y algoritmos con Visual Basic .Net

Resolución de problemas en estructuras de datos y algoritmos con C ++

No, no es necesario codificar. Por lo general, en una pregunta de diseño, dibujará diagramas del sistema y discutirá una vista general de lo que está diseñando.

Empezaría haciendo muchas preguntas. Normalmente, uno de los entrevistadores haría una pregunta como “diseñar un estacionamiento”. Eso no dice mucho sobre el problema. Entonces debe comenzar a definir el alcance del sistema. ¿Qué parte necesito diseñar? ¿Qué tipo de funcionalidades se espera que sean? ¿Qué tan grande es el estacionamiento? ¿Crecerá en el futuro? ¿Qué tipo de autos van? ¿Permitirá motocicletas?

Un buen próximo paso es comenzar a definir actores: ¿qué tipo de interfaz de usuario utilizará? ¿Habrá algún backend? ¿Base de datos? ¿Que tipo? ¿Por qué? Y, por supuesto, la comunicación: ¿cómo se comunicará cada elemento entre sí? ¿Cuál será la entrada / salida de cada uno y cuál será el canal para transmitir esa información?

En este punto, es bueno comenzar a ajustar: ¿cómo modelarás los datos? ¿Cómo va a escalar eso? ¿Cuántos casos límite puede identificar y cómo puede manejarlos?

Mientras lo hace, el entrevistador también participará en el diseño. Mediante preguntas, evaluarán cómo reaccionará su sistema ante ciertos casos e intentarán mejorarlo. Escuche esas preguntas, tómese un momento para pensar en ellas e intente descubrir cómo resolver esos casos o defender su elección de diseño según el caso. Trata de verbalizar en voz alta tus pensamientos. Una de las cosas probadas en estas entrevistas es cómo piensa, por lo que externalizar sus ideas les ayudará a evaluar eso.

Lo que quieren probar es cómo imagina los proyectos antes de comenzar, cómo define los requisitos y cómo diseña sistemas grandes y complejos. También muestra tus habilidades de comunicación. En realidad son preguntas divertidas y fáciles de practicar.

¡Buena suerte!

Todo depende de cómo llevaste la discusión con el entrevistador, qué preguntó inicialmente y cómo permitió diseñar un estacionamiento. O simplemente pidió directamente diseñar un estacionamiento. Debe aclarar si le gustaría ver sus habilidades de diseño o las habilidades de diseño orientado a objetos. ¿Necesita asegurarse de que el estacionamiento para qué ?, ¿Estacionamiento para barcos o taxis o?

Aquí he escrito una respuesta detallada sobre esto:

Entrevista de diseño orientado a objetos para estacionamiento o elevador

“Diseñar un estacionamiento” no es una pregunta de codificación. Parece que están pidiendo ver si puedes pensar en los requisitos del usuario. ¿Qué tipo de edificio (s) debe soportar el estacionamiento? ¿Tienes suficiente estacionamiento? ¿Hay estacionamiento para discapacitados? ¿Hay un área de carga? ¿Hay espacio para quitanieves para depositar nieve en alguna parte? ¿Hay un área para carros si es una tienda? ¿Cómo correrá el agua a los desagües? Etc., etc., etc.

Reconocer que esta no es un área en la que tiene experiencia particular y señalar que también querría hablar con personas que han diseñado estacionamientos no sería algo malo. (Pero no trataría de ofrecer esto como una respuesta “… y he terminado con la pregunta”, solo una nota que reconoce que hay personas que ya han pensado en esto, y es otra persona).

Las preguntas relacionadas con el diseño son para evaluar las habilidades de diseño y qué tan bueno es hacerlo. Esto proporciona una perspectiva sobre el candidato sobre cuán detallados pueden pensar en el diseño del sistema.

Esto también prueba la confianza que uno tiene en su diseño y defiende su respuesta.

Uno puede responder tales preguntas pensando primero en los requisitos del sistema y en lo que todos los componentes y clases necesitan para lo mismo. Luego, piense en cómo interactúan los diferentes componentes y cómo se han utilizado los objetos para las interacciones.

Otro punto es cuán extensible es el sistema y puede cumplir con los cambios o requisitos necesarios en el futuro.

Sugeriría pensar detalladamente y luego poner su respuesta. Y luego el diseño puede evolucionar durante la discusión.

Podría ser un problema de bajo nivel o de diseño del sistema que el entrevistador mencionará claramente. Ya hay buenos enlaces publicados para problemas de diseño del sistema. Para el diseño de bajo nivel (y especialmente para problemas de estacionamiento) puede verificar el Sistema de estacionamiento de vehículos

A diferencia de Google y Microsoft y algunas empresas de Wall Street, Amazon no hace preguntas para ver cómo resuelve los problemas. Tienen diseño de SDE y escriben código sobre la marcha y le dirán qué áreas es probable que investiguen.

Probablemente deberías dibujar algunos bocetos. Probablemente no debería escribir código a menos que el entrevistador lo solicite (lo cual no hará a menos que el trabajo requiera codificación). Algo así como una vista en planta probablemente tendría sentido para un estacionamiento.

Otras habilidades importantes incluyen hacer preguntas de seguimiento y practicar antes de la entrevista.