Golang
func collectRTT(ctx context.Context, urls []string) (map[string]time.Duration, error) { pingMap := make(map[string]time.Duration, len(urls)) var mu sync.Mutex var wg sync.WaitGroup errCh := make(chan error, 1) for _, url := range urls { wg.Add(1) go func(u string) { defer wg.Done() dur, err := rtt(ctx, u) if err != nil { select { case errCh <- fmt.Errorf("αποτυχία RTT %s, %w", u, err): default: } return } mu.Lock() pingMap[u] = dur mu.Unlock() }(url) } wg.Wait() close(errCh) if err := <-errCh; err != nil { return nil, err } return pingMap, nil }
Ποια είναι η κύρια γλώσσα προγραμματισμού και ποιες άλλες γλώσσες γνωρίζεις, συμπεριλαμβανομένης της μη εμπορικής εμπειρίας;
func (p *Pool) Stop() { p.mu.Unlock() // Τώρα είναι ασφαλές να κλείσουμε το κανάλι close(p.tasks) // σήμα στους εργαζόμενους: δεν θα υπάρχουν νέες εργασίες, διαβάστε το υπόλοιπο p.wg.Wait() // περιμένουμε να ολοκληρωθούν όλα τα goroutines p.cancel() // ακυρώνουμε το πλαίσιο, αν χρειάζεται fmt.Println("Pool σταμάτησε.") } // ForceStop αναγκαστικά σταματά όλους τους εργαζόμενους χωρίς να περιμένει την ολοκλήρωση των εργασιών. // Οι εργαζόμενοι θα διακοπούν αμέσως μέσω του πλαισίου. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Αναγκαστική διακοπή του pool (timeout: %v)...\n", timeout) // Μπλοκάρει την προσθήκη νέων εργασιών p.mu.Lock() p.isOpen = false p.mu.Unlock() // Κλείνει το κανάλι ώστε οι εργαζόμενοι να μην πάρουν νέες εργασίες close(p.tasks) // Ακυρώνουμε το πλαίσιο – αυτό θα διακόψει όλες τις τρέχουσες εργασίες p.cancel() // Δίνουμε περιορισμένο χρόνο για να ολοκληρωθούν done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Pool αναγκαστικά σταμάτησε (όλοι οι εργαζόμενοι τερματίστηκαν)") case <-time.After(timeout): fmt.Println("Pool αναγκαστικά σταμάτησε (timeout, ενδέχεται να παραμείνουν goroutines σε αναμονή)") } }
Για ποιο λόγο χρειάζεται το HAVING και γιατί όχι το WHERE;
Μίλησέ μου για τους τύπους δεδομένων στο Go.
Πώς να αλλάξετε τον κώδικα ώστε το αποτέλεσμα να είναι 456 αντί για 123;
Τι τύπους συναλλαγών γνωρίζεις; Για τι χρειάζονται;
Αναφέρεις ότι υπήρχαν προβλήματα με τους δείκτες — μπορείς να το εξηγήσεις συγκεκριμένα;
Τι συμβαίνει όταν διαβάζετε από ένα κλειστό κανάλι στο Go;
Ποια είναι η διαφορά μεταξύ TCP και UDP; Γιατί χρησιμοποιείται το TCP για το HTTPS;
Έχεις αντιμετωπίσει ποτέ την έννοια του sharding;
Γνωρίζετε τα μοτίβα fan-in/fan-out και pipeline; Τι είναι;
Μπορούν να προστεθούν ή να αφαιρεθούν στοιχεία σε έναν χάρτη κατά τη διάρκεια της διαδικασίας εκκένωσης;
Τι είναι μια goroutine; Πώς διαφέρει από ένα νήμα του λειτουργικού συστήματος; Ποιος διαχειρίζεται τις goroutines;
Ποια είναι τα αναμενόμενα μισθολογικά σας και η προτιμώμενη μορφή παρουσίασης;
Πόσα goroutines μπορούν να δημιουργηθούν σε ένα μόνο μηχάνημα; Πώς μετράμε;
Ποια είναι η διαφορά μεταξύ ενσωμάτωσης (embedding) και σύνθεσης στο Go;
Πόσες μέγιστες TCP συνδέσεις μπορούν να διατηρηθούν σε έναν διακομιστή;
Ποια είναι η πολυπλοκότητα του αλγορίθμου και πού είναι το δέντρο εδώ;
Μίλησέ μου για μια αξέχαστη αποτυχία στη δουλειά