Πες μου περισσότερα για το έργο στην Avito — ήταν το μόνο έργο σε τρία χρόνια;
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() }
Ποιος είναι ο τύπος του msg στη goroutine και γιατί πρέπει να το περάσετε ως όρισμα;
/* Ο προγραμματιστής ανέλαβε την εργασία να γράψει μια υπηρεσία αποστολής ειδοποιήσεων. Απαιτήσεις: - Η μέθοδος Send πρέπει να στέλνει μηνύματα παράλληλα. - Δεν πρέπει να εκτελούνται περισσότερα από maxworkers HTTP αιτήματα ταυτόχρονα. - Αν τουλάχιστον μια αποστολή αποτύχει, πρέπει να σταματούν οι υπόλοιπες και να επιστρέφεται σφάλμα. - Η μέθοδος πρέπει να χειρίζεται σωστά την ακύρωση του πλαισίου. - Όλοι οι πόροι πρέπει να απελευθερώνονται σωστά. - Η μέθοδος μπορεί να καλείται ανταγωνιστικά από διαφορετικές goroutines. - Ο πελάτης πρέπει να διατηρεί τον αριθμό των επιτυχώς αποσταλμένων μηνυμάτων. Πρέπει να γίνει ανασκόπηση κώδικα, να βρεθούν προβλήματα και να διορθωθεί ο κώδικας.
Σε ποιο σημείο πρέπει να κάνετε defer resp.Body.Close();
Υπάρχουν συμφωνίες με άλλους εργοδότες ή βρίσκεστε ακόμα στη διαδικασία συνεντεύξεων;
Γιατί το resultErr δεν επιστρέφεται άμεσα από τη goroutine;
Πες μου για ΌλαΤαΕργαλεία — γιατί ήρθες και γιατί έφυγες;
Ποια είναι η γενική εμπορική εμπειρία σου στην ανάπτυξη με Go;
Θα είναι άνετο να εργάζεστε με τεχνική τεκμηρίωση στα αγγλικά;
Ποια εμπειρία έχετε με το SQL; Ξέρετε να γράφετε και να βελτιστοποιείτε ερωτήματα;
Πού τελειώνουν τα συμφραζόμενα σε αυτόν τον κώδικα;
Τι είναι τα γρήγορα παιχνίδια;
sentCount μεταδίδεται χωρίς συγχρονισμό — πώς διορθώνεται αυτό;
Τι συμβαίνει αν δεν περάσετε το πλαίσιο σε ένα ερώτημα στη βάση δεδομένων;
Τι ψάχνεις σε ένα νέο έργο; Ποιες τεχνολογίες σε ενδιαφέρουν; Τι δεν θα ήθελες να δεις σε ένα νέο εργασιακό χώρο;
Πότε ο δείκτης δεν βοηθά ή ακόμα και βλάπτει;
Ποια στάδια (stages) υπάρχουν συνήθως σε μια pipeline CI/CD για μια υπηρεσία Go;