Golang
Parle-moi de ton expérience chez Tinkoff — comment as-tu été embauché et quelles étaient tes tâches?
func collectRTT(ctx context.Context, urls []string) (map[string]time.Duration, error) { pingMap := make(map[string]time.Duration, len(urls)) var mu sync.Mutex var wg sync.WaitGroup errCh := make(chan error, 1) for _, url := range urls { wg.Add(1) go func(u string) { defer wg.Done() dur, err := rtt(ctx, u) if err != nil { select { case errCh <- fmt.Errorf("échec de rtt %s, %w", u, err): default: } return } mu.Lock() pingMap[u] = dur mu.Unlock() }(url) } wg.Wait() close(errCh) if err := <-errCh; err != nil { return nil, err } return pingMap, nil }
Quel est le principal langage de programmation et quels autres langages connais-tu, y compris l'expérience non commerciale?
func (p *Pool) Stop() { p.mu.Unlock() // Maintenant, il est sûr de fermer le canal close(p.tasks) // signal aux workers : pas de nouvelles tâches, lire le reste p.wg.Wait() // attendre que toutes les goroutines se terminent p.cancel() // annuler le contexte au cas où fmt.Println("Pool arrêté.") } // ForceStop arrête de force tous les workers sans attendre la fin des tâches. // Les workers seront interrompus immédiatement via le contexte. func (p *Pool) ForceStop(timeout time.Duration) { fmt.Printf("Arrêt forcé du pool (timeout : %v)...\n", timeout) // Bloquer l'ajout de nouvelles tâches p.mu.Lock() p.isOpen = false p.mu.Unlock() // Fermer le canal pour que les workers ne prennent pas de nouvelles tâches close(p.tasks) // Annuler le contexte – cela interrompra toutes les tâches en cours p.cancel() // Donner un temps limité pour finir done := make(chan struct{}) go func() { p.wg.Wait() close(done) }() select { case <-done: fmt.Println("Pool arrêté de force (tous les workers terminés)") case <-time.After(timeout): fmt.Println("Pool arrêté de force (timeout, des goroutines peuvent rester en suspens)") } }
À quoi sert HAVING et pourquoi pas WHERE?
Parle-moi des types de données en Go.
Comment modifier le code pour que le résultat soit 456 au lieu de 123?
Quels types de transactions connais-tu ? À quoi servent-ils ?
Tu as mentionné qu'il y avait des problèmes avec les index — peux-tu en parler en détail?
Que se passe-t-il lors de la lecture d'un canal fermé en Go?
Quelle est la différence entre TCP et UDP ? Pourquoi TCP est-il utilisé pour HTTPS ?
As-tu déjà rencontré le concept de sharding?
Connaissez-vous les modèles fan-in/fan-out et pipeline ? Qu'est-ce que c'est ?
Peut-on ajouter ou supprimer des éléments dans une carte pendant le processus d'évacuation?
Qu'est-ce qu'une goroutine ? En quoi diffère-t-elle d'un thread du système d'exploitation ? Qui gère les goroutines ?
Quelles sont vos attentes salariales et le format préféré de présentation?
Combien de goroutines peut-on créer sur une seule machine ? Comment compter ?
Quelle est la différence entre l'incrustation (embedding) et la composition en Go?
Combien de connexions TCP maximum peut-on maintenir sur un seul serveur?
Quelle est la complexité de l'algorithme et où est l'arbre ici?