Sobes.tech

Golang

¿Qué lenguajes de programación utilizas además de Go?

248

¿Cuál es la complejidad del algoritmo en tiempo y memoria?

247

Sección de algoritmos: dos problemas de nivel Medium de LeetCode o superior. Duración: 1,5 horas para ambos problemas.

247

/* 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 }

246

¿Estás trabajando ahora o no, y en qué formato: oficina, híbrido, remoto?

246

""" Los asientos en el cine están dispuestos en una fila. Un espectador que acaba de llegar elige un asiento, para sentarse lo más lejos posible de los demás espectadores en la fila. Es decir, la distancia desde ese asiento, que ocupará el espectador, hasta el espectador más cercano debe ser máxima. Se garantiza que siempre hay asientos libres en la fila y que ya hay al menos un espectador sentado. Escriba una función que, dada una fila de asientos (una matriz de ceros y unos), devuelva la distancia (número de espacios entre los asientos) desde el asiento elegido hasta el espectador más cercano. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 [0, 0, 0, 1] [1, 0, 0, 0] place = ((right - left) / 2) """ func maxPlaces(arr []int) int { }

245

¿En qué se diferencia un equilibrador de carga L4 de uno L7?

243

¿Qué indicadores de rendimiento utilizó para evaluar su trabajo en el último proyecto?

Junior — Middle
242

/* * Dado un array de números enteros y un número X, * se requiere encontrar el subarreglo no vacío más largo cuyo mínimo sea X. * Devuelve la longitud de dicho subarreglo o -1 si no existen. */

241

¿Cómo están estructuradas las pruebas en el equipo — quién escribe qué, qué cobertura hay, hay E2E?

241

""" Los asientos en el cine están dispuestos en una fila. Un espectador que acaba de llegar elige un asiento, para sentarse lo más lejos posible de los demás espectadores en la fila. Es decir, la distancia desde ese asiento, hasta el espectador más cercano a él, debe ser máxima. Se garantiza que siempre hay asientos libres y que ya hay al menos un espectador sentado. Escriba una función que, dada una fila de asientos (una matriz de ceros y unos), devuelva la distancia (número de espacios entre los asientos) desde el asiento elegido hasta el espectador más cercano. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """

240

¿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?

Junior — Middle
237

¿Qué proyecto elegir para una entrevista técnica y cómo describirlo?

236

¿Cómo determinar visual o algorítmicamente que un elemento es único en la estructura de datos Map?

Junior — Middle
235

[nombre] indicó: en la línea 20, uniq no contiene la cantidad de caracteres únicos, sino algo más. ¿Qué exactamente?

233

¿Qué indicador de cantidad de operaciones por segundo en la lectura de datos ha alcanzado o analizado?

Middle — Middle+
233

¿Qué tasa de solicitudes por segundo se alcanzó al escribir datos?

Junior — Middle
232

¿Por qué se necesitan dos comprobaciones if (en la línea 79 y en la línea con len(buf)==MaxItems), en lugar de una?

231

// Para dos arreglos de números enteros de longitud N, // para todos K desde 1 hasta N, contar la cantidad de números comunes en los prefijos de longitud K. // Los números en el arreglo pueden repetirse, la intersección se cuenta sin considerar las multiplicidades. // Un prefijo de longitud K del arreglo A es los primeros K elementos del arreglo A // A [1, 1] => [1], [1, 1] // B [1, 1] => [1], [1, 1] // R [1, 1] // [1, 2, 5] => [1], [1, 2], [1, 2, 5] // [1, 5, 4] => [1], [1, 5], [1, 5, 4] // [1, 1, 2]

230

// Se dan dos secuencias ordenadas en orden no decreciente de números enteros. // Es necesario devolver todos los elementos de la primera secuencia que no estén en la segunda. // 0 <= N <= 10^6 // -10^9 <= a[i] <= 10^9 // [1] // [2, 3, 4, 5, 6] // [1] // [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ...] // [1] // [2, 3, 4, 5, 6, 7, 8] func filter(first []int, second []int) []int { res := make([]int, 0, len(first)) i, j := 0, 0 for i < len(first) && j < len(second) { if first[i] < second[j] { result = append(result, first[i]) i++ } else if first[i] > second[j] { j++ } else { i++ j++ } } for i < len(first) { result = append(result, first[i]) i++ } return result }

228
/11