Avez-vous utilisé les modèles Inbox et Outbox?
Golang
Tâche : «Ping-pong avec timeout» Écrivez une fonction pingPong qui : - Lance deux goroutines : une génère des messages "ping", l'autre — "pong". - Les goroutines doivent échanger des messages via un canal commun strictement à tour de rôle. - L'échange continue pendant 3 secondes, puis le programme doit se terminer (arrêt gracieux). - Utilisez un contexte pour l'annulation avec un timeout. - Affichez chaque message à l'écran avec le temps (en millisecondes depuis le début). Exemple de sortie attendue : 0ms : ping
Tâche simple de codage en direct (concurrence de base) Condition: Écris une fonction fetchAll(urls []string) map[string]string, qui pour chaque URL effectue une requête HTTP GET de manière concurrente et retourne une carte où la clé est l'URL et la valeur est le corps de la réponse (chaîne). Si la requête échoue (erreur, pas 200), la valeur sera une chaîne vide. Restrictions: - Impossible d'utiliser des bibliothèques externes (seules les standard). - Impossible de changer la signature. - Le programme ne doit pas planter en cas de panic dans http.Get. Exemple d'entrée: ["[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) }
Où ont été stockés les logs?
Comment ont-ils assuré l'idempotence?
Que dire à l'intervieweur (si on vous demande) "J'utiliserais un pool de workers avec un nombre fixe de workers, un canal pour les tâches et sync.WaitGroup. Les workers exécuteront les requêtes, et le timeout et l'annulation seront contrôlés via le contexte. Je rassemblerai les résultats dans un buffer, protégé par un mutex (ou via un canal séparé)." C'est à ton tour Écris le code dans cette discussion. Je vérifierai et te donnerai un retour. Si tu ne sais pas par où commencer, demande un indice. Bonne chance!
Remplir la tranche avec des éléments sans mutex pour qu'elle contienne tous les 1000 éléments.
Qu'est-ce qu'un pointeur et que se passera-t-il si l'argument d'une fonction est un pointeur?
// tous les éléments du slice doivent être uniques + doivent contenir 1000 éléments au total // le programme ne doit pas se bloquer longtemps à cause de 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("increment dupliqué") } checkIncrement[i] = 1 }() } time.Sleep(2 * time.Second) fmt.Println(len(data)) }
Quelle est la différence entre DELETE et TRUNCATE?
Parlez des verrouillages dans Postgres.
As-tu entendu parler de la traçabilité distribuée?
Comment avez-vous utilisé Redis?
Parle-moi de ton dernier projet.