Golang
// Escrever um gestor de tarefas assíncrono como uma biblioteca // O cliente passa um objeto (Task) com dados para executar a tarefa, // no nosso exemplo, usaremos uma estrutura vazia. // O gestor pode processar no máximo N tarefas simultaneamente, // e no máximo X tarefas podem estar na fila de processamento. // Se não houver espaço na fila, retorna imediatamente um erro ao cliente. // A tarefa é processada se houver processadores livres. // Simulamos a duração do processamento com time.Sleep(5*time.Second). // Assim que uma tarefa termina, pegamos a próxima na fila. // Se a fila estiver vazia, aguardamos novas tarefas dos clientes. // Com um asterisco: completar a estrutura Task e obter os estados das tarefas através de uma requisição separada package scheduler type Scheduler interface { AddTask(t Task) error Close() } type Task interface { Do() }
O que queres melhorar? Onde sentes que tens lacunas agora?
Fala sobre a tua experiência de trabalho de forma livre, sem detalhes técnicos aprofundados.
Tem um bilhete militar na mão?
O que acontece se nada for encontrado na fila local P?
Como funciona o LEFT JOIN? De qual tabela é que se obtém o quê?
Quantos anos de experiência comercial tem em Go?
Como trabalhavam com bugs em produção? Serviços no Kubernetes — se algo não funcionasse, como resolviam?
Quer trabalho remoto a tempo inteiro ou também está disposto a considerar opções com escritório?
Está familiarizado com a Arquitetura Hexagonal? Fale sobre a sua estrutura.
Fala-me do teu último projeto.
Por que usou sync.Map em vez de um mapa normal com Mutex?
func main() { c := make(chan int, 1000) for i := 0; i < 100; i++ { go foo(c) } sum := 0 for r := range c { sum += r } fmt.Println(sum) } func foo(c chan int) { r := rand.Int() for i := 0; i < r; i++ { c <- r } } --- func main() { c := make(chan int, 1000) var wg sync.WaitGroup wg.Add(100) for i := 0; i < 100; i++ { go func() { defer wg.Done() foo(c) }() } go func() { wg.Wait() close(c) }() sum := 0 for r := range c { sum += r } // // fmt.Println(sum) } func foo(c chan int) { r := rand.Int() for i := 0; i < r; i++ { c <- r } }
O que faz após o deploy do serviço em produção? Que análise realiza?
Como é que a capacidade da fatia muda ao expandir-se?
Por que motivo foi possível reduzir o tempo de processamento de operações de 120 para 5 segundos?
Para que servem as goroutines? Qual é a sua vantagem em relação aos processos e threads do sistema operativo?
Em que medida, de 10, o produto se encaixa na tua ideologia?
Alguém foi treinado?
O que fazer se o endpoint estiver lento? Descreva os passos de diagnóstico.