Použili jste vzory Inbox a Outbox?
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
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]"]
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) }
Kde byly logy uloženy?
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í!
Jak zajistili idempotenci?
// 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)) }
Co je to ukazatel a co se stane pokud je argument funkce ukazatel?
Vyplňte řez s prvky bez mutexu, aby obsahoval všech 1000 prvků.
Pověz o zámcích v Postgresu.
Jaký je rozdíl mezi DELETE a TRUNCATE?
Slyšel jsi o distribuovaném sledování?
Jak jste používali Redis?
Pověz mi o posledním projektu.