Sobes.tech

Golang

Spune-mi mai multe despre proiectul de la Avito — a fost singurul proiect din trei ani?

Senior
220

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
183

Ce tip are msg în goroutine și de ce trebuie să fie transmis ca argument?

Senior
182

Unde trebuie să faci defer resp.Body.Close()?

Senior
180

/* 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.

Senior
179

Care este experiența ta comercială generală în dezvoltarea cu Go?

Senior
169

Spune-mi despre ToateInstrumentele — de ce ai venit și de ce ai plecat?

Senior
158

Există acorduri cu alți angajatori sau ești încă în procesul de interviu?

Senior
158

Ce experiență ai cu SQL? știi să scrii și să optimizezi interogări?

Senior
157

Ce sunt jocurile rapide?

Senior
156

Ce se întâmplă dacă nu transmiți contextul într-o interogare către baza de date?

Senior
151

Va fi confortabil să lucrezi cu documentația tehnică în limba engleză?

Senior
146

sentCount este transmis fără sincronizare — cum se remediază acest lucru?

Senior
145

Ce cauți într-un proiect nou? Ce tehnologii te interesează? Ce nu ai vrea să vezi într-un nou loc de muncă?

Senior
142

De ce resultErr nu este returnat direct din goroutine?

Senior
141

Unde se termină contexte în acest cod?

Senior
132

Când indicele nu ajută sau chiar dăunează?

Senior
125

Ce etape (stages) sunt de obicei în pipeline-ul CI/CD pentru un serviciu Go?

Senior
90