Questions et réponses à l'entrevue Big Data (réimprimé)

Sun zhongming 2021-10-14 04:13:01
questions et ponses entrevue big


Questions et réponses à l'entrevue Big Data

Questions et réponses à l'entrevue Big Data

1 kafkaDemessageQuelles informations sont incluses

UnKafkaDeMessage Par une longueur fixe header Et un corps de message plus long bodyComposition
header Partiellement composé d'un octet magic(Format du fichier) Et quatre octets CRC32(Pour jugerbody Si le corps du message est normal )Composition.QuandmagicLa valeur de1Quand,Il sera là.magicEtcrc32Plus d'un octet de données entre:attributes( Enregistrer certaines propriétés connexes , Comme compresser ou non 、 Format compressé, etc. );SimagicLa valeur de0, Alors ça n'existe pas. attributesPropriétés
bodyC'est parNUn corps de message en octets, Contient des informations spécifiques key/valueMessage

2 Comment voirkafkaDeoffset

0.9Version ci - dessus,Peut utiliser le dernierConsumer client Client,Oui.consumer.seekToEnd() / consumer.position() Peut être utilisé pour obtenir la dernièreoffset:

3 hadoopDeshuffleProcessus

Un.、MapFinshuffle

MapLe terminal traite les données d'entrée et produit des résultats intermédiaires,Ce résultat intermédiaire est écrit sur le disque local,Au lieu deHDFS.ChaqueMapLa sortie de est d'abord écrite dans le tampon mémoire,Lorsque les données écrites atteignent le seuil fixé,Le système va lancer un thread pour écrire les données du tampon sur le disque,Ce processus s'appellespill.
Inspill Avant d'écrire , Le deuxième tri est effectué en premier , Tout d'abord, selon les données partitionTrier,Et chaquepartition Appuyez à nouveau sur les données dans keyPour trier.partitionLe but est de diviser les enregistrements en différentsReducerMonte.,Dans l'espoir d'atteindre l'équilibrage de la charge,Plus tardReducerSelonpartition Pour lire vos propres données .Continuez à courircombiner(Si elle est réglée),combinerL'essence deReducer,L'objectif est de traiter d'abord les fichiers à écrire sur le disque une fois,Voilà.,La quantité de données écrites sur le disque diminue.Enfin, écrivez les données sur le disque local pour générerspillDocumentation(spillLe fichier est enregistré à{mapred.local.dir}Dans le répertoire spécifié,MapIl sera supprimé à la fin de la tâche).

Enfin,ChaqueMap Les tâches peuvent produire plusieurs spillDocumentation,Dans chaqueMap Avant la fin de la tâche ,Il va passer par un algorithme de fusion Multi - voies pourspill Le fichier est fusionné en un seul fichier .Jusqu'ici.,MapDeshuffleLe processus est terminé..

2.、ReduceFinshuffle

ReduceFinshuffleIl se compose principalement de trois étapes,copy、sort(merge)Etreduce.
Tout d'abord,MapCopie du fichier de sortie généré par le terminal àReduceFin,Mais chaqueReducerComment savoir quelles données vous devriez traiter?Parce queMapFin du processuspartitionQuand,En fait, c'est l'équivalent de chaqueReducerDonnées à traiter(partitionÇa correspond.Reducer),Alors...ReducerLorsque vous copiez des données, vous n'avez qu'à copier ce qui correspond à vous - mêmepartition Les données dans .ChaqueReducer Un ou plusieurs seront traités partition,Mais vous devez d'abord vous adapterpartition Données de chaque Map Copier dans la sortie de .
Et ensuite,sortPhase,Est devenumergePhase,Parce que le travail principal à cette étape est d'effectuer le tri de fusion.DeMap Copie de bout en bout Reduce Les données sont ordonnées. , Donc C'est parfait pour le tri de fusion .En fin de compte,ReduceEnd génère un fichier plus grand commeReduceContribution de.

Et enfinReduceC'est parti.,Le résultat final de ce processus, Et l'écrire HDFSAllez..

4 sparkMode de fonctionnement du cluster

