Sobes.tech

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

220

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]"]

203

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) }

191

Töltsd meg a szeletet mutex nélkül, hogy benne legyen az összes 1000 elem.

182

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!

177

// 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)) }

165

Mi az a pointer, és mi történik, ha egy függvény argumentuma pointer?

161