Golang
Jakou funkci vytvořil, na kterou jsi hrdý? Povíš mi o posledním zajímavém úkolu.
Pověz mi o nejzapamatovatelnější chybě v produkci: co to bylo, jak jsi to opravil a jaké závěry jsi z toho vyvodil?
Pověz mi o své poslední pracovní zkušenosti
Jak funguje garbage collector v Go? Popište fáze a algoritmus.
Napsal jsi spoustu technických úkolů. Prosím, řekni mi, jaké produktové úkoly pomohly vyřešit.
Jaké metriky? Jakými nástroji budeme tyto metriky zapisovat?
Celkový dojem z pohovoru, úroveň kandidáta, doporučení
Co jsou to sondy (probes) v Kubernetes, jak je nakonfigurovat a jaké existují typy?
Nyní chceme jít na HeadHunter a hledat kandidáty podle filtrů — jak to architektonicky navrhnout?
Co ukáže kód se slices a jejich předáním do funkce? Jak funguje předání slice do funkce?
Máte zkušenosti s účastí na technických screeningách nebo pohovorech?
Úkol: existuje zpětné volání, které se spouští 100 000krát za sekundu a poskytuje binární data. Je třeba je doručit na centrální server. Jaké jsou pasti a osvědčené postupy?
Implementujte funkci, která přijímá []any a delta int. Je třeba zvýšit o delta pouze první výskyty unikátních čísel (int). Ostatní typy a opakující se čísla ponechte beze změny. Funkce by měla vrátit aktualizovaný seznam a 2 čísla: updated – kolik unikátních čísel bylo změněno, duplicates – kolik číselných prvků se ukázalo být duplicitami func IncrementUniqueIntsInMixed(xs []any, delta int) ([]any, int, int) { // váš kód } // Příklad: xs := []any{1, "a", 5, "b", 1, 0, 5} u, d, s := IncrementUniqueIntsInMixed(xs, 3) // xs == []any{4, "a", 8, "b", 1, 3, 5} // u == 3 // unikátní čísla: 1, 5, 0 // d == 2 // duplicitní čísla: druhé 1, druhé 5
Co je to gorutina? V čem spočívá její lehkost?
// Existuje rozhraní Backend s metodou Execute // Je třeba napsat vyvažovač zátěže // Vyvažovač zátěže splňuje rozhraní Backend // Úkolem vyvažovače zátěže je přijmout požadavek a delegovat jej na jeden z dostupných backendů // Vyvažovač zátěže obsahuje kolekci backendů // Při provádění požadavku vyvažovač zátěže vybírá jeden z backendů podle určitého algoritmu // // Algoritmus Least Connection, kontrola stavu a automatické obnovení, thread safety pomocí atomic, přenos kontextu pro zrušení, práh chyb pro odpojení backendu // Request představuje vstupní požadavek pro Backend. type Request struct { // Payload – libovolná data požadavku. Payload []byte } // Response představuje odpověď od Backend. type Response struct { // Payload – libovolná data odpovědi. Payload []byte } // Backend – rozhraní, které definuje metodu pro provedení požadavku type Backend interface { Execute(ctx context.Context, req Request) (Response, error) } type Balancer struct { backends []Backend } func NewBalancer(backends []Backend) *Balancer { return &Balancer{backends: backends} } func (b *Balancer) Execute(ctx context.Context, req Request) (Response, error) { // todo: implementujte logiku vyvažovače return Response{}, nil } type TestBackend struct { }
Jak jsi spočítal, že p95 klesl o 16 %?
Je časový limit stejný pro všechny? Jak bude tento časový limit vypočítán?
// Daný řetězec s. Je třeba najít délku nejdelšího podřetězce bez opakujících se znaků. // Příklady: // s = "abcabcbb", odpověď: 3 ("abc") // s = "cccccccc", odpověď: 1 ("c") // s = "pwwkew", odpověď: 3 ("wke") // s = "", odpověď: 0 // Řetězec s se skládá z anglických písmen, číslic, symbolů a mezer func lengthOfLongestSubstring(s string) int { return 0 }
Co se stane, když zadáš [web] do prohlížeče? Popiš co nejpodrobněji, jaké protokoly se používají
Použili jste přístupy pro distribuované transakce?