Spark Il existe de nombreux modèles ,Le plus simple est le mode local autonome, Il y a aussi un modèle de pseudo - distribution autonome , Complexe fonctionne dans un Cluster , Il fonctionne très bien en ce moment YarnEt Mesos Moyenne,Bien sûr. Spark Il y en a d'autres. Standalone Mode,Dans la plupart des cas Standalone Le modèle est suffisant. , Si l'entreprise a déjà Yarn Ou Mesos Environnement, C'est facile à déployer. .
standalone(Mode Cluster):TypiqueMater/slaveMode, Mais vous pouvez voir Master C'est un point de défaillance unique. ;SparkSoutienZooKeeperPour réaliser HA
on yarn(Mode Cluster): En cours yarn Au - dessus du cadre de l'explorateur ,Par yarn Responsable de la gestion des ressources,Spark Responsable de l'ordonnancement et du calcul des tâches
on mesos(Mode Cluster): En cours mesos Au - dessus du cadre de l'explorateur ,Par mesos Responsable de la gestion des ressources,Spark Responsable de l'ordonnancement et du calcul des tâches
on cloud(Mode Cluster):Par exemple, AWS De EC2,L'utilisation de ce mode permet un accès facile AmazonDe S3;Spark Prise en charge de plusieurs systèmes de stockage distribués:HDFS Et S3

5 HDFSLe processus de lecture et d'écriture des données

Lire:

