¿Usaron Kafka como almacenamiento? ¿Cuántos anuncios estaban en Kafka?
Golang
¿Tiene experiencia trabajando con infraestructura? ¿Ha tenido que tocar algo?
¿El trabajo solo está permitido dentro del territorio de la Federación Rusa?
¿Para qué se utiliza más comúnmente Consul en una arquitectura de microservicios?
RPS En promedio, 4-5 mil RPS, alcanzando picos de hasta 12k Pero aquí es importante entender que la carga principal recaía en Kafka. Dado que la arquitectura es asíncrona, por cada creación de anuncio, mi orquestador generaba una cadena de 5-7 eventos en diferentes servicios de verificaciones. En total, procesábamos un flujo de hasta 30k mensajes por segundo en promedio.
¿Cuál es la diferencia entre un desarrollador senior y uno medio en un equipo?
¿La empresa proporciona equipo de trabajo?
¿Qué nivel de salario considera al cambiar de trabajo?
¿Cómo se realizó la prueba de carga y qué métricas se observaron?
¿Cómo resolvías las situaciones cuando rechazaban tu decisión?
¿Cuál es su experiencia general con infraestructura, incluyendo Docker, Kubernetes, CI/CD y redes?
¿Qué tan conveniente es un formato de trabajo híbrido en Moscú con una visita a la oficina al menos una vez a la semana?
¿Por qué queue (de qué palabra Q)?
¿Por qué decidieron salir al mercado? ¿Qué no funciona en Magnit ahora?
¿Cuántos años de experiencia en desarrollo comercial con Go tienes?
¿Cómo iterar sobre un mapa ordenado manteniendo el orden? Implementación del método de iteración.
Si en AddTask se utiliza RLock, ¿cómo se comportarán dos llamadas paralelas a AddTask? ¿Se bloquearán mutuamente?
Cuéntame sobre un caso en el que propusiste algo y tuviste que demostrar tu punto de vista.
// Escribir un manejador asíncrono de tareas como una biblioteca // El cliente pasa un objeto (Task) con datos para realizar la tarea, // en nuestro ejemplo usaremos una estructura vacía. // El manejador puede procesar no más de N tareas simultáneamente, // y no más de X tareas pueden estar en cola para su procesamiento. // Si no hay espacio en la cola, se devuelve un error al cliente inmediatamente. // La tarea se procesa si hay procesadores libres disponibles. // Simulamos la duración del procesamiento con time.Sleep(5*time.Second). // Tan pronto como una tarea termina, tomamos la siguiente de la cola. // Si la cola está vacía, esperamos nuevas tareas de los clientes. // Con un asterisco: ampliar la estructura Task y obtener los estados de las tareas mediante una solicitud separada package scheduler type Scheduler interface { AddTask(t Task) error Close() } type Task interface { Do() }
¿Cómo se mantiene el estado del usuario al cambiar de versiones en un despliegue sin tiempo de inactividad?