Golang
¿Cómo te sientes respecto a varias etapas de entrevista (3-4 etapas)?
¿Qué herramientas de Go utilizaste, incluyendo para perfiles y evaluación del rendimiento?
¿Qué es un índice y qué tipos de índices existen en PostgreSQL?
¿Qué es una colisión y cómo se combate?
¿Cómo determinó dónde se encontraba el cuello de botella de una solicitud específica?
¿Por qué no es recomendable crear una goroutine separada para cada URL al verificar terminales?
¿Con qué bases de datos ha trabajado? ¿Qué tipos de bases de datos conoce? ¿Por qué las bases de datos relacionales se llaman relacionales?
¿Qué es una syscall? ¿Cómo maneja el runtime de Go las syscalls bloqueantes en el modelo GMP?
Sección de algoritmos: dos problemas de nivel Medium de LeetCode o superior. Duración: 1,5 horas para ambos problemas.
¿Cómo funciona el proceso de lanzamiento? ¿Cómo fue el último lanzamiento con su participación?
¿Has tenido experiencia en soporte o desarrollo de sistemas distribuidos?
¿Para qué sirven en realidad los buckets en una tabla hash/mapa? ¿Cuál es su función?
Cuéntame sobre tu experiencia laboral y en qué estás trabajando.
¿Por qué dejó [empresa]?
¿Hasta qué punto participaste en la toma de decisiones sobre la implementación de Kafka y otras herramientas? ¿Lo discutiste con colegas o con el líder del equipo?
¿Con qué metodologías de desarrollo han trabajado? ¿Cuáles son las más cómodas?
Cuéntame sobre resp.Body.Close() — ¿por qué es necesario y por qué configuraste un búfer de 10?
¿Dónde y cómo medir la latencia en el sistema?
Cuéntame sobre los canales en Go: qué son, qué se almacena dentro, qué pasará con un canal con búfer de 5 elementos al escribir 5 valores?
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 por segundo, 5 millones de usuarios simultáneos, 60 PB de datos nuevos al año, crecimiento del 30% anual, P99 <200 ms para lectura, <300 ms para escritura, SLA 99.95%. 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 transmita archivos multimedia (fotos, videos, audios). El sistema debe garantizar 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 para añadir/eliminar participantes - Envío y recepción de mensajes de texto y archivos multimedia Requisitos no funcionales: - No hay implementación explícita de cifrado de extremo a extremo a nivel de servicios o clientes, aparte de una anotación general. - No se describe claramente el sharding y la replicación de bases de datos por chat_id o user_id para escalabilidad y tolerancia a fallos. - No hay un componente o mecanismo explícito para manejar la sincronización offline de mensajes y recibos de entrega. - No se detalla 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:** (En el diagrama se muestra una arquitectura con Load Balancer, API Gateway, Message Queue, Service, Cache, Database, Object Storage y CDN)