1、Suivez - moi.namenode Métadonnées de la requête de communication ,Trouver où se trouve le bloc de fichiersdatanodeServeur
2、Choisissez undatanode(Principe de proximité,Et au hasard)Serveur,Demande de créationsocketFlow
3、datanode Commencer à envoyer des données (Lire les données du disque dans le flux,ParpacketPour vérifier en unités)
4、Le client estpacketReçu en unités, Cache local maintenant ,Puis écrivez le fichier cible
Écris.:
1、Racinenamenode Demande de communication téléchargement de fichiers ,namenodeVérifier si le fichier cible existe déjà,Existe - t - il un répertoire parent
2、namenodeRetour si vous pouvez télécharger
3、clientDemande le premier block À qui dois - je transférer datanodeSur le serveur
4、namenodeRetour3- Oui.datanodeServeurABC
5、clientDemande3Tabledn L'un d'eux ATélécharger les données(Est essentiellement unRPCAppelez,Établissementpipeline),AL'appel se poursuivra sur demandeB,Et puisBAppelezC, C'est vrai. pipelineÉtablissement terminé, Retourner le client étape par étape
6、clientCommencez àATélécharger le premierblock(Lisez d'abord les données du disque dans un cache de mémoire local),ParpacketEn unités,AJ'en ai reçu un.packetIl va passer àB,BTransmis àC;AChaque transmissionpacketIl met une file d'attente de réponses en attente de réponses
7、Quand unblockUne fois le transfert terminé,clientDemande encorenamenodeTélécharger le deuxièmeblockServeur pour.

6 RDDMoyennereduceBykeyAvecgroupByKeyQuelle bonne performance,Pourquoi

 reduceByKey:reduceByKey Les résultats sont envoyés à reducer Avant cela, chaque mapper Au niveau local merge, Un peu comme dans MapReduceDanscombiner.L'avantage est que,Inmap Une fois à la fin reduceAprès, La quantité de données diminue considérablement , Pour réduire la transmission ,GarantiereduceL'extrémité peut calculer les résultats plus rapidement.
groupByKey:groupByKey Pour chaque RDDDansvalueLes valeurs sont agrégées pour former une séquence(Iterator), Cette action se produit à reduceFin,Il est donc inévitable que toutes les données soient transmises par le réseau,Créer des déchets inutiles. Et si la quantité de données est énorme, , Peut causer OutOfMemoryError.
La comparaison ci - dessus permet de constater qu'une grande quantité de donnéesreduce Recommandé en fonctionnement reduceByKey. Non seulement la vitesse peut être augmentée , Peut encore empêcher l'utilisation groupByKey Problème de débordement de mémoire causé .

7 spark2.0Comprendre

 Plus simple.:ANSI SQL Et plus raisonnable API
Plus vite.:AvecSparkEn tant que compilateur
Plus intelligent:Structured Streaming

8 rdd Comment diviser les dépendances larges et étroites

Large dépendance:PèreRDD Courtepointe de partition pour RDD Utilisation de plusieurs partitions pour Par exemple groupByKey、reduceByKey、sortByKey Une large dépendance est générée par des opérations telles que ,Ça va se produire.shuffle
Dépendance étroite:PèreRDD Chaque partition de RDD Utilisé par une partition de Par exemplemap、filter、union Les opérations telles que celles - ci produisent des dépendances étroites

9 spark streaming Lirekafka Deux modes de données

Les deux sont :

Receiver-base

UtiliserKafka De haut niveau Consumer APIPour réaliser.receiverDeKafkaLes données obtenues sont stockées dansSpark ExecutorDans la mémoire de,Et puisSpark StreamingDémarragejob Pour traiter ces données .Et pourtant, Dans la configuration par défaut ,De cette façon, les données peuvent être perdues en raison d'un échec sous - jacent. Si vous souhaitez activer un mécanisme de haute fiabilité , Zéro perte de données , Doit être activé Spark Streaming Mécanisme de journalisation pré - écriture pour (Write Ahead Log,WAL).Ce mécanisme synchronisera la réceptionKafkaÉcrire des données au système de fichiers distribués(Par exemple,HDFS) Dans le journal pré - écrit sur .Alors...,Même si le noeud sous - jacent a échoué,Vous pouvez également utiliser les données du Journal pré - écrit pour la récupération.

Direct

Spark1.3Introduction deDirectComment, Pour remplacer l'utilisation ReceiverRéception des données,De cette façon, les requêtes se font périodiquementKafka,Obtenez chaquetopic+partition Le plus récent offset, Pour définir chaque batchDeoffsetChamp d'application. Lors du traitement des données jobAu démarrage,Ils vont l'utiliser.KafkaSimpleconsumer apiPour obtenirKafkaDésignationoffset Données de portée .

10 kafkaExiste - t - il une mémoire ou un disque pour les données de

KafkaL'idée centrale est d'utiliser le disque, Au lieu d'utiliser la mémoire , Peut - être que tout le monde pensera ,La mémoire doit être plus rapide que le disque,Je ne fais pas exception.Je regardeKafkaDes idées de design,Après avoir consulté les données pertinentes et ajouté vos propres tests,La vitesse séquentielle de lecture et d'écriture des disques trouvés est égale à la mémoire.
EtLinuxIl y a aussi beaucoup d'optimisations de lecture et d'écriture pour les disques,Y compris:read-aheadEtwrite-behind, Cache de disque, etc. .Si vous faites ces opérations en mémoire,L'un estJAVA L'objet a un coût de mémoire élevé ,L'autre est qu'avec l'augmentation des données de mémoire en tas,JAVADeGC Ça va être long. ,L'utilisation du disque présente plusieurs avantages:
Cache de disque par LinuxMaintenance du système,Beaucoup moins de travail pour les programmeurs.
La vitesse de lecture et d'écriture séquentielle du disque dépasse la vitesse de lecture et d'écriture aléatoire de la mémoire.
JVMDeGCFaible efficacité,Grande consommation de mémoire.Utilisez le disque pour éviter ce problème.
Après le démarrage à froid du système , Cache de disque toujours disponible .

11 Comment?kafkaPerte de données

producerFin:
Macroscopiquement, assurer la fiabilité et la sécurité des données,Les données doivent être sauvegardées en fonction du nombre de partitions, Nombre d'exemplaires établis .
brokerFin:
topicDéfinir plusieurs partitions,La machine sur laquelle le zonage s'adapte,Pour que les zones soient réparties uniformémentbrokerMoyenne,Le nombre de partitions doit être supérieur àbrokerNombre.
La partition estkafkaUnités de lecture et d'écriture parallèles,C'est l'Ascension.kafkaLa clé de la vitesse.
ConsumerFin
consumerLe cas où un message est perdu est plus simple:Si elle est soumise avant la fin du traitement du messageoffset,Il y a donc un risque de perte de données.Parce queKafka consumer La valeur par défaut est de soumettre automatiquement les déplacements ,Assurez - vous donc que le message est traité correctement avant de soumettre le déplacement en arrière - plan,Il n'est donc pas recommandé d'utiliser une logique de traitement très lourde, Si le traitement prend beaucoup de temps ,Il est recommandé de mettre la logique dans un autre thread.Pour éviter la perte de données, Deux suggestions sont faites. :
enable.auto.commit=false Désactiver le déplacement de soumission automatique
Soumettre manuellement le déplacement après le traitement complet du message

12 fsimageEteditLa différence entre?

 Tout le monde saitnamenodeAvecsecondary namenode La relation entre,Quand ils veulent synchroniser les données, ça s'appellecheckpoint Il est utilisé fsimageAvecedit,fsimageEst l'information qui contient les métadonnées les plus récentes,QuandfsimageLes données d'une certaine taille vont générer un nouveau fichier pour enregistrer l'information sur les métadonnées, Ce nouveau fichier est edit,edit Renvoie les dernières données .

13 Liste plusieurs optimisations de profil?

 1)Core-site.xml Optimisation des fichiers
