Cu ce biblioteci se scriu metricile în Go?
Golang
Ce metrici? Cu ce instrumente vom scrie aceste metrici?
Pentru ce este scris acest cod? Ce problemă tehnică de afaceri rezolvă?
// Sarcina 4 // Într-un serviciu CRUD "tipic", la un moment dat, unele metode au început să funcționeze lent și serviciul a început să dea timeout. // Serviciul constă din: // * Load Balancer de aplicație (L7) - primirea cererilor intrate și terminarea TLS // * Backend (rest, java/kotlin sau golang) - procesarea cererilor intrate și logica de afaceri // * Bază de date (postgres) - stocarea și procesarea interogărilor SQL // Cum să acționezi corect pentru a înțelege cauza problemelor și a dezvolta soluții pentru a îmbunătăți situația?
// Problema 3 // Descrieți ce problemă rezolvă acest cod // Ce probleme există în această soluție? // Cum ați rescrie acest cod?
Cu ce te-ai ocupat la serviciu?
Ce să faci cu baza de date și load balancer-ul în cazul problemelor de performanță?
Cum se accesează profilerul pprof pe serverul de producție?
Cum funcționează partiționarea în PostgreSQL la nivel de bază?
// Problema 3 // Descrieți ce problemă rezolvă acest cod // Ce probleme există în această soluție? // Cum ați rescrie acest cod? var c int type Trace struct { // Câmpuri aici } type Sender interface { Send(Trace) } func Do(sender Sender, tr Trace) { c++ if c == 100 { sender.Send(tr) c = 0 } }
Ce indici ai folosit la muncă? Ce ai aplicat în practică? La Wildberries?
Ce vei face când prioritățile din echipa ta se schimbă în fiecare zi și apar sarcini urgente noi?
Ce indecși folosești în PostgreSQL?
Cum să faci Increaser universal — să nu fie legat de numărul 100?
Pe ce grafic ați văzut problema la utilizarea pprof?
Ce probleme există în codul cu contorul global? Cum se remediază?
// Problema 3 // Descrieți ce sarcină rezolvă acest cod // Ce probleme există în această soluție? // Cum ați rescrie acest cod? var c int var mu sync.RWMutex type Trace struct { // Câmpuri aici } 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] }
Poți să povestești cum ai proiectat și implementat API-urile REST și gRPC pentru serviciile interne și externe ale platformei?
Poate Increaser să devină o implementare a Sender? În ce constă diferența logică dintre Increaser și Sender?