Rääkige mulle rohkem Avito projektist — kas see oli ainus projekt kolme aasta jooksul?
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() }
Milline on msg tüüp gorutinas ja miks on vaja seda argumentina edasi anda?
/* Programmeerijale anti on ülesandeks kirjutada teavituste saatmise teenus. Nõuded: - Send meetod peab saatma sõnumeid paralleelselt. - Samal ajal ei tohi olla käimas rohkem kui maxworkers HTTP-päringuid. - Kui vähemalt üks saatmine ebaõnnestub, tuleb ülejäänud peatada ja tagastada viga. - Meetod peab õigesti käsitlema konteksti tühistamist. - Kõik ressursid peavad olema õigesti vabastatud. - Meetod võib olla kutsutud konkurentsivõimeliselt erinevatest gorutinest. - Client peab jälgima edukalt saadetud sõnumite arvu. Vajalik on teha koodireview, leida probleemid ja parandada kood.
Kus tuleks teha defer resp.Body.Close()?
Milline on sinu üldine kaubanduslik kogemus Go arendamisel?
Kas on mugav töötada tehnilise dokumentatsiooniga inglise keeles?
Räägi mulle kõigistTööriistadest — miks sa tulid ja miks läksid?
Kas teil on kokkulepped teiste tööandjatega või olete veel intervjuu etappidel?
Mis on kiire mängud?
Milline kogemus sul on SQL-iga? Kas oskad kirjutada ja optimeerida päringuid?
Kus lõppevad kontekstid selles koodis?
Mis juhtub, kui andmebaasi päringus konteksti ei edastata?
sentCount edastatakse ilma sünkroniseerimiseta — kuidas seda parandada?
Miks resultErr ei tagastata otse goroutine'ist?
Mida otsid uues projektis? Millised tehnoloogiad sind huvitavad? Mida sa ei tahaks näha uuel töökohal?
Millal indeks ei aita või isegi kahjustab?
Millised etapid (stages) on tavaliselt CI/CD pipeline'is Go-teenuse jaoks?