a、fs.trash.interval,Par défaut: 0;Description: C'est ouvert. hdfsSuppression de fichiers option de transfert automatique à la corbeille,La valeur est le temps de nettoyage du fichier corbeille.Normalement, c'est mieux de l'allumer,Au cas où des fichiers importants seraient supprimés par erreur.En minutes.
b、dfs.namenode.handler.count,Par défaut:10;Description:hadoopNombre de Threads de tâches lancés dans le système,Changez ça en40,Vous pouvez également essayer de définir la valeur la plus appropriée pour la variation de l'effet de la taille de la valeur sur l'efficacité.
c、mapreduce.tasktracker.http.threads,Par défaut:40;Description:mapEtreduceC'est parhttp Transfert de données ,C'est le nombre de Threads parallèles à transmettre.

14 datanode Pour la première fois cluster Quand,Si log Déclaration des versions de fichiers incompatibles , C'est nécessaire. namenode Effectuer une opération de formatage , La raison en est que ?

 1) Ce n'est pas raisonnable. , Parce que namenode Opérations de formatage ,Est de formater le système de fichiers,namenode Vide lors du formatage dfs/name Videz tous les fichiers dans les deux répertoires suivants,Après, Sera dans le Répertoire dfs.name.dir Créer un fichier sous.
2) Texte incompatible , Quand c'est possible namenode Avec datanode De Dans les données namespaceID、clusterID Incohérence,J'en ai trouvé deux. ID Emplacement, Modifier pour être identique .

15 MapReduce Quelles sont les étapes du tri moyen? Ces séquences peuvent - elles être évitées? ?Pourquoi?

 1)Un MapReduce Travaux effectués par Map Phase et Reduce Phase 2 , Ces deux étapes trient les données ,En ce sens,,MapReduce La nature du cadre est Distributed Sort.
2)In Map Phase,Map Task Affiche une sortie sur le disque local selon key Trier( Utilise un tri rapide )Documents(Plusieurs fichiers peuvent être générés au milieu, Mais ils finiront par fusionner en un seul ),In Reduce Phase,Chaque Reduce Task Triera les données reçues ,Voilà., Les données suivent Key Divisé en groupes , Par la suite, en groupes, à reduce()Traitement.
3) Beaucoup de gens ont mal compris Map Phase,Si non utilisé Combiner Je ne peux pas trier. ,C'est faux., Que vous l'utilisiez ou non Combiner,Map Task Triera les données générées (Si ce n'est pas le cas Reduce Task,Ne triera pas,En fait, Map L'ordre des étapes est de réduire Reduce Charge de tri finale ).
4) Parce que ces séquences sont MapReduce Auto - completed, L'utilisateur ne peut pas contrôler ,Donc,,Inhadoop 1.x In évitable , Il ne peut pas non plus être éteint. ,Mais... hadoop2.x Peut être éteint.

16 hadoopOptimisation de?

 1)Les idées d'optimisation peuvent être optimisées à partir des idées de conception de fichiers et de systèmes de configuration et de code
