Les bases de JAVA (entretien)


1. Fondation JAVA

1. Qu'est-ce que l'orienté objet ?

encapsulation, héritage, polymorphisme

2. Quelle est votre opinion sur les exceptions ? Comment le gérez-vous habituellement ? (À quoi servira-t-il finalement et où sera-t-il placé lorsque le flux sera fermé ?)
  • Une exception est l'apparition d'un problème lors de la compilation ou de l'exécution du programme ;
  • Throwable est la classe parente de toutes les erreurs (problèmes non liés à la programmation, objectifs de la solution principale et réglage des performances) et des exceptions (problèmes de programmation et peut gérer réglable) ;
  • La gestion manuelle des exceptions peut améliorer la robustesse du programme ;
3. La différence entre tas et pile en JAVA, parlons du mécanisme de mémoire de java. (Le type de référence peut-il être imprimé ? Lors de l'impression d'une variable déclarée par String, qu'est-ce qui est imprimé ?)
  • Le tas est utilisé pour stocker des références aux types de données et objets de base (noms d'adresse mémoire des types de référence)
  • La pile est spécialement utilisée pour stocker la valeur réelle du type de données de référence, qui est gérée par la JVM et ouvre de l'espace pour stocker des ressources ;
4. Le rôle du pool de threads (décrivez brièvement les avantages et les inconvénients du style paresseux et du style affamé du mode singleton)
  • Améliorer la gérabilité des threads ;
  • Réduire la consommation de ressources ;
  • Améliorer la vitesse de réponse ;
5. Le principe de base du mécanisme de ramasse-miettes (ne parlez pas trop profondément, si vous parlez trop, vous ferez semblant d'avoir 13 ans, ce qui est facile à cibler)
  • Le ramasse-miettes s'exécute généralement comme un thread de bas niveau séparé pour effacer et recycler les objets qui sont morts ou qui n'ont pas été utilisés depuis longtemps dans le tas de mémoire dans des circonstances imprévisibles ;
  • Lorsqu'un objet est créé, le GC commence à surveiller l'adresse, la taille et l'utilisation de l'objet. Habituellement, GC utilise un graphe orienté pour enregistrer et gérer tous les objets du tas (tas). De cette manière, il est déterminé quels objets sont "accessibles" et lesquels sont "inaccessibles" ;
6. Avantages et inconvénients du mécanisme de collecte des ordures
  • Avantages : Le plus grand avantage est que le programmeur n'a pas besoin de gérer lui-même la mémoire ;
  • Inconvénients : "Ne vous en faites pas" signifie également "hors de contrôle", donc GC fournit les méthodes System.gc(), Runtime.gc() pour informer GC du recyclage ;
7. Avantages et inconvénients des expressions lambada (JDK1.8)
  • Avantages : grammaire améliorée, grammaire concise ;
  • Inconvénients : Il est difficile à comprendre au début, ce qui n'est pas propice à la compréhension des débutants JAVA ;
8. HashMap est-il commandé ?
  • Ni HashMap ni HashTable ne sont ordonnés ;
  • TreeMap et LinkedHashmap sont triés (TreeMap utilise par défaut l'ordre croissant des clés, LinkedHashmap utilise par défaut l'ordre d'insertion des données) ;
9. Similitudes et différences entre ArrayList et LinkedList
  • Même remarque :
    • ordonné;
    • répétable ;
    • Ni l'un ni l'autre ne sont thread-safe ;
  • différence:
    • ArrayList est la structure de données de Array (tableau dynamique) et LinkedList est la structure de données de Link (liste chaînée);
    • Les performances de la liste liée sont inférieures à celles de la liste de tableaux lors d'un accès par traversée aléatoire ;
    • L'ajout et la suppression d'une liste liée sont meilleurs que l'arraylist ;
    • La capacité par défaut de arraylist est de 10 lorsqu'elle est initialisée, tandis que l'initialisation par défaut de linkedlist est vide ;
10. La différence entre new ArrayList et Arrays.asList
  • La longueur de Arrays.asList est fixe ;
  • Arrays.asList ne prend en charge que la traversée et l'acquisition de valeurs, ne prend en charge aucune opération de modification telle que add(), remove(), etc., et ne peut être utilisé que comme pont pour transmettre des valeurs ;
11. Lors du passage de paramètres, qu'il s'agisse de passer par valeur ou par référence ; [j'ai encore des différends à ce sujet, donc je n'écrirai pas la réponse pour l'instant]
  • Être déterminé???
12. Comment HashMap résout-il les conflits de hachage (JDK1.8)
  • Utilisez la méthode d'adresse en chaîne (à l'aide d'une table de hachage) pour lier les données avec la même valeur de hachage ;

  • Utilisez 2 fonctions de perturbation (fonctions de hachage) pour réduire la probabilité de collisions de hachage et rendre la distribution des données plus uniforme ;

  • L'introduction de l'arbre rouge-noir réduit encore la complexité temporelle de la traversée, rendant la traversée plus rapide;


2. Intergiciel

1. Quels sont les avantages des files d'attente de messages (quel middleware avez-vous utilisé, avez-vous rencontré des pièges, par exemple)
  • Améliorer la vitesse de réponse du système ;
  • Le découplage de la production et de la consommation rend le système plus robuste et stable.
2. Que dois-je faire si le message MQ est perdu ?
  • La file d'attente des messages perd des données : les messages persistants et non persistants doivent être traités en temps opportun sans accumulation (il convient de mentionner qu'en cas de persistance, il est préférable de traiter de manière asynchrone et de démarrer les transactions, sinon ce sera plus lent et le montant de données Dans les grands cas, il est facile de provoquer une réaction en chaîne);
  • Les producteurs perdent des données : le MQ traditionnel dispose d'un mécanisme de confirmation ou d'un mécanisme de transaction, qui peut garantir que le producteur enverra le message à MQ. Par exemple, RabbitMQ a le mode transaction et le mode confirmation ;
  • Les consommateurs perdent des données : les consommateurs perdent généralement des données car ils utilisent le mode message de confirmation automatique. MQ supprimera le message après avoir reçu le message de confirmation. Si le consommateur est anormal à ce moment, le message disparaîtra. Le passage à la confirmation manuelle peut résoudre ce problème ;
3. Comment MQ réalise-t-il une consommation séquentielle ?
  • Le producteur garantit d'entrer dans la file d'attente de manière séquentielle et d'entrer dans la même file d'attente ;
  • Les consommateurs sont assurés de consommer une file d'attente et évitent que plusieurs consommateurs ne consomment la file d'attente ;
4. Les avantages de Redis pour la mise en cache et les autres scénarios d'application en plus de la mise en cache
  • Serrure distribuée ;
  • partage de session ;
  • file d'attente de messages ;
5. Dans Redis, quel est le principe des verrous distribués
  • Les verrous distribués sont conçus pour résoudre le problème des objets qui ne peuvent pas être créés dans le scénario d'application de service distribué/cluster, mais qui sont créés en continu -> consommation (un peu bouchée, comprenez bien !) ;
  • En termes simples, les verrous distribués peuvent garantir qu'un seul client peut fonctionner sur des ressources partagées à la fois ;
  • Les serrures distribuées doivent respecter les points suivants :
    • Aucun interblocage ne se produira (même si un client plante tout en maintenant le verrou et ne le déverrouille pas activement, cela peut également garantir que d'autres clients pourront le verrouiller plus tard) ;
    • Tolérant aux pannes (tant que la plupart des nœuds Redis fonctionnent normalement, le client peut verrouiller et déverrouiller) ;
    • Le déverrouillage de la cloche nécessite la personne qui a attaché la cloche (le verrouillage et le déverrouillage doivent être le même client, le client ne peut pas déverrouiller le verrou ajouté par d'autres);
  • Les méthodes fournies par Redis sont les suivantes : définir l'indicateur de verrouillage, définir l'identifiant unique du client et fournir l'heure d'expiration du verrouillage ;
  • Voyez comment le maître joue l'entrée du verrou distribué Redis : https://blog.csdn.net/qq_37781649/article/details/108814474
6. Comment résoudre la pénétration Redis (comprendre généralement le sens et comprendre la solution. Si vous étudiez attentivement, vous devez combiner des applications pratiques pour une analyse spécifique)
  • La pénétration Redis fait référence à un phénomène selon lequel lorsque la demande est envoyée à Redis, les données Redis ne sont pas atteintes, puis les données sont interrogées au niveau de la couche DB ;
  • solution:
    • Si des attaques de hackers sont envisagées, il est nécessaire de combiner filtre Bloom (BloomFilter) ou filtre de compression pour intercepter au préalable ;
    • De manière générale, interrogez les données de la base de données et stockez-les régulièrement dans Redis ;
7. Comment résoudre l'avalanche Redis
  • L'avalanche Redis fait référence à un phénomène dans lequel les données Redis sont vidées pour certaines raisons, telles que le blocage de l'application Redis, l'expiration du délai des données du cache Redis, puis toutes les demandes sont envoyées à la base de données ;
  • solution:
    • Ajouter du jugement au business, lorsque la valeur récupérée par redis est vide, quelle valeur sera prise par défaut ;
    • Lors de la définition du délai d'expiration des données mises en cache, au lieu d'utiliser une valeur uniforme, il peut être randomisé dans une certaine plage pour éviter que toutes les données ne soient invalidées en même temps ;
    • En cas de plantage Redis, vous pouvez utiliser le mode sentinelle ou cluster avant l'incident, définir le cache local ou la limite actuelle pendant l'incident, redémarrer automatiquement et lire les données Redis du disque après l'incident, afin de restaurer rapidement les données mises en cache. de stratégies ;

3. Technologie de cadre grand public

1. Décrivez brièvement la compréhension du printemps (le noyau est AOP et IOC, si vous sentez que le temps d'entretien est court, vous pouvez diverger et parler du concept de MVC)
  • AOP : Programmation orientée aspect (principalement intercepter un certain point, puis exécuter une méthode publique avant ou après ce point, qui est réutilisable)
  • IOC : Inversion of Control (utilisant la manière d'injecter des dépendances pour réaliser le découplage entre les objets)
2. Décrivez brièvement le cycle de vie du haricot de printemps
  • (Je plaisante, hahaha) Le processus principal est le suivant : initialisation du conteneur --> appel professionnel --> fermeture du conteneur ;
  • Lorsque le conteneur est initialisé, il sera suivi à tour de rôle : Construct Bean --> Inject Bean Properties --> (Exécuter la méthode d'initialisation spécifiée), puis effectuer un appel métier et enfin détruire le conteneur

3. La voie de l'injection de dépendance

  • injection de constructeur ;
  • injection d'incubateur ;
  • Injection basée sur les annotations (recommandation officielle) ;
4. La différence entre @RestController et @Controller
  • L'annotation @RestController est équivalente à la combinaison de @Controller+@ResponseBody deux annotations
  • Mais en utilisant l'annotation @RestController, les pages jsp et html ne peuvent pas être renvoyées, et l'analyseur de vue ne peut pas analyser les pages jsp et html
5. La portée de Spring Bean
  • singleton : il n'y aura qu'une seule instance Bean partagée dans le conteneur Spring IoC, quel que soit le nombre de beans qui y font référence, il pointera toujours vers le même objet (couramment utilisé) ;
  • prototype : chaque fois que le bean défini par le prototype est obtenu via le conteneur Spring, le conteneur créera une nouvelle instance de Bean, chaque instance de Bean a ses propres propriétés et son propre état (couramment utilisé) ;
  • request : dans une requête HTTP, le conteneur renverra la même instance du Bean. Un nouveau bean sera généré pour différentes requêtes HTTP, et le bean n'est valide que dans la requête HTTP actuelle ;
  • session : dans une session HTTP, le conteneur renverra la même instance du bean. Une nouvelle instance sera créée pour différentes demandes de session, et cette instance de bean n'est valide que dans la session en cours ;
  • Session globale : dans une session Http globale, le conteneur renverra la même instance du bean, qui n'est valide que lors de l'utilisation du contexte de portlet ;
6. La différence entre Mybatis-plus et Mybatis (notez qu'il faut l'expliquer en lien avec le projet, pas seulement les différences suivantes)
  • Mybatis-plus a fait plus d'extensions sur la base de Mybatis ;
  • Plus peut utiliser le verrouillage optimiste ;
  • Plus dispose d'un générateur de code ;
  • Plus peut effectuer une analyse des performances d'exécution SQL (non recommandé pour les environnements de production) ;
  • Plus peut effectuer des intercepteurs d'analyse d'exécution SQL (non recommandé pour les environnements de production) ;
7. La différence entre resultType et resultMap
  • Dans l'ensemble, resultMap est plus puissant car il peut combiner librement des ensembles de résultats par rapport à resultType ;
  • resultType est un mappage un à un pour une seule classe VO ;
  • resultMap peut librement combiner et mapper l'ensemble de résultats renvoyé, sans créer de nouvelle classe VO ou PO ;
8. La différence entre l'espace réservé # et $
  • #{} ne peut représenter qu'une certaine valeur, et la valeur remplie suivante a une correspondance un à un avec l'espace réservé, ce qui est relativement monotone, mais il n'y a aucun risque d'injection SQL ;
  • ${} représente un certain fragment, qui peut être rempli arbitrairement, ce qui est plus flexible, mais il y a un risque d'injection SQL ;
9. La réflexion coûtera plus cher en termes de performances, mais pourquoi Spring est-il si cool ?
  • La réflexion ne sera pas optimisée par la JVM et aura en effet plus de surcharge de performances ;
  • Spring ajoute toutes les classes qui doivent être obtenues et définies sous la forme de fichiers de configuration lorsque le conteneur est chargé.
  • Le problème de dépendance circulaire est résolu grâce au cache de second niveau et au cache de troisième niveau (point central) ;
10. Quels modèles de conception sont utilisés dans le framework Spring (beaucoup, voici quelques modèles typiques à illustrer)
  • Mode usine : créez des objets Bean, et IOC est un pipeline découplé construit en mode usine ;
  • Mode singleton : la portée par défaut de Spring Bean est singleton ;
  • Mode proxy : la mise en œuvre d'AOP est le mode proxy. De plus, le journal d'aspect fréquemment utilisé est également l'incarnation du mode proxy ;
  • Mode observateur : le modèle événementiel de Spring est une application classique du mode observateur ;
  • Mode décorateur : chaque classe parent d'entité vide que vous voyez est essentiellement un mode décorateur, non limité à Spring ;
11. Zookeeper à Dubbo est utilisé comme centre d'enregistrement. Si le cluster du centre d'enregistrement est en panne, les éditeurs et les abonnés peuvent-ils toujours communiquer ?
  • S'il peut communiquer, lorsque dubbo est démarré, le consommateur extrait des données telles que l'interface d'adresse du producteur enregistré de zk et les met en cache localement. Chaque fois qu'il est appelé, il est appelé en fonction de l'adresse du stockage local ; le cluster peer-to-peer du centre d'enregistrement basculera sur l'autre après que l'un des centres d'enregistrement est en panne ; après que tous les centres d'enregistrement sont vers le bas, le fournisseur de services et le consommateur peuvent toujours communiquer via le cache local. Le fournisseur de services est sans état, et si l'un d'entre eux est en panne, cela n'affectera pas l'utilisation ; si le fournisseur de services est complètement en panne, le consommateur de services ne pourra pas l'utiliser et se reconnectera indéfiniment pour attendre que le serveur se rétablisse ; peu importe s'il raccroche, mais le principe est que vous n'avez pas ajouté de nouveaux services, si vous souhaitez appeler de nouveaux services, c'est impossible ;
12. Comment Dubbo résout-il le mécanisme de sécurité ?
  • Dubbo empêche les utilisateurs de contourner le centre d'enregistrement pour se connecter directement via des jetons Token, puis gère l'autorisation sur le centre d'enregistrement. Dubbo fournit également une liste noire et blanche de services pour contrôler les appelants autorisés par le service.
13. Composants principaux de SpringBoot
  • [Utilisation courante] Spring Boot Starter (démarreur principal, intègre de nombreux packages de dépendance courants)
  • [Usage courant] Spring boot Autoconfigure (configurez Bean dans le package d'implémentation de code dans le conteneur Spring, qui est le style cohérent des premiers jours de Spring)
  • Spring boot Cli (pas couramment utilisé, c'est un outil client, combiné avec un script groovy, si vous êtes intéressé, vous pouvez en apprendre davantage)
  • Actionneur de botte à ressort (pas couramment utilisé, plug-in de surveillance, si vous êtes intéressé, vous pouvez vous renseigner à ce sujet)

4. Base de données


5. Autres

1. Comment optimiser le système (Avez-vous traité des problèmes systémiques, tels que des temps d'arrêt du serveur causés par des problèmes de thread, ou la charge de la base de données est lourde et la simultanéité n'est pas suffisante en raison du manque d'outils de mise en cache]
  • Optimisation de la logique du code ;
  • optimisation de la base de données ;
  • Utiliser des outils de mise en cache tiers, tels que redis et mem, pour améliorer la lecture et l'écriture et réduire la pression sur la base de données ;
  • Augmentation physique telle que l'extension du serveur et l'extension du disque ;
2. Comment résoudre le problème de forte concurrence ? (Cette question est difficile à répondre, car chaque entreprise ou projet a des exigences différentes, mais elle est principalement expliquée à partir de ces aspects)
  • Niveau de service (extension de serveur ou déploiement de serveur séparé, amélioration de la capacité de la base de données, etc.) ;
  • Niveau de code (optimisation de la logique du code, cache tiers pour améliorer la lecture et l'écriture, réduire l'interaction avec la base de données) ;
  • Verrouillage (de nombreuses personnes peuvent répondre à un verrouillage optimiste, mais parfois un verrouillage pessimiste considéré au niveau de l'entreprise est plus applicable) ;
3. Que signifie l'équilibrage de charge ?
  • Améliorer la convivialité (le noyau est celui-ci, il est inutile d'en dire plus, mais cela peut être expliqué en combinaison avec votre propre expérience de combat réelle);
4. Réglage de Tomcat (il suffit de parler de quelques paramètres ici, car le réglage de Tomcat est lié au matériel, et ceux qui ont une expérience de combat réelle peuvent combiner les cas précédents pour donner des réponses divergentes)
  • maxThreads : le nombre maximum de threads pouvant être créés
  • acceptCount : lorsque tous les threads disponibles pour le traitement des requêtes sont utilisés, le nombre de requêtes pouvant être placées dans la file d'attente de traitement, les requêtes dépassant ce nombre ne seront pas traitées ;
  • connnectionTimeout : Délai d'expiration de la connexion réseau, unité : millisecondes. Le mettre à 0 signifie ne jamais expirer, ce qui est un danger caché. Peut généralement être réglé sur 30 000 millisecondes ;
  • minSpareThreadsTomcat : le nombre de threads créés lors de l'initialisation ;
  • maxSpareThreads : une fois que le thread créé dépasse cette valeur, Tomcat fermera le thread de socket qui n'est plus nécessaire ;
  • minProcessors : le nombre minimum de threads de connexion inactifs, utilisés pour améliorer les performances de traitement du système, la valeur par défaut est 10 ;
  • maxProcessors : le nombre maximum de threads de connexion, c'est-à-dire : le nombre maximum de requêtes traitées simultanément, la valeur par défaut est 75 ;
  • acceptCount : le nombre maximal de connexions autorisées, doit être supérieur ou égal à maxProcessors, la valeur par défaut est 100 ;
  • enableLookups Que ce soit pour rechercher le nom de domaine, la valeur est : true ou false. Pour augmenter la puissance de traitement, il doit être défini sur false ;
  • Augmentez la mémoire de tomcat (résolvez principalement le problème d'OutOfMemoryError);

Je suppose que tu aimes

Origine blog.csdn.net/qq_23845083/article/details/118435733
conseillé
Classement