Ποιο είναι το πλεονέκτημα του JWT σε σύγκριση με την αποθήκευση συνεδριών στον διακομιστή;
Golang
/* Υπάρχει μια εφαρμογή με αρχιτεκτονική μικροϋπηρεσιών. Ένα μικροϋπηρεσία μπορεί να αποδοθεί μέσω μιας διεπαφής Backend. Για πρόσβαση σε ένα αντίγραφο μικροϋπηρεσίας, μπορεί να χρησιμοποιηθεί ο τύπος BackendImpl, ο οποίος έχει ήδη υλοποιηθεί. Κάθε μικροϋπηρεσία έχει αρκετές δεκάδες εκτελεσμένων αντιγράφων, καθένα προσβάσιμο μέσω της δικής του διεύθυνσης addr. Ωστόσο, τα μεμονωμένα αντίγραφα της μικροϋπηρεσίας δεν είναι αξιόπιστα: μπορούν να πέσουν, να είναι μη προσβάσιμα ή υπερφορτωμένα. Γι' αυτό, πρέπει να υλοποιήσετε έναν τύπο Balancer, ο οποίος επίσης υλοποιεί τη διεπαφή Backend και πραγματοποιεί load balancing από την πλευρά του πελάτη μεταξύ των αντιγράφων της μικροϋπηρεσίας, επιλέγοντας κάθε φορά **το λιγότερο φορτωμένο** αντίγραφο.
Ποια είναι η κύρια γλώσσα προγραμματισμού που χρησιμοποιείς; Χρησιμοποιείς C++ ή Python;
Πόση μνήμη έχει αρχικά κατανεμηθεί για το buffer;
Έχετε χρησιμοποιήσει κάποια υπηρεσία cloud; Yandex, Google, AWS ή άλλες υπηρεσίες cloud;
func Pipe(p Παραγωγός, c Καταναλωτής) error { // TODO buf := make([]any, 0, MaxItems) cookies := make([]int, 0) flush := func() error { if len(buf) == 0 { return nil } if err := c.Process(buf); err != nil { return err } for _, cookie := range cookies { if err := p.Commit(cookie); err != nil { return err } } buf = buf[:0] cookies = cookies[:0] return nil } for { items, cookie, err := p.Next() if err != nil { flush() return err }
Γιατί η κλήση του backend.Invoke έγινε εκτός του mutex;
Τι θα συμβεί αν το Consumer.Process επιστρέψει σφάλμα — τα δεδομένα από το buffer δεν θα χαθούν;
Μπορεί να βελτιωθεί ο αλγόριθμος maxSegment;
Ποιες γλώσσες προγραμματισμού, εκτός από Go, χρησιμοποιείτε για τον εαυτό σας ή στην εμπορική ανάπτυξη;
Πώς εργαστήκατε με προσωπικά δεδομένα πριν τα στείλετε σε ένα εξωτερικό LLM;
Δεδομένης μιας συμβολοσειράς S, πρέπει να μετρήσετε τον αριθμό των υποσυμβολοσειρών σε αυτήν που περιέχουν όλους τους χαρακτήρες αυτής της συμβολοσειράς τουλάχιστον μία φορά. Παραδείγματα: "abca" -> 3 // abc, bca, abca "aa" -> 3 // aa, a, a, "ffg" -> 2 // ffg, fg
Ποιος είναι ο μέγιστος αριθμός αιτημάτων ανά δευτερόλεπτο που διαχειρίζεστε αυτήν τη στιγμή υπό υψηλό φόρτο;
Αυτή είναι μια σειρά χαρακτήρων. Βρείτε τον αριθμό των ζευγών δεικτών i και j (i <= j), μεταξύ των οποίων, συμπεριλαμβανομένων, δεν υπάρχουν επαναλαμβανόμενοι χαρακτήρες. Για τη σειρά "aba" η απάντηση είναι 5: [0, 0] ("a") [0, 1] ("ab") [1, 1] ("b") [1, 2] ("ba") [2, 2] ("a") Για τη σειρά "acbb" η απάντηση είναι ?:
Ποια κριτήρια θα χρησιμοποιήσετε για να επιλέξετε έναν εργοδότη; Τι είναι το πιο σημαντικό για εσάς;
Είστε διατεθειμένοι να μεταβείτε σε μια άλλη γλώσσα προγραμματισμού αν χρειαστεί ή κατά προσωπική επιθυμία;
Σε ποια γλώσσα προγραμματισμού εργάζεστε; Γιατί προέκυψαν δυσκολίες με τη σύνταξη;
// TODO backends []*BackendImpl index int mu sync.Mutex func (b *Balancer) Invoke(ctx context.Context, req Request) (Response, error) { b.mu.Lock() index := b.index if b.index + 1 == len(b.backends) { b.index = 0 index = 0 } b.mu.Unlock() resp, err := b.backends[index].Invoke(ctx, req) b.mu.Lock() defer b.mu.Unlock() b.index += 1 return resp, err } // addr περιέχει ip:port συγκεκριμένου αντιγράφου func NewBackend(addr string) *BackendImpl // addrs περιέχουν τις διευθύνσεις όλων των ισορροπημένων αντιγράφων func NewBalancer(addrs []string) *Balancer { // TODO backends := make([]*BackendImpl, len(addrs)) for _, addr := range addrs { backends = append(backends, NewBackend(addr)) } return &Balancer{ backends: backends, } }
Πώς επεξεργάζονται τα μηνύματα που αποστέλλονται σε χρήστες εκτός σύνδεσης;
Ας μιλήσουμε για την αρχιτεκτονική μικροϋπηρεσιών. Τι ήταν πιο συχνό πρόσφατα: υποστήριξη ή ανάπτυξη;