Mesélj részletesebben az Avito projektről — ez volt az egyetlen projekt három év alatt?
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() }
Milyen típusú a msg a goroutine-ban, és miért kell argumentumként átadni?
Vannak megállapodások más munkáltatókkal, vagy még az interjúk szakaszában vagy?
Miért nem tér vissza közvetlenül a goroutine-ból a resultErr?
/* A fejlesztő feladata egy értesítési küldő szolgáltatás írása volt. Elvárások: - A Send metódusnak párhuzamosan kell küldenie az üzeneteket. - Nem lehet több maxworkers HTTP kérés egyszerre fut. - Ha legalább egy küldés hibával végződik, a többit meg kell állítani és hibát kell visszaadni. - A metódusnak helyesen kell kezelnie a kontextus megszakítását. - Minden erőforrást helyesen kell felszabadítani. - A metódus több goroutine-ból is hívható konkurensen. - A Client nyilvántartja a sikeresen küldött üzenetek számát. Kód áttekintést kell végezni, problémákat találni és javítani a kódot.
Hol kellene defer resp.Body.Close()-t csinálni?
Milyen általános kereskedelmi tapasztalatod van a Go-val való fejlesztésben?
Kényelmes lesz az angol nyelvű műszaki dokumentációval dolgozni?
Mesélj az ÖsszesSzerszámról — miért jöttél és miért mentél?
Milyen tapasztalatod van az SQL-lel? Tudsz kérdéseket írni és optimalizálni?
Hol végződnek a kontextusok ebben a kódban?
Mi a gyors játékok?
sentCount szinkronizáció nélkül kerül továbbításra — hogyan javítható ez?
Mi történik, ha nem adod át a kontextust az adatbázis lekérdezésnél?
Mit keresel egy új projektben? Milyen technológiák érdekelnek? Mit nem szeretnél látni az új munkahelyeden?
Mikor nem segít az index vagy akár árt is?
Milyen szakaszok (stages) vannak általában egy CI/CD pipeline-ban egy Go-szolgáltatáshoz?