Қазіргі уақытта қандай жалақы диапазонын қарастырып жатырсың?
Golang
Реляциялық және реляциялық емес деректер базасы дегеніміз не және олар бір-бірінен неге айырмашылықты?
PostgreSQL-мен қаншалықты жұмыс істедіңіз: тек сұраулар жазу ғана ма, әлде деректер базасын баптау, бөлу, шардтау, кластерлерді орналастыру да ма?
Қайсысы нәтижелік каналды оқиды және ол қайда нәтижені жазады, сонда Status әдісі оған қол жеткізе алады?
Go-да қанша жазасыз?
PostgreSQL жалпы қалай құрылымдалған?
Жабық каналға жазғанда не болады?
Go-да бос интерфейс қалай көрінеді және оны функция аргументі ретінде берсеңіз не болады?
Жалақыдан күтулеріңіз қандай: сынақ мерзімінде ыңғайлы минимум?
// ең жақсы() функциясы үшін код үзіндісі // ешқандай артқы жүйе жоқ болған жағдайда қате өңдеу
PostgreSQL-да қандай индекстер қолданылады?
Тасаввур қилинг, маълумотлар S3 ёки ташқи сақлашда сақланган, аммо уларни маълумотлар базасига ёзиш мумкин бўлмади. Нима нотўғри бўлиши мумкин ва нима қилардингиз?
Queue әдісін жүзеге асырыңыз
Неліктен ауысқың келеді және басқа компанияларды қарастырып жатырсың?
// ең жақсы() функциясы үшін код үзіндісі // ешқандай артқы жүйе жоқ болған жағдайда қате өңдеу
Неге 2GIS-пен байланыс орнатуға шешім қабылдадыңыз? Компания немесе нақты вакансия сізді неге қызықтырды?
Деректер базасында бір уақытта деректерге қатынау бойынша жұмыс істедіңіз бе? Қандай механизмдерді қолдандыңыз, мысалы, транзакциялар мен блоктар? Бұл мәселені деректер базасын қатыстырмай шешудің жолдары бар ма?
// ең жақсы() функциясы үшін код үзіндісі // ешқандай артқы жүйе жоқ болған жағдайда қате өңдеу
Бұл кодта қалай өңделеді?
type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr содержит ip:port конкретной экземпляра func NewBackend(addr string) *BackendImpl type backentry struct { backend Backend inflight int64 } type Balancer struct { backends []*backentry mu *sync.Mutex } var _ Backend = &Balancer{} // addrs содержат адреса всех балансируемых экземпляров 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 }