Was wissen Sie über das Multitrack-Programm von Yandex?
Golang
Haben Sie Erfahrung in der Unterstützung oder Entwicklung verteilter Systeme?
Haben Sie öffentliche Clouds genutzt? Wenn ja, mit welchen Anbietern und Diensten?
Wie arbeiten Sie an der Architektur — gibt es einen Architekten im Team, Plattform, Ausschuss?
Wie schnell wird eine lineare Durchsuchung aller Backends bei hoher RPS (z.B. 30.000 RPS und 10 Backends) sein?
type Balancer struct { // TODO backends []*BackendImpl index int mu sync.Mutex N int K time.Duration } var _ Backend = &Balancer{} func (b *Balancer) Invoke(ctx context.Context, req Request) (Response, error) { if len(b.backends) == 0 { return nil, fmt.Errorf("Anzahl der backends im slice 0") } b.mu.Lock() index := b.index for b.backends[index].banned { b.index = (b.index + 1) % len(b.backends) index = b.index } b.index = (b.index + 1) % len(b.backends) b.mu.Unlock() backend := b.backends[index] resp, err := backend.Backend.Invoke(ctx, req) if err != nil && backend.countErrors < b.N { backend.mu.Lock() backend.countErrors += 1 if backend.countErrors == b.N { backend.banned = true go func() { time.Sleep(b.K) backend.mu.Lock() defer backend.mu.Unlock() backend.banned = false backend.countErrors = 0 }() } backend.mu.Unlock() } return resp, err } // addrs enthalten die Adressen aller balancierten Instanzen func NewBalancer(addrs []string) *Balancer { // TODO backends := make([]*BackendImplF, len(addrs)) for _, addr := range addrs { implF := BackendImplF{ Backend: NewBackend(addr), } backends = append(backends, &implF) } }
Wie überprüft man schnell, ob im Fenster alle Zeichen vorhanden sind (Vergleich zweier Karten)?
Welches war das größte Datenvolumen, mit dem Sie in Datenbanken gearbeitet haben?
Erzähle mir mehr über deine erste Stelle von 2019 bis 2021.
Wie aktiv sind die Suchanfragen? Gibt es vielleicht schon Angebote?
Auf wie vielen Hosts lief der Dienst und wie viele Instanzen wurden gestartet?
/** :-))) :-(( "ab :-)" = "ab " "ab :-)))" = "ab " "ab :-)))(" = "ab (" "ab ):-)" = "ab )" ":-)" = "" **/ func deleteP(str string) string { n := len(str) res := make([]byte, 0, n) i := 0 for i < n { if str[i] == ':' && str[i+1] == '-' && (str[i+2] == ')' || str[i+2] == '(') { ch := str[i+2] i += 2 for i < n && str[i] == ch { i++ } } else { res = append(res, str[i]) } } return string(res) }
Gibt es einfachere und schnellere Möglichkeiten, die Last auszugleichen, anstatt den am wenigsten ausgelasteten Backend zu wählen?
Für API Gateway einen Load Balancer, für WebSocket einen anderen — insgesamt zwei LB im System?
Wie viele Personen waren an dem größten Projekt beteiligt, an dem du gearbeitet hast? Weniger als zehn, Dutzende, Hunderte?
Wie man das Problem der Begrenzung paralleler Anfragen in einem verteilten System mit mehreren Instanzen löst, wenn der Benutzer warten soll, anstatt einen Fehler zu erhalten?
Finden Sie Syntaxfehler im korrigierten Code
Warum gehen die Nachrichten des Message Service direkt über gRPC und nicht über Kafka?
func countSubs(s string) int { result := 0 left := 0 hm := make(map[rune]int) for right := 0; right < len(s); right++ { hm[s[right]]++ for hm[s[right]] > 1 { hm[s[left]]-- if hm[s[left]] == 0 { delete(hm, s[left]) } left++ } result += (right - left + 1) } return result }
Implementieren Sie die Methode BulkCreateUsers basierend auf der proto-Datei: Erstellen Sie die Projektstruktur, die Geschäftslogik, das Repository und die SQL-Abfragen unter Beachtung der SOLID-Prinzipien