paint-brush
Las 10 preguntas principales de la entrevista de diseño de sistemas para ingenieros de softwarepor@fahimulhaq
405,670 lecturas
405,670 lecturas

Las 10 preguntas principales de la entrevista de diseño de sistemas para ingenieros de software

por Fahim ul Haq2017/08/22
Read on Terminal Reader
Read this story w/o Javascript
tldt arrow
ES

Demasiado Largo; Para Leer

El diseño de sistemas distribuidos a gran escala se ha convertido en la parte estándar de las entrevistas de ingeniería de software. Los ingenieros luchan con las entrevistas de diseño de sistemas (SDI), principalmente por las siguientes dos razones:

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Las 10 preguntas principales de la entrevista de diseño de sistemas para ingenieros de software
Fahim ul Haq HackerNoon profile picture

El diseño de sistemas distribuidos a gran escala se ha convertido en la parte estándar de las entrevistas de ingeniería de software. Los ingenieros luchan con las entrevistas de diseño de sistemas (SDI), principalmente por las siguientes dos razones:

  1. Su falta de experiencia en el desarrollo de sistemas a gran escala.
  2. Naturaleza no estructurada de las IDE. Incluso los ingenieros que tienen algo de experiencia en la construcción de grandes sistemas no se sienten cómodos con estas entrevistas, principalmente debido a la naturaleza abierta de los problemas de diseño que no tienen una respuesta estándar.

Un gran desempeño en SDI es muy gratificante ya que refleja su capacidad para trabajar con sistemas complejos y se traduce en el puesto y la compensación (salario y acciones) que le ofrecerá la empresa entrevistadora.

Consulte los siguientes recursos para prepararse para las entrevistas de ingeniería de software:

Entrevistas de diseño de sistemas: asimilando la entrevista de diseño de sistemas

Entrevistas de Diseño Orientado a Objetos: Asimilando la Entrevista de Diseño Orientado a Objetos

Preparación de entrevistas de codificación: Coderust 3.0: preparación de entrevistas de codificación más rápida con visualizaciones y desafíos interactivos

Estructuras de datos: Estructuras de datos para codificar entrevistas

En Educative.io , hemos hablado con cientos de candidatos que pasaron por entrevistas de diseño. Como parte del proceso, hemos compilado una lista de las preguntas más frecuentes de la entrevista de diseño del sistema.

Las siguientes son las preguntas más frecuentes junto con algunos consejos sobre las cosas que los entrevistadores quieren que tenga en cuenta al diseñar el sistema.

1. Diseñar TinyURL o bitly (un servicio de acortamiento de URL)

Dada una URL (típicamente) larga, ¿cómo diseñaría un servicio que generaría un alias más corto y único para él?

Discutir cosas como:

  • ¿Cómo generar una ID única para cada URL?
  • ¿Cómo generaría ID únicos a escala (miles de solicitudes de acortamiento de URL cada segundo)?
  • ¿Cómo manejaría su servicio los redireccionamientos?
  • ¿Cómo admitiría las URL cortas personalizadas?
  • ¿Cómo eliminar las URL caducadas, etc.?
  • ¿Cómo realizar un seguimiento de las estadísticas de clics?

2. Diseña YouTube, Netflix o Twitch (un servicio global de transmisión de video)

Los videos significan que su servicio almacenará y transmitirá petabytes y petabytes de datos. Debe discutir cómo almacenar y distribuir datos de manera eficiente de manera que una gran cantidad de usuarios puedan verlos y compartirlos simultáneamente (por ejemplo, imagine transmitir el último episodio de un éxito). programa de televisión como Juegos de Tronos).

Además, discuta:

  • ¿Cómo registraría las estadísticas de los videos, por ejemplo, el número total de vistas, votos positivos/negativos, etc.
  • Cómo agregaría un usuario comentarios en videos (en tiempo real).

3. Diseña Facebook Messenger o WhatsApp (un servicio de chat global)

Los entrevistadores están interesados en saber:

  • ¿Cómo diseñaría conversaciones uno a uno entre usuarios?
  • ¿Cómo extendería su diseño para admitir chats grupales?
  • ¿Qué hacer cuando el usuario no está conectado a internet?
  • ¿Cuándo enviar notificaciones push?
  • ¿Puede proporcionar cifrado de extremo a extremo? ¿Cómo?

4. Diseñar Quora o Reddit o HackerNews (una red social + servicio de tablero de mensajes)

Los usuarios de los servicios pueden publicar preguntas o compartir enlaces. Otros usuarios pueden responder preguntas o comentar sobre los enlaces compartidos. El servicio debe ser capaz de:

  • Registra estadísticas para cada respuesta, por ejemplo, el número total de vistas, votos positivos/negativos, etc.
  • Los usuarios deben poder seguir a otros usuarios o temas.
  • Su línea de tiempo consistirá en las principales preguntas de todos los usuarios y los temas que siguen (similar a la generación de suministro de noticias).

