Parlami più dettagliatamente del progetto in Avito — è stato l'unico progetto in tre anni?
Golang
Qual è il tipo di msg nella goroutine e perché è necessario passarla come argomento?
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() }
Hai accordi con altri datori di lavoro o sei ancora in fase di colloqui?
In quale punto bisogna fare defer resp.Body.Close()?
Quale esperienza hai con SQL? Sai scrivere e ottimizzare le query?
/* Al sviluppatore è stato assegnato il compito di scrivere un servizio di invio notifiche. Requisiti: - Il metodo Send deve inviare i messaggi in parallelo. - Non devono essere in esecuzione più di maxworkers richieste HTTP contemporaneamente. - Se almeno una spedizione fallisce, le altre devono essere interrotte e deve essere restituito un errore. - Il metodo deve gestire correttamente l'annullamento del contesto. - Tutte le risorse devono essere rilasciate correttamente. - Il metodo può essere chiamato in modo concorrente da diverse goroutine. - Client deve tenere traccia del numero di messaggi inviati con successo. È necessario fare una revisione del codice, trovare problemi e correggere il codice.
Qual è la tua esperienza commerciale generale nello sviluppo con Go?
sentCount viene trasmesso senza sincronizzazione — come correggere?
Sarà comodo lavorare con la documentazione tecnica in inglese?
Perché resultErr non viene restituito direttamente dalla goroutine?
Cosa cerchi in un nuovo progetto? Quali tecnologie ti interessano? Cosa non vorresti vedere in un nuovo posto di lavoro?
Parlami di TuttiGliStrumenti — perché sei venuto e perché sei andato?
Dove terminano i contesti in questo codice?
Cosa sono i giochi veloci?
Cosa succede se non si passa il contesto in una query al database?
Quando l'indice non aiuta o addirittura danneggia?
Quali fasi (stages) ci sono di solito in una pipeline CI/CD per un servizio Go?