2) Optimisation des profils : Ajuster les paramètres appropriés , Test lors du réglage des paramètres
3)Optimisation du Code:combiner Autant que possible reduceMême nombre de, Les types de données sont cohérents ,Peut réduire les progrès du déballage et de l'emballage
4) Optimisation du système :Peut être réglélinuxNombre maximum de fichiers ouverts par le système largeur de bande estimée du réseauMTUConfiguration de
5)Pour job Ajouter un Combiner, Peut être considérablement réduit shufferPhasemaoTask Copie à distance reduce taskQuantité de données,En généralcombinerAvecreduceMême chose..
6) Utilisation maximale dans le développement stringBufferAu lieu destring,stringLe mode estread-onlyDe, Si vous le modifiez , Produit des objets temporaires ,2.stringBuffer Est modifiable , Aucun objet temporaire n'est généré .
7) Modifier la configuration : Voici les modifications mapred-site.xml Documentation
a、 Modifier le nombre maximum de fentes : Le nombre de créneaux est tasktracker Oui. mapred-site.xml Set on,Par défaut, tout est 2
mapred.tasktracker.map.tasks.maximum 2 mapred.tasktracker.reduce.tasks.maximum 2 b、 Ajuster l'intervalle de battements cardiaques : Taille de la grappe inférieure à 300 Heure, L'intervalle entre les battements du cœur est 300 MS mapreduce.jobtracker.heartbeat.interval.min Rythme cardiaque mapred.heartbeats.in.second Combien de noeuds le cluster augmente - t - il? , Le temps augmente les valeurs suivantes mapreduce.jobtracker.heartbeat.scaling.factor Chaque augmentation du nombre de grappes , Combien de battements de cœur? c、 Activation du rythme cardiaque hors bande mapreduce.tasktracker.outofband.heartbeat Par défaut false d、 Configurer plusieurs disques mapreduce.local.dir e、Configuration RPC hander Nombre mapred.job.tracker.handler.count Par défaut 10,Peut être remplacé par 50, Selon la capacité de la machine f、Configuration HTTP Nombre de fils tasktracker.http.threads Par défaut 40,Peut être remplacé par 100 Selon la capacité de la machine g、 Choisir la méthode de compression appropriée ,Par snappy Par exemple: mapred.compress.map.output true mapred.map.output.compression.codec org.apache.hadoop.io.compress.SnappyCodec

17 Questions de conception

 1)AcquisitionnginxJournal généré, Le format du journal est user ip time url htmlId Des centaines de millions de fichiers sont produits chaque jour,Veuillez concevoir un plan pour enregistrer les données dansHDFSAllez.,Et offre une fonction de recherche en temps réel(Temps de réponse inférieur à3s)

A、 Un utilisateur accède à un jour URLNombre de fois
B、UnURL Nombre total de visites par jour
La pensée en temps réel est :UtiliserLogstash + Kafka + Spark-streaming + Redis + Plate - forme d'affichage des rapports
L'idée hors ligne est :Logstash + Kafka + Elasticsearch + Spark-streaming + Base de données relationnelle
A、B、 Les données entrent dans Spark-streaming Filtrage en cours ,Enregistrer les données conformes àRedisMoyenne

18 Oui. 10 Fichiers,Par fichier 1G,Chaque ligne de chaque fichier est stockée par l'utilisateur query,Par fichierquery Ça pourrait se répéter. .Je vous demande de suivre query Ordre de fréquence de. C'est typique. TOP K Algorithmes

 La solution est la suivante::
1)Programme 1:
Lecture séquentielle 10 Fichiers,Selon hash(query)%10 Les résultats de query Écrire à un autre 10 Fichiers(Notez comme suit:)Moyenne.De cette façon, la taille de chaque fichier nouvellement généré est d'environ 1G(Hypothèses hash Les fonctions sont aléatoires ). Trouver une présence à l'intérieur 2G Machines à gauche et à droite , Appariement séquentiel hash_map(query, query_count)Pour chaquequery Nombre d'occurrences. Tirer parti de la rapidité /Pile/Trier par nombre d'occurrences. Trier query Et correspondant query_cout Exporter dans un fichier.Voilà. 10 Fichiers ordonnés (Notez comme suit:). C'est ça. 10 Fichiers pour la fusion et le tri (Combinaison de tri interne et externe).
2)Programme 2:
En général query La quantité totale est limitée ,C'est juste qu'il y a plus de répétitions, Peut - être pour tous query,Une fois dans la mémoire.Voilà.,Nous pouvons adopter trie Arbre/hash_map Attendez de compter directement chaque queryNombre d'occurrences, Puis faites - le rapidement en fonction du nombre d'occurrences /Pile/ Le tri de fusion est parfait. .
3)Programme 3:
Et programmes 1 Similaire, Mais c'est fait. hash, Après avoir divisé plusieurs fichiers ,Peut être traité par plusieurs fichiers,Adopter une architecture distribuée pour traiter(Par exemple, MapReduce), Fusionner à la fin .

19 In2.5Trouver des entiers non dupliqués parmi des milliards d'entiers,Note:, Pas assez de mémoire pour ça. 2.5100 millions d'entiers.

 1)Programme 1:Adoption 2-Bitmap( Répartition par numéro 2bit,00 Indique qu'il n'existe pas,01 Indique une occurrence ,10 Indique plusieurs fois ,11 Inutile.)En cours, Mémoire totale requise 2^32 * 2 bit=1 GB Mémoire,C'est acceptable.. Et scanne ça. 2.5100 millions d'entiers,Voir Bitmap Correspondant au milieu ,Si oui 00 Changement 01,01 Changement 10,10 Reste le même.. Après ce qui a été décrit ,Voir bitmap, Mettez les bits correspondants 01 La sortie entière de .
