Sobes.tech

Golang

Fala-me mais sobre o projeto na Avito — foi o único projeto em três anos?

Senior
239

func (c *Client) Send(ctx context.Context, messages []Message, maxWorkers int) error { sem := make(chan struct{}, maxWorkers) var wg sync.WaitGroup var resultErr error var once sync.Once for _, msg := range messages { wg.Add(1) go func(msg Message) { defer wg.Done() sem <- struct{}{} defer func() { <-sem }() body, err := json.Marshal(msg) if err != nil { once.Do(func() { resultErr = err; cancel() }) return } req, _ := http.NewRequestWithContext( ctx, http.MethodPost, c.url, bytes.NewReader(body), ) req.Header.Set("Content-Type", "application/json") resp, err := c.httpClient.Do(req) if err != nil { once.Do(func() { resultErr = err; cancel()}) return } defer resp.Body.Close() if resp.StatusCode >= 500 { once.Do(func() { resultErr = fmt.Errorf("server error") cancel()}) return } c.sentCount.Add(1) time.Sleep(time.Second) }(msg) } wg.Wait() }

Senior
226

Qual é o tipo de msg na goroutine e por que é necessário passá-lo como argumento?

Senior
224

Por que o resultErr não é retornado diretamente da goroutine?

Senior
204

Existem acordos com outros empregadores ou ainda estás a passar por etapas de entrevista?

Senior
201

Em que lugar deve-se fazer defer resp.Body.Close() ?

Senior
197

/* Foi atribuída ao desenvolvedor a tarefa de escrever um serviço de envio de notificações. Requisitos: - O método Send deve enviar mensagens em paralelo. - Não pode haver mais de maxworkers requisições HTTP executando simultaneamente. - Se pelo menos um envio falhar, os demais devem ser interrompidos e um erro deve ser retornado. - O método deve lidar corretamente com o cancelamento do contexto. - Todos os recursos devem ser liberados corretamente. - O método pode ser chamado de forma concorrente de diferentes goroutines. - Client deve manter a contagem de mensagens enviadas com sucesso. É necessário fazer uma revisão de código, encontrar problemas e corrigir o código.

Senior
194

Qual é a sua experiência comercial geral em desenvolvimento com Go?

Senior
190

Vai ser confortável trabalhar com documentação técnica em inglês?

Senior
185

Fala-me sobre TodasFerramentas — por que vieste e por que saíste?

Senior
179

Onde terminam os contextos neste código?

Senior
178

Qual a sua experiência com SQL? Sabe escrever e otimizar consultas?

Senior
178

sentCount é transmitido sem sincronização — como corrigir isso?

Senior
171

O que acontece se não passar o contexto numa consulta à base de dados?

Senior
163

O que são jogos rápidos?

Senior
162

O que procuras num novo projeto? Quais tecnologias te interessam? O que não gostarias de ver num novo local de trabalho?

Senior
160

Quando o índice não ajuda ou até prejudica?

Senior
160

Quais etapas (stages) geralmente existem em um pipeline CI/CD para um serviço Go?

Senior
137