Mejor respuesta
Aquí hay algunas que recuerdo de mi entrevistas de escapadas:
- Diseña instagram o algún tipo de feed de contenido. Este es en realidad SUPER común, i debe haberlo obtenido 3 o 4 veces en varias empresas. Es bastante sencillo y es probablemente lo que preguntarán los entrevistadores que son demasiado perezosos para pensar en una pregunta mejor.
- Diseño de escritura anticipada / autocompletar. También he recibido este varias veces, a veces con ligeras variaciones. Por lo general, se basa en una estructura de datos de Trie. ¡Este es excelente para practicar!
- Diseñe un bus de mensajería (apache kafka / zeromq / rabbitmq). Es posible que obtenga algo como esto si está siendo entrevistado para un puesto de software orientado a la infraestructura. Este es uno excelente que puede generar muchas áreas de enfoque y subpreguntas diferentes.
- Diseñe una caché LRU. Por lo general, se reduce a implementar una lista doblemente enlazada para obtener la eliminación constante de los elementos usados menos recientemente cuando el caché está lleno.
- Diseño una caché distribuida. Nuevamente, podría ser para un rol que está infraorientado. También se puede tomar en muchas direcciones diferentes.
- Diseñe tablas de base de datos / almacén de datos. Esto podría ser para un rol más orientado al ingeniero de datos, pero también es común para los SWE dado que un buen diseño de datos es tremendamente importante.
Aquí hay algunos que NO he visto personalmente , a pesar de ser generalmente aceptado como común:
- Diseñe un acortador de URL
- Diseñe un sitio web de tienda / comercio electrónico
¡Espero que esto ayude! Apuesto a que los 4 o 5 primeros cubrirán la MAYORÍA de las entrevistas de diseño de su sistema, y para las que no cubren, el conocimiento que obtenga al estudiarlas debería transferirse bien a diferentes variaciones de las preguntas.
Respuesta
Entrevistas de diseño de sistemas evalúan sus habilidades de diseño y su capacidad para trabajar con servicios complejos y escalables. Su desempeño en estas entrevistas determina qué puesto y salario se le ofrecerá. Si tiene habilidades de diseño encomiables, obtendrá una oferta más alta. Un buen recurso para prepararse para esta entrevista: Entrevista de Grokking the System Design
Algunos problemas de diseño de muestra son:
- Diseño de un servicio de acortamiento de URL como TinyURL
- Diseño de Instagram
- Diseño de Twitter
- Diseño de Youtube
- Diseño de Facebook Messenger
- Diseño de Dropbox
- Diseño de sugerencia de escritura anticipada
- Diseño de Facebook Newsfeed
- Diseño de Yelp
- Diseño Uber
Además, es una buena idea familiarizarse con conceptos de sistemas distribuidos como Hashing coherente, Partición de datos , Equilibrio de carga , Redundancia y replicación , Teorema CAP , etc.
En mi experiencia, los candidatos que se han desempeñado mejor en el diseño de entrevistas siguieron estos siete pasos:
Paso 1: Aclaraciones sobre los requisitos: Siempre haga preguntas para encontrar el alcance exacto del problema que está resolviendo.
Paso 2: Definición de la interfaz del sistema: Defina qué API se esperan del sistema. Esto también garantizará que no haya cumplido ningún requisito incorrecto.
Paso 3: Estimación del reverso del sobre: Siempre es una buena idea estimar la escala del sistema que va a diseñar.
Paso 4: Defina el modelo de datos: Aunque es no es necesario al principio, esto aclarará cómo fluirán los datos entre los diferentes componentes del sistema y luego también lo guiará hacia la partición de datos.
Paso 5: Diseño de alto nivel: Dibuje un diagrama de bloques con 5-6 cuadros que representen los componentes centrales de su sistema.
Paso 6: Diseño detallado de componentes : Profundice en 2-3 componentes; Los comentarios de los entrevistadores siempre deben guiarlo hacia qué partes del sistema quiere que explique más.
Paso 7: Cuellos de botella: Intente discutir tantos cuellos de botella como sea posible y diferentes enfoques para mitigarlos.
Espero que esto te haya ayudado.