Pastāsti vairāk par projektu Avito — vai tas bija vienīgais projekts trīs gadu laikā?
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() }
Kāda veida ir msg gorutīnā un kāpēc to ir nepieciešams nodot kā argumentu?
/* Programētājam tika uzdots uzrakstīt paziņojumu sūtīšanas pakalpojumu. Prasības: - Send metode jānosūta ziņas paralēli. - Vienlaikus nedrīkst darboties vairāk par maxworkers HTTP pieprasījumiem. - Ja vismaz viens sūtījums neizdodas, pārējie jāaptur un jāatgriež kļūda. - Metode jāpareizi apstrādā konteksta atcelšanu. - Visi resursi jāatbrīvo pareizi. - Metode var tikt izsaukta konkurētspējīgi no dažādām gorutīnām. - Klients jāuztur veiksmīgi nosūtīto ziņojumu skaits. Jāveic koda pārskatīšana, jāatrod problēmas un jālabo kods.
Kāpēc resultErr netiek atgriezts tieši no goroutine?
Vai ir vieno darba devēja vienošanās ar citiem darba devējiem vai vēl turpināt intervijas?
Kur jāveic defer resp.Body.Close()?
Kāda ir jūsu kopējā komerciālā pieredze ar Go izstrādē?
Vai būs ērti strādāt ar tehnisko dokumentāciju angļu valodā?
Pastāsti man par VisusInstrumentus — kāpēc tu atnāci un kāpēc aizgāji?
Kāda ir tava pieredze ar SQL? Vai tu proti rakstīt un optimizēt vaicājumus?
Kur beidzas konteksti šajā kodā?
Kas ir ātrie spēles?
sentCount tiek bez sinhronizācijas — kā to labot?
Ko meklē jaunajā projektā? Kādas tehnoloģijas tevi interesē? Ko nevēlētos redzēt jaunajā darba vietā?
Kas notiks, ja neievadīsiet kontekstu datu bāzes vaicājumā?
Kad indekss nepalīdz vai pat kaitē?
Kādi posmi (stages) parasti ir CI/CD pipeline Go pakalpojumam?