Consejos para entrevistas de diseño de sistemas: del diseño avanzado a la investigación en profundidad

Este artículo se publicó por primera vez en la cuenta oficial: ¡Más IA (power_ai), bienvenido a prestar atención, la programación y los productos secos de IA se entregarán a tiempo!

entrevista

Acabas de conseguir esa entrevista in situ con la empresa de tus sueños. El coordinador de reclutamiento le envió el horario del día. Escanee la lista y estará bastante satisfecho con ella, hasta que sus ojos se posen en este segmento de la entrevista: la entrevista sobre el diseño del sistema.

Las entrevistas de diseño de sistemas a menudo pueden ser estresantes. La pregunta puede ser vaga como "¿Diseñar un producto X conocido?". La pregunta es vaga y parece demasiado amplia. Tu cansancio es comprensible. Después de todo, ¿quién puede diseñar un producto exitoso en una hora que requiera cientos o incluso miles de ingenieros para construirlo?

La buena noticia es que nadie espera que lo hagas. El diseño del sistema del mundo real es extremadamente complejo. Por ejemplo, la búsqueda de Google puede parecer simple, pero la cantidad de tecnología que respalda esta simplicidad es realmente sorprendente. ¿De qué sirve una entrevista de diseño de sistemas si nadie espera que diseñes un sistema del mundo real en una hora?

Las entrevistas de diseño de sistemas simulan la resolución de problemas de la vida real, en la que dos colegas colaboran en un problema ambiguo y encuentran una solución que cumple con sus objetivos. Las preguntas son abiertas y no hay respuestas perfectas. El diseño final es menos importante que el trabajo que pones en el proceso de diseño. Esto le permite demostrar sus habilidades de diseño, defender sus opciones de diseño y responder a los comentarios de manera constructiva.

Cambiemos el ángulo y consideremos lo que está pensando un entrevistador cuando entra a una sala de conferencias y se encuentra con usted. El objetivo principal del entrevistador es evaluar con precisión sus habilidades. Lo último que quiere es dar una evaluación no concluyente porque la entrevista no salió bien y no hubo suficientes señales. ¿Qué buscan los entrevistadores en una entrevista de diseño de sistema?

Mucha gente piensa que las entrevistas de diseño de sistemas se enfocan completamente en las habilidades de diseño técnico de uno. Pero se trata de mucho más que eso. Una entrevista de diseño de sistema eficaz revela claramente la capacidad de colaborar, trabajar bajo presión y resolver la ambigüedad de manera constructiva. La capacidad de hacer buenas preguntas también es una habilidad necesaria a la que muchos entrevistadores prestan especial atención.

Un buen entrevistador también busca señales de alerta. El exceso de ingeniería es un problema real para muchos ingenieros porque les gusta la pureza del diseño e ignoran las compensaciones. A menudo no son conscientes de los costos compuestos de los sistemas de ingeniería excesiva, y muchas empresas pagan un alto precio por esta ignorancia. En una entrevista de diseño de sistemas, ciertamente no desea mostrar esta tendencia. Otras señales de advertencia incluyen estrechez de miras, terquedad y más.

En este capítulo, presentaremos algunos consejos útiles y presentaremos un marco simple pero efectivo para resolver preguntas de entrevistas de diseño de sistemas.

El proceso de cuatro pasos para una entrevista de diseño de sistema eficaz

Cada entrevista de diseño de sistema es diferente. Una buena entrevista de diseño de sistemas es abierta y ninguna solución se adapta a todas las situaciones. Sin embargo, cada entrevista de diseño de sistema tiene algunos pasos y áreas comunes que cubrir.

Paso 1: comprender el problema y determinar el alcance del diseño

"¿Por qué rugen los tigres?"

Una mano se levantó rápidamente en la parte posterior de la clase.

"¿Sí, Jimmy?", respondió el profesor.

"Porque tiene hambre".

"Muy bien, Jimmy".

A lo largo de su infancia, Jimmy siempre fue el primer niño en responder preguntas en clase. Ya sea que sepa la respuesta o no, cada vez que el maestro hace una pregunta, hay un niño en el salón de clases al que le encanta tratar de responderla. Ese niño es Jimmy.

