Cómo encontrar un ingeniero para realizar una entrevista simulada de diseño a gran escala

Este consejo es más acerca de cómo entrenarse para tales problemas (en lugar de tratar de encontrar a alguien que lo ayude a entrenar).

1. Comience con sus amigos que trabajan en empresas que se ocupan de proyectos a gran escala. Pídales que realicen esta entrevista por usted, que le den su opinión y una forma general sobre cómo abordar estos problemas.

2. Visite el sitio web de la copa profesional. Por lo que sé, ofrecen prácticas de entrevistas simuladas con entrevistadores reales. Averigüe si pueden ayudarlo con tales entrevistas.

3. Si tiene colegas que trabajan en tales proyectos en su propia empresa, hable con ellos al respecto. No tiene que decirles que está entrevistando. Pero discuta con ellos qué tipo de problemas enfrentan, cómo los han abordado prácticamente, por qué tomaron esas decisiones, etc.

4. Lea los trabajos de investigación. Muchos de ellos y comenzará a encontrar patrones de cómo las personas aplican / ajustan las técnicas conocidas existentes para resolver problemas específicos del dominio. Por ejemplo, lea el documento de Amazon en dynamo DB y luego sobre Cassandra (Facebook). Notarás similitudes … luego mira las citas en estos documentos y elige los temas que te interesen.
No puedo enfatizar esto lo suficiente. Cuanto más lea, mejor intuición obtendrá sobre cómo funcionan los sistemas a gran escala.
No se salte la parte de estos documentos donde discuten los números, porque eso le dará una idea precisa de cómo estos sistemas ayudaron a resolver varios problemas y las compensaciones que hicieron.
Algunos buenos documentos para comenzar serían, Dynamo, Cassandra, Big Table, GFS, Map Reduce, Spanner, Papers on Consistent Hashing, Byzantine Failures, Espresso & Voldemort, Helix (de Linkedin)

5. Esto está algo relacionado con 4, pero debe conocer algunos patrones de diseño comunes cuando se trata de arquitecturas que necesitan escalar horizontalmente. Cualquiera de estos sistemas (o al menos la mayoría de ellos) tendrá que ver con una arquitectura cliente-servidor en la que necesita un nivel de front-end, algún middleware y posiblemente algo de almacenamiento de back-end. Podría haber muchos editores / consumidores internos de los mismos datos. Tiene que haber una manera de enrutar las solicitudes, el equilibrio de carga. El sistema generalmente tendrá un objetivo, estará diseñado para algún tipo de carga de trabajo … ¿es el propósito sensible a la latencia …? ¿Necesita estar más orientado al rendimiento …? Ambos..? ¿Es una infraestructura interna …? orientada al cliente..? ¿Es el costo un factor? ¿Es importante la consistencia de la información? ¿Es el sistema simplemente un nivel de almacenamiento … o también necesita computación …? ¿Los datos son mutables o de solo lectura? Almacenamiento en caché? ¿Te importa la disponibilidad …? ¿confiabilidad? ¿Sus máquinas necesitan estar sincronizadas …? ¿Es la seguridad una consideración? es decir, ¿son confiables los nodos?

Por lo general, verá que los parámetros mencionados anteriormente (y muchos otros) se abordan de manera diferente cuando lee muchos trabajos de investigación. Entonces eso le dará algo de munición cuando intente resolver las preguntas de diseño del sistema. Te animo a que estudies primero, luego encuentres personas para simularte entrevistarte.

Tales entrevistas pueden ser como conversaciones. Trátelos más como sesiones de lluvia de ideas en lugar de pensar en “OH DIOS MÍO … ME RECHAZARÉ SI NO RESPONDO ESTO … AAAGGGHH”.

Espero que ayude.