Sobes.tech

Με ποιες βιβλιοθήκες γράφονται μετρήσεις σε Go;

218

Για ποιο λόγο γράφτηκε αυτός ο κώδικας; Ποιο επιχειρηματικό και τεχνικό πρόβλημα επιλύει;

210

Ποιες μετρήσεις; Με ποια εργαλεία θα καταγράψουμε αυτές τις μετρήσεις;

190

// Άσκηση 4 // Σε μια "τυπική" υπηρεσία CRUD, σε κάποιο σημείο, ορισμένες μέθοδοι άρχισαν να λειτουργούν αργά και η υπηρεσία άρχισε να timeout. // Η υπηρεσία αποτελείται από: // * Application Load Balancer (L7) - λήψη εισερχόμενων αιτημάτων και τερματισμός TLS // * Backend (rest, java/kotlin ή golang) - επεξεργασία εισερχόμενων αιτημάτων και επιχειρηματική λογική // * Βάση δεδομένων (postgres) - αποθήκευση και επεξεργασία SQL ερωτημάτων // Πώς πρέπει να ενεργήσετε σωστά για να κατανοήσετε την αιτία των προβλημάτων και να αναπτύξετε λύσεις για τη βελτίωση της κατάστασης;

178

// Ερώτηση 3 // Περιγράψτε ποια εργασία επιλύει αυτός ο κώδικας // Ποια προβλήματα υπάρχουν σε αυτήν την λύση; // Πώς θα ξαναγράφατε αυτόν τον κώδικα;

167

Τι να κάνετε με τη βάση δεδομένων και τον load balancer σε περίπτωση προβλημάτων απόδοσης;

159

Πώς να αποκτήσετε πρόσβαση στον profiler pprof στον παραγωγικό διακομιστή;

155

Τι έκανες στη δουλειά;

154

// Άσκηση 3 // Περιγράψτε ποια εργασία επιλύει αυτός ο κώδικας // Ποια προβλήματα υπάρχουν σε αυτήν την λύση; // Πώς θα ξαναγράφατε αυτόν τον κώδικα; var c int type Trace struct { // Ορισμένα πεδία εδώ } type Sender interface { Send(Trace) } func Do(sender Sender, tr Trace) { c++ if c == 100 { sender.Send(tr) c = 0 } }

145

Σε ποια indices βασίστηκες στη δουλειά; Τι εφαρμόζατε στην πράξη; Στο Wildberries;

140

Πώς λειτουργεί η διαμέριση στο PostgreSQL στον πυρήνα;

138

Τι θα κάνετε όταν οι προτεραιότητες στην ομάδα σας αλλάζουν κάθε μέρα και εμφανίζονται νέα επείγουσα καθήκοντα;

136

Ποια ευρετήρια χρησιμοποιείτε στο PostgreSQL;

133

Ποια προβλήματα υπάρχουν στον κώδικα με το παγκόσμιο μετρητή; Πώς να το διορθώσετε;

131

Πώς να κάνετε το Increaser καθολικό — όχι συνδεδεμένο με τον αριθμό 100;

129

Σε ποιο γράφημα είδατε το πρόβλημα κατά τη χρήση του pprof;

128

// Ερώτηση 3 // Περιγράψτε ποια εργασία επιλύει αυτός ο κώδικας // Ποια προβλήματα υπάρχουν σε αυτήν την λύση; // Πώς θα ξαναγράφατε αυτόν τον κώδικα; var c int var mu sync.RWMutex type Trace struct { // Ορισμένα πεδία εδώ } type Sender interface { Send(Trace) } func Do(sender Sender, tr Trace) { mu.Lock() defer mu.Unlock() c++ if c == 100 { go func() { sender.Send(tr) }() c = 0 } }

121

func normalize2(str []rune) []rune { result := str[:0] for val := range str { if val != ' ' { result = append(re) } } l, r := 0, 0 isSpace := false for i := 0, i < len(str); i++ { val := string(str[i]) if val == " " { if isSpace { continue } else { str[r] = val r++ isSpace = true } } else { str[r] = val r++ isSpace = false } } return str[:r] }

116

Μπορεί το Increaser να γίνει υλοποίηση του Sender; Ποια είναι η λογική διαφορά μεταξύ Increaser και Sender;

112

Μπορείς να εξηγήσεις πώς σχεδίασες και υλοποίησες το API REST και gRPC για τις εσωτερικές και εξωτερικές υπηρεσίες της πλατφόρμας;

111
/2