Spune-mi mai multe despre proiectul de la Avito — a fost singurul proiect din trei ani?
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() }
Ce tip are msg în goroutine și de ce trebuie să fie transmis ca argument?
Unde trebuie să faci defer resp.Body.Close()?
/* Programatorul a primit sarcina de a scrie un serviciu de trimitere a notificărilor. Cerinte: - Metoda Send trebuie să trimită mesajele în paralel. - Nu trebuie să fie mai mult de maxworkers cereri HTTP în acțiune simultan. - Dacă cel puțin o trimitere eșuează, celelalte trebuie oprite și trebuie returnat o eroare. - Metoda trebuie să gestioneze corect anularea contextului. - Toate resursele trebuie eliberate corect. - Metoda poate fi apelată concurent din diferite goroutines. - Client trebuie să păstreze numărul de mesaje trimise cu succes. Este necesar să se efectueze o revizuire a codului, să se găsească probleme și să se corecteze codul.
Care este experiența ta comercială generală în dezvoltarea cu Go?
Spune-mi despre ToateInstrumentele — de ce ai venit și de ce ai plecat?
Există acorduri cu alți angajatori sau ești încă în procesul de interviu?
Ce experiență ai cu SQL? știi să scrii și să optimizezi interogări?
Ce sunt jocurile rapide?
Ce se întâmplă dacă nu transmiți contextul într-o interogare către baza de date?
Va fi confortabil să lucrezi cu documentația tehnică în limba engleză?
sentCount este transmis fără sincronizare — cum se remediază acest lucru?
Ce cauți într-un proiect nou? Ce tehnologii te interesează? Ce nu ai vrea să vezi într-un nou loc de muncă?
De ce resultErr nu este returnat direct din goroutine?
Unde se termină contexte în acest cod?
Când indicele nu ajută sau chiar dăunează?
Ce etape (stages) sunt de obicei în pipeline-ul CI/CD pentru un serviciu Go?