Jimmy es un excelente estudiante. Se enorgullece de saber todas las respuestas rápidamente. En los exámenes, suele ser el primero en completar las preguntas. Es la primera opción del maestro en cualquier competencia académica.

Pero no seas como Jimmy.

En una entrevista de diseño de sistemas, no hay bonificación por dar una respuesta rápidamente sin pensar. Responder sin una comprensión completa de los requisitos es una gran señal de advertencia, porque la entrevista no es un cuestionario y no hay respuestas correctas.

Por lo tanto, no salte directamente y dé una solución. desacelerar. Piense profundamente, haga preguntas para aclarar los requisitos y suposiciones. Esto es extremadamente importante.

Como ingenieros, nos gusta abordar problemas difíciles y llegar directamente a la etapa de diseño final; sin embargo, este enfoque puede llevarlo a diseñar el sistema equivocado. Una de las habilidades más importantes de ser ingeniero es poder hacer las preguntas correctas, hacer las suposiciones correctas y recopilar toda la información que necesita para construir un sistema. Por lo tanto, no tenga miedo de hacer preguntas.

Cuando haga una pregunta, el entrevistador le responderá directamente o le pedirá que haga sus propias suposiciones. Si sucede lo último, escribe tu hipótesis en una pizarra o papel. Es posible que los necesite más tarde.

¿Qué preguntas necesitas hacer? Haga preguntas para entender las necesidades exactas. Aquí hay algunas preguntas para ayudarlo a comenzar:

  • ¿Qué características específicas pretendemos construir?
  • ¿Cuántos usuarios tiene el producto?
  • ¿Qué tan rápido espera expandirse la empresa? ¿Cuál es el tamaño proyectado en 3 meses, 6 meses y un año?
  • ¿Cuál es la pila tecnológica de la empresa? ¿Qué servicios existentes podrían ayudarlo a simplificar su diseño?

ejemplo

Si se le pide que diseñe un sistema de suministro de noticias, debe hacer algunas preguntas que lo ayudarán a aclarar sus requisitos. Una conversación entre usted y el entrevistador podría ser algo como esto:

Candidatos : ¿Es esta una aplicación móvil o una aplicación web? ¿O ambos?

Entrevistador : Ambos.

Candidato : ¿Cuál es la característica más importante del producto?
Entrevistador : Haz publicaciones y consulta las noticias de tus amigos.

Candidato : ¿Se enumeran las fuentes de noticias en orden cronológico inverso o en un orden específico? El orden específico significa que cada publicación tiene un peso diferente. Por ejemplo, una publicación de tus amigos cercanos es más importante que una publicación de un grupo.
Entrevistador : Para simplificar la pregunta, supongamos que las suscripciones están ordenadas en orden cronológico inverso.

Candidato : ¿Cuántos amigos puede tener un usuario?
Entrevistador : 5000.

Candidato : ¿Cuánto tráfico?
Entrevistador : 10 millones de usuarios activos diarios (DAU).

Candidato : ¿Los feeds pueden contener imágenes, videos o solo texto?
Entrevistador : puede contener archivos multimedia, incluidas imágenes y videos.

Arriba hay algunos ejemplos de preguntas que puede hacerle a su entrevistador. Es importante comprender los requisitos y aclarar las ambigüedades.

Paso 2: Proponga un diseño de alto nivel y obtenga la aprobación

En este paso, nuestro objetivo es desarrollar un diseño de alto nivel y acordar el diseño con el entrevistador. Es una buena idea trabajar con el entrevistador durante este proceso.

  • Proponer un anteproyecto inicial para el diseño. Solicite comentarios. Trate a sus entrevistadores como compañeros de equipo y trabajen juntos. Muchos buenos entrevistadores disfrutan de las discusiones y participan en ellas.
  • Dibuje un diagrama de caja con componentes clave en una pizarra o papel. Esto puede incluir clientes (móvil/web), API, servidores web, almacenes de datos, cachés, CDN, colas de mensajes, etc.
  • Realice algunos cálculos aproximados para evaluar si su modelo se ajusta a las restricciones de tamaño. Piensa en voz alta. Antes de profundizar, si necesita hacer cálculos aproximados, comuníquese primero con el entrevistador.

