Fala-me mais sobre o projeto na Avito — foi o único projeto em três anos?
Golang
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() }
Qual é o tipo de msg na goroutine e por que é necessário passá-lo como argumento?
Por que o resultErr não é retornado diretamente da goroutine?
Existem acordos com outros empregadores ou ainda estás a passar por etapas de entrevista?
Em que lugar deve-se fazer defer resp.Body.Close() ?
/* 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.
Qual é a sua experiência comercial geral em desenvolvimento com Go?
Vai ser confortável trabalhar com documentação técnica em inglês?
Fala-me sobre TodasFerramentas — por que vieste e por que saíste?
Onde terminam os contextos neste código?
Qual a sua experiência com SQL? Sabe escrever e otimizar consultas?
sentCount é transmitido sem sincronização — como corrigir isso?
O que acontece se não passar o contexto numa consulta à base de dados?
O que são jogos rápidos?
O que procuras num novo projeto? Quais tecnologias te interessam? O que não gostarias de ver num novo local de trabalho?
Quando o índice não ajuda ou até prejudica?
Quais etapas (stages) geralmente existem em um pipeline CI/CD para um serviço Go?