5. Diseñe Dropbox o Google Drive o Google Photos (un servicio global de almacenamiento y uso compartido de archivos)

Discutir cosas como:

  • ¿Cómo podrían los usuarios cargar/ver/buscar/compartir archivos o fotos?
  • ¿Cómo realizaría un seguimiento de los permisos para compartir archivos?
  • ¿Cómo permitiría que varios usuarios editen el mismo documento?

6. Diseña Facebook, Twitter o Instagram (un servicio de redes sociales con cientos de millones de usuarios)

Al diseñar un servicio de redes sociales con cientos de millones (o miles de millones de usuarios), los entrevistadores están interesados en saber cómo diseñaría los siguientes componentes

  • Almacenamiento eficiente y búsqueda de publicaciones o tweets.
  • Generación de suministro de noticias
  • Gráfico social (quién se hace amigo de quién o quién sigue a quién, especialmente cuando millones de usuarios siguen a una celebridad)

Muchas veces, los entrevistadores pasan toda la entrevista discutiendo el diseño del suministro de noticias.

7. Diseña Uber o Lyft ( un servicio de viaje compartido)

Al diseñar un servicio de viajes compartidos, discuta cosas como:

  • El caso de uso más crítico: ¿cuando un cliente solicita un viaje y cómo relacionarlo de manera eficiente con los conductores cercanos?
  • Cómo almacenar millones de ubicaciones geográficas para conductores y pasajeros que siempre están en movimiento.
  • ¿Cómo manejar las actualizaciones de las ubicaciones de los conductores y pasajeros (millones de actualizaciones cada segundo)?

8. Diseñar un Web Crawler o Type-Ahead (servicios relacionados con motores de búsqueda)

Para la escritura anticipada, a medida que el usuario escribe su consulta, debe diseñar un servicio que sugiera los 10 términos más buscados comenzando con lo que el usuario haya escrito. Discutir cosas como:

  • ¿Cómo almacenar consultas de búsqueda anteriores?
  • ¿Cómo mantener los datos actualizados?
  • ¿Cómo encontrar las mejores coincidencias con la cadena ya escrita?
  • ¿Cómo manejar las actualizaciones y el usuario está escribiendo demasiado rápido?

Para Web Crawler, tenemos que diseñar un servicio escalable que pueda rastrear toda la Web y pueda obtener cientos de millones de documentos Web. Discutir cosas como:

  • ¿Cómo encontrar nuevas páginas web?
  • ¿Cómo priorizar páginas web que cambian dinámicamente?
  • ¿Cómo asegurarse de que su rastreador no se atasque infinitamente en el mismo dominio?

9. Diseñe un limitador de tasa de API (por ejemplo, para Firebase o Github)

Se espera que desarrolle un servicio de limitador de velocidad que pueda:

  • Limite la cantidad de solicitudes que una entidad puede enviar a una API dentro de una ventana de tiempo, por ejemplo, 15 solicitudes por segundo.
  • La limitación de velocidad debería funcionar para una configuración distribuida, ya que se puede acceder a las API a través de un grupo de servidores.
  • ¿Cómo manejaría el estrangulamiento (estrangulamiento suave y fuerte, etc.)?

10. Diseña Yelp o Lugares Cercanos/Amigos **(**un servidor de proximidad)

Este servicio necesitaría almacenar ubicaciones para millones de personas/lugares. Discutir cosas como:

  • ¿Cómo podrían los usuarios del servicio buscar amigos o lugares cercanos?
  • Cómo clasificar lugares (basado en la distancia, opiniones de usuarios).
  • Cómo almacenar de manera eficiente los datos de ubicación de acuerdo con la densidad de población (por ejemplo, un bloque en la ciudad de Nueva York puede tener más lugares/personas que una ciudad pequeña).

Ingeniero de software Recursos para la preparación de entrevistas

Los siguientes son algunos recursos que pueden ayudarlo a prepararse para las entrevistas de ingeniería de software.

  1. Entrevistas de diseño de sistemas: asimilando la entrevista de diseño de sistemas .
  2. Codificación de entrevistas: Coderust 3.0: preparación más rápida de entrevistas de codificación mediante visualizaciones interactivas .
  3. Estructuras de datos: Estructuras de datos para codificar entrevistas .

¡Feliz entrevista!

Si esta publicación te resultó útil, haz clic en el signo 👏 y sígueme para ver más publicaciones. Si tienes algún comentario, comunícate conmigo en Twitter .

Fahim es el co-fundador de Educativa . Estamos construyendo la plataforma de aprendizaje interactivo de próxima generación para ingenieros e instructores de software. Los estudiantes aprenden a través de cursos interactivos. Los instructores pueden crear y publicar rápidamente cursos interactivos utilizando nuestro creador de cursos. Si está interesado en publicar cursos o saber más, no dude en comunicarse.

  • Todos los nombres de productos, logotipos y marcas son propiedad de sus respectivos dueños.