Защо искаш да смениш и разглеждаш други компании?
Golang
// код за функцията best() // с обработка на грешки при липса на наличен бекенд
Защо решихте да се свържете с 2GIS? Какво ви привлече в компанията или конкретната вакансия?
Работили ли сте някога с конкурентен достъп до данни в база данни? Какви механизми като транзакции и заключвания сте използвали? Има ли начини да решите този проблем без да включвате базата данни?
// код за функцията best() // с обработка на грешки при липса на наличен бекенд
Как се обработва това в кода?
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 }
// код за функцията best() // с обработка на грешки при липса на наличен бекенд
Има ли обектно-ориентирано програмиране в Go? Ако да, как е реализирано; ако не, защо?
Какво е най-важното за вас в работата?
Какво връща четенето от затворен канал?
Как организирахте мащабирането и с какви архитектури на микросервизи сте работили?
Кога възниква теч на goroutine?
Как да реализирате метода Status, за да получите състоянието на задачата по ID?
Какво се случва с програмата, ако възникне паника в отделна goroutine?
Как се различава sync.Mutex от sync.RWMutex?
Опишете процеса си на разработка и внедряване на нова услуга: от събиране на изисквания до внедряване в средите за разработка и тест.
Как се извърши разгръщането на услугите?
Реализирайте метода Queue
Как точно беше структурираният процес на зареждане или изграждане на тези данни?