Golang
Na jakém grafu jste viděli problém při používání pprof?
Na čem přesně jste pracoval na svém současném místě práce? Jaká je vaše oblast odpovědnosti?
Co jsou to časové limity a používáš je při práci?
Pověz mi, jaký je tvůj současný projekt, za kterou část funkce odpovídáš?
Kdy je lepší použít Mutex a kdy Channel?
Jak se v Go nazývá přístup, kdy vytvoříte kanál, zavřete ho a pak z něj čtete? Jaká je výhoda uzavření kanálu oproti jeho odeslání s hodnotou?
Co je to gorutina a jak funguje?
Jaké složení týmu bylo? Bylo to monofunkční nebo vícefukční?
Na kolika hostech/instancích běžel nejvíce zatížený služba?
Jaké jsou vlastnosti chování gorutiny, když volá synchronní systémové funkce?
Jak jsou testy v týmu uspořádány — kdo co píše, jaké pokrytí, je E2E?
Živý kód: přidejte časový limit do funkce — pokud překročí dobu 1 sekundy, vraťte chybu. Použití select, time.After, context.
Jak implementovat Dead Letter Queue (DLQ) v Kafka?
Co by pro tebe bylo zajímavé v nové práci?
Co je TLS a k čemu je certifikát?
Ještě stále pracujete ve [společnosti]? Kdy plánujete odejít a proč?
Jaké stavy má gorutina?
Čím se liší vyvažovač zátěže L4 od L7?
Proč jste používali současně Kafka a gRPC? Jaké scénáře šly přes Kafka a jaké přes gRPC?
/* Existuje aplikace s architekturou mikroservisů. Mikroservis lze abstraktně reprezentovat pomocí rozhraní Backend. Pro přístup k instanci mikroservisu můžete použít typ BackendImpl, který je již implementován. Každý mikroservis má několik desítek běžících instancí, z nichž každá je dostupná na své adrese addr. Nicméně jednotlivé instance mikroservisu nejsou spolehlivé: mohou selhat, být nedostupné nebo přetížené. Proto musíte implementovat typ Balancer, který také implementuje rozhraní Backend a provádí vyvažování zátěže na straně klienta mezi instancemi mikroservisu, přičemž vybírá pokaždé **nejméně zatíženou** instanci. */ type Request interface{} type Response interface{} type Backend interface { Invoke(ctx context.Context, req Request) (Response, error) } var _ Backend = &BackendImpl{} // addr obsahuje ip:port konkrétní instance func NewBackend(addr string) *BackendImpl type Balancer struct { // TODO } var _ Backend = &Balancer{} // addrs obsahují adresy všech vyvažovaných instancí func NewBalancer(addrs []string) *Balancer { // TODO }