Sobes.tech

Golang

Opowiedz więcej o projekcie w Avito — czy to był jedyny projekt przez trzy lata?

Senior
222

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
192

/* Programiście powierzono zadanie napisania serwisu wysyłania powiadomień. Wymagania: - Metoda Send powinna wysyłać wiadomości równolegle. - Nie może być wykonywanych więcej niż maxworkers żądań HTTP jednocześnie. - Jeśli chociaż jedna wysyłka zakończy się błędem, należy zatrzymać pozostałe wysyłki i zwrócić błąd. - Metoda powinna poprawnie obsługiwać anulowanie kontekstu. - Wszystkie zasoby powinny być poprawnie zwalniane. - Metoda może być wywoływana konkurencyjnie z różnych gorutyn. - Client powinien przechowywać liczbę pomyślnie wysłanych wiadomości. Należy przeprowadzić przegląd kodu, znaleźć problemy i poprawić kod.

Senior
187

Jaki jest typ msg w goroutine i dlaczego trzeba go przekazać jako argument?

Senior
184

W którym miejscu należy zrobić defer resp.Body.Close()?

Senior
183

Jakie masz ogólne doświadczenie komercyjne w programowaniu w Go?

Senior
172

Czy praca z dokumentacją techniczną w języku angielskim będzie komfortowa?

Senior
168

Opowiedz o WszystkieNarzędzia — dlaczego przyszedłeś i dlaczego odszedłeś?

Senior
164

Czy masz umowy z innymi pracodawcami, czy jeszcze przechodzisz etapy rozmów kwalifikacyjnych?

Senior
161

Czym są szybkie gry?

Senior
157

Jakie masz doświadczenie z SQL? Czy potrafisz pisać i optymalizować zapytania?

Senior
157

Gdzie kończą się konteksty w tym kodzie?

Senior
156

Co się stanie, jeśli nie przekażesz kontekstu w zapytaniu do bazy danych?

Senior
151

Dlaczego resultErr nie jest zwracany bezpośrednio z goroutine?

Senior
148

sentCount jest przesyłany bez synchronizacji — jak to naprawić?

Senior
147

Czego szukasz w nowym projekcie? Jakie technologie Cię interesują? Czego nie chciałbyś widzieć w nowym miejscu pracy?

Senior
145

Kiedy indeks nie pomaga lub nawet szkodzi?

Senior
126

Jakie etapy (stages) zwykle występują w pipeline CI/CD dla usługi Go?

Senior
92