¿Qué criterios usarás para elegir un empleador? ¿Qué es lo más importante para ti?
Golang
¿En qué lenguaje de programación trabajas? ¿Por qué surgieron dificultades con la sintaxis?
/* 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 }
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 "" }
¿Estás dispuesto a cambiar a otro lenguaje de programación si es necesario o por deseo personal?
Hablemos de arquitectura de microservicios. ¿Qué ha sido más en los últimos tiempos: soporte o desarrollo?
¿Cómo verificar que la ventana contiene todos los caracteres necesarios?
¿Has tenido experiencia escribiendo programas con multithreading o operaciones asíncronas?
¿Has utilizado nubes públicas? Si es así, ¿qué proveedores y servicios?
Cuéntanos sobre tus proyectos recientes y la pila tecnológica utilizada.
// código para la función best() // con manejo de errores para cuando no hay backend disponible
¿Es correcto que actualmente resides en [ciudad] y te sería conveniente trabajar en formato híbrido con visitas a la oficina?
Cuéntame, ¿qué sucede al final: cómo acumulamos el búfer?
¿Qué expectativas salariales tienes?
Consideremos un ejemplo: first=[1,1,2], second=[1,2]. ¿Qué debería devolver su algoritmo y funciona correctamente con duplicados?
¿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?
¿Qué anti-patrones en la arquitectura de microservicios conoces?
// código para la función best() // con manejo de errores para cuando no hay backend disponible
¿En qué dirección estarías interesado en desarrollarte en términos de tareas y vector de carrera?
[nombre] preguntó: al guardar la posición del elemento menor que X, ¿cuál será la posición?