Sobes.tech

Έχετε χρησιμοποιήσει δημόσιες cloud υπηρεσίες; Αν ναι, με ποιους παρόχους και υπηρεσίες;

185

Έχεις εμπειρία στην υποστήριξη ή την ανάπτυξη κατανεμημένων συστημάτων;

185

τύπος 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))

185

Πώς δουλεύετε την αρχιτεκτονική — υπάρχει αρχιτέκτονας στην ομάδα, πλατφόρμα, επιτροπή;

184

Πόσο γρήγορα θα λειτουργεί μια γραμμική αναζήτηση όλων των backend σε υψηλό RPS (π.χ., 30.000 RPS και 10 backend);

183

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) } }

181

Πώς να ελέγξετε γρήγορα ότι το παράθυρο περιέχει όλους τους χαρακτήρες (σύγκριση δύο χαρτών);

180

Πόσο ενεργά είναι τα ευρετήρια; Ίσως υπάρχουν ήδη κάποιες προσφορές;

180

Πες μου περισσότερα για την πρώτη σου δουλειά από το 2019 έως το 2021.

180

Ποιο ήταν το μεγαλύτερο όγκο δεδομένων με τον οποίο έχετε εργαστεί σε βάσεις δεδομένων;

180

Σε πόσα hosts λειτουργούσε η υπηρεσία και πόσα instances ξεκινούσαν;

180

/** :-))) :-(( "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) }

178

Πόσα άτομα συμμετείχαν στο μεγαλύτερο έργο στο οποίο εργαστήκατε; Λιγότερα από δέκα, δεκάδες, εκατοντάδες;

178

Υπάρχουν πιο απλοί και γρήγοροι τρόποι για την κατανομή φορτίου αντί να επιλέγετε το λιγότερο φορτωμένο backend;

177

Πώς να λύσετε το πρόβλημα του περιορισμού των παράλληλων αιτημάτων σε ένα κατανεμημένο σύστημα με πολλές περιπτώσεις, αν ο χρήστης πρέπει να περιμένει αντί να λαμβάνει σφάλμα;

177

Βρείτε τα συντακτικά λάθη στον διορθωμένο κώδικα

177

Γιατί τα μηνύματα του Message Service πηγαίνουν απευθείας μέσω gRPC, και όχι μέσω Kafka;

176

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 }

176

Υλοποιήστε τη μέθοδο BulkCreateUsers με βάση το αρχείο proto: δημιουργήστε τη δομή του έργου, τη λογική επιχειρήσεων, το αποθετήριο και τα ερωτήματα SQL ακολουθώντας τις αρχές SOLID

175

""" Οι θέσεις στον κινηματογράφο είναι τοποθετημένες σε μια σειρά. Ένας θεατής που μόλις ήρθε επιλέγει μια θέση, για να καθίσει όσο το δυνατόν πιο μακριά από τους άλλους θεατές στη σειρά. Δηλαδή, η απόσταση από αυτή τη θέση, στην οποία θα καθίσει, μέχρι τον πλησιέστερο θεατή πρέπει να είναι μέγιστη. Εγγυάται ότι πάντα υπάρχουν ελεύθερες θέσεις στη σειρά και ότι ήδη κάθεται τουλάχιστον ένας θεατής. Γράψτε μια συνάρτηση που, δεδομένης μιας σειράς θέσεων (ένας πίνακας μηδενικών και ένα), επιστρέφει την απόσταση (αριθμός διαστημάτων μεταξύ των καθισμάτων) από τη επιλεγμένη θέση μέχρι τον πλησιέστερο θεατή. [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 { }

174
/11