Golang
Cuéntenos sobre su experiencia, todo lo que considere necesario y relevante para este puesto.
¿Has oído algo sobre el patrón Transactional Outbox?
¿Cuál fue el error más grande?
¿Cómo se realiza la transferencia de datos entre diferentes servicios en la infraestructura? ¿A través de un broker, directamente, gRPC?
Escribir un problema en el lenguaje Go — sección práctica (problemas de la vida real del desarrollador, sin algoritmos): mejorar o corregir un servicio. Duración — 1,5 horas.
¿Cuál es la complejidad algorítmica media de leer desde una tabla hash?
¿Cuántas instancias de Postgres tenías en el proyecto?
¿Por qué criterios se dividían los grupos de consumidores?
¿Qué interfaces implementaría?
¿Cómo garantizar la entrega de eventos en una red inestable (la red puede desconectarse, los eventos no se pueden perder)?
¿El recolector de basura en Go es bloqueante o no? ¿Es visible su efecto en producción?
¿Cuál es la diferencia entre Kafka y RabbitMQ?
¿Qué herramientas de visualización de esquemas arquitectónicos has utilizado y para qué casos?
Diseño de un sistema de mensajería escalable que soporte 150 millones de usuarios, 75 millones de DAU, 225 millones de MAU, 1.2M de lecturas / 300k de escrituras en picos de QPS, 5 millones de usuarios simultáneos, 60 PB de datos nuevos al año, crecimiento del 30% anual, SLA del 99.95%, p99 <200 ms para lectura, <300 ms para escritura. CONTEXTO Se requiere diseñar un sistema distribuido de mensajería, similar a WhatsApp, que soporte chats 1:1 y grupales, garantice la entrega de mensajes, muestre estados en línea de los usuarios y permita la transferencia de archivos multimedia (fotos, videos, audios). El sistema debe ofrecer alta disponibilidad y baja latencia, soportar alto paralelismo y escalar a nivel global. REQUISITOS FUNCIONALES - Soporte para chats personales (1:1) y grupales con capacidad de añadir/eliminar participantes - Envío y recepción de mensajes de texto y archivos multimedia NO SE VE UNA IMPLEMENTACIÓN CLARA del mecanismo de cifrado end-to-end a nivel de servicios o clientes, aparte de una anotación general. - No hay una descripción explícita de sharding y replicación de bases de datos por chat_id o user_id para escalabilidad y tolerancia a fallos. - No se observa un componente o mecanismo claro para manejar la sincronización offline de mensajes y recibos de entrega. - No está claro cómo se realiza el balanceo de carga entre bases de datos y servicios, especialmente en picos de carga. **Puntos críticos a tener en cuenta:**
¿Tienes experiencia con CI/CD? ¿Qué hiciste?
¿Qué piensas, cuál es el problema con la solución en memoria? ¿Qué pasará si reinicias el servicio?
Cuéntame sobre tu experiencia trabajando en Go — ¿entiendo bien que tienes 6,5 años de experiencia?
¿Tenías Keycloak para la autorización o una solución propia?
¿Qué índices utilizaste en el trabajo? ¿Qué aplicaste en la práctica? ¿En Wildberries?
¿Has tenido experiencia en soporte o desarrollo de sistemas distribuidos?