2)Programme 2: Peut également être utilisé avec 1 Approche similaire , Comment diviser les petits fichiers .Puis trouvez les entiers non dupliqués dans le petit fichier,Et trier. Puis la fusion ,Attention à éliminer les éléments dupliqués.

20 Questions d'entrevue de Tencent:Voilà.40 Milliards de non - répétition unsigned int Un entier de, Non programmé , Et puis un autre nombre ,Comment déterminer rapidement si ce nombre est là 40 Parmi les milliards ?

 1)Programme 1:oo,Application 512M Mémoire,Un bit Un représentant unsigned int Valeur.Lire dans 40 Nombre de milliards,Définir les paramètres appropriés bit Bits, Lire le nombre à interroger , Voir la correspondance bit Bit est 1,Pour 1 Indique la présence,Pour 0 Indique qu'il n'existe pas.
2)Programme 2:Cette question est《Programmation Zhuji》 C'est bien décrit. ,Vous pouvez vous référer à l'idée suivante,Explorez.: Encore parce que 2^32 Pour 40 Plus d'un milliard, Donc un nombre donné peut être , Ou peut - être pas. ; Ici, nous mettons 40 Pour chaque milliard 32 Représentation binaire des bits ,Supposons que 40 Des milliards ont commencé à être mis dans un seul fichier. Et je vais mettre ça 40 Les milliards sont divisés en deux catégories :

1.Le chiffre le plus élevé est 0
2.Le chiffre le plus élevé est 1
Et écrivez les deux catégories dans deux fichiers,Nombre de fichiers dans l'un d'eux<=20 100 millions,Et l'autre>=20 100 millions( C'est la moitié. ); Comparez avec le chiffre le plus élevé du nombre à trouver et allez dans le fichier correspondant pour trouver Et ensuite diviser ce fichier en deux catégories:
1. Le deuxième bit le plus élevé est 0
2. Le deuxième bit le plus élevé est 1
Et écrivez les deux catégories dans deux fichiers,Nombre de fichiers dans l'un d'eux<=10 100 millions,Et l'autre>=10 100 millions( C'est la moitié. ); Comparez avec le nombre le plus élevé de fois que vous voulez trouver et allez dans le fichier approprié pour trouver.

Et ainsi de suite.,On peut trouver, Et la complexité temporelle est O(logn),Programme 2 Terminé..
3)Annexe:Ici., Encore une brève introduction , Méthode bitmap : Utilisez la méthode bitmap pour déterminer s'il y a des répétitions dans le tableau de forme ,L'une des tâches de programmation les plus courantes consiste à déterminer s'il y a duplication dans un ensemble.,Quand il y a beaucoup de données dans la collection, nous voulons généralement moins de scans,À ce stade, la double circulation n'est pas souhaitable.
La méthode bitmap est plus appropriée dans ce cas,C'est comme ça que ça marche avec le plus grand élément de la collection max Créer une longueur de max+1Un nouveau tableau de, Puis scannez à nouveau le tableau original ,Donnez le nombre de fois que vous le rencontrez à la position du nouveau tableau 1, Si vous rencontrez 5 Donne le sixième élément du nouveau tableau 1, Comme ça, on se reverra. 5 Le sixième élément trouvé dans le nouveau tableau lorsque vous voulez le mettre en place est déjà 1 C'est,Cela signifie que les données de cette fois doivent être en double avec les données précédentes.Voilà. La méthode de mise à zéro d'un nouveau tableau lors de l'initialisation est similaire à la méthode de traitement bitmap, donc appelée méthode bitmap.Le pire scénario est 2N.Si la valeur maximale d'un tableau est connue, la longueur du nouveau tableau peut être déterminée à l'avance Ça pourrait doubler. .

21 Comment trouver le plus grand nombre de répétitions dans les données massives?

 1)Programme 1:D'abord. hash, Ensuite, le module est cartographié en petits fichiers ,Trouvez le plus grand nombre de répétitions dans chaque petit fichier, Et enregistrer le nombre de répétitions .Ensuite, découvrez que le plus grand nombre de répétitions dans les données de l'étape précédente est ce que vous voulez( Voir la question précédente pour plus de détails. ).

