1. Processus d'exécution du servlet
Le client émet une demande HTTP et le serveur Web transfère la demande au conteneur servlet. Le conteneur servlet analyse l'URL et trouve le servlet correspondant basé sur le web.xml, et transmet les objets de demande et de réponse au servlet trouvé. Le servlet peut savoir qui a publié la demande, la demande d'informations et d'autres informations en fonction de la demande. Une fois que le servlet a traité la logique métier, il mettra les informations dans la réponse et répondra au client.
2. Le processus d'exécution de Springmvc
SpringMVC est un cadre de contrôle hiérarchique avec DispatchServlet comme noyau. Tout d'abord, le client émet une demande au serveur Web pour analyser l'URL de demande et faire correspondre l'URL de mappage du DispatchServlet. S'il correspond, mettez cette demande dans le DispatchServlet. Le DispatchServlet recherche la poignée correspondante en fonction de la configuration de mappage de mappage, puis remettez les droits de traitement sur la poignée trouvée. La poignée résume le code pour le traitement de la logique métier. Une fois la poignée traitée, il renverra une vue logique ModelView dans DispatchServlet. À l'heure actuelle, le ModelView est une vue logique, pas une vue formelle, donc le DispatchServlet analysera le ModelView via la ressource ViewResource, puis mettra les paramètres analysés dans la vue et revenez au client et affichez-le.
3. Compte tenu d'un fichier txt, comment obtenir le nombre de fois qu'une certaine chaîne apparaît
File file = new File ("e: //test.txt"); inputStream is = new FileInputStream (file); byte b [] = new byte [1024]; int a = is.read (b); string str [] = new String (b, 0, a) .split (""); int count = 0; for (int i = 0; i <str.length; i ++) {if ("a" .equals (str [i])) count ++;} system.out.println (count); 4. Idée de modèle de conception Java (mode monopolumn, mode d'usine, mode stratégie, un total de 23 modes de conception)
a) Mode Singleton: le cœur du mode Singleton ne nécessite que un nouveau mode objet d'instance, tels que la connexion à la base de données, le nombre de personnes en ligne, etc. Les statistiques du numéro en ligne vues sur certains sites Web sont implémentées via le mode Singleton, qui stocke une minuterie dans la base de données ou la mémoire. Lorsque quelqu'un se connecte, l'ajoute et le met encore et encore. Lorsque quelqu'un se déconnecte, retirez-le et soustrait-le et le met encore et encore. Cependant, lorsque deux personnes se connectent en même temps, elles élimineront le comptoir en même temps, en ajouteront une en même temps et la reposeront en même temps. De cette façon, les données seront erronées. Par conséquent, un objet de variable globale est nécessaire pour toutes les personnes à utiliser, et un seul objet d'instance est nécessaire. Il s'agit de l'application du mode Singleton, et le mode Singleton enregistre les ressources car il contrôle le nombre d'objets d'instance et est propice au recyclage GC.
b) POLITIQUE POLITIQUE: Il s'agit d'extraire les méthodes communes dans plusieurs classes dans une nouvelle classe, afin qu'elle puisse être étendue plus facilement, assurer la portabilité du code et la maintenabilité. Par exemple, il est nécessaire d'écrire des objets de canard, qui sont appelés, volent et apparence. Si chaque classe de canard écrit ces trois méthodes, le code sera redondant. À l'heure actuelle, nous pouvons extraire les trois méthodes appelées, voler et apparence dans la classe de canard, et les mettre dans la classe du parent de canard, afin que chaque canard hérite de la classe des parents de canard et réécrit ces trois méthodes. De cette façon, le code encapsulé est très portable. Lorsque l'utilisateur propose de nouvelles exigences telles que le canard peut nager, il est très simple pour les programmeurs OO. Nous n'avons qu'à ajouter une méthode de natation à la classe du parent de canard et à laisser le canard de baignade réécrire la méthode de natation.
c) Mode d'usine: le mode d'usine simple fournit principalement des références aux objets d'instance de manière unifiée et obtient des références aux objets d'instance via l'interface de mode d'usine. Par exemple, pour une fonction de connexion, le backend a trois classes, la classe de contrôleur, la classe d'interface et la classe d'implémentation de l'interface d'implémentation. Lorsque le client émet une demande, lorsque la demande est transmise à la classe de contrôleur, le contrôleur obtient l'objet de référence de l'interface et la classe d'implémentation implémente l'interface résume le code logique métier de connexion. Lorsque vous devez ajouter une exigence d'enregistrement, il vous suffit d'ajouter une méthode d'enregistrement à la classe d'interface, d'implémenter la méthode dans la classe d'implémentation et le contrôleur peut obtenir l'objet de référence de l'interface sans modifier le code d'origine. Cette approche est très évolutive.
5. tri à bulles, recherche binaire
a) bulle
public static void mp (int a []) {int swap = 0; for (int i = 0; i <a.length; i ++) {for (int j = i; j <a.length; j ++) {if (a [j]> a [i]) {swap = a [i]; a [i] = a [j]; a [j] = = swap;}}} system.out.println (arrays.tostring (a));}b) Recherche binaire
public static int ef (int a [], int tag) {int first = 0; int end = a.Length; for (int i = 0; i <a.Length; i ++) {int middle = (premier + end) / 2; if (tag == a [middle]) {return middle;} if (tag> a [middle]) {premier = middle + 1;} if (tag <a [a [middle] {end = middle - 1;} return =; 0;} 6-8. Compréhension de l'Ajax
a) Ajax est une demande asynchrone, c'est-à-dire une technologie de rafraîchissement locale. Dans les pages traditionnelles, les utilisateurs doivent cliquer sur des boutons ou des événements pour déclencher des demandes pour actualiser les pages. La technologie asynchrone déclenche des événements sans cliquer, ce qui améliore l'expérience utilisateur, comme le chargement asynchrone des paniers-ports dans le centre commercial, lorsque vous cliquez sur un produit, vous n'avez pas besoin de demander l'arrière-plan et de modifier directement les paramètres dynamiquement.
9. L'ordre de l'appel entre la classe parentale et la classe infantile (résultat d'impression)
a) Bloc de code statique de classe parent
b) Bloc de code statique de sous-classe
c) Constructeur de classe parent
d) Méthode de construction de sous-classe
e) Méthode ordinaire de la sous-classe
f) Réécrire la méthode de la classe parent et imprimer la méthode de réécriture
10. Appels des classes intérieures et extérieures
a) La classe intérieure peut appeler directement les variables membres de la classe externe, y compris privé, et l'utiliser. Mot-clé référencé par la classe externe pour l'appeler
b) Lorsqu'une classe externe appelle une classe interne, elle doit créer un objet de classe interne
11. Multi-threading
a) Un processus est un environnement de course indépendant, qui peut être considéré comme un programme, tandis qu'un fil peut être considéré comme une tâche d'un processus. Par exemple, QQ est un processus et une fenêtre QQ est un thread.
b) Dans un programme multi-thread, la concurrence multithread peut améliorer l'efficacité du programme. Le processeur n'entrera pas un état d'inactivité car un certain thread attend des ressources. Il donnera des ressources à d'autres threads.
c) Le thread utilisateur est le thread que nous développons le programme, et le thread de démon est le thread système, comme GC dans JVM virtuel
d) Priorité du thread: chaque thread a un niveau de priorité. Ceux qui ont un niveau fini élevé peuvent d'abord obtenir des ressources CPU pour passer le fil de l'état prêt à l'état de course. Vous pouvez également personnaliser le niveau limité de fils
e) Implume: Au moins deux fils ou plus recherchent plus de deux ressources CPU, évitez d'utiliser des verrous imbriqués s'ils évitent les impasses. Il vous suffit d'ajouter des serrures où ils doivent se synchroniser et éviter une attente infinie.
12. Le concept d'AOP et de CIO (c'est-à-dire le cœur du printemps)
a) IOC: Spring est un cadre open source. L'utilisation de cadres peut réduire notre charge de travail et améliorer notre efficacité de travail. Il s'agit d'une structure hiérarchique, c'est-à-dire que les couches correspondantes traitent la logique métier correspondante et réduisent le degré de code de couplage. Le noyau du printemps est l'inversion de contrôle du CIO et la programmation tangentielle orientée AOP. L'inversion du contrôle du CIO souligne principalement que la relation entre les programmes est contrôlée par des conteneurs, qui contrôle les objets et contrôle l'acquisition de ressources externes. L'inversion signifie que dans la programmation traditionnelle, nous créons des objets pour obtenir des dépendances, tandis que dans le CIO, le conteneur nous aide à créer des objets et à injecter des objets dépendants. C'est le conteneur nous aide à trouver et à injecter des objets. L'objet est obtenu, il est donc appelé inversion.
b) AOP: programmation orientée, gère principalement l'entreprise au niveau du système, telles que les journaux, les autorisations, les choses, etc. AOP consiste à ouvrir les objets encapsulés, à découvrir le comportement commun qui affecte plusieurs objets et à les résumer dans un module réutilisable. Ce module est nommé Aspect. La section extrait et encapsule la logique qui n'est pas liée à la logique métier mais qui est appelée conjointement par les modules commerciaux, réduisant le code en double dans le système, réduisant le couplage entre les modules et améliorant la maintenabilité du système.
13. L'idée principale de l'hibernate
a) L'idée principale de l'hibernate est le mécanisme de cartographie de la relation d'objet ROM. Il s'agit d'un mappage entre les tables en opérations entre les objets. Autrement dit, les informations extraites de la base de données seront automatiquement encapsulées dans des objets spécifiques en fonction des exigences de cartographie que vous définissez. Par conséquent, HiberNate consiste à modifier l'objet correspondant à la ligne de données en mappant la classe d'entité de table de données.
14. La différence entre les struts1 et les struts2
15. Suppression optimale d'un caractère dans une chaîne
16-17. La différence entre ArrayList et LinkedList
a) sont toutes des listes qui implémentent l'interface de liste. ArrayList est une structure de données basée sur la table et LinkedList est une structure de données liée. Lors de l'obtention d'éléments spécifiques, ArrayList est relativement rapide. Il peut être obtenu via des indices de tableau, tandis que LinkedList nécessite de déplacer le pointeur. Lors du stockage des éléments et de la suppression des éléments, LinkedList est plus efficace. Il vous suffit de déplacer le pointeur vers une position spécifiée pour l'ajouter ou la supprimer, tandis que ArrayList nécessite des données de déménagement.
18. Optimisation de la base de données
a) Sélectionnez le champ approprié, tel que le champ de boîte aux lettres, vous pouvez le définir sur char (6) et essayer de définir le champ sur Notnull, afin que la base de données n'aient pas besoin de comparer la valeur nul lors de l'interrogation
b) Utilisez une jointure à gauche sur la requête au lieu de la sous-requête
c) Utiliser la requête conjointe de l'Union pour créer des tables temporaires manuellement
d) allumer les choses. Lorsque plusieurs instructions sont exécutées dans la base de données, les choses seront retournées, ce qui peut maintenir l'intégrité de la base de données.
e) En utilisant des clés étrangères, les choses peuvent maintenir l'intégrité des données, mais elles ne peuvent garantir la corrélation des données. L'utilisation de clés étrangères peut assurer la corrélation des données
f) En utilisant les index, l'indexation est une méthode courante pour améliorer les performances de la base de données. Il permet au serveur de base de données de récupérer des lignes spécifiques beaucoup plus rapides que sans index, en particulier pour max, min, commande par requête, l'effet est plus évident
g) Instructions de requête optimisées. Dans la plupart des cas, l'utilisation d'index peut améliorer la vitesse de la requête, mais si l'instruction SQL est utilisée de manière inappropriée, l'index ne peut pas jouer ses caractéristiques.
19. Optimisation du serveur Tomcat (mémoire, nombre de connexions simultanées, cache)
a) Optimisation de la mémoire: il optimise principalement les paramètres de démarrage TomCat. Nous pouvons modifier sa mémoire maximale dans le script de démarrage Tomcat, etc.
b) Optimisation du nombre de threads: les paramètres de connexion simultanés de Tomcat sont principalement configurés dans Server.xml dans le fichier de configuration Tomcat, tels que la modification du nombre minimum de threads de connexion inactifs, qui sont utilisés pour améliorer les performances de traitement du système, etc.
c) Optimiser le cache: activer la fonction de compression et modifier les paramètres. Par exemple, la taille du contenu de sortie compressé est de 2 Ko par défaut et peut être modifiée de manière appropriée.
20. Protocole HTTP
a) Les méthodes de demande couramment utilisées incluent Get et Post
b) La différence entre GET et POST: Transférer les données, transporter des paramètres et l'adresse d'accès, et les utilisateurs peuvent le voir. Ce sera dangereux et entraînera une fuite d'informations. Le post résume les champs et les valeurs correspondantes dans une entité à transmettre, ce qui est invisible pour l'utilisateur. Il y a des restrictions sur les paramètres de passage à passer, alors qu'il n'y a aucune restriction sur le poste.
21. Protocole TCP / UDP
22. Quelles sont les interfaces de base du cadre de classe de collection Java
a) Interface de collecte, liste et définir l'interface de collection d'implémentation, ArrayList et LinkedList, Vector Implexe List Interface, Stack Hériter Vector, Interface MAP, HashTable et HashMap Implémentation d'interface MAP
23. Processus de chargement des classes
a) Lorsque vous rencontrez une nouvelle classe, vous allez d'abord dans la zone de méthode pour trouver le fichier de classe. S'il n'est pas trouvé, vous irez sur le disque dur pour trouver le fichier de classe. Après l'avoir trouvé, vous le retournerez et chargerez le fichier de classe dans la zone de la méthode. Lorsque la classe est chargée, la variable membre statique sera affectée à la zone statique de la zone de la méthode. La variable membre non statique sera affectée à la zone non statique. Ensuite, vous commencerez à initialiser la variable de membre statique et à attribuer la valeur par défaut. Après avoir attribué la valeur par défaut, la valeur d'affichage sera attribuée en fonction de l'emplacement écrit par la variable membre statique, puis le code statique sera exécuté. Le chargement de classe n'est terminé que lorsque tout le code statique est exécuté.
24. Création d'objets
a) Lorsqu'une nouvelle classe sera rencontrée, la classe sera chargée et le fichier de classe sera situé
b) Initialiser toutes les variables de membres statiques, les blocs de code statiques seront également exécutés et ils ne seront exécutés qu'une fois que la classe sera chargée.
c) Lorsque un nouvel objet, JVM allouera un espace de stockage suffisamment grand dans le tas
d) Effacer l'espace de stockage, attribuer des valeurs par défaut à toutes les variables et affecter toutes les références d'objet à NULL
e) Donner au champ quelques opérations d'initialisation en fonction de la position d'écriture
f) Appeler la méthode du constructeur (pas d'héritage)
25. Optimisation JVM
a) définir les paramètres et définir le nombre maximum de mémoire de JVM
b) Sélection du collecteur des ordures
26. Traitement de concurrence élevé
a) Comprendre certains problèmes de concurrence élevés, tels que la façon de s'assurer que tout le monde peut voir le billet sans l'acheter. De toute évidence, le mécanisme de synchronisation ne peut pas être utilisé, car la synchronisation est verrouillée et la synchronisation ne peut être effectuée que par une seule personne à la fois. Pour le moment, le mécanisme de verrouillage peut être utilisé et l'utilisation de verrouillage optimiste peut résoudre ce problème. La signification simple du verrouillage optimiste est d'utiliser le contrôle commercial pour résoudre le problème de concurrence sans verrouiller le tableau, ce qui garantit la lisibilité des données et l'exclusivité des données enregistrées, en garantissant les performances tout en résolvant le problème de données de lecture sale causée par la concurrence.
27. Comprendre les choses
a) Les choses sont atomiques, cohérentes, persistantes et isolées
b) Atomicité: fait référence au retour dans une chose, soit toute exécution est réussie ou que tout échoue.
c) Cohérence: les choses sont en cohérence avant et après l'exécution
d) Persistance: le fonctionnement de plusieurs données dans les choses est permanente
e) Isolement: Lorsqu'une chose fonctionne sur les données, une autre chose ne peut pas fonctionner sur les données, c'est-à-dire que plusieurs choses simultanées sont isolées les unes des autres.
28. Struts Workflow
a) Le client émet une demande au conteneur servlet
b) La demande est appelée par le filterdispatcher après un filtrage de colonne, et le filterdispatch recherche l'action correspondante via l'actionmapper.
c) ActionMapper trouve l'action correspondante et la renvoie à FilterDispatch, et Dispatch donne les droits de traitement à ActionProxy
d) ActionProxy trouve la classe d'action correspondante via le fichier de configuration
e) ActionProxy crée une instance d'actioniinvocation pour gérer la logique métier
f) Une fois l'action traitée, ActionInvocation est responsable de la recherche du résultat de retour correspondant en fonction de la configuration de Stut.xml. Le résultat est généralement une page JSP.