Golang
Какие особенности взаимодействия консюмеров и продюсеров с партициями в Kafka?
Есть большой файл с миллионом URL-адресов, нужно скачать их быстро, не перегрузив систему и не получив бан от внешнего сервера. Как организовать код?
Что нравится и не нравится на текущем месте работы?
В резюме написано, что ускорил скорость обработки в 4–5 раз на прошлом месте работы — расскажи подробнее.
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 в слайсе 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) } }
Почему выбрал Go для себя?
Есть ли моменты, которые могут демотивировать в работе, помимо уже озвученного?
Расскажи про свою текущую работу: что там делал и какая зона ответственности?
Какие недостатки у индексов? Может ли индекс замедлить чтение?
Сервис начал отвечать 3 секунды вместо 100 миллисекунд. Какие будут твои действия?
Расскажи про команду: 4 Go-разработчика, тестировщики, аналитики, инженеры, тимлид?
Что такое горутина? Чем отличается от системного треда? Расскажи про планировщик Go (GMP).
Какие виды Mutex есть в Go?
Помнишь профиль нагрузки — сколько на чтение, сколько на запись?
Нагрузочное тестирование — как проводили, какие метрики смотрели?
Есть ли ООП в Go и в каком виде?
Были ли проблемы с производительностью или что-то нужно было оптимизировать?
Что такое primary key?
Есть ли у вас финалы или офферы от других компаний?
Бывали ли ситуации, когда аналитик хочет за месяц, а технически нужно два? Как решали?