Golang
Décrivez le processus de collecte et de configuration du service gRPC pour les tests manuels ou le développement
Comment les mécanismes de restriction des niveaux d'isolation des transactions sont-ils mis en œuvre au niveau du système de gestion de bases de données?
Quelles peuvent être les conséquences négatives lors de la conversion d'une tranche de bytes en chaîne?
Quelles seront les conséquences si les données transmises via le canal restent non lues?
Quel format de travail envisagez-vous : à distance, hybride ou en bureau ?
Quels moyens peuvent être utilisés pour assurer le traitement de Kafka jusqu'à 100 000 messages par seconde?
Comment le processeur central gère-t-il la répartition des tâches entre les files d'attente internes et globales?
Pouvez-vous expliquer le principe de fonctionnement et l'utilisation de l'objet sync.Pool en Go?
Quelles opérations existent sur les slices en Go?
Comment s'appelle le processus de déplacement d'éléments d'une Map à une autre?
/* Nous devons transférer des données d'une source à un consommateur. La source fournit les données en petits lots (~dix enregistrements), tandis que le consommateur fonctionne mieux avec de gros lots (~mille enregistrements). Un exemple réel est le transfert de données depuis des files d'attente de type Kafka vers une base de données Clickhouse. Source : - Pratiquement infinie. - La source ne renvoie jamais plus de MaxItems enregistrements lors d'un appel à Next. - Dans le cadre d'une "session" (un appel à la fonction Pipe), la source renvoie de nouvelles données à chaque appel à Next. - Cependant, après un redémarrage, la source reprend à la position "confirmée" précédente, indiquée par cookie. Par conséquent, *chaque* valeur de cookie renvoyée par Next, après avoir sauvegardé les données dans le récepteur, doit être confirmée avec l'appel à Commit, dans le même ordre dans lequel elles ont été renvoyées par Next. Récepteur : - Ne peut traiter plus de MaxItems à la fois. Niveau de base : Il faut implémenter la fonction func Pipe(p Producer, c Consumer) error qui lit les données de la source, les regroupe dans un buffer de taille maximale MaxItems et les stocke dans le récepteur, après quoi elle confirme la progression dans la source. Difficulté supplémentaire : Les méthodes Next, Process et Commit sont liées à des appels réseau et peuvent prendre beaucoup de temps. Pour accélérer le processus, il faut paralléliser les processus de lecture, d'écriture et de confirmation de progression. De sorte qu'au cours de Process ou Commit, la lecture de la source et la formation du nouveau buffer continuent. */ const MaxItems = 9999 type Producer interface { // Next retourne : // - un lot d'éléments à traiter // - un cookie à confirmer une fois le traitement terminé // - une erreur Next() (items []any, cookie int, err error) // Commit est utilisé pour marquer un lot de données comme traité Commit(cookie int) error } type Consumer interface { Process(items []any) error } func Pipe(p Producer, c Consumer) error { // TODO }
Comment l'opération select est-elle implémentée dans le langage Go et comment fonctionne-t-elle avec les canaux?
Peut-on suspendre l'exécution d'une goroutine de manière à ce qu'elle se bloque sur un thread système spécifique?
Le langage Go dispose-t-il d'une prise en charge intégrée des tableaux?
Quel mécanisme d'abstraction dans le langage Go est destiné à représenter des caractères ou des jetons?
Quelles méthodes peuvent être utilisées pour diviser une base de données par sharding?
Quels types de données conviennent pour être utilisés comme clé dans une structure de données Map?
Pouvez-vous expliquer le mécanisme de fonctionnement du planificateur de tâches dans le système d'exploitation?
Pouvez-vous expliquer la structure interne et le fonctionnement d'une table de hachage?
Avez-vous de l'expérience dans la résolution de problèmes complexes liés à l'utilisation de Go Modules dans vos projets?