Πείτε μας για τα πρόσφατα έργα σας και την τεχνολογική στοίβα που χρησιμοποιήσατε.
Golang
Πού κατοικείς, πού βρίσκεσαι;
Ας μιλήσουμε για την αρχιτεκτονική μικροϋπηρεσιών. Τι ήταν πιο συχνό πρόσφατα: υποστήριξη ή ανάπτυξη;
Πώς να ελέγξετε ότι το παράθυρο περιέχει όλους τους απαραίτητους χαρακτήρες;
4 - γρήγορη αποδοχή εισερχόμενων εργασιών, 5 - επιστροφή αποτελέσματος εργασίας κατόπιν αιτήματος 6 - εάν δεν υπάρχει αποτέλεσμα, επιστρέψτε την αντίστοιχη κατάσταση /* Επεξεργαστής - μια υπηρεσία που εκτελεί μια μακράς διάρκειας, πόρους-εντατική λειτουργία. Είναι ήδη υλοποιημένη Τα σφάλματα που επιστρέφει σχετίζονται αποκλειστικά με εσφαλμένα δεδομένα εισόδου, είναι σταθερά και η επανυποβολή τους είναι άσκοπη */ type Processor interface { Process([]byte) ([]byte, error) } /* Υποθέτουμε ότι έχουμε έναν γεννήτορα μοναδικών ταυτοτήτων (π.χ., UUID). Ο γεννήτορας εγγυάται ότι δεν θα υπάρξουν συγκρούσεις */ type ID string // func NewID() ID /* Ο προγραμματιστής δέχεται εργασίες από πελάτες, τις τοποθετεί σε ουρά και ξεκινά την επεξεργασία. Εξασφαλίζει ότι δεν τρέχουν ταυτόχρονα περισσότερες από 'threads' μεθόδους επεξεργασίας Παρέχει τη δυνατότητα ελέγχου της κατάστασης της εργασίας και λήψης αποτελέσματος δεν μπλοκάρει τις δημόσιες μεθόδους του για επεξεργασία */ type Scheduler struct { processor Processor } func NewScheduler( prc Processor, threads int, ) *Scheduler { // λογική αρχικοποίησης return &Scheduler{ processor: prc, } } func (s *Scheduler) Queue(request []byte) ID { // υλοποίηση return "" }
/* Πρέπει να μεταφέρουμε δεδομένα από μια πηγή σε έναν καταναλωτή. Η πηγή παρέχει δεδομένα σε μικρές παρτίδες (~δέκα εγγραφές), ενώ ο καταναλωτής λειτουργεί πιο αποδοτικά με μεγάλες παρτίδες (~χίλιες εγγραφές). Ένα πραγματικό παράδειγμα είναι η μεταφορά δεδομένων από ουρές τύπου Kafka σε μια βάση δεδομένων Clickhouse. Πηγή: - Πρακτικά άπειρη. - Η πηγή ποτέ δεν επιστρέφει περισσότερα από MaxItems εγγραφές σε μια κλήση Next. - Σε μια "συνεδρία" (μία κλήση της συνάρτησης Pipe), η πηγή επιστρέφει νέα δεδομένα σε κάθε κλήση Next. - Ωστόσο, μετά από επανεκκίνηση, η πηγή ξεκινά από την προηγούμενη "επιβεβαιωμένη" θέση, ορισμένη από το cookie. Επομένως, *κάθε* τιμή cookie που επιστρέφει το Next, μετά την αποθήκευση των δεδομένων στον δέκτη, πρέπει να επιβεβαιωθεί με μια κλήση Commit, με την ίδια σειρά με αυτή που επιστράφηκε από το Next. Δέκτης: - Δεν μπορεί να επεξεργαστεί περισσότερα από MaxItems ταυτόχρονα. Απαιτείται η υλοποίηση της συνάρτησης func Pipe(p Producer, c Consumer) error που διαβάζει δεδομένα από την πηγή, τα ομαδοποιεί σε ένα buffer μεγέθους όχι μεγαλύτερο από MaxItems και τα αποθηκεύει στον δέκτη, μετά επιβεβαιώνει την πρόοδο στην πηγή. */ const MaxItems = 9999 type Producer interface { // Next επιστρέφει: // - ένα batch από items προς επεξεργασία // - cookie για επιβεβαίωση όταν ολοκληρωθεί η επεξεργασία // - σφάλμα Next() (items []any, cookie int, err error) // Commit χρησιμοποιείται για να σηματοδοτήσει το batch δεδομένων ως επεξεργασμένο Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }
Πες μου, τι συμβαίνει τελικά — πώς συσσωρεύουμε το buffer;
Περιγράψτε τον αλγόριθμο για την επίλυση του προβλήματος maxSegment
Ποιες είναι οι προσδοκίες σας σχετικά με τον μισθό;
Έχετε εμπειρία στη συγγραφή προγραμμάτων με πολυνηματικότητα ή ασύγχρονες λειτουργίες;
Ποια αντι-μοτίβα στην αρχιτεκτονική μικροϋπηρεσιών γνωρίζετε;
Ας δούμε ένα παράδειγμα: first=[1,1,2], second=[1,2]. Τι πρέπει να επιστρέψει ο αλγόριθμός σας και λειτουργεί σωστά με διπλότυπα;
Αν σας προταθεί μια θέση εργασίας και την αποδεχτείτε, πόσο γρήγορα θα είστε έτοιμοι να ξεκινήσετε να εργάζεστε;
[όνομα] ρώτησε: διατηρώντας τη θέση ενός στοιχείου μικρότερου από X, ποια θα είναι η θέση;
Ο φορτωτής πρέπει να καταλαβαίνει ότι το backend απαντά με σφάλματα, και όταν υπερβαίνει ένα όριο για ένα συγκεκριμένο χρονικό διάστημα, να το αποκλείει από την ισορροπία (Circuit Breaker)
Με ποιες βάσεις δεδομένων ή άλλες αποθηκευτικές μονάδες δεδομένων έχετε εργαστεί; Πόσα αιτήματα ανά δευτερόλεπτο (RPS) για εγγραφή και ανάγνωση;
Έχετε ασχοληθεί με ηγετικές εργασίες καθ' όλη τη διάρκεια της εργασίας σας;
Έχετε εμπειρία στην ανάπτυξη και υποστήριξη κατανεμημένων συστημάτων;
Είναι σωστό ότι αυτήν τη στιγμή διαμένετε στη [πόλη] και θα ήταν βολικό για εσάς να εργάζεστε σε υβριδική μορφή με επισκέψεις στο γραφείο;
Ποιο είναι το μέγιστο φορτίο σε αιτήματα ανά δευτερόλεπτο που διαχειρίστηκε η πιο φορτωμένη υπηρεσία; Είναι σωστό ότι είναι έως 5–8 χιλιάδες αιτήματα ανά δευτερόλεπτο;