Golang
¿Cómo se realiza el intercambio de señales mediante canales en el sistema de programación?
¿Cómo se implementa en Go el manejo de estados panicos y el procesamiento de errores causados por situaciones de emergencia?
¿Qué se hizo exactamente con los duplicados después de su detección? ¿Dónde se limpiaron?
¿Qué métodos y herramientas utilizó para analizar y determinar las causas de los problemas de carga en los sistemas?
¿Qué comandos sueles usar en el sistema operativo Linux?
¿Qué enfoques se pueden utilizar para garantizar la seguridad de los hilos al trabajar con slices en un entorno multihilo?
¿Qué operaciones son permitidas al trabajar con un slice nil en el lenguaje de programación?
Cuéntame sobre una tarea difícil que pudiste resolver escribiendo un script para el sistema Linux
¿Cómo se puede regular la cantidad de datos almacenados en la caché?
Disposición para actuar como el único especialista en Backend en el equipo
¿Cuál es la principal razón para usar el tipo sync.Map en Go?
¿Cuáles son las buenas prácticas y los anti-patrones en las pruebas unitarias? ¿Cómo saber si las pruebas son buenas?
¿Cuáles son las ventajas y desventajas del uso de caché en los sistemas?
func Exclude(a, b []int) []int { set := make(map[int]struct{}) for _, v := range b { set[v] = struct{}{} } result := make([]int, 0) for _, v := range a { if _, ok := set[v]; !ok { result = append(result, v) } } return result } Error de compilación # command-line-arguments ./main.go:39:32: error de sintaxis: salto de línea inesperado, se esperaba { después de la cláusula if
¿Alguna vez ha enfrentado dificultades al implementar interacciones entre diferentes servicios?
¿Cómo se pasa un segmento (slice) a una función en un lenguaje de programación?
¿Qué es el patrón Saga?
¿Por qué no tomaron Testcontainers?
/* 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 }
¿Una tabla con (id PRIMARY KEY, data JSON) es una buena opción de índice en PostgreSQL para buscar por clave?