O que são goroutines?
Golang
O que é uma condição de corrida e como combatê-la em Go?
Pode explicar o que se entende por 'contexto' em programação ou desenvolvimento?
Qual é a diferença entre a aplicação e as características da linguagem de programação Go em comparação com Python?
Qual é a diferença entre canais com buffer e sem buffer?
Qual é o papel e a finalidade do contexto na linguagem de programação Go?
Como é que se podem gerir as goroutines e todas elas são executadas num único thread?
Qual era a tua equipa, quantas pessoas?
O que significa a coluna load average na ferramenta top?
O que é o modelo GMP do agendador Go?
Por que é necessário o TCP se podemos simplesmente reenviar os pacotes IP na ausência de resposta?
Fale sobre a notação assintótica Big O: o que é, quais os tipos existem e para que são usados
Como é implementado o modelo de concorrência na linguagem Golang?
Como é que a sua aplicação gere exceções e erros?
Que métodos e abordagens você usa para verificar a funcionalidade do seu código?
Tem autorização de trabalho na Rússia e na Bielorrússia?
O que pode contar sobre a sua experiência na integração de diferentes sistemas ou serviços?
Como usar estruturas embutidas para simular herança em Go?
Qual é a diferença entre um canal com buffer e um canal sem buffer?
// Existe uma interface Backend com o método Execute // É necessário escrever um balanceador de carga // O balanceador satisfaz a interface Backend // A tarefa do balanceador é aceitar uma requisição e delegá-la a um dos backends disponíveis // O balanceador contém em si uma coleção de backends // Ao executar uma requisição, o balanceador escolhe um dos backends de acordo com algum algoritmo // // Algoritmo Least Connection, verificação de saúde e recuperação automática, segurança thread-safe via atomic, transmissão de contexto para cancelamento, limiar de erros para desconectar um backend // Request representa a requisição de entrada para o Backend. type Request struct { // Payload – dados arbitrários da requisição. Payload []byte } // Response representa a resposta do Backend. type Response struct { // Payload – dados arbitrários da resposta. Payload []byte } // Backend – interface que define o método para executar uma requisição type Backend interface { Execute(ctx context.Context, req Request) (Response, error) } type Balancer struct { backends []Backend } func NewBalancer(backends []Backend) *Balancer { return &Balancer{backends: backends} } func (b *Balancer) Execute(ctx context.Context, req Request) (Response, error) { // todo: implementar lógica do balanceador return Response{}, nil } type TestBackend struct { }