Sobes.tech

Golang

Úkol: «Ping-pong s timeoutem» Napište funkci pingPong, která: - Spustí dvě gorutiny: jedna generuje zprávy "ping", druhá — "pong". - Gorutiny si mají vyměňovat zprávy přes společný kanál striktně po sobě. - Výměna pokračuje 3 sekundy, poté by měl program skončit (pohotovostní vypnutí). - Použijte kontext pro zrušení s timeoutem. - Vypisujte každou zprávu na obrazovku spolu s časem (v milisekundách od začátku). Příklad očekávaného výstupu: 0ms: ping

216

Jednoduchý úkol na live coding (základní konkurenceschopnost) Podmínka: Napište funkci fetchAll(urls []string) map[string]string, která pro každý URL provádí konkurenčně HTTP GET požadavek a vrací mapu, kde klíčem je URL a hodnotou je tělo odpovědi (řetězec). Pokud požadavek selže (chyba, není 200), bude hodnotou prázdný řetězec. Omezení: - Není možné používat externí knihovny (pouze standardní). - Není možné měnit podpis. - Program nesmí spadnout při panice v http.Get. Příklad vstupu: ["[link]" "[link]" "[link]"]

201

hlavní balíček import ( "fmt" ) func a(p *string) { s2 := "string2" *p = s2 } func main() { str1 := "string1" p := &str1 fmt.Println(*p) a(&p) fmt.Println(*p) }

185

Co říct interviewérovi (pokud se zeptají) "Použil bych worker pool s pevně stanoveným počtem workerů, kanál pro úkoly a sync.WaitGroup. Workeři budou provádět požadavky, a timeout a zrušení budou řízeny přes kontext. Výsledky shromáždím v bufferu, chráněném mutexem (nebo přes samostatný kanál)." Teď je řada na tobě Napiš kód v tomto chatu. Já ho zkontroluji a dám zpětnou vazbu. Pokud nevíš, kde začít, požádej o nápovědu. Hodně štěstí!

177

// všechny prvky slice musí být unikátní + celkově 1000 prvků // program by se neměl zbytečně zaseknout kvůli time.sleep func main() { checkIncrement := map[int]int32{} var data []int for i := 0; i < 1000; i++ { go func() { data = append(data, i) if _, found := checkIncrement[i]; found { fmt.Println(i) panic("duplicitní inkrement") } checkIncrement[i] = 1 }() } time.Sleep(2 * time.Second) fmt.Println(len(data)) }

159

Co je to ukazatel a co se stane pokud je argument funkce ukazatel?

157

Vyplňte řez s prvky bez mutexu, aby obsahoval všech 1000 prvků.

148