Sobes.tech

Golang

Taak: «Ping-pong met timeout» Schrijf een functie pingPong die: - Twee goroutines start: één genereert berichten "ping", de andere — "pong". - De goroutines moeten strikt om de beurt berichten uitwisselen via een gemeenschappelijk kanaal. - De uitwisseling duurt 3 seconden, waarna het programma moet afsluiten (gecontroleerde shutdown). - Gebruik een context voor annulering met timeout. - Geef elk bericht weer op het scherm samen met de tijd (in milliseconden vanaf de start). Voorbeeld van verwachte uitvoer: 0ms: ping

216

Eenvoudige live coding taak (basis gelijktijdigheid) Voorwaarde: Schrijf een functie fetchAll(urls []string) map[string]string, die voor elke URL gelijktijdig een HTTP GET-verzoek uitvoert en een kaart retourneert waarbij de sleutel de URL is en de waarde de response body (string). Als het verzoek mislukt (fout, niet 200), wordt de waarde een lege string. Beperkingen: - Kan geen externe bibliotheken gebruiken (alleen standaard). - Kan de handtekening niet wijzigen. - Het programma mag niet crashen bij een panic in http.Get. Voorbeeld invoer: ["[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) }

187

Wat te zeggen tegen de interviewer (als ze vragen) "Ik zou een worker pool gebruiken met een vast aantal workers, een kanaal voor taken en sync.WaitGroup. De workers zullen de verzoeken uitvoeren, en timeout en annulering worden via de context geregeld. Ik verzamel de resultaten in een buffer, beschermd door een mutex (of via een aparte kanaal)." Nu is het jouw beurt Schrijf de code in deze chat. Ik zal het controleren en feedback geven. Als je niet weet waar je moet beginnen, vraag dan om een hint. Succes!

177

Vul de slice met elementen zonder mutex zodat het alle 1000 elementen bevat.

174

Wat is een pointer en wat gebeurt er als het argument van een functie een pointer is?

159

// alle elementen van de slice moeten uniek zijn + in totaal 1000 elementen bevatten // het programma mag niet onnodig lang hangen door 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("gedupliceerde incremente") } checkIncrement[i] = 1 }() } time.Sleep(2 * time.Second) fmt.Println(len(data)) }

159