Sobes.tech

Golang

Was wissen Sie über das Multitrack-Programm von Yandex?

187

Haben Sie Erfahrung in der Unterstützung oder Entwicklung verteilter Systeme?

185

Haben Sie öffentliche Clouds genutzt? Wenn ja, mit welchen Anbietern und Diensten?

185

Wie arbeiten Sie an der Architektur — gibt es einen Architekten im Team, Plattform, Ausschuss?

184

Wie schnell wird eine lineare Durchsuchung aller Backends bei hoher RPS (z.B. 30.000 RPS und 10 Backends) sein?

183

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) } }

183

Wie überprüft man schnell, ob im Fenster alle Zeichen vorhanden sind (Vergleich zweier Karten)?

182

Welches war das größte Datenvolumen, mit dem Sie in Datenbanken gearbeitet haben?

180

Erzähle mir mehr über deine erste Stelle von 2019 bis 2021.

180

Wie aktiv sind die Suchanfragen? Gibt es vielleicht schon Angebote?

180

Auf wie vielen Hosts lief der Dienst und wie viele Instanzen wurden gestartet?

180

/** :-))) :-(( "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) }

180

Gibt es einfachere und schnellere Möglichkeiten, die Last auszugleichen, anstatt den am wenigsten ausgelasteten Backend zu wählen?

179

Für API Gateway einen Load Balancer, für WebSocket einen anderen — insgesamt zwei LB im System?

179

Wie viele Personen waren an dem größten Projekt beteiligt, an dem du gearbeitet hast? Weniger als zehn, Dutzende, Hunderte?

178

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?

177

Finden Sie Syntaxfehler im korrigierten Code

177

Warum gehen die Nachrichten des Message Service direkt über gRPC und nicht über Kafka?

176

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 }

176

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

175
/11