Golang
Έχετε εργαστεί ποτέ με ταυτόχρονη πρόσβαση σε δεδομένα σε μια βάση δεδομένων; Ποια μηχανισμοί όπως συναλλαγές και κλειδώματα χρησιμοποιήσατε; Υπάρχουν τρόποι να λύσετε αυτό το πρόβλημα χωρίς να εμπλέκεται η βάση δεδομένων;
// κώδικας για τη συνάρτηση best() // με διαχείριση σφαλμάτων όταν δεν υπάρχει διαθέσιμο backend
Πώς επικοινωνήσατε τις απαιτήσεις για την ανάπτυξη μιας υπηρεσίας στο Kubernetes στην ομάδα DevOps: σε ποιον μορφότυπο καταγράψατε τη λειτουργία της υπηρεσίας και πώς χτίστηκε η αλληλεπίδραση;
Ποια είναι η διαφορά μεταξύ μεθόδων με αποδέκτη τιμής και αποδέκτη δείκτη στο Go, και πότε να επιλέξετε το καθένα;
// κώδικας για τη συνάρτηση best() // με διαχείριση σφαλμάτων όταν δεν υπάρχει διαθέσιμο backend
// κώδικας για τη συνάρτηση best() // με διαχείριση σφαλμάτων όταν δεν υπάρχει διαθέσιμο backend
Υπάρχει αντικειμενοστραφής προγραμματισμός στο Go; Αν ναι, πώς υλοποιείται; αν όχι, γιατί;
Τι είναι το πιο σημαντικό για εσάς στη δουλειά;
Τι επιστρέφει η ανάγνωση από ένα κλειστό κανάλι;
Πώς οργανώσατε την κλιμάκωση και με ποιες αρχιτεκτονικές μικροϋπηρεσιών εργαστήκατε;
Πότε συμβαίνει διαρροή goroutine;
Πώς να υλοποιήσετε τη μέθοδο Status για να λάβετε την κατάσταση της εργασίας με το ID;
Τι συμβαίνει στο πρόγραμμα αν προκύψει panic σε μια ξεχωριστή goroutine;
Πώς διαχειρίζεται αυτό στον κώδικα;
type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr contiene ip:port di una istanza specifica func NewBackend(addr string) *BackendImpl type backentry struct { backend Backend inflight int64 } type Balancer struct { backends []*backentry mu *sync.Mutex } var _ Backend = &Balancer{} // addrs contiene gli indirizzi di tutte le istanze bilanciate func NewBalancer(addrs []string) *Balancer { data := make([]*backentry,len(addrs)) for i,addr := range addrs{ data[i] = &backentry{ backend: NewBackend(addr), inflight: 0, } } return &Balancer{backends:data} } func(b *Balancer)Invoke(ctx context.Context, req Request) (Response, error){ b.mu.Lock() entry := b.best() atomic.AddInt64(&entry.inflight,1) b.mu.Unlock() defer atomic.AddInt64(&entry.inflight,-1) return entry.backend.Invoke(ctx,req) } func(b *Balancer) best() *backentry{ var best *backentry for _,entry := b.backends{ if best == nil || atomic.LoadInt64(&entry.inflight) < atomic.LoadInt64(&best.inflight){ best = entry } } return best }
Πώς διαφέρει το sync.Mutex από το sync.RWMutex;
Περιγράψτε τη διαδικασία ανάπτυξης και ανάπτυξης μιας νέας υπηρεσίας: από τη συλλογή απαιτήσεων έως την ανάπτυξη σε περιβάλλοντα ανάπτυξης και δοκιμών.
Πώς πραγματοποιήθηκε η ανάπτυξη των υπηρεσιών;
Υλοποιήστε τη μέθοδο Queue
Πώς ακριβώς ήταν δομημένη η διαδικασία φόρτωσης ή κατασκευής αυτών των δεδομένων;