bases de Java et multiples "comparaisons"
1.Collections.sort tri Interne Principes
Dans Java 6, Arrays.sort() et Collections.sort() utilisent MergeSort, mais dans Java 7, l'implémentation interne est remplacée par TimSort, qui compare les objets Les exigences d'implémentation sont plus strictes
2. Principe de HashMap, modifications apportées à java8
En termes d'implémentation structurelle, HashMap est un tableau + une liste chaînée + un arbre rouge-noir (JDK1.8 ajouté rouge- partie arbre noir) mise en œuvre. HashMap permet uniquement à la clé d'un enregistrement d'être nulle et à la valeur de plusieurs enregistrements d'être nulle.
HashMap n'est pas thread-safe. ConcurrentHashMap est thread-safe. Résoudre les collisions : lorsqu'un conflit se produit, utilisez la méthode zipper pour lier les nœuds avec des mots-clés qui sont des synonymes dans une seule liste chaînée. Si la table de hachage est longue m, définissez un tableau de pointeurs T composé de m pointeurs de tête et l'adresse du nœud est. i. Le point est inséré dans une liste à chaînage unique avec T(i) comme pointeur de tête. Dans Java 8, les éléments en conflit dépassent la limite (8) et la liste chaînée est remplacée par une arborescence rouge-noir.
3. La différence entre String et StringBuilder
1) Variable et immuable : String est immuable, et un nouvel objet sera généré à chaque fois que "+" est exécuté Par conséquent, String n'est pas utilisé lorsque les chaînes sont fréquemment modifiées pour économiser de la mémoire.
2) Est-il multi-thread safe : StringBuilder n'ajoute pas de verrous de synchronisation à la méthode, il n'est donc pas thread-safe. StringBuffer et String sont thread-safe.
4. La différence entre Vector et Array
1) ArrayList se développe de 50 % + 1 par défaut lorsque la mémoire est insuffisante, et Vector se développe de 1 fois par défaut. .
2) Vector est thread-safe, mais Vector n'est pas utilisé dans la plupart des cas car la sécurité des threads nécessite une plus grande surcharge du système.
5. La différence entre HashMap et Hashtable
1) Raisons historiques : Hashtable hérite de la classe Dictonary, HashMap hérite de abstractMap
2) HashMap autorise les paires clé-valeur nulles, mais il y a au plus un objet vide, ce que HashTable n'autorise pas.
3) HashTable est synchronisé, tandis que HashMap est asynchrone et est plus efficace que HashTable
6. Comparaison entre ConncurrentHashMap et hashtable (deux threads accèdent simultanément à la même entrée. dans la chaîne de mappage, un thread supprime à la fin, et un autre thread parcourt et recherche à l'avant, demandant pourquoi le thread précédent peut toujours trouver correctement le nœud supprimé par un autre thread plus tard)
ConcurrentHashMap combine hashtable et hashmap Avantages. Hashtable est synchronisé, c'est-à-dire thread-safe, tandis que hashmap ne prend pas en compte la synchronisation. Par conséquent, hashmap est plus efficace dans les situations à thread unique. Dans le cas du multithread de la table de hachage, les opérations de synchronisation peuvent garantir l'exactitude de l'exécution du programme. Mais la table de hachage bloque et la structure entière doit être verrouillée à chaque fois qu'elle est exécutée de manière synchrone. ConcurrentHashMap est né pour résoudre ce problème
ConcurrentHashMap permet d'effectuer plusieurs opérations de modification simultanément. technologie (un tableau enregistre plusieurs objets, utilise les verrous de ces objets comme verrous séparés et en utilise un de manière aléatoire pendant l'extraction/la mise en place). Il utilise plusieurs verrous pour contrôler les modifications apportées aux différentes parties de la table de hachage. Dans JDK 1.6, il existe une structure HashEntry. Chaque fois qu'un nœud nouvellement ajouté est inséré, il sera utilisé comme nœud principal de la chaîne (implémenté de la même manière que HashMap), et chaque fois qu'un nœud est supprimé, tous les nœuds avant le Le nœud supprimé sera copié pour former une nouvelle chaîne et pointera le nœud suivant du nœud précédent du nœud actuel vers le nœud suivant du nœud actuel, de sorte que deux chaînes existent après la suppression, garantissant ainsi que même dans la même. chaîne, un thread est supprimé et l'autre. Ils fonctionnent tous correctement lorsque le thread traverse, car le thread traversant peut continuer à utiliser la chaîne d'origine.
En Java8, volatile HashEntry est utilisé pour enregistrer les données et l'élément de table est utilisé comme verrou ; un arbre rouge-noir est ajouté à partir du tableau de table + une liste chaînée unidirectionnelle. Un arbre rouge-noir est un arbre de recherche binaire spécial avec les caractéristiques suivantes : 1. Le nœud est rouge ou noir 2. Le nœud racine est noir 3. Le nœud feuille est noir 4. Si un nœud est rouge, le nœud feuille est noir 5. Le nombre de nœuds noirs sur tous les chemins allant d'un nœud à ses nœuds descendants est le même.
7. Quelle est la différence entre ArrayList et LinkedList ?
La différence la plus évidente est que la structure de données sous-jacente de
ArrrayList est un tableau et prend en charge l'accès aléatoire, tandis que la structure de données sous-jacente de LinkedList est une liste chaînée et ne prend pas en charge accès aléatoire. Pour accéder à un élément à l'aide d'un indice, la complexité temporelle de ArrayList est O(1), tandis que celle de LinkedList est O(n). LinkedList est une liste doublement chaînée
8 En Java, quelle est la différence entre Comparator et Comparable ?
L'interface Comparable est utilisée pour définir l'ordre naturel des objets et est une interface de tri, tandis que le comparateur est généralement utilisé pour définir l'ordre personnalisé par l'utilisateur et est une interface de comparaison. Si nous devons contrôler l'ordre d'une certaine classe et que la classe elle-même ne prend pas en charge le tri (c'est-à-dire qu'elle n'implémente pas l'interface Comparable), nous pouvons alors créer un "comparateur de cette classe" pour effectuer le tri. Il n'y a toujours qu'un seul Comparable, mais il peut y avoir plusieurs comparateurs pour définir l'ordre des objets.
9. Qu'est-ce qu'un cours abstrait ? En quoi est-ce différent d’une interface ? Pourquoi utiliseriez-vous des classes abstraites ?
Les classes abstraites font référence à des classes qui ne peuvent pas être instanciées ; une classe ne peut utiliser la relation d'héritage qu'une seule fois. Cependant, une classe peut implémenter plusieurs interfaces.
La classe abstraite et l'interface reflètent différents concepts de conception. En fait, la classe abstraite représente la relation "est-un", et l'interface représente la relation "comme-un"
Les classes qui implémentent les classes abstraites et les interfaces doivent implémenter toutes les méthodes qu'elles contiennent. Les classes abstraites peuvent avoir des méthodes non abstraites. Il ne peut pas y avoir de méthodes d'implémentation dans l'interface. Mais en Java8, les méthodes statiques par défaut sont autorisées dans les interfaces.
Les variables définies dans l'interface sont publiques static final par défaut, et leur valeur initiale doit être donnée, elles ne peuvent donc pas être redéfinies dans la classe d'implémentation, ni leurs valeurs ne peuvent être modifiées. Les variables des classes abstraites sont conviviales par défaut et leurs valeurs peuvent être redéfinies dans les sous-classes ou réaffectées.
Lorsqu'une sous-classe implémente une méthode abstraite dans la classe parent, la visibilité peut être supérieure ou égale à celle de la classe parent tandis que la visibilité de la méthode d'interface dans la classe d'implémentation d'interface ne peut être que la même ; comme celui de l'interface (publique).
Utilisez des classes abstraites pour les réutiliser. Réduisez la quantité de codage et réduisez le couplage.
10. Décrire la surcharge et la réécriture en Java ?
La surcharge et la réécriture vous permettent d'utiliser le même nom pour implémenter différentes fonctions, mais la surcharge est une activité au moment de la compilation, tandis que la substitution est une activité au moment de l'exécution. Vous pouvez remplacer les méthodes de la même classe, mais vous ne pouvez remplacer que les méthodes des sous-classes. La réécriture doit avoir un héritage
Réécriture : 1. Dans les sous-classes, les méthodes héritées de la classe de base peuvent être réécrites selon les besoins. 2. La méthode substituée et la méthode substituée doivent avoir le même nom de méthode, la même liste de paramètres et le même type de retour. 3. Les méthodes remplacées ne peuvent pas utiliser des autorisations d'accès plus restrictives que la méthode remplacée.
En cas de surcharge, le nom de la méthode doit être le même, mais le type et le numéro du paramètre sont différents, et le type de valeur de retour peut être identique ou différent. Le type de retour ne peut pas être utilisé comme critère pour distinguer les fonctions surchargées.
11. Quelle est la différence entre Collection et Collections ?
Collection est l'interface de base du framework de collection Java ;
Collections est une classe d'outils fournie par le framework de collection Java, qui contient un grand nombre de méthodes statiques pour fonctionner ou renvoyer collections.
12. Le principe d'implémentation du polymorphisme en Java
Le soi-disant polymorphisme fait référence à la référence de classe parent pointant vers l'objet de sous-classe, et la sous-classe sera appelée lorsque la méthode est appelée Implémentation plutôt que l’implémentation de la classe parent. La clé de la mise en œuvre du polymorphisme réside dans la « liaison dynamique ».
13.Quelles méthodes sont définies dans l'objet ?
clone(), equals(), hashCode(), toString(), notify(), notifyAll(),
wait(), finalize(), getClass()
14.Génériques Java et effacement de type ?
Les génériques sont des types paramétrés. Lors de la création d'une collection, spécifiez le type d'éléments de la collection. Cette collection ne peut transmettre que des paramètres de ce type. Effacement de type : le bytecode généré par le compilateur Java ne contient pas d'informations génériques, il est donc effacé au moment de la compilation : 1. Les génériques sont remplacés par la classe parent de niveau supérieur. 2. Supprimés.
15. Nommez 5 nouvelles fonctionnalités introduites dans le JDK 1.8 ?
Java 8 est une version révolutionnaire dans l'histoire de Java. Voici les 5 principales fonctionnalités du JDK 8 :
L'expression Lambda permet de transmettre une fonction anonyme Stream comme un flux. L'API d'objet, tirant pleinement parti des processeurs multicœurs modernes, vous permet d'écrire du code très concis ; l'API de date et d'heure, enfin, il existe une bibliothèque de date et d'heure stable et simple que vous pouvez désormais utiliser. méthodes statiques et par défaut dans l'interface ; Répétez les annotations, vous pouvez désormais utiliser la même annotation plusieurs fois sur le même type.
16. La portée d'accès des mots-clés publics, privés, protégés et par défaut en Java :
Protégé est accessible dans le package et les sous-classes en dehors du package, par défaut peut uniquement Accès au sein du même package, prvate ne peut être que de la même classe
17. Structures de données couramment utilisées :
ensembles, structures linéaires (tableaux, files d'attente, liens listes et piles), formes d'arbre Structure, structure graphique
18. Quel arbre est utilisé pour implémenter TreeMap en Java ? (Réponse)
TreeMap en Java est implémenté à l'aide d'arbres rouge-noir.
19. Qu'est-ce qu'une classe interne anonyme ? Comment accéder aux variables définies en dehors de celui-ci ?
Les classes internes anonymes sont des classes internes sans noms. Les classes internes anonymes ne peuvent être utilisées qu'une seule fois. Elles sont généralement utilisées pour simplifier l'écriture de code.
Les classes internes anonymes ne peuvent accéder qu'aux variables finales de la classe externe. Java 8 est plus intelligent : si une classe interne anonyme accède à une variable locale, alors la variable locale équivaut à utiliser automatiquement la modification finale.
20. Comment créer un motif singleton ? En parlant de double vérification, il a dit que ce n’était pas thread-safe. Comment créer efficacement un singleton thread-safe ?
L'un se fait par énumération et l'autre par classe interne statique.
21. Quelle est la différence entre la méthode poll() et la méthode remove() ?
poll() et
remove() suppriment tous deux un élément de la file d'attente, mais poll() retournera vide lorsqu'il ne parvient pas à obtenir l'élément, mais remove() échoue. Une exception sera levée quand.
22. Écrivez un code pour supprimer un élément lors du parcours d'une ArrayList
À l'aide d'un itérateur.
Itérateur itr = list.iterator();
while(itr.hasNext()) {if(…) { itr.remove();} }
JVM
1. Comment JVM charge-t-elle une classe, quelles méthodes existe-t-il dans le modèle de délégation parent
Classe Processus de chargement : chargement, vérification (le rôle de l'étape de vérification est de garantir que les informations contenues dans le flux d'octets du fichier Class sont conformes aux spécifications de la JVM et ne causeront pas de dommages à la JVM), préparation (l'étape de préparation alloue de la mémoire pour variables et définit l'initialisation des variables de classe), l'analyse (le processus d'analyse consiste à remplacer la référence de symbole dans le pool constant par une référence directe) et l'initialisation.
Méthodes du modèle de délégation parent : la délégation parentale signifie que si une classe reçoit une demande de chargement de classe, elle n'essaiera pas de la charger par elle-même en premier, mais trouvera d'abord le chargeur de classe parent pour la terminer. Lorsque le chargeur de classe de démarrage de niveau supérieur indique qu'il ne peut pas charger la classe, la sous-classe essaie de la charger elle-même. Lorsque le chargeur d'initiateur d'origine ne peut pas être chargé, il ne regardera pas vers le bas, mais lèvera une exception ClassNotFound.
Méthodes : chargeur de classe Bootstrap, chargeur de classe d'extension, chargeur de classe d'application, chargeur de classe personnalisé. Le but est d'empêcher plusieurs copies du même bytecode d'apparaître en mémoire.
2. Algorithme GC (quels types d'objets sont considérés comme des objets recyclables, analyse d'accessibilité), collecteur CMS
Comment jvm détermine-t-il qu'un objet est devenu Pour identifier recyclable "garbage", il existe généralement deux méthodes : la notation de référence et l'algorithme de recherche de racine. La notation de référence ne peut pas résoudre le problème des références circulaires, c'est pourquoi la recherche racine est utilisée. Partant d'une série d'objets « GC Roots » et cherchant vers le bas, le chemin parcouru par la recherche est appelé chaîne de référence. Lorsqu'il n'y a pas de chaîne de référence entre un objet et "GC Roots", on dit que sa référence est inaccessible. Les objets qui ne peuvent pas être référencés sont considérés comme des objets recyclables.
Plusieurs éboueurs : 1. Serial New/Serial Old (série), 2. Parrallel New (parallèle), 3. Parrallel Scavenge, 4. Parrallel Old, 5. CMS (le collecteur CMS est un collecteur qui vise pour obtenir le temps de pause de récupération le plus court. Il s'agit d'un collecteur simultané qui utilise l'algorithme Mark-sweep.), 6. G1 (est un collecteur parallèle et simultané, et peut créer une collection prévisible. Le modèle de temps de pause est généralement basé sur la marque nettoyage et utilise partiellement la réplication)
3. En quelles zones la JVM est divisée et que fait chaque zone ?
1) Zone méthode (méthode) : partagée par tous les threads. La zone méthode contient toutes les informations de classe et les variables statiques.
2) Heap : Partagé par tous les threads, il stocke les instances d'objets et les tableaux. Le tas Java est la zone principale de GC.
3) Pile : Chaque thread contient une zone de pile, qui stocke certaines variables locales, etc.
4) Compteur de programme : C'est un indicateur de ligne du bytecode exécuté par le thread actuel.
4. Quels éléments sont stockés dans la nouvelle génération de la JVM, l'ancienne génération et la génération persistante ?
La génération persistante stocke principalement les informations de classe des classes Java et a peu à voir avec les objets Java à collecter par le garbage collection. Tous les objets nouvellement générés sont d'abord placés dans la jeune génération, et l'ancienne génération stocke les objets avec des cycles de vie longs.
5. Débordement de mémoire et fuite de mémoire :
Débordement de mémoire : lorsque le programme demande de la mémoire, il n'y a pas assez de mémoire, la valeur de fuite de mémoire est insuffisante ; L'objet poubelle ne peut pas être recyclé, vous pouvez utiliser l'outil d'analyse de mémoire pour afficher les fuites.
6. Processus et threads :
Un processus est un programme en cours d'exécution (indépendance, dynamique, concurrence), et un thread fait référence au flux d'exécution séquentiel dans un processus. . La différence est la suivante : 1. Aucune mémoire n'est partagée entre les processus. 2. Le coût de création d'un processus d'allocation de ressources est beaucoup plus élevé, le multithreading est donc plus efficace dans un environnement à forte concurrence.
7. Sérialisation et désérialisation :
La sérialisation fait référence à la conversion d'objets Java en séquences d'octets, et la désérialisation est le contraire. Principalement pour la communication entre les threads Java et le transfert d'objets. Seuls les objets de classe qui implémentent l'interface Serialisable ou Externalisable peuvent être sérialisés.
Quelle est la majorité de la longueur de int dans la JVM 8,64 bits ?
En Java, la longueur d'une variable de type int est une valeur fixe, quelle que soit la plateforme, et est toujours de 32 bits. Cela signifie que la longueur du type int est la même dans les machines virtuelles Java 32 bits et 64 bits.
9. Quelle est la différence entre WeakReference et SoftReference en Java ?
Il existe quatre types de références en Java. StrongReference, SoftReference, WeakReference et PhantomReference.
StrongReference est l'implémentation de référence par défaut de Java. Elle survivra dans la JVM le plus longtemps possible lorsqu'aucun objet ne pointe vers elle, elle sera recyclée par GC
WeakReference. , est une référence faible, lorsque l'objet référencé n'a plus de référence forte dans la JVM, il sera recyclé par GC
Bien que WeakReference et SoftReference soient tous deux bénéfiques pour améliorer l'efficacité du GC et de la mémoire, WeakReference, une fois le la dernière référence forte est perdue, elle sera recyclée par GC, et SoftReference conservera la référence le plus longtemps possible jusqu'à ce que la JVM manque de mémoire (garantie machine virtuelle). Cette fonctionnalité rend
SoftReference une application de Caching très adaptée.
10. Expliquez l'espace de tas Java et le GC ?Lors du démarrage via la commande Java
Lorsqu'un processus Java démarre, de la mémoire lui sera allouée. Une partie de la mémoire est utilisée pour créer de l'espace de tas. Lorsqu'un objet est créé dans le programme, la mémoire est allouée à partir de l'espace de tas. GC est un processus à l'intérieur de la JVM qui récupère la mémoire des objets non valides pour une allocation future.
11.Quelle est la différence entre tas et pile en Java ?
Le tas et la pile dans JVM appartiennent à différentes zones de mémoire et sont utilisés à des fins différentes. La pile est souvent utilisée pour stocker les cadres de méthode et les variables locales, tandis que les objets sont toujours alloués sur le tas. La pile est généralement plus petite que le tas et n'est pas partagée entre plusieurs threads, alors que le tas est partagé par tous les threads de l'ensemble de la JVM.
Concurrency, lock
1.mot-clé volatile, Lock
En programmation concurrente : problèmes d'atomicité, visibilité problèmes, problèmes de commande.
Le mot-clé volatile peut assurer la visibilité, et le mot peut interdire la réorganisation des instructions, mais il ne peut pas garantir l'atomicité. La visibilité ne peut garantir que la dernière valeur est lue à chaque fois, mais volatile ne peut pas garantir l'atomicité des opérations sur les variables. Ajoutez le mot-clé Lock et la barrière de mémoire à l'instruction de variable générée.
L'implémentation de Lock fournit une gamme d'opérations de verrouillage plus large que ce qui est disponible à l'aide de méthodes et d'instructions synchronisées, et elle gère les problèmes de synchronisation des threads de manière plus élégante. L'utilisation de méthodes ou de blocs d'instructions modifiés avec synchronisé libérera automatiquement le verrou une fois le code exécuté, tandis que l'utilisation de Lock nous oblige à libérer manuellement le verrou
2. , etc.)
Optimisation SQL, optimisation de la structure des tables, optimisation des index, optimisation des paramètres de cache
Chaque fois que Java est modifié, il doit être recompilé, empaqueté. et déployé. Existe-t-il un meilleur moyen
Le rechargement à chaud peut être utilisé
4. Quelles sont les méthodes de communication inter-processus ?
1) Pipe, 2) Pipe nommée, 3) Signal, 4) File d'attente de messages, 5) Mémoire partagée, 6) Mappage de mémoire (mémoire mappée), 7) sémaphore, 8) Socket
5.Sychronized modifie les méthodes statiques, verrouillant la classe elle-même au lieu de l'instance, et les méthodes non statiques verrouillent l'instance.
6. Dans quelles circonstances le système d'exploitation se bloquera-t-il ?
Ce qu'on appelle l'impasse : fait référence à une impasse causée par plusieurs processus en compétition pour les ressources pendant le fonctionnement. Cause : concurrence pour les ressources : lorsque plusieurs processus dans le système utilisent des ressources partagées et que les ressources ne suffisent pas à répondre aux besoins, les processus entrent en concurrence pour les ressources et provoquent une impasse. L'ordre d'avancement entre les processus est illégal : l'ordre de demande et de libération des ressources est inapproprié, ce qui entraînera également une impasse du processus
Quatre conditions d'impasse :
1. Condition d'exclusion mutuelle (ressources exclusives du processus) 2. Demande et rétention (lorsque le processus est bloqué en raison d'une demande de ressources, les ressources obtenues seront conservées) 3. Condition de non-privation (les ressources obtenues par le processus seront utilisées jusqu'à la fin Avant, il ne peut pas être privé de force) 4. Attente cyclique (une relation de ressource d'attente cyclique tête-à-queue se forme entre plusieurs processus)8. Comment comprendre les verrous distribués ?
Étant donné que dans le travail quotidien, les serveurs en ligne sont déployés sur plusieurs serveurs distribués, nous sommes souvent confrontés au problème de la cohérence des données dans les scénarios distribués, nous devons donc utiliser des verrous distribués pour résoudre ces questions.9. Quelle est la relation entre la synchronisation des threads et le blocage ? La synchronisation bloque-t-elle forcément ? Le blocage doit-il être synchrone ?
Que les threads soient synchronisés ou non n'a rien à voir avec le blocage ou le non-blocage. La synchronisation est un processus, et le blocage est un état d'un thread. La concurrence peut se produire lorsque plusieurs threads opèrent sur des variables partagées. À ce stade, la synchronisation est nécessaire pour empêcher plus de deux threads d'entrer dans la zone critique en même temps. Au cours de ce processus, le thread qui entre plus tard dans la zone critique sera bloqué, en attendant que le thread entré en premier sorte de la zone critique. zone.10. Quelle est la différence entre synchrone et asynchrone ?
La plus grande différence entre synchrone et asynchrone est. L’un doit attendre, l’autre non. La synchronisation peut éviter les blocages et la lecture de données sales. Elle est généralement utilisée lors du partage d'une certaine ressource. Si tout le monde dispose des autorisations de modification et modifie un fichier en même temps, il est possible qu'une personne lise le contenu qu'une autre personne a supprimé. Une erreur se produira et la synchronisation sera modifiée dans l'ordre.11. Pool de threads
Selon les propres conditions environnementales du système, il limite efficacement le nombre de threads d'exécution pour obtenir les meilleurs résultats de fonctionnement. Les threads contrôlent principalement le nombre de threads en cours d'exécution. Les threads qui dépassent le nombre attendent en ligne, attendent qu'une tâche soit exécutée, puis retirent la tâche du début de la file d'attente pour l'exécution12. . Comment appeler la méthode wait() ? Utiliser if bloc ou boucle ? Pourquoi?
La méthode wait() doit être appelée en boucle, car lorsque le thread récupère le CPU et démarre l'exécution, d'autres conditions peuvent ne pas encore être remplies, il est donc préférable de faire une boucle pour vérifier si le les conditions sont remplies avant le traitement. Les méthodes wait(), notify() et notifyall() sont des méthodes de contrôle de synchronisation fournies par la classe java.lang.Object pour que les threads implémentent la communication inter-thread. Attendez ou réveillez-vous13. Plusieurs méthodes pour implémenter les threads
(1) Héritez de la classe Thread et réécrivez la fonction d'exécution (2) Implémentez l'interface Runnable, réécrivez la fonction d'exécution (3) Implémentez l'interface Callable, réécrivez la fonction d'appel14. Qu'est-ce qu'un faux partage dans un environnement multithread ?
Le pseudo-partage est un problème de performances bien connu dans les systèmes multithread (chaque processeur possède son propre cache local). Le système de cache stocke les données en unités de lignes de cache. Une ligne de cache est une puissance entière de 2 octets consécutifs, généralement 32 à 256 octets. La taille de ligne de cache la plus courante est de 64 octets. Lorsque plusieurs threads modifient des variables indépendantes, si ces variables partagent la même ligne de cache, elles affecteront par inadvertance les performances de chacun. Il s'agit d'un faux partage.
Réseau, base de données
1. Comment TCP assure-t-il une transmission fiable ? Processus de poignée de main à trois ?
Dans une connexion TCP, le flux de données doit être transmis à l'autre partie dans le bon ordre. La fiabilité de TCP est obtenue grâce à la numérotation séquentielle et à l'accusé de réception (ACK). Les connexions TCP sont initialisées par une négociation à trois. Le but de la négociation à trois est de synchroniser les numéros de séquence et les numéros de confirmation des deux parties et d'échanger des informations sur la taille de la fenêtre TCP. La première fois correspond au moment où le client initie la connexion ; la deuxième fois signifie que le serveur a reçu la demande du client et la troisième fois signifie que le client a reçu un retour du serveur ;
2. Quelles sont vos commandes couramment utilisées sous Linux ?
1. La commande cd permet de changer de répertoire. cd / Aller dans le répertoire racine cd ~ Aller dans le répertoire utilisateur
2. La commande ls permet d'afficher le contenu du répertoire.
3. La commande cp permet de copier le fichier cp
4.mv la commande mv t.txt Document déplace le fichier t.txt vers le répertoire Document.
3. Quels sont les algorithmes de hachage couramment utilisés ?
1. Hachage additif : Le hachage dit additif consiste à ajouter les éléments d'entrée un par un pour former le résultat final.
2. Hachage d'opération sur bits : ce type de fonction de hachage mélange entièrement les éléments d'entrée en utilisant diverses opérations sur bits (généralement Shift et XOR)
3. charAt(i)
4. Qu'est-ce qu'un hachage cohérent ?
L'objectif de conception est de résoudre le problème des points chauds sur Internet. L'algorithme de hachage cohérent propose quatre définitions pour déterminer la qualité de l'algorithme de hachage dans l'environnement de cache en évolution dynamique : 1 , Balance (Balance). ) 2. Monotonie (Monotonicité) 3. Dispersion (Spread) 4. Charge (Load)
5. Quels sont les paradigmes dans la base de données ?
Première forme normale - les tables de la base de données (toutes les valeurs de champ) sont des éléments de données atomiques indivisibles.
Deuxième forme normale - Chaque colonne de la table de base de données est liée à la clé primaire et ne peut pas être liée uniquement à une certaine partie de la clé primaire.
Troisième forme normale - Chaque colonne de données de la table de base de données est directement liée à la clé primaire et ne peut pas être indirectement liée. La normalisation consiste à réduire la redondance des données.
6. Quelle est la structure de l'index dans la base de données ? Dans quelles circonstances est-il approprié de construire un index ?
La structure de l'index dans la base de données est une structure de données triées. L'index de la base de données est implémenté via un arbre B et un arbre B+ déformé. Dans quelles circonstances n'est-il pas approprié de créer un index : 1. Pour les colonnes rarement utilisées ou référencées lors des requêtes ; pour les colonnes avec seulement quelques valeurs de données ; pour les colonnes définies comme types de données image, texte et bits lors de la modification des performances ; supérieure aux performances de récupération.
Selon les propres conditions environnementales du système, il limite efficacement le nombre de threads d'exécution pour obtenir les meilleurs résultats de fonctionnement. Les threads contrôlent principalement le nombre de threads exécutés. Les threads qui dépassent le nombre attendent en ligne, attendent qu'une tâche soit exécutée, puis retirent la tâche du début de la file d'attente pour l'exécution
7. . Utilisé sous le package simultané Quoi ?
java.util.concurrent, java.util.concurrent.atomic et java.util.concurrent.lock
8. Quelles sont les bases de données couramment utilisées ? Avez-vous déjà utilisé Redis ?
MySQL, SQL Server, base de données Oracle.
9. Quels protocoles open source connaissez-vous ?
GPL (GNU General Public License) : Licence publique générale GNU
LGPL (GNU Lesser General Public License) : GNU Lesser General Public License
BSD
(Berkeley Software Distribution) : Contrat de licence de distribution de logiciels de Berkeley
MIT (Massachusetts Institute of Technology) : Le nom de MIT vient de MIT
Apache (Licence Apache) : Licence Apache
MPL (Mozilla Public License) : Mozilla Public License
10. Lors de la soumission d'un formulaire, la différence entre get et post
1. get obtient informations du serveur, et post transmet des informations au serveur
2. La quantité de données transmises par get est relativement faible et post peut être plus grande
3. La sécurité de get est relativement faible
11. Quelle est la différence entre le protocole TCP et le protocole UDP ? (réponse réponse)
L'abréviation de TCP (Tranfer Control Protocol) est un protocole orienté connexion qui garantit la transmission Avant de transmettre le flux de données, les deux parties établiront d'abord un canal de communication virtuel. Les données peuvent être transmises avec peu d'erreurs.
L'abréviation de UDP (User DataGram Protocol) est un protocole sans connexion. Lorsque vous utilisez UDP pour transmettre des données, chaque segment de données est une information indépendante, y compris l'adresse source complète et la destination. destination via n’importe quel chemin possible sur le réseau. Par conséquent, la possibilité d’atteindre la destination, ainsi que le temps nécessaire pour atteindre la destination et l’intégrité du contenu ne peuvent être garantis.
TCP prend donc plus de temps pour établir une connexion qu'UDP. Comparé à UDP, TCP offre une sécurité et une fiabilité plus élevées.
Il n'y a pas de limite sur la taille de transmission du protocole TCP. Une fois la connexion établie, les deux parties peuvent transmettre une grande quantité de données dans un certain format, tandis que UDP est un protocole peu fiable avec une limite de taille et ne peut pas le faire. dépasser 64K à la fois
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!