Erzähle mehr über das Projekt bei Avito — war es das einzige Projekt in drei Jahren?
Golang
Welchen Typ hat msg in der Goroutine und warum muss es als Argument übergeben werden?
An welcher Stelle sollte defer resp.Body.Close() gemacht werden?
/* Dem Entwickler wurde die Aufgabe übertragen, einen Benachrichtigungsversanddienst zu schreiben. Anforderungen: - Die Methode Send soll Nachrichten parallel versenden. - Es dürfen nicht mehr als maxworkers HTTP-Anfragen gleichzeitig ausgeführt werden. - Wenn mindestens ein Versand fehlschlägt, sollen die anderen gestoppt und ein Fehler zurückgegeben werden. - Die Methode soll die Abbruchbedingung korrekt behandeln. - Alle Ressourcen sollen ordnungsgemäß freigegeben werden. - Die Methode kann gleichzeitig aus verschiedenen Goroutines aufgerufen werden. - Client soll die Anzahl der erfolgreich gesendeten Nachrichten speichern. Es ist eine Code-Review durchzuführen, Probleme zu finden und den Code zu korrigieren.
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() }
Gibt es Absprachen mit anderen Arbeitgebern oder befindest du dich noch im Interviewprozess?
Welche Erfahrung haben Sie mit SQL? Können Sie Abfragen schreiben und optimieren?
Was sind schnelle Spiele?
Wie ist Ihre allgemeine kommerzielle Erfahrung in der Entwicklung mit Go?
Erzähl mir von AlleWerkzeuge — warum bist du gekommen und warum bist du gegangen?
sentCount wird ohne Synchronisation übertragen — wie kann man das beheben?
Wird es angenehm sein, mit technischer Dokumentation auf Englisch zu arbeiten?
Warum wird resultErr nicht direkt aus der Goroutine zurückgegeben?
Was suchst du in einem neuen Projekt? Welche Technologien interessieren dich? Was möchtest du an einem neuen Arbeitsplatz nicht sehen?
Wo enden die Kontexte in diesem Code?
Was passiert, wenn man den Kontext bei einer Datenbankabfrage nicht übergibt?
Wann hilft der Index nicht oder schadet sogar?
Welche Phasen (Stages) gibt es typischerweise in einer CI/CD-Pipeline für einen Go-Service?