Golang
Gibt es objektorientierte Programmierung in Go? Wenn ja, wie wird sie implementiert; wenn nein, warum nicht?
Was ist dir bei der Arbeit am wichtigsten?
Was gibt das Lesen aus einem geschlossenen Kanal zurück?
Wie hast du die Skalierung organisiert und mit welchen Microservice-Architekturen hast du gearbeitet?
Wann tritt ein Goroutine-Leak auf?
Wie implementiert man die Methode Status, um den Status der Aufgabe anhand der ID zu erhalten?
Wie haben Sie die Anforderungen für den Einsatz eines Dienstes in Kubernetes an das DevOps-Team kommuniziert: in welchem Format haben Sie den Betrieb des Dienstes dokumentiert und wie wurde die Interaktion aufgebaut?
Was passiert mit dem Programm, wenn in einer separaten Goroutine ein Panic auftritt?
Wie wird das im Code gehandhabt?
Gibt es Befehle oder Anweisungen unter den beschriebenen Teams oder Bereichen, die besonders bei dir Anklang finden oder die du lieber nicht machen würdest?
Wie sah eine langsame Berichtabfrage aus und was war der gesamte Weg vom Benutzerantrag bis zum Erhalt des Ergebnisses?
type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr enthält ip:port einer spezifischen Instanz func NewBackend(addr string) *BackendImpl type backentry struct { backend Backend inflight int64 } type Balancer struct { backends []*backentry mu *sync.Mutex } var _ Backend = &Balancer{} // addrs enthalten die Adressen aller balancierbaren Instanzen func NewBalancer(addrs []string) *Balancer { data := make([]*backentry,len(addrs)) for i,addr := range addrs{ data[i] = &backentry{ backend: NewBackend(addr), inflight: 0, } } return &Balancer{backends:data} } func(b *Balancer)Invoke(ctx context.Context, req Request) (Response, error){ b.mu.Lock() entry := b.best() atomic.AddInt64(&entry.inflight,1) b.mu.Unlock() defer atomic.AddInt64(&entry.inflight,-1) return entry.backend.Invoke(ctx,req) } func(b *Balancer) best() *backentry{ var best *backentry for _,entry := b.backends{ if best == nil || atomic.LoadInt64(&entry.inflight) < atomic.LoadInt64(&best.inflight){ best = entry } } return best }
Worin besteht der Unterschied zwischen sync.Mutex und sync.RWMutex?
Beschreiben Sie Ihren Prozess der Entwicklung und Bereitstellung eines neuen Dienstes: vom Anforderungsmanagement bis zum Einsatz in Entwicklungs- und Testumgebungen.
Wie wurde die Bereitstellung der Dienste durchgeführt?
Implementieren Sie die Methode Queue
Wie genau war der Prozess des Ladens oder Erstellens dieser Daten strukturiert?
Was macht defer?
Wozu dient ein Puffer für einen Kanal?
Was ist das N+1-Problem in Datenbanken?