Golang
¿Configuraste Kubernetes?
¿Qué frameworks, estándares y paquetes utilizas en Go?
¿En qué se diferencian los hilos de los procesos?
Cuéntame sobre MVCC (Control de Concurrencia Multi-Versiones) en PostgreSQL.
¿Cómo se puede implementar la suma de variantes de tipos (type sum) en el lenguaje Go?
¿Cómo limitar la cantidad de llamadas al worker de sondeo si la API es de pago?
¿Cómo es tu nivel de inglés?
Háblame de Redis
¿Alguna vez ha tenido que tomar decisiones arquitectónicas por sí mismo?
Explique el concepto de sistema de archivos virtual y su propósito principal.
¿Cómo escribir una consulta para obtener al usuario con el penúltimo salario?
¿Cómo se maneja esto en el planificador si no es una solicitud de red, sino la lectura de un archivo?
/* Necesitamos transferir datos desde una fuente a un consumidor. La fuente entrega los datos en pequeños lotes (~diez registros), mientras que el consumidor funciona mejor con lotes grandes (~mil registros). Un ejemplo real es la transferencia de datos desde colas tipo Kafka a una base de datos Clickhouse. Fuente: - Prácticamente infinita. - La fuente nunca devuelve más de MaxItems registros en una llamada a Next. - Dentro de una "sesión" (una llamada a la función Pipe), la fuente devuelve datos nuevos en cada llamada a Next. - Sin embargo, tras reiniciar, la fuente comienza desde la posición "confirmada" anterior, indicada por cookie. Por lo tanto, *cada* valor de cookie devuelto por Next, después de guardar los datos en el receptor, debe ser confirmado con la llamada a Commit, en el mismo orden en que fueron devueltos por Next. Receptor: - No puede procesar más de MaxItems a la vez. Nivel básico: Se requiere implementar la función func Pipe(p Producer, c Consumer) error que lee datos de la fuente, los agrupa en un buffer de tamaño no mayor que MaxItems y los guarda en el receptor, después de lo cual confirma el progreso en la fuente. Dificultad adicional: Los métodos Next, Process y Commit están relacionados con llamadas de red y pueden tardar bastante. Para acelerar el proceso, es necesario paralelizar los procesos de lectura, escritura y confirmación del progreso. De modo que, durante Process o Commit, la lectura de la fuente y la formación del nuevo buffer continúen. */ const MaxItems = 9999 type Producer interface { // Next devuelve: // - un lote de items para procesar // - una cookie para confirmar cuando se complete el procesamiento // - un error Next() (items []any, cookie int, err error) // Commit se usa para marcar un lote de datos como procesado Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }
¿En la empresa te dedicabas principalmente a la migración de PHP a Go?
¿Qué niveles de aislamiento de transacciones existen?
Cuéntame un poco sobre ti: información clave que un posible empleador debería saber.
¿Qué problemas surgen si hay muchas colisiones?
¿Cómo se utilizaron RabbitMQ y ClickHouse?
Habla sobre los slices en Go.
¿Por qué decidiste buscar algo nuevo, por qué dejas tu empresa actual?