Avec quelles bibliothèques écrit-on des métriques en Go?
Golang
À quoi sert ce code ? Quel problème métier et technique résout-il ?
Quelles sont les métriques ? Avec quels outils allons-nous enregistrer ces métriques ?
// Tâche 4 // Dans un service CRUD "typique", à un moment donné, certaines méthodes ont commencé à fonctionner lentement et le service a commencé à expirer. // Le service se compose de : // * Load Balancer d'Application (L7) - réception des requêtes entrantes et terminaison TLS // * Backend (rest, java/kotlin ou golang) - traitement des requêtes et logique métier // * Base de données (postgres) - stockage et traitement des requêtes SQL // Comment agir correctement pour comprendre la cause des problèmes et élaborer des solutions pour améliorer la situation ?
// Question 3 // Décrire quelle tâche ce code résout // Quels problèmes y a-t-il dans cette solution? // Comment réécririez-vous ce code?
Qu'as-tu fait au travail?
// Tâche 3 // Décrire quelle tâche ce code résout // Quels problèmes y a-t-il dans cette solution? // Comment réécririez-vous ce code? var c int type Trace struct { // Certains champs ici } type Sender interface { Send(Trace) } func Do(sender Sender, tr Trace) { c++ if c == 100 { sender.Send(tr) c = 0 } }
Quels indices avez-vous utilisés au travail ? Qu'avez-vous appliqué en pratique ? Sur Wildberries ?
Que faites-vous lorsque les priorités changent chaque jour dans votre équipe et que de nouvelles tâches urgentes apparaissent?
Comment fonctionne la partition dans PostgreSQL en interne?
Que faire avec la base de données et le load balancer en cas de problèmes de performance?
Quels index utilisez-vous dans PostgreSQL?
Quels problèmes y a-t-il dans le code avec le compteur global ? Comment le corriger ?
Comment accéder au profileur pprof sur le serveur de production?
Sur quel graphique avez-vous vu le problème lors de l'utilisation de pprof?
Comment rendre Increaser universel — pas lié au nombre 100?
// Question 3 // Décrire quelle tâche ce code résout // Quels problèmes y a-t-il dans cette solution? // Comment réécririez-vous ce code? var c int var mu sync.RWMutex type Trace struct { // Certains champs ici } 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 } }
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] }
Increaser peut-il devenir une implémentation de Sender ? En quoi Increaser diffère-t-il logiquement de Sender ?
Pouvez-vous expliquer comment vous avez conçu et implémenté l'API REST et gRPC pour les services internes et externes de la plateforme?