Έχετε χρησιμοποιήσει δημόσιες cloud υπηρεσίες; Αν ναι, με ποιους παρόχους και υπηρεσίες;
Golang
Έχεις εμπειρία στην υποστήριξη ή την ανάπτυξη κατανεμημένων συστημάτων;
τύπος Response διεπαφή {} tύπος Backend διεπαφή { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr περιέχει ip:port συγκεκριμένου αντιγράφου func NewBackend(addr string) *BackendImpl tύπος Balancer δομή { // TODO backends []*BackendImpl index int mu sync.Mutex } var _ Backend = &Balancer{} func (b *Balancer) Invoke(ctx context.Context, req Request) (Response, error) { αν len(b.backends) == 0 { return nil, fmt.Errorf("Ο αριθμός των backends στη λίστα είναι 0") } b.mu.Lock() index := b.index αν b.index + 1 == len(b.backends) { b.index = 0 index = 0 } b.mu.Unlock() resp, err := b.backends[index].Invoke(ctx, req) return resp, err } // addrs περιέχει τις διευθύνσεις όλων των ισορροπημένων αντιγράφων func NewBalancer(addrs []string) *Balancer { // TODO backends := make([]*BackendImpl, len(addrs))
Πώς δουλεύετε την αρχιτεκτονική — υπάρχει αρχιτέκτονας στην ομάδα, πλατφόρμα, επιτροπή;
Πόσο γρήγορα θα λειτουργεί μια γραμμική αναζήτηση όλων των backend σε υψηλό RPS (π.χ., 30.000 RPS και 10 backend);
type Balancer struct { // TODO backends []*BackendImpl index int mu sync.Mutex N int K time.Duration } var _ Backend = &Balancer{} func (b *Balancer) Invoke(ctx context.Context, req Request) (Response, error) { if len(b.backends) == 0 { return nil, fmt.Errorf("Αριθμός backends στο slice 0") } b.mu.Lock() index := b.index for b.backends[index].banned { b.index = (b.index + 1) % len(b.backends) index = b.index } b.index = (b.index + 1) % len(b.backends) b.mu.Unlock() backend := b.backends[index] resp, err := backend.Backend.Invoke(ctx, req) if err != nil && backend.countErrors < b.N { backend.mu.Lock() backend.countErrors += 1 if backend.countErrors == b.N { backend.banned = true go func() { time.Sleep(b.K) backend.mu.Lock() defer backend.mu.Unlock() backend.banned = false backend.countErrors = 0 }() } backend.mu.Unlock() } return resp, err } // addrs περιέχουν τις διευθύνσεις όλων των ισορροπημένων στιγμιότυπων func NewBalancer(addrs []string) *Balancer { // TODO backends := make([]*BackendImplF, len(addrs)) for _, addr := range addrs { implF := BackendImplF{ Backend: NewBackend(addr), } backends = append(backends, &implF) } }
Πώς να ελέγξετε γρήγορα ότι το παράθυρο περιέχει όλους τους χαρακτήρες (σύγκριση δύο χαρτών);
Πόσο ενεργά είναι τα ευρετήρια; Ίσως υπάρχουν ήδη κάποιες προσφορές;
Πες μου περισσότερα για την πρώτη σου δουλειά από το 2019 έως το 2021.
Ποιο ήταν το μεγαλύτερο όγκο δεδομένων με τον οποίο έχετε εργαστεί σε βάσεις δεδομένων;
Σε πόσα hosts λειτουργούσε η υπηρεσία και πόσα instances ξεκινούσαν;
/** :-))) :-(( "ab :-)" = "ab " "ab :-)))" = "ab " "ab :-)))(" = "ab (" "ab ):-)" = "ab )" ":-)" = "" **/ func deleteP(str string) string { n := len(str) res := make([]byte, 0, n) i := 0 for i < n { if str[i] == ':' && str[i+1] == '-' && (str[i+2] == ')' || str[i+2] == '(') { ch := str[i+2] i += 2 for i < n && str[i] == ch { i++ } } else { res = append(res, str[i]) } } return string(res) }
Πόσα άτομα συμμετείχαν στο μεγαλύτερο έργο στο οποίο εργαστήκατε; Λιγότερα από δέκα, δεκάδες, εκατοντάδες;
Υπάρχουν πιο απλοί και γρήγοροι τρόποι για την κατανομή φορτίου αντί να επιλέγετε το λιγότερο φορτωμένο backend;
Πώς να λύσετε το πρόβλημα του περιορισμού των παράλληλων αιτημάτων σε ένα κατανεμημένο σύστημα με πολλές περιπτώσεις, αν ο χρήστης πρέπει να περιμένει αντί να λαμβάνει σφάλμα;
Βρείτε τα συντακτικά λάθη στον διορθωμένο κώδικα
Γιατί τα μηνύματα του Message Service πηγαίνουν απευθείας μέσω gRPC, και όχι μέσω Kafka;
func countSubs(s string) int { result := 0 left := 0 hm := make(map[rune]int) for right := 0; right < len(s); right++ { hm[s[right]]++ for hm[s[right]] > 1 { hm[s[left]]-- if hm[s[left]] == 0 { delete(hm, s[left]) } left++ } result += (right - left + 1) } return result }
Υλοποιήστε τη μέθοδο BulkCreateUsers με βάση το αρχείο proto: δημιουργήστε τη δομή του έργου, τη λογική επιχειρήσεων, το αποθετήριο και τα ερωτήματα SQL ακολουθώντας τις αρχές SOLID
""" Οι θέσεις στον κινηματογράφο είναι τοποθετημένες σε μια σειρά. Ένας θεατής που μόλις ήρθε επιλέγει μια θέση, για να καθίσει όσο το δυνατόν πιο μακριά από τους άλλους θεατές στη σειρά. Δηλαδή, η απόσταση από αυτή τη θέση, στην οποία θα καθίσει, μέχρι τον πλησιέστερο θεατή πρέπει να είναι μέγιστη. Εγγυάται ότι πάντα υπάρχουν ελεύθερες θέσεις στη σειρά και ότι ήδη κάθεται τουλάχιστον ένας θεατής. Γράψτε μια συνάρτηση που, δεδομένης μιας σειράς θέσεων (ένας πίνακας μηδενικών και ένα), επιστρέφει την απόσταση (αριθμός διαστημάτων μεταξύ των καθισμάτων) από τη επιλεγμένη θέση μέχρι τον πλησιέστερο θεατή. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 [0, 0, 0, 1] -> 3 [1, 0, 0, 0] -> 3 place = ((right - left) / 2) """ func maxPlaces(arr []int) int { }