Golang
Какие HTTP методы существуют?
Расскажите о моделях параллелизма — что такое shared memory и message passing, мьютексы и атомики
Database per service vs shared database — какой подход использовали?
Чем data race отличается от race condition?
Как можно оптимизировать поиск в базе данных? Что такое индексы и какая у них сложность?
Что такое Data Race и Race Condition? В чём разница?
Есть ли вопросы по этапам интервью?
Если я сделаю 6 реплик сервиса при 3 партициях — это поможет ускорить чтение?
Расскажите о компании, в которой вы сейчас работаете, и о вашей роли там.
Используете ли TDD? Как покрываете код тестами?
Как мы можем сделать принты в библиотеке более контролируемыми? То есть, как потребитель может управлять логированием?
Почему за час работы не удалось решить задачу? Что пошло не так?
Какие операции существуют над слайсами в Go?
Что было самым сложным и самым интересным в переезде с монолита на микросервисы?
Ты решил написать WaitGroup потому что у тебя канал появился или горутины для чего-то решил написать?
Что такое слайс в Go? Чем отличается от массива? Что происходит при передаче слайса в функцию и изменении его элементов?
Это была твоя личная задача или командная работа?
Расскажи про структуру команды — кто в ней есть?
Расскажи о своём проекте и достижениях за три года.
/ * Есть приложение с микросервисной архитектурой. Микросервис можно абстрагировать с помощью интерфейса Backend. Для доступа к одному экземпляру микросервиса можно использовать тип BackendImpl, который уже реализован. Для каждого микросервиса есть несколько десятков запущенных экземпляров, каждый из которых доступен по своему адресу addr. Однако отдельные экземпляры микросервиса ненадежны: они могут падать, быть недоступными либо перегруженными. Поэтому вам нужно реализовать тип Balancer, который также реализует интерфейс Backend и осуществляет client-side балансировку нагрузки между экземплярами микросервиса, выбирая каждый раз **наименее нагруженный** экземпляр. * / type Request interface{} 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 Balancer struct { // TODO } var _ Backend = &Balancer{} // addrs содержат адреса всех балансируемых экземпляров func NewBalancer(addrs []string) *Balancer { // TODO }