Heeft u de patronen Inbox en Outbox gebruikt?
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
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]"]
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) }
Waar zijn de logs opgeslagen?
Hoe hebben ze de idempotentie verzekerd?
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!
Vul de slice met elementen zonder mutex zodat het alle 1000 elementen bevat.
Wat is een pointer en wat gebeurt er als het argument van een functie een pointer is?
// 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)) }
Wat is het verschil tussen DELETE en TRUNCATE?
Vertel over blokkades in Postgres.
Heb je gehoord van distributed tracing?
Hoe hebben jullie Redis gebruikt?
Vertel me over je laatste project.