22 Des dizaines ou des milliards de données (Il y a des répétitions),Comptez l'argent qui apparaît le plus souvent N Données.

 1)Programme 1: Des millions ou des milliards de données ,La mémoire de la machine actuelle devrait pouvoir être stockée. Donc envisager d'adopter hash_map/ Recherche d'arbres binaires /Arbre Rouge et noir, etc. pour faire des statistiques sur le nombre de fois. Et juste avant de sortir N Les données les plus fréquentes, Peut être utilisé 2 Achèvement du mécanisme de tas mentionné dans la question .

23 Un fichier texte, Environ 10 000 lignes , Un mot par ligne ,Demandez des statistiques sur les premiers 10 Un mot., Donner des idées , Analyse de la complexité temporelle .

 1)Programme 1: C'est une question d'efficacité temporelle. .Avec trie L'arbre compte le nombre d'occurrences de chaque mot,La complexité temporelle est O(n*le)(le Indique la longueur horizontale d'un mot ).Puis il y a eu la recherche de la fréquence la plus fréquente avant 10 Un mot., Peut être réalisé en tas , Comme nous l'avons déjà mentionné dans la question précédente ,La complexité temporelle est O(n*lg10).Donc la complexité temporelle totale,- Oui. O(n*le)Avec O(n*lg10) Lequel est le plus grand - Oui..

24 100w Trouver le plus grand nombre 100 Nombre.

 1)Programme 1: Dans la question précédente , Nous avons déjà mentionné , Avec un contenant 100 Achèvement minimal du tas pour les éléments .La complexité estO(100w*lg100).
2)Programme 2: L'idée d'un tri rapide ,Après chaque division, seule une partie plus grande que l'axe est prise en compte,Savoir qu'une partie plus grande que l'axe est plus grande que 100 Beaucoup de temps, Tri par algorithme de tri traditionnel ,Avant de prendre 100 - Oui..La complexité est O(100w*100).
3)Programme 3: Méthode d'élimination partielle .Avant sélection 100 Éléments,Et trier, Enregistrer comme séquence L.Puis scannez les éléments restants à la fois x, Et séquentiel 100 Le plus petit des éléments est, Si c'est plus petit que ça, Plus gros.,Alors retirez ce plus petit élément,Et mettre x Utiliser l'idée de tri par insertion , Insérer dans la séquence L Moyenne.Cycle séquentiel, Jusqu'à ce que tous les éléments soient scannés .La complexité est O(100w*100).

25 Il y a 10 millions de messages. ,Il y a des répétitions,Enregistrer sous forme de fichier texte, Ligne par ligne ,Il y a des répétitions.S'il vous plaît. 5 Minutes, Trouver le plus grand nombre de répétitions avant 10 Article (s).

 1)Analyse: La méthode normale est de trier d'abord , En traversant , Trouver la plupart des répétitions avant 10 Article (s).Mais la complexité de l'algorithme de tri est au moinsnlgn.
