Πώς λειτουργεί η σύνδεση WebSocket στην αρχιτεκτονική — πότε εγκαθίσταται και ποιος επικοινωνεί με ποιον;
Golang
// Δίνονται δύο ταξινομημένες ακολουθίες ακεραίων σε μη φθίνουσα σειρά. // Είναι απαραίτητο να επιστραφούν όλα τα στοιχεία της πρώτης ακολουθίας που δεν υπάρχουν στη δεύτερη. // 0 <= N <= 10^6 // -10^9 <= a[i] <= 10^9 // [1] // [2, 3, 4, 5, 6] // [1] // [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ...] // [1] // [2, 3, 4, 5, 6, 7, 8] func filter(first []int, second []int) []int { res := make([]int, 0, len(first)) i, j := 0, 0 for i < len(first) && j < len(second) { if first[i] < second[j] { result = append(result, first[i]) i++ } else if first[i] > second[j] { j++ } else { i++ j++ } } for i < len(first) { result = append(result, first[i]) i++ } return result }
Πώς μετακινείτε το παράθυρο στον αλγόριθμο sliding window;
Αναφέρετε την πιο δύσκολη και ενδιαφέρουσα εργασία που έχετε αντιμετωπίσει, ιδιαίτερα σχετικά με την αρχιτεκτονική εμπειρία.
Μπορείτε να αναφέρετε το τρέχον επίπεδο εισοδήματός σας;
Μένεις αυτήν την στιγμή στη Μόσχα; Ποια πόλη σκέφτεσαι; Σκέφτεσαι υβριδική μορφή εργασίας; Σε ποιο στάδιο της αναζήτησης βρίσκεσαι;
Ποιο είναι το πρόβλημα με την τρέχουσα υλοποίηση της ενημέρωσης του χάρτη στον worker (tasksRes[t.id][task{...}])?
Πώς ενσωματώνονται και εμφανίζονται αυτά τα μετρικά δεδομένα στο Grafana;
Έχετε άλλες ενεργές διαδικασίες συνέντευξης;
Έχεις ενεργό GitHub ή LinkedIn;
Ποια ήταν η σύνθεση της ομάδας με την οποία εργάστηκες τελευταία φορά;
Σχεδιάστε ένα κλιμακούμενο σύστημα ανταλλαγής μηνυμάτων που υποστηρίζει 150 εκατομμύρια χρήστες, 75 εκατομμύρια DAU, 225 εκατομμύρια MAU, 1.2M ανάγνωση / 300k εγγραφή QPS, 5 εκατομμύρια ταυτόχρονους χρήστες, 60 PB νέα δεδομένα ετησίως, ετήσια αύξηση 30%, P99 <200 ms για ανάγνωση, <300 ms για εγγραφή, SLA 99.95%. ΠΕΡΙΒΑΛΛΟΝ Απαιτείται ο σχεδιασμός ενός διανεμημένου συστήματος ανταλλαγής μηνυμάτων, παρόμοιου με το WhatsApp, που υποστηρίζει προσωπικά και ομαδικά chat, διασφαλίζει την παράδοση μηνυμάτων, εμφανίζει online καταστάσεις χρηστών και μεταφέρει πολυμέσα αρχεία (φωτογραφίες, βίντεο, ήχο). Το σύστημα πρέπει να διασφαλίζει υψηλή διαθεσιμότητα και χαμηλή καθυστέρηση, να αντέχει σε υψηλό παράλληλο φόρτο και να κλιμακώνεται σε παγκόσμιο επίπεδο. ΑΠΑΙΤΗΣΕΙΣ ΛΕΙΤΟΥΡΓΙΚΕΣ - Υποστήριξη προσωπικών (1:1) και ομαδικών chat με δυνατότητα προσθήκης/αφαίρεσης συμμετεχόντων - Αποστολή και λήψη κειμένων και πολυμέσων Μη λειτουργικές απαιτήσεις: - Δεν υπάρχει σαφής υλοποίηση μηχανισμού end-to-end κρυπτογράφησης σε επίπεδο υπηρεσιών ή πελατών, εκτός από μια γενική σημείωση. - Δεν υπάρχει σαφής περιγραφή του sharding και της αναπαραγωγής βάσεων δεδομένων βάσει chat_id ή user_id για κλιμάκωση και αντοχή σε σφάλματα. - Δεν υπάρχει σαφές στοιχείο ή μηχανισμός για offline συγχρονισμό μηνυμάτων και αποδείξεων παράδοσης. - Δεν είναι σαφές πώς γίνεται η ισοκατανομή φόρτου μεταξύ βάσεων δεδομένων και υπηρεσιών, ειδικά σε περιόδους αιχμής. **Σημεία που χρήζουν προσοχής:** (Το διάγραμμα δείχνει μια αρχιτεκτονική με Load Balancer, API Gateway, Message Queue, Service, Cache, Database, Object Storage και CDN.)
Δίνεται μια συνάρτηση που δέχεται δύο ταξινομημένες σε μη φθίνουσα σειρά ακολουθίες ακέραιων αριθμών. Πρέπει να επιστρέψετε όλα τα στοιχεία της πρώτης ακολουθίας που δεν υπάρχουν στη δεύτερη. Πώς θα προσεγγίζατε τη λύση και ποια είναι η πολυπλοκότητα;
Πες μου για το τελευταίο σου έργο — τι είναι και με τι ακριβώς ασχολείσαι;
Πες μας συνοπτικά τι ασχολήθηκες στις προηγούμενες δουλειές σου και ποιες λειτουργίες υλοποίησες.
Έχετε εμπειρία με κατανεμημένα συστήματα;
Σχεδιασμός ενός κλιμακούμενου συστήματος ανταλλαγής μηνυμάτων που υποστηρίζει 150 εκατομμύρια χρήστες, 75 εκατομμύρια DAU, 225 εκατομμύρια MAU, 1,2 εκατομμύρια peak QPS ανάγνωσης / 300k εγγραφής, 5 εκατομμύρια ταυτόχρονους χρήστες, 60 PB νέων δεδομένων ετησίως, 30% ετήσια ανάπτυξη, SLA 99,95%, p99 <200 ms για ανάγνωση, <300 ms για εγγραφή. ΠΕΡΙΒΑΛΛΟΝ Απαιτείται ο σχεδιασμός ενός διανεμημένου συστήματος ανταλλαγής μηνυμάτων, παρόμοιου με το WhatsApp, που υποστηρίζει 1:1 και ομαδικές συνομιλίες, διασφαλίζει την παράδοση μηνυμάτων, εμφανίζει online καταστάσεις χρηστών και επιτρέπει τη μεταφορά πολυμέσων (φωτογραφίες, βίντεο, ήχο). Το σύστημα πρέπει να παρέχει υψηλή διαθεσιμότητα και χαμηλή καθυστέρηση, να υποστηρίζει υψηλό παράλληλο χειρισμό και να κλιμακώνεται σε παγκόσμιο επίπεδο. ΑΠΑΙΤΗΣΕΙΣ ΛΕΙΤΟΥΡΓΙΚΟΤΗΤΑΣ - Υποστήριξη προσωπικών (1:1) και ομαδικών συνομιλιών με δυνατότητα προσθήκης/αφαίρεσης συμμετεχόντων - Αποστολή και λήψη κειμένων και πολυμέσων Δεν φαίνεται να υπάρχει σαφής υλοποίηση μηχανισμού end-to-end κρυπτογράφησης σε επίπεδο υπηρεσιών ή πελατών, εκτός από μια γενική σημείωση. - Απουσιάζει σαφής περιγραφή του sharding και της αναπαραγωγής βάσεων δεδομένων βάσει chat_id ή user_id για κλιμάκωση και αντοχή σε σφάλματα. - Δεν υπάρχει σαφής συστατικό ή μηχανισμός για την offline συγχρονισμό μηνυμάτων και αποδείξεων παράδοσης. - Δεν είναι σαφές πώς πραγματοποιείται η κατανομή φόρτου μεταξύ βάσεων δεδομένων και υπηρεσιών, ειδικά σε περιόδους αιχμής. **Κρίσιμα σημεία που πρέπει να ληφθούν υπόψη:**
[όνομα] υπογράμμισε μια ασυμφωνία στην αξιολόγηση της μνήμης: δήλωσε το ένα, έγραψε το άλλο. Πώς να αξιολογήσουμε σωστά τη μνήμη;
/** :-))) :-(( "ab :-)" = "ab " "ab :-)))" = "ab " "ab :-)))(" = "ab (" "ab ):-)" = "ab )" ":-)" = "" **/ func deleteP(str string) string { }
Δίνεται μια συμβολοσειρά χαρακτήρων. Βρείτε τον αριθμό των ζευγών δεικτών i και j (i <= j), μεταξύ των οποίων, συμπεριλαμβανομένων, δεν υπάρχουν επαναλαμβανόμενοι χαρακτήρες. Για τη συμβολοσειρά "aba" η απάντηση είναι 5: [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") Για τη συμβολοσειρά "abcb" η απάντηση είναι ?: aba 3 + 2 = 5 abcb 4 (a, b, c, d) + 1 (ab) + 1 (bc) + 1 (cb) + 1 (abc) = 8