Használta az Inbox és Outbox mintákat?
Golang
Feladat: «Timeout-tal ellátott ping-pong» Írjon egy pingPong nevű függvényt, amely: - Két goroutine-t indít: az egyik "ping" üzeneteket generál, a másik — "pong". - A goroutine-oknak szigorúan egymás után kell üzeneteket cserélniük egy közös csatornán keresztül. - A csere 3 másodpercig tart, ezután a programnak be kell fejeződnie (zökkenőmentes leállás). - Használjon kontextust az időtúllépéses leállításhoz. - Minden üzenetet írjon ki a képernyőre az indulástól számított idővel együtt (milliszekundumban). Várható kimenet például: 0ms: ping
Egyszerű live coding feladat (alapvető versenyképesség) Feltétel: Írj egy fetchAll(urls []string) map[string]string függvényt, amely minden URL esetén párhuzamosan végrehajt egy HTTP GET kérést, és egy térképet ad vissza, ahol a kulcs az URL, az érték pedig a válasz törzse (string). Ha a kérés sikertelen (hiba, nem 200), az érték egy üres string lesz. Korlátozások: - Nem szabad külső könyvtárakat használni (csak a standardokat). - Nem szabad megváltoztatni a szignatúrát. - A programnak nem szabad összeomlania http.Get pánik esetén. Bemeneti példa: ["[link]" "[link]" "[link]"]
package main import ( "fmt" ) func a(p *string) { s2 := "string2" *p = s2 } func main() { str1 := "string1" p := &str1 fmt.Println(*p) a(&p) fmt.Println(*p) }
Töltsd meg a szeletet mutex nélkül, hogy benne legyen az összes 1000 elem.
Hogyan biztosították az idempotenciát?
Hol tárolták a naplókat?
Mit mondjon az interjünernek (ha megkérdezik) "Egy fix számú munkással rendelkező worker pool-t használnék, egy csatornát a feladatoknak és sync.WaitGroup-ot. A munkások végzik a kéréseket, és a timeoutot és a leállítást a kontextus irányítja. Az eredményeket egy mutex-sel védett pufferben gyűjtöm össze (vagy külön csatornán keresztül)." Most rajtad a sor Írd meg a kódot ebben a chatben. Ellenőrizni fogom és visszajelzést adok. Ha nem tudod, hol kezdj, kérj tippet. Sok szerencsét!
Hallottál már a distributed tracingről?
// a szelet összes elemének egyedinek kell lennie + összesen 1000 elemnek kell lennie // a programnak nem szabad feleslegesen megakadnia a time.sleep miatt 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("duplikált növelés") } checkIncrement[i] = 1 }() } time.Sleep(2 * time.Second) fmt.Println(len(data)) }
Mi az a pointer, és mi történik, ha egy függvény argumentuma pointer?
Beszélj a zárolásokról a Postgresban.
Mi a különbség a DELETE és a TRUNCATE között?
Mesélj a legutóbbi projektedről.
Hogyan használták a Redis-t?