Sobes.tech

Golang

¿Qué criterios usarás para elegir un empleador? ¿Qué es lo más importante para ti?

143

¿En qué lenguaje de programación trabajas? ¿Por qué surgieron dificultades con la sintaxis?

143

/* Necesitamos transferir datos de 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 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 comienza desde la posición "confirmada" anterior, definida 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. 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, después de lo cual confirma el progreso en la fuente. */ const MaxItems = 9999 type Producer interface { // Next devuelve: // - un lote de items para procesar // - 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 { // TODO }

143

4 - aceptar rápidamente las tareas entrantes, 5 - devolver el resultado de la tarea bajo petición 6 - si no hay resultado, devolver el estado correspondiente /* Procesador - un servicio que realiza una operación larga y que consume muchos recursos. Ya está implementado Los errores que devuelve están relacionados exclusivamente con datos de entrada incorrectos, son estables y no tiene sentido volver a solicitarlos */ type Processor interface { Process([]byte) ([]byte, error) } /* Suponemos que tenemos un generador de identificadores únicos (por ejemplo, UUID). El generador garantiza que no habrá colisiones */ type ID string // func NewID() ID /* El programador acepta tareas de los clientes, las encola y las inicia en procesamiento. Asegura que no se ejecuten más de 'threads' métodos de procesamiento simultáneamente Permite verificar el estado de la tarea y obtener el resultado no bloquea sus métodos públicos para el procesamiento */ type Scheduler struct { processor Processor } func NewScheduler( prc Processor, threads int, ) *Scheduler { // lógica de inicialización pendiente return &Scheduler{ processor: prc, } } func (s *Scheduler) Queue(request []byte) ID { // implementar return "" }

143

¿Estás dispuesto a cambiar a otro lenguaje de programación si es necesario o por deseo personal?

142

Hablemos de arquitectura de microservicios. ¿Qué ha sido más en los últimos tiempos: soporte o desarrollo?

142

¿Cómo verificar que la ventana contiene todos los caracteres necesarios?

141

¿Has tenido experiencia escribiendo programas con multithreading o operaciones asíncronas?

140

¿Has utilizado nubes públicas? Si es así, ¿qué proveedores y servicios?

139

Cuéntanos sobre tus proyectos recientes y la pila tecnológica utilizada.

138

// código para la función best() // con manejo de errores para cuando no hay backend disponible

138

¿Es correcto que actualmente resides en [ciudad] y te sería conveniente trabajar en formato híbrido con visitas a la oficina?

135

Cuéntame, ¿qué sucede al final: cómo acumulamos el búfer?

135

¿Qué expectativas salariales tienes?

133

Consideremos un ejemplo: first=[1,1,2], second=[1,2]. ¿Qué debería devolver su algoritmo y funciona correctamente con duplicados?

131

¿Cómo limitar la cantidad de goroutines para que no más de 'threads' métodos de Process se ejecuten simultáneamente? ¿Quién estará sacando tareas del canal?

130

¿Qué anti-patrones en la arquitectura de microservicios conoces?

127

// código para la función best() // con manejo de errores para cuando no hay backend disponible

127

¿En qué dirección estarías interesado en desarrollarte en términos de tareas y vector de carrera?

126

[nombre] preguntó: al guardar la posición del elemento menor que X, ¿cuál será la posición?

126
/11