Golang
// Our method for obtaining product information, this method is called very often // are there problems in this code and how to fix them? postgress database func (r *ProductRepository) GetProductDetails(ctx context.Context, productIDs []int) []Product { products := make([]Product, 0, len(productIDs)) for _, id := range productIDs { go func(id int) { var p Product query := "SELECT name, price, description FROM products WHERE id = $1" err := r.db.QueryRowContext(ctx, query, id).Scan(&p.Name, &p.Price, &p.Desc) if err != nil { r.logger.Error("error get product", "err", err) return } products = append(products, p) }(id) } return products }
Millal arvutatakse edasi lükatud funktsioonide argumendid — määramise ajal või väljakutse ajal?
Kas on eeliseid, kui liideseid eraldatakse eraldi paketti?
Räägi mulle gorutinidest. Oletame, et meil on rakendus, kus töötab goroutine, ja midagi läks valesti — kuidas sundida goroutine lõpetama?
Miks sa valisid Go enda jaoks?
Kas on Go-s slicesid niiskused mitme lõime jaoks? Kas on võimalik kirjutada erinevatesse slice indeksitesse paralleelselt ilma mutexita?
Kas teil on varem olnud kokkupuude ettevõtte toodetega? Kas keegi tuttavatest töötab seal?
Kuidas töötab kaardimootor uutes Go versioonides, mis on muutunud?
Kas saab kirjutada suletud kanalisse Go-s?
Miks otsustasid tähelepanu pöörata turule? Mida praegu endale otsid? Millele pöörad tähelepanu, valides uut ettevõtet?
Kas on mehhanisme, mis aitavad vältida kokkupõrkeid programmeerimisel?
Millist tüüpi multitasking kasutab Go planeerija? Millised on kaks multitasking tüüpi?
Kirjeldage olukorda, kus teil tuli kasutada EXPLAIN ANALYZE.
Elukirjelduses on kirjas Kafka sõnumite töötlemisest käsitsi offsetide juhtimisega. Mida käsitsi tähendab?
Mis on rida Go-s?
Otseülekande kodeerimine: semafor — kuidas see töötab ja selle rakendamine pufferkanali põhjal.
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("Backends in slice count 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 contain all the addresses of the balanced instances func NewBalancer(addrs []string) *Balancer { // TODO backends := make([]*BackendImplF, len(addrs)) for _, addr := range addrs { implF := BackendImplF{ Backend: NewBackend(addr), } backends = append(backends, &implF) } }
Millist metodoloogiat kasutate: Scrum, Kanban või segu?
ScyllaDB kasutamine enne tootjat on antipattern. Kuidas korraldada duplikaatide eemaldamine õigesti?
Mis on liides Go-s? Kuidas töötab duck typing? Kas saab kontrollida liidese rakendamist kompileerimise ajal?