Golang
Имаш ли опит с gRPC и GraphQL? Разкажи за тях.
тип Response интерфейс {} tип Backend интерфейс { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr съдържа ip:port на конкретен екземпляр func NewBackend(addr string) *BackendImpl tип Balancer структура { // TODO backends []*BackendImpl index int mu sync.Mutex } var _ Backend = &Balancer{} func (b *Balancer) Invoke(ctx context.Context, req Request) (Response, error) { ако len(b.backends) == 0 { return nil, fmt.Errorf("Броят на бекендите в слайса е 0") } b.mu.Lock() index := b.index ако b.index + 1 == len(b.backends) { b.index = 0 index = 0 } b.mu.Unlock() resp, err := b.backends[index].Invoke(ctx, req) return resp, err } // addrs съдържа адресите на всички балансирани екземпляри func NewBalancer(addrs []string) *Balancer { // TODO backends := make([]*BackendImpl, len(addrs))
Как да споделяме памет между горутините? В кои случаи е по-добре да използваме Atomic, а в кои Mutex/RWMutex/SyncMap?
Кои задачи ти харесват повече и кои по-малко?
Можеш ли да дадеш топ 3 неща, на които трябва да обърнеш внимание при преглед на код?
Как работи map в Go?
Как да проверите натоварването на CPU и памет в Linux?
Относно спецификата на стартапа: не винаги има ясна постановка на задачите, понякога са неясни, необходима е инициативност и автономност, натоварването може да бъде неравномерно. Как се чувствате по този въпрос?
Назови четири протокола: HTTP, gRPC, WebDAV, ACSA — кой е излишният?
Задача за мащабиране: услугата B изпитва нарастващо натоварване от услугата A. Какво може да се направи?
Какво е подравняване на данните в Go?
Какви са вашите очаквания от ново работно място?
Напишете задача на езика Go — практичен раздел (проблеми от живота на разработчика, без алгоритми): доработете или поправете услуга. Продължителност — 1,5 часа.
Какво е TLS и защо е необходим сертификат?
Защо ни е необходим WaitGroup в тази задача?
Как валидирахте съобщенията от Kafka? Ако съобщението не преминаваше валидирането, какво се случваше с него?
Каква е разликата между L4 и L7 балансировчика на натоварването?
Кои библиотеки и рамки бяха използвани в Go услугата?
Каква е разликата между Kafka и RabbitMQ?
Писали ли сте нещо с CTE (Общ израз на таблица, WITH)?