2) Peut concevoir un hash_table, hash_map<string, int>,Lire 10 millions de SMS à tour de rôle,Charger vershash_table Dans le tableau, Et compter le nombre de répétitions ,En même temps, maintenez un maximum de 10 Liste des messages courts . De cette façon, vous pouvez trouver le plus grand nombre d'avant 10 Article (s),La complexité de l'algorithme est O(n).
版权声明
本文为[Sun zhongming]所创,转载请带上原文链接,感谢
https://qdmana.com/2021/10/20211014040949601N.html

  1. 初学者怎么学Web前端?
  2. react
  3. PaddlePaddle:在 Serverless 架构上十几行代码实现 OCR 能力
  4. JavaScript数组 几个常用方法
  5. Angular 依赖注入 - 全面解析
  6. html_day02
  7. 那些年我们前端面试中经常被问到的题!
  8. The starting price of Ducati multistada V2 in North America is less than 100000 yuan
  9. Hls.js 使用文檔
  10. Hls.js travailler avec des documents
  11. Problèmes liés à la précision JS
  12. Copie une partie des propriétés d'un objet à un autre objet
  13. Multiplexage de modules en vuex
  14. Développement multilingue Android, questions d'entrevue pour le développement de logiciels Android
  15. Chen lushai and her best friend Wang Meng play video, fearless of the pressure of public opinion, and in a good mood to dance in a bare back
  16. # Sass速通(四):继承、混合与函数
  17. Vidéo de développement de combat Android, questions d'entrevue rxjava
  18. Bugatti Chiron maintenance cost exposure! One piece for one car, burn money endlessly
  19. android应用开发基础答案,深入理解Nginx
  20. 做了三年前端,你才知道10分钟就能实现一个PC版魔方游戏
  21. Html + CSS + JS implémentation ️ Responsive Lucky Turnover ️ [with full source Sharing]
  22. Ren Jialun, who married young, was in a mess. Now she feels that it is a blessing in disguise
  23. 达梦数据库使用disql生成html格式的巡检报告
  24. React render phase parsing II - beginwork process
  25. Tableau linéaire de la structure des données (dessin à la main)
  26. In 2022, what are the highlights and popular elements in skirts to make skirts more elegant and gentle?
  27. JQuery installation
  28. Exemple de développement Android, dernière compilation de questions d'entrevue Android
  29. Differences and relations between JDK, JRE and JVM, nginx architecture diagram
  30. 【Azure 云服务】Azure Cloud Service 为 Web Role(IIS Host)增加自定义字段 (把HTTP Request Header中的User-Agent字段增加到IIS输出日志中)
  31. 【Azure 云服务】Azure Cloud Service 为 Web Role(IIS Host)增加自定义字段 (把HTTP Request Header中的User-Agent字段增加到IIS输出日志中)
  32. Questions d'entrevue pour les ingénieurs en développement Android, Android Foundation 72 questions
  33. It's kind of Cadillac CT6 to have a Mercedes Benz S-class captain and a 10At entry-level configuration, falling to less than 300000
  34. H6 meets the strong enemy again! The car body has a Cayenne visual sense, breaking 8.8 seconds, and the top configuration is less than 130000
  35. How nginx supports HTTPS and Linux kernel video tutorial
  36. Le martyr se réjouit de sa vieillesse Audi R8 V10 performance Rwd
  37. import 方式隨意互轉,感受 babel 插件的威力
  38. Le mode d'importation peut se déplacer librement pour sentir la puissance du plug - in Babel
  39. Pas de héros en termes de ventes!Du point de vue de la force du produit, la nouvelle version ax7 Mach est plus forte que H6
  40. The vue3 + TS project introduces vant as needed
  41. 深入浅出虚拟 DOM 和 Diff 算法,及 Vue2 与 Vue3 中的区别
  42. 深入淺出虛擬 DOM 和 Diff 算法,及 Vue2 與 Vue3 中的區別
  43. Explorer les algorithmes DOM et diff virtuels et les différences entre vue2 et vue3
  44. 两万字Vue基础知识总结,小白零基础入门,跟着路线走,不迷路(建议收藏)
  45. Résumé des connaissances de base de 20 000 mots vue, Introduction à la petite base blanche zéro, suivre la route et ne pas se perdre (Collection recommandée)
  46. 兩萬字Vue基礎知識總結,小白零基礎入門,跟著路線走,不迷路(建議收藏)
  47. "Talk show conference 4" Zhou qimo a remporté le championnat. Tout le monde l'admire. Il est mature et stable et a une vue d'ensemble
  48. Test logiciel entrevue non technique questions classiques - mise à jour continue!
  49. Digital forward disassembly reverse disassembly
  50. Analyse du cache distribué redis et essence de l'entrevue en usine v6.2.6
  51. [Hadoop 3. X series] use of HDFS rest HTTP API (II) httpfs
  52. Zhang Daxian sang in the morning to bless the motherland, xYG team: singing is much better than us
  53. My three years' experience -- avoiding endless internal friction
  54. Introduction à l'algorithme "dénombrement binaire" modéré 01 - - question d'entrevue leetcode 10.09. Recherche de matrice de tri
  55. Introduction à l'algorithme simple 06 - - leetcode 34. Trouver la première et la dernière position d'un élément dans un tableau de tri
  56. CSS animation
  57. Explain the new tags in HTML5 and the pseudo classes and pseudo elements in CSS3
  58. They are all talking about "serverless first", but do you really understand serverless?
  59. [apprentissage de l'algorithme] 1486. Fonctionnement exclusif du tableau (Java / C / C + + / python / go / Rust)
  60. Front and back end data interaction (VI) -- advantages, disadvantages and comparison of Ajax, fetch and Axios