Golang
¿Qué estaban almacenando en caché? ¿Algún directorio?
/* Necesitamos transferir datos desde una fuente a un consumidor. La fuente entrega los datos en pequeños lotes (~decenas de registros), mientras que el consumidor funciona de manera más eficiente con lotes grandes. Un ejemplo real es la transferencia de datos desde colas tipo Kafka a la base de datos Clickhouse. Fuente: - Prácticamente infinita. - La fuente nunca devuelve más de MaxItems registros en una sola 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 comenzará desde la posición "confirmada" anterior, indicada por cookie. Por lo tanto, *cada* valor de cookie que devuelve Next, después de guardar los datos en el receptor, debe ser confirmado con una 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 a MaxItems y los guarda en el receptor, y luego confirma el progreso en la fuente. */ const MaxItems = 9999 type Producer interface { // Next devuelve: // - un lote de items para procesar // - una cookie para confirmar cuando se complete el procesamiento // - error Next() (items []any, cookie int, err error) // Commit se usa para marcar el lote de datos como procesado Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { var buf []any var cookies []int for { items, cookie, err := p.Next() if err != nil { return err } buf = append(buf, items...) cookies = append(cookies, cookie) if len(buf) >= MaxItems { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } buf = buf[:0] cookies = nil } } if len(buf) > 0 { if err := c.Process(buf); err != nil { return err } for _, c := range cookies { if err := p.Commit(c); err != nil { return err } } } return nil }
¿Puede enumerar las empresas o proveedores con los que ha tratado?
Cuéntame sobre tu último lugar de trabajo: ¿en qué trabajabas, qué tecnologías usabas, cuáles fueron los desafíos difíciles?
¿Qué es un slice en Go?
¿Puede enumerar los principales tipos de llamadas utilizados en gRPC?
¿Es permitido obtener información de un canal con modo cerrado establecido?
¿Se puede escribir directamente en una partición específica de Kafka, omitiendo la clave para el hash?
¿Puedes explicar el mecanismo de añadir un elemento al final de una estructura de datos, como una lista o un array?
¿Qué datos y de qué manera se colocan en la pila durante la ejecución del programa?
¿Qué métodos de caché prefieres usar en tus proyectos y por qué?
¿En qué se diferencia una vista materializada de una vista normal?
¿Qué componentes forman la estructura de una lista enlazada?
¿Cómo se determina el tiempo de ejecución de la operación de agregar un elemento por clave en la estructura de datos Map?
¿Por qué generalmente se establece el tamaño inicial de la pila de los hilos en 2 MB?
¿Alguna vez ha utilizado la estructura ErrGroup en sus proyectos para gestionar tareas paralelas?
¿Qué paquetes inusuales o no estándar ha utilizado en su práctica?
¿Por qué la tasa de crecimiento de la rebanada se desacelera y no se puede seguir duplicando constantemente?
¿En qué lugar se ejecutan los comandos durante el proceso de trabajo de GitLab CI/CD?
¿Qué consecuencias pueden surgir por no seguir los principios SOLID en el diseño de software?