Golang
Πόσα μικροϋπηρεσίες υπάρχουν στη τρέχουσα εργασία σου και με ποιες εργάζεσαι άμεσα;
Σε ποια ομάδα (μεταβλητές/αμετάβλητες) ανήκει το interface στο Go;
Ποια είναι η διαφορά μεταξύ σχεσιακών βάσεων δεδομένων και NoSQL;
Φανταστείτε μια κατάσταση: δεν μπορείτε να βρείτε κοινό έδαφος με έναν δοκιμαστή στην ομάδα σας που συνεχώς 'σας τσιμπάει'. Πώς θα αλληλεπιδράσετε;
Μίλησε για μια δύσκολη εργασία που σε έκανε να ιδρώσεις. Ποια ήταν η κύρια δυσκολία;
Ποια από τις παρακάτω επιλογές είναι πιο πιθανό να συμβεί όταν προσπαθείτε να ξεκινήσετε πολύ μεγάλο αριθμό goroutines (π.χ. δεκάδες χιλιάδες) χωρίς επιπλέον έλεγχο; - Το κύριο πρόβλημα θα προκληθεί από το μπλοκάρισμα του παγκόσμιου mutex μέσα στο runtime, που θα οδηγήσει σε πλήρη διακοπή της εκτέλεσης του προγράμματος - Ο προγραμματιστής Go θα εκτελεί τις goroutines σε μικρές ομάδες με σειριακή σειρά, επομένως η αύξηση του αριθμού τους σχεδόν δεν επηρεάζει την κατανάλωση μνήμης - Ο μαζικός πολλαπλασιασμός των goroutines μπορεί να οδηγήσει σε σημαντική κατανάλωση μνήμης και επιπλέον κόστος του προγραμματιστή; σε τέτοιες περιπτώσεις, είναι κατάλληλη η χρήση ενός pool εργαζομένων - Αν ο αριθμός των goroutines υπερβαίνει τον αριθμό των λογικών επεξεργαστών, το Go θα αρχίσει αυτόματα να απορρίπτει νέες εκκινήσεις goroutines με ένα panic
Σημαίνει ότι όλα θα τελειώσουν τελικά μετά από αυτό το timeout; Δηλαδή, μπορεί κάτι ακόμα να μην λειτουργεί — ποιο είναι το πρόβλημα εδώ;
Πείτε μας για το σύστημα αυτόματης βαθμολόγησης: ποιος είναι ο σκοπός του, είναι μονολιθικό ή μικροϋπηρεσίες, και ποια ήταν η περιοχή ευθύνης σας;
Περιγράψτε τη διαδικασία φόρτωσης του διακομιστή Linux από την εκκίνηση μέχρι την εκκίνηση του τερματικού
Τι μπορεί να δει το επίπεδο του αποθετηρίου;
Ποια λειτουργία έκανες και είσαι περήφανος; Διηγήσου για την τελευταία ενδιαφέρουσα εργασία.
Πες μου για την τελευταία σου εργασιακή εμπειρία
Τι είναι τα κανάλια στο Go και ποιοι είναι οι τύποι τους;
Γιατί η προσέγγιση του Go για τον πολυνηματισμό είναι καλύτερη από άλλες γλώσσες;
Υπάρχει τρόπος να διαχειριστείτε και να ρυθμίσετε τον stop-the-world συλλέκτη απορριμμάτων στο Go;
Υπάρχουν ερωτήσεις σχετικά με τα στάδια και τις ομάδες;
Τι μπορεί να γίνει για να αποφευχθεί η εκκένωση του χάρτη σε μια υπηρεσία υψηλού φόρτου;
Μπορεί κανείς να γράψει σε ένα map από διαφορερα goroutines ταυτόχρονα; Τι θα συμβεί;
Τι είναι ο Μέσος Όρος Φόρτου, πώς τον ελέγχετε και τι πρέπει να προσέχετε;
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() }