Les compétences qu'un programmeur Java avec 3 ans d'expérience professionnelle devrait posséder. C'est peut-être quelque chose qui préoccupe davantage les programmeurs Java. Je tiens à expliquer ici que toutes les personnes énumérées ci-dessous ne sont pas quelque chose que tout le monde peut maîtriser - mais plus vous maîtrisez, plus l'évaluation et le salaire que vous obtiendrez au final seront élevés.
1. Syntaxe de base
Cela inclut les fonctions de mots-clés statiques, finaux, transitoires et autres, le principe de la boucle foreach, etc. Dans l'interview d'aujourd'hui, je vous ai demandé ce que faisait le mot clé static. Si vous répondez aux variables statiques modifiées et aux méthodes modifiées, je penserai que vous êtes qualifié. Si vous répondez au bloc statique, je penserai que vous êtes bon. Je penserai que vous êtes bon, je serai très satisfait de votre réponse au guide statique, car je peux voir que vous êtes très passionné par la recherche technologique.
Le moment le plus approfondi, je me souviens que l'intervieweur m'a directement interrogé sur le principe sous-jacent de mise en œuvre du mot-clé Volatile (d'ailleurs, interviewer et être interviewé sont relatifs. L'intervieweur peut poser cette question et l'intervieweur Je pense aussi que l'intervieweur est aussi une personne qui aime étudier la technologie, ce qui augmente la bonne impression de l'intervieweur sur l'entreprise. J'ai finalement choisi l'entreprise qui a posé cette question. Ne pensez pas que ce soit trop pointilleux - plus la question est simple. , plus c'est évident. Selon le niveau d'une personne, la considération des autres à l'égard de votre technologie est principalement basée sur la profondeur d'abord et sur la largeur.
2. La collecte
est très importante et doit être demandée. Fondamentalement, il s'agit de List, Map et Set. Ils posent des questions sur les principes d'implémentation sous-jacents de diverses classes d'implémentation ainsi que sur les avantages et les inconvénients des classes d'implémentation.
Ce que les collections doivent maîtriser, ce sont les principes d'implémentation d'ArrayList, LinkedList, Hashtable, HashMap, ConcurrentHashMap et HashSet. Si vous pouvez répondre couramment aux questions, ce serait formidable si vous pouviez maîtriser le conteneur CopyOnWrite et la file d'attente. . Encore une chose, les questions ConcurrentHashMap sont souvent posées lors des entretiens, probablement parce que ce cours peut générer beaucoup de questions. Concernant ConcurrentHashMap, je vais fournir trois réponses ou orientations de recherche aux internautes :
(1) La segmentation des verrous de ConcurrentHashMap. technologie.
(2) Si la lecture de ConcurrentHashMap doit être verrouillée et pourquoi.
(3) L'itérateur de ConcurrentHashMap est-il un itérateur fortement cohérent ou un itérateur faiblement cohérent.
3. Cadre
C'est un cliché, quelque chose qu'il faut se poser en entretien. De manière générale, ils vous poseront des questions sur le framework utilisé dans votre projet, puis vous donneront quelques scénarios pour vous demander comment utiliser le framework. Par exemple, si je veux faire quelque chose lorsque Spring initialise le bean, que dois-je faire ? Si je veux détruire le bean, comment faire quelque chose, la différence entre $ et # dans MyBatis, etc. Tout cela est relativement pratique, ce ne sera pas un problème si vous avez accumulé de bonnes connaissances et appris les détails de l'utilisation du framework. .
Si vous répondez bien aux questions ci-dessus, l'intervieweur posera souvent des questions approfondies sur les principes de mise en œuvre du cadre. La question la plus fréquemment posée est le principe de mise en œuvre de Spring AOP. Bien sûr, cela peut être fait en deux phrases, même si vous ne savez pas comment le préparer. La chose la plus perverse que j'ai rencontrée a été de me demander de dessiner le diagramme UML de l'implémentation de l'usine Spring's Bean. Bien sûr, je ne serais jamais capable de répondre à une question aussi profonde/(ㄒoㄒ)/~~
4. . Base de données
Neuf fois sur dix, la base de données sera également sollicitée. Je ne parlerai pas de certaines choses fondamentales comme la différence entre tous, la jointure gauche, plusieurs index et leurs différences. La chose la plus importante est l'optimisation des performances de la base de données. Si vous ne savez rien sur l'optimisation des performances de la base de données, alors si vous le faites. Si vous avez le temps, il est recommandé de le faire avant l'entretien. Passez un jour ou deux à préparer spécifiquement les bases de SQL et de l'optimisation SQL.
Mais ne vous inquiétez pas pour la base de données. Une entreprise compte souvent de nombreux départements. Si vous n'êtes pas familier avec les bases de données et avez de très bonnes compétences de base, 90% d'entre eux vous voudront, et ils vous mettront probablement. dans la base de données en premier. Ce n'est pas un département très exigeant à exercer.
5. Quelques questions sur le Web
Java est principalement orienté vers le Web, il faut donc également se poser quelques questions sur le Web.
Les deux questions les plus fréquemment posées que j'ai rencontrées sont :
Parlez de plusieurs méthodes d'implémentation de session distribuée.
Être capable de répondre aux quatre questions couramment utilisées rendra naturellement l'intervieweur très satisfait.
Une autre question fréquemment posée est la suivante : parler de la différence et du lien entre Session et Cookie et du principe de mise en œuvre de Session. En plus de ces deux questions, le contenu du web. De plus, certains détails tels que la différence entre get/post, forward/redirect et le principe de mise en œuvre de HTTPS peuvent également être examinés.
6. Structure des données et analyse des algorithmes
Pour un programmeur, l'analyse de la structure des données et des algorithmes est mieux qu'autrement et peut certainement être utile au travail. Les tableaux et les listes chaînées constituent la base. Les piles et les files d'attente sont un peu plus approfondies mais pas difficiles. Les arbres sont les plus importants. Vous n'avez pas besoin de connaître leur implémentation spécifique. , mais vous devez savoir ce qu'est un arbre de recherche binaire. Qu'est-ce qu'un arbre équilibré, la différence entre un arbre AVL et un arbre rouge-noir. Je me souviens d'une interview, un intervieweur m'a parlé de l'index de la base de données, et il m'a demandé : Savez-vous quel type de structure de données est utilisé pour implémenter l'index ?
J'ai deviné la table de hachage, mais je me suis trompé. Il a demandé à nouveau, savez-vous pourquoi les arbres sont utilisés ? J'ai répondu que c'est parce qu'il peut y avoir plus de conflits dans la table de hachage, ce qui augmentera considérablement la complexité temporelle de la recherche face à des dizaines de millions, voire des centaines de millions. de données. L'arbre est relativement stable et peut essentiellement garantir que vous pouvez trouver les données souhaitées au maximum vingt ou trente fois. L'autre partie a dit que ce n'était pas tout à fait vrai. Finalement, nous avons échangé ce problème et j'ai également compris pourquoi nous devrions utiliser l'arbre. arbre. Je n'entrerai pas dans les détails ici, mais mes amis internautes. Pourquoi pensez-vous que les index doivent être implémentés à l'aide d'arbres
En ce qui concerne l'analyse des algorithmes, oubliez-la si vous ne le savez pas ou si vous ne le savez pas ? Je ne veux pas l'étudier. Je me souviens qu'un intervieweur m'a demandé quel type de méthode de tri la méthode Collections.sort utilise, hein, a vomi trois litres de sang. Bien sûr, afin de montrer que je suis bien informé et que j'ai fait quelques recherches sur l'analyse algorithmique (⊙﹏⊙)b, je mords toujours la balle et dis qu'il peut s'agir d'un tri de bulles. Bien sûr, la réponse est définitivement non. Les internautes intéressés peuvent consulter le code source de la méthode Collections.sort, qui utilise une méthode de tri appelée TimSort, qui est une méthode de tri par fusion améliorée.
7. Java Virtual Machine
À ma grande surprise, Java Virtual Machine devrait être un élément de contenu très important. De ce fait, la probabilité d'être interrogé à ce sujet dans ces entreprises est proche de 0. . Vous savez, j'ai passé beaucoup de temps à étudier la machine virtuelle Java l'année dernière, j'ai lu « Compréhension approfondie de la machine virtuelle Java : fonctionnalités avancées et meilleures pratiques JVM » du professeur Guang Zhou Zhiming pas moins de cinq fois.
Pour en revenir au sujet, même si la machine virtuelle Java n'a pas été posée, je pense qu'il est quand même nécessaire de l'étudier. Je vais simplement faire un aperçu et parler du contenu le plus important de la machine virtuelle Java :
(1)Disposition de la mémoire de la machine virtuelle Java
(2) Algorithme GC et plusieurs ramasse-miettes
(3) Mécanisme de chargement de classe, c'est-à-dire modèle de délégation parent
(4)Modèle de mémoire Java
(5)Règles qui se produisent avant
(6)règles d'utilisation des mots clés volatiles
Peut-être que l'entretien est inutile, mais en passe de devenir un maître Sur la route, c'est un incontournable.
8. Modèle de conception
Au départ, je pensais qu'il s'agissait d'un élément de contenu très important, mais il s'est avéré qu'on ne m'a posé la question qu'une seule fois lors de l'entretien à la division Alibaba B2B, et la question portait sur le motif du décorateur.
Bien sûr, nous ne pouvons pas être aussi utilitaires et étudier pour les entretiens. Les modèles de conception sont toujours très importants et utiles au travail. Concentrez-vous simplement sur les dix modèles de conception couramment utilisés parmi les 23 questions sur le design. et les réponses sur les modèles vont principalement dans trois directions :
(1) Quels modèles de conception sont utilisés dans votre projet et comment les utiliser.
(2) Connaître les avantages et les inconvénients des modèles de conception couramment utilisés.
(3) Capacité à dessiner des diagrammes UML de modèles de conception couramment utilisés.
9. Multi-threading
C'est aussi une question incontournable. En raison de trois années d'expérience professionnelle, je ne vous demanderai fondamentalement pas comment implémenter le multi-threading, je vous poserai des questions plus approfondies, telles que la différence et le lien entre Thread et Runnable, que se passera-t-il si vous démarrez un fil de discussion. plusieurs fois et quel est le statut du fil. Bien sûr, ce n’est que le plus basique. De manière inattendue, on m’a posé la même question presque en même temps dans plusieurs entretiens, avec différentes manières de la poser.
Pour résumer, cela signifie :
Supposons qu'il y ait quatre threads, Thread1, Thread2, ThreaD3 et Thread4, en comptant respectivement les tailles des quatre disques C, D, E et F . Tous les fils de discussion ont été comptés. Comment implémenter le résumé en le remettant au fil Thread5 ?
Les internautes intelligents ont-ils une réponse à cette question ? Ce n'est pas difficile, il existe des cours prêts à l'emploi sous java.util ? .concurrent qui peut être utilisé.
De plus, les pools de threads sont également une question fréquemment posée. Combien existe-t-il de pools de threads couramment utilisés ? Quelles sont les différences et les connexions entre ces types de pools de threads ? les plus pratiques, vous donneront quelques scénarios spécifiques et vous permettront de déterminer quel type de pool de threads est le plus approprié pour ce scénario.
Enfin, même si peu de questions ont été posées dans cette interview, la synchronisation multi-thread et le verrouillage sont également des points clés. La différence entre synchronisé et ReentrantLock, la méthode commune de verrouillage synchronisé et la méthode de verrouillage statique, le principe et la méthode de dépannage du blocage, etc.
10. Code source du JDK
Si vous souhaitez obtenir un salaire élevé, vous devez lire le code source du JDK. Le contenu ci-dessus peut être lié à des scénarios spécifiques. Le code source du JDK sert simplement à voir si vous aimez vous y plonger. Au cours de l'interview, on m'a posé de nombreuses questions sur le code source du JDK. La plus délicate m'a demandé comment la méthode hashCode() de String est implémentée. Heureusement, j'ai l'habitude de lire beaucoup de code source de String et j'ai donné une réponse approximative.
Il n'y a en fait rien à résumer sur le code source du JDK. Cela dépend uniquement de l'individu. Résumons le code source le plus important :
(1) Code source de List, Map et Set. classes d'implémentation
(2) Code source de ReentrantLock et AQS
(3) Le principe d'implémentation d'AtomicInteger, qui explique principalement le mécanisme CAS et comment AtomicInteger est implémenté à l'aide du mécanisme CAS
(4) Principes de mise en œuvre du pool de threads
(5) Méthodes dans la classe Object et rôle de chaque méthode
Celles-ci sont en fait assez exigeantes. J'ai essentiellement étudié le code source des éléments importants. cours au JDK tout au long de l'année dernière. Il faut vraiment du temps et des efforts pour tout parcourir, mais bien sûr, avec le recul, cela en vaut la peine - pas seulement pour faire face à l'entretien.
Enfin, si vous êtes intéressé et avez le temps, il est recommandé d'étudier et d'étudier SOA et RPC. Les systèmes orientés services sont essentiels pour les architectures distribuées à grande échelle. Ce sont des remèdes salvateurs qui peuvent tout guérir. maladies et ont été testés et éprouvés.