Ispričaj više o projektu u Avitu — da li je to bio jedini projekat u tri godine?
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() }
Koji je tip msg u gorutini i zašto ga treba proslediti kao argument?
/* Programer je dobio zadatak da napiše servis za slanje obaveštenja. Zahtevi: - Metoda Send treba da šalje poruke paralelno. - Ne sme biti više od maxworkers HTTP zahteva istovremeno. - Ako bar jedno slanje ne uspe, ostali treba da se zaustave i da se vrati greška. - Metoda treba da pravilno obrađuje otkazivanje konteksta. - Svi resursi treba da budu pravilno oslobođeni. - Metoda može biti pozvana konkurentno iz različitih gorutina. - Client treba da prati broj uspešno poslatih poruka. Potrebno je izvršiti reviziju koda, pronaći probleme i ispraviti kod.
Na kojem mestu treba uraditi defer resp.Body.Close()?
Koje je vaše opšte komercijalno iskustvo u razvoju sa Go?
Da li će biti udobno raditi sa tehničkom dokumentacijom na engleskom jeziku?
Ispričaj mi o SveAlatima — zašto si došao i zašto si otišao?
Da li imate dogovore sa drugim poslodavcima ili još prolazite kroz faze intervjua?
Koje iskustvo imaš sa SQL-om? Znaš li da pišeš i optimizuješ upite?
Šta su brze igre?
Где се завршавају контексти у овом коду?
Šta će se desiti ako ne prosledite kontekst u upitu ka bazi podataka?
sentCount se prenosi bez sinhronizacije — kako to popraviti?
Šta tražiš u novom projektu? Koje tehnologije te zanimaju? Čega ne želiš da vidiš na novom radnom mestu?
Zašto resultErr nije direktno vraćen iz gorutine?
Када индекс не помаже или чак штети?
Koje faze (stages) obično postoje u CI/CD pipeline-u za Go servis?