Golang
Ի՞նչ փաթեթներ գիտես Go-ում ցանցով աշխատելու համար։
Ինդեքսի ընտրողականությունը ինչ է?
Ինչպե՞ս ես վերաբերվում հերթապահություններին: Ունեցե՞լ ես նման փորձ:
Ինչպե՞ս երաշխավորվեց հաշվարկների կրկնվողությունը — որ բոլոր աշխատակիցների խմբին նույն պայմանները կիրառվեին։
Ի՞նչ տվյալների բազաների հետ եք աշխատել և ինչ SQL հարցումներ եք կարող գրել։
Ինչ անել, որպեսզի PostgreSQL տվյալները չկորչեն կոնտեյների վերագործարկումից հետո?
Պատմիր ինձ Kafka-ի առանձնահատկությունների մասին — ինչպես է կառուցված?
Երբ են հաշվարկվում հետաձգված ֆունկցիաների արգումենտները՝ սահմանման պահին թե կանչի ժամանակ?
Կարող ենք գրել կոդ առանց ինտերֆեյսների՞
Ինչու՞ հիմնականում օգտագործվում են տրիգերները՝ Legacy համակարգերի համար։
Եթե ընթերցողը փակել է ալիքը, իսկ գրողը դեռ գրում է — ինչ կպատահի? Ինչպե՞ս խուսափել панիկից։
Ի՞նչ է DNS-ը և ինչպես է աշխատում:
Կարող եմ գրել փակ ալիքում Go-ում?
Ինչպե՞ս խուսափել մշտական բլոկավորումից դատարկ ալիքից ընթերցելիս: Ինչ է select-ը և ինչ են նրա ձևանմուշները:
Ինչու եք որոշել ուշադրություն դարձնել շուկային: Ինչ եք հիմա փնտրում ձեզ համար: Ինչին եք ուշադրություն դարձնում նոր ընկերություն ընտրելիս:
Կա՞ն մեխանիզմներ, որոնք օգնում են խուսափել բարդություններից ծրագրավորման մեջ։
Ի՞նչ է տողը Go-ում։
Կապի ուղիղ կոդավորում: սեմաֆոր — ինչպես է աշխատում և իրագործումը բուֆերային ալիքային հիման վրա։
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("Բալանսերների քանակը 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 պարունակում են բոլոր բալանսավորված օրինակների հասցեները func NewBalancer(addrs []string) *Balancer { // TODO backends := make([]*BackendImplF, len(addrs)) for _, addr := range addrs { implF := BackendImplF{ Backend: NewBackend(addr), } backends = append(backends, &implF) } }
Ինչու է մեզ անհրաժեշտ WaitGroup այս առաջադրանքում?