Si es posible, analice algunos casos de uso concretos. Esto te ayudará a enmarcar diseños de alto nivel. Esto también podría ayudarlo a detectar casos extremos que aún no ha considerado.

¿Deberíamos incluir aquí el punto final de la API y el esquema de la base de datos? Depende del problema. Eso es un nivel demasiado bajo para un gran problema de diseño como "diseñar un motor de búsqueda de Google". Para un problema como diseñar un backend para un juego de póquer multijugador, este es un juego justo. Comunicarse con el entrevistador.

ejemplo

Usemos "Diseño de un sistema de suministro de noticias" para demostrar cómo abordar el diseño avanzado. Aquí no necesita entender cómo funciona realmente el sistema. Todos los detalles se explicarán en el Capítulo 11.

A un alto nivel, el diseño se divide en dos flujos: publicación de información y construcción de suministro de noticias.

  • Publicación de información: cuando un usuario publica una información, los datos correspondientes se escribirán en el caché/base de datos, y esta información se enviará a las noticias de sus amigos.

  • Construcción de la sección de noticias: la sección de noticias se construye clasificando las publicaciones de tus amigos en orden cronológico inverso.

La Figura 3-1 y la Figura 3-2 muestran, respectivamente, el diseño de alto nivel del proceso de publicación de información y construcción de noticias.

imagen-20230520205405486

imagen-20230520205434123

Paso 3 - Diseño en profundidad

En este punto, usted y el entrevistador deberían haber alcanzado los siguientes objetivos:

  • Acordar los objetivos generales y el alcance funcional
  • Esbozar un plan de alto nivel del diseño general
  • Obtuve comentarios sobre el diseño de alto nivel de los entrevistadores.
  • Con base en sus comentarios, algunas ideas iniciales para áreas de investigación futura.

Debe trabajar con el entrevistador para identificar y priorizar los componentes de la arquitectura. Vale la pena enfatizar que cada entrevista es diferente. A veces, el entrevistador puede insinuar que le gusta centrarse en el diseño de alto nivel. A veces, para una entrevista de candidato senior, la discusión puede centrarse en las características de rendimiento del sistema, probablemente centrándose en los cuellos de botella y la estimación de recursos. En la mayoría de los casos, el entrevistador probablemente querrá que profundice en los detalles de algunos componentes del sistema. Para el acortamiento de URL, es interesante profundizar en el diseño de funciones hash que convierten URL largas en URL cortas. Para los sistemas de chat, cómo reducir la latencia y cómo admitir el estado en línea/fuera de línea son dos temas interesantes.

La gestión del tiempo es muy importante porque es fácil quedar atrapado en detalles que no muestran tus habilidades. Tienes que encontrar alguna evidencia para mostrarle a tu entrevistador. Trate de no atascarse en detalles innecesarios. Por ejemplo, discutir el algoritmo EdgeRank para clasificar las fuentes de Facebook en detalle en una entrevista de diseño de sistemas no es ideal porque requiere mucho tiempo valioso y no demuestra su capacidad para diseñar sistemas escalables.

ejemplo

En este punto, hemos discutido el diseño de alto nivel del sistema de suministro de noticias y el entrevistador está satisfecho con su propuesta. A continuación, veremos los dos casos de uso más importantes:

  1. liberación dinámica
  2. Adquisición de fuentes de noticias

La Figura 3-3 y la Figura 3-4 muestran el diseño detallado de estos dos casos de uso, que se explicarán en detalle en el Capítulo 11.

imagen-20230520205456399

Paso cuatro - Resumen

En este paso final, el entrevistador puede hacerle algunas preguntas de seguimiento o darle la libertad de discutir otros puntos adicionales. Aquí hay algunas direcciones posibles:

  • El entrevistador puede querer que usted identifique cuellos de botella en el sistema y discuta posibles mejoras. Nunca digas que tu diseño es perfecto y que no hay nada que se pueda mejorar. Siempre hay algo que se puede mejorar. Esta es una gran oportunidad para demostrar su pensamiento crítico y causar una buena impresión final.
  • Puede ser útil para el entrevistador revisar su diseño. Esto es especialmente importante si se te ocurren algunas soluciones. Después de una larga discusión, puede ser útil refrescar la memoria del entrevistador.
  • Vale la pena hablar sobre las condiciones de error (falla del servidor, interrupción de la red, etc.).
  • También vale la pena mencionar los problemas de operaciones. ¿Cómo supervisa las métricas y los registros de errores? ¿Cómo implementar el sistema?
  • Cómo lidiar con la siguiente curva de escala también es un tema interesante. Por ejemplo, si su diseño actual admite 1 millón de usuarios, ¿qué cambios necesitaría realizar para admitir 10 millones de usuarios?
  • Si tiene más tiempo, sugiera otras mejoras que necesite.

En general, hemos elaborado una lista de lo que se debe y lo que no se debe hacer.

lo que debe hacerse

  • Siempre pide aclaraciones. No asuma que sus suposiciones son correctas.
  • Comprender las necesidades del problema.
  • No hay una respuesta correcta ni una mejor respuesta. Una solución diseñada para una startup es diferente a una solución diseñada para una empresa establecida con millones de usuarios. Asegúrese de comprender los requisitos.
  • Hazle saber al entrevistador lo que estás pensando. Comuníquese con su entrevistador.
  • Sugiera múltiples enfoques si es posible.
  • Una vez que usted y el entrevistador estén de acuerdo con el plan de diseño, explique cada componente en detalle. Diseñe las partes más críticas primero.
  • Presentar ideas al entrevistador. Un buen entrevistador trabajará contigo como compañero de equipo.
  • no rendirse nunca.

qué no hacer

  • No esté desprevenido para las preguntas típicas de una entrevista.
  • No salte a una solución sin aclarar los requisitos y las suposiciones.
  • No entre en demasiados detalles sobre los componentes individuales al principio. Primero se da un diseño de alto nivel y luego se estudia en profundidad.
  • Si te quedas atascado, no dudes en pedir pistas.
  • De nuevo, comunícate. No pienses en silencio.
  • No creas que una vez que das un diseño, tu entrevista ha terminado. No terminas hasta que el entrevistador dice que terminaste. Pida retroalimentación temprano y con frecuencia.

Asignación de tiempo para cada paso.

Las preguntas de la entrevista de diseño del sistema suelen ser muy amplias, y 45 minutos o una hora no es tiempo suficiente para cubrir todo el diseño. La gestión del tiempo es crucial. ¿Cuánto tiempo debe dedicar a cada paso? La siguiente es una guía muy aproximada sobre cómo distribuir su tiempo durante una sesión de entrevista de 45 minutos. Tenga en cuenta que esto es solo una estimación aproximada y que la asignación de tiempo real dependerá del alcance de la pregunta y las necesidades del entrevistador.

Paso 1 Comprender el problema y determinar el alcance del diseño: 3 - 10 minutos

Paso 2 Presentar diseño de alto nivel y obtener aprobación: 10 - 15 minutos

Paso 3 Diseño en profundidad: 10 - 25 minutos

Paso 4 Cierre: 3 - 5 minutos

Hola, soy Shisan, un conductor veterano que se ha desarrollado durante 7 años y una empresa extranjera durante 5 años en Internet durante 2 años. Puedo vencer a Ah San y Lao Mei, y también me han arruinado los comentarios de relaciones públicas. A lo largo de los años, trabajé a tiempo parcial, comencé un negocio, me hice cargo del trabajo privado y mezclé el trabajo. Ganó dinero y perdió dinero. En el camino, mi sentimiento más profundo es que no importa lo que aprendas, debes seguir aprendiendo. ¡Mientras puedas perseverar, es fácil lograr adelantar en las curvas! Así que no me preguntes si es demasiado tarde para hacer lo que hago ahora. Si aún no tiene una dirección, puede seguirme [cuenta pública: Más IA (power_ai)], donde a menudo compartiré información de vanguardia y conocimientos de programación para ayudarlo a acumular capital para tomar curvas y adelantar.

Supongo que te gusta

Origin blog.csdn.net/smarter_AI/article/details/131819038
Recomendado
Clasificación