Il y a quelque temps, j'ai été invité par CSDN à revoir le contenu de la base de connaissances Java. J'ai également eu l'occasion de trier mon propre système de connaissances Java. J'espère que cet article pourra aider les programmeurs qui sont sur le point d'entrer ou qui le sont. randonnée dans le monde de Java.
Première image de base
J'ai commencé à connaître Java vers 2003 (j'utilisais encore Delphi à l'époque), mais ce n'est que lorsque j'ai obtenu mon diplôme de premier cycle en 2004 que J'ai officiellement décidé d'apprendre Java. À cette époque, je pensais qu'utiliser Delphi pour écrire des programmes d'architecture C/S n'était pas intéressant. Le concept standard J2EE et l'architecture de niveau entreprise proposés par Java à l'époque me semblaient haut de gamme et je ne pouvais pas supprimer mon sentiment. désir intérieur, alors j'ai commencé le voyage de Java. Pour être honnête, j'ai eu le vertige dès mon entrée dans le monde Java. Diverses spécifications, concepts et abréviations anglaises peuvent donner le vertige.
J2SE
J2EE
J2ME
JSP
JDBC
JMS
EJB
JNDI
JDBC
JTA
Rappelez-vous simplement le moment où je suis entré. Dès que j'ai vu les choses, il y avait beaucoup d'abréviations anglaises inconnues (heureusement, Java n'avait pas toutes sortes de frameworks qui fleurissaient à cette époque, sinon ce serait plus vertigineux), et je ne savais pas par où commencer. Il se trouve que mon camarade de classe avait un livre JSP, alors j'ai commencé avec JSP. Pour être honnête, c'était un très mauvais livre. Je ne me souviens même plus du nom maintenant, je me souviens probablement que j'ai commencé avec quelques exemples pour créer un site de démonstration JSP. Après avoir été torturé des milliers de fois par divers problèmes d'environnement et de conteneur, j'ai finalement exécuté un exemple. J'ai finalement vu la page de l'exemple via mon navigateur local. J'ai ressenti un sentiment d'accomplissement pendant une seconde, puis j'étais perdu. Parce que je ne comprends pas du tout comment tout cela fonctionne, quel est leur principe ? Cela a été un long cercle et de nombreux détours. Si on me donnait la chance de recommencer, je partirais des bases du langage Java.
Quelle est la fondation ? Java est un langage orienté objet. Le concept le plus important est celui des objets, et toute sa syntaxe tourne autour de lui. Les structures de base et les variables d'autres programmes : séquences, boucles et branches sont basées sur d'autres langages auparavant, mais elles se présentent simplement sous une forme différente. Une fois que vous comprenez les objets, les concepts qui les entourent : classes et interfaces sont des extensions naturelles. Bien sûr, si vous maîtrisez les concepts de base et la grammaire de base, vous ne pouvez écrire que Hello World. Mais le fait est que si votre point de départ est correct, le voyage est proche.
À ce stade, vous pouvez vous familiariser avec la langue et les bibliothèques de classe associées en lisant de bons livres et en faisant quelques exercices de base. Dans mon esprit, "Thinking In Java" est un livre approprié pour débuter avec Java (hé, j'ai fait un long détour avant de voir ce livre). Bien sûr, il existe aussi d'autres bons livres, comme "Introduction à la programmation Java). ", " Noyau Java》. Mon sentiment est que vous pouvez obtenir quelques livres supplémentaires de ce type et lire chaque point de connaissance avec référence. Après tout, un auteur peut avoir fait quelques omissions. Lisez horizontalement au lieu de lire un livre verticalement du début à la fin. Saisissez un point de connaissance un par un, comprenez-le et faites une empreinte profonde en une seule étape. Ne courez pas, les résultats seront généraux. Commencez lentement et vous pourrez ensuite aller plus vite.
Concernant les bases, à mes yeux il n'y a pas beaucoup de parties essentielles et importantes, je vais les énumérer brièvement ici :
Concepts de base
Le framework Collections fournit un grand nombre d'encapsulations de structures de données couramment utilisées, ce qui permet essentiellement aux programmeurs Java de dire adieu à l'implémentation manuelle de la plupart des structures de données courantes que vous apprenez dans les cours de structure de données. Il est bien plus utile de comprendre correctement les scénarios applicables aux différentes structures de données que de les implémenter manuellement. Si vous n'avez rien à faire, jetez un œil au code dans Collections. Ce sont toutes des implémentations de niveau maître. Je me souviens que lorsque j'apprenais Java, c'était encore JDK 1.3. Après avoir commencé à travailler, le courant dominant était 1.4 et il n'y avait pas de bibliothèque concurrente à cette époque. Lors de la gestion moi-même de la communication inter-thread, diverses notifications ont été omises, des notifications précoces ont été effectuées et des blocages ont été provoqués. Les programmeurs Java d'aujourd'hui sont donc beaucoup plus heureux. Concurrent est une autre implémentation de bibliothèque de classes de niveau maître, et vous pouvez l'examiner de plus près et le comprendre. La bibliothèque IO, qu'il s'agisse d'E/S de fichier ou d'E/S réseau, est ce que les programmeurs Java traitent le plus. Il est important de se familiariser avec son API, mais le plus important est de comprendre comment résumer et modéliser les opérations d'E/S, et de comprendre les différentes. Modèles IO. L’essence et les principes qui les sous-tendent.
D'accord, après avoir terminé le contenu de base ci-dessus, nous avons obtenu la première carte, comme celle ci-dessous.
Deuxièmement, la carte de compétences
Même si vous maîtrisez la première carte, vous devez toujours courir librement dans le monde de Java. C'est encore un peu difficile. L'un des principaux scénarios d'utilisation de Java est désormais le développement back-end. À l'époque précédente, ce domaine était dominé par J2EE (maintenant appelé Java EE), également connu sous le nom de Java Enterprise Edition. J2EE contient de nombreux contenus dont le cœur est l'EJB. À cette époque, je venais de terminer mes études sur la technologie des objets distribués à l'école et je l'avais implémentée en utilisant CORBA et EJB comme exemples. J'ai lu plusieurs livres sur les modèles de conception et les meilleures pratiques des EJB, et avant d'obtenir mon diplôme et d'entrer dans une entreprise pour un stage, j'ai découvert que tout le monde disait que les EJB n'étaient plus nécessaires et que nous utilisions quelque chose appelé Spring. De nouvelles abréviations anglaises telles que IoC et DI sont réapparues. Avant qu'une bouchée de vieux sang ne puisse être pulvérisée, je me suis remis sur pied et j'ai commencé un nouveau voyage d'apprentissage.
Oui, les EJB ont commencé à disparaître lentement du courant dominant à cette époque (2005). Le livre "Expert One-on-One J2EE Development without EJB" écrit par Rod Johnson, docteur en musicologie, a prononcé la condamnation à mort d'EJB, et Spring est entré dans l'histoire. Depuis lors, Java est entré dans une ère de grand développement de frameworks. La combinaison de frameworks techniques tels que SSH/SSI a constitué le courant dominant du développement Java et continue de l'influencer jusqu'à aujourd'hui.
Il existe de plus en plus de frameworks en Java, et l'écosystème devient de plus en plus grand. Les débutants doivent être désemparés face à un framework aussi complexe. il n'y a pas de fin à l'apprentissage. En fait, dans les projets réels, peu de frameworks sont réellement utilisés. SSH/SSI est essentiellement le framework de base des projets Web Java. C'est l'outil de base pour vous lancer, et vous devez le maîtriser. Mais pour savoir cela, il faut savoir pourquoi Spring prend en charge le travail de création d'objets et de gestion des interdépendances, cachant les modèles de conception dans l'utilisation du framework. Beaucoup de gens savent seulement comment l'utiliser mais n'y pensent jamais. Le développement Web a évolué d'un désordre de JSP au début (HTML CSS JS Java SQL. Au début, je mettais tout cela dans un JSP, pensez à quel point il est difficile de le maintenir), à la division des responsabilités de MVC. Seule une couche View a également connu l'évolution de la bibliothèque de balises vers le modèle de page (Velocity, Freemarker). Maintenant, je préfère le modèle de séparation front-end et back-end plus approfondi. Il était une fois, l'ajustement des styles CSS de quelques pages m'a tué. La division spécialisée du travail est propice à l'efficacité et à la profondeur. L'évolution de la version Web provoquée par le développement rapide d'Internet et de l'Internet mobile a fait le front-end d'aujourd'hui. la complexité n'est plus inférieure à celle du back-end.
Alors en tant qu'ingénieur Java, combien de frameworks dois-je maîtriser ? C’est une fausse proposition, car peu importe combien vous en maîtrisez, cela ne suffira pas. La solution est d’en maîtriser quelques-uns de base, d’en comprendre un grand nombre en général et de maîtriser le cadre d’apprentissage rapide. En prenant SSH/SSI comme exemple, la tendance à la division professionnelle du travail front-end devient de plus en plus évidente, libérant complètement les soucis des ingénieurs Java back-end. Le framework prenant Spring comme exemple résout un grand nombre de problèmes d'ordre général. Le Spring d'aujourd'hui est plus de dizaines de fois plus grand qu'auparavant (en comptant tous les sous-projets nommés d'après Spring), qui résolvent tous des problèmes spécifiques à usage général. Ainsi, lorsque vous écrivez du code et que vous souhaitez soudainement écrire une classe nommée d'après Util, arrêtez-vous et réfléchissez à la question de savoir s'il s'agit d'une classe qui résout un problème courant. Vous pouvez également rechercher une bibliothèque de classes prête à l'emploi, par exemple Apache Commons. peut avoir ce dont vous avez besoin. Les bibliothèques de classes générales et les frameworks nous permettent de nous concentrer sur la logique métier et l'efficacité. C'est probablement la partie la plus précieuse de votre code. Certains programmeurs peuvent se plaindre de l'absence de contenu technique, mais je pense que la technologie la plus efficace peut être utilisée pour réaliser des affaires. . Maximiser la valeur est la chose la plus technique.
Le cadre est comme une arme. Je ne connais peut-être pas les dix-huit (bien plus de dix-huit) armes, mais nous devons avoir la même capacité, tout comme Zhang Wuji apprend le Tai. Épée Chi. L'ennemi peut toujours le vaincre en apprenant l'épée. L'astuce ici n'est pas d'apprendre les astuces. Par exemple, vous pouvez penser que votre utilisation d'Hibernate est parfaite, mais la base de données plante dès qu'elle est en ligne. L'essentiel ici est toujours de comprendre les bases de données relationnelles (SQL), et il peut maintenant être nécessaire d'ajouter une compréhension des principes et des mécanismes de bases de données non relationnelles (NoSQL) spécifiques, et même une compréhension essentielle du modèle de mappage O/R.
Ainsi, les bases sont comme la force interne, le cadre est comme des armes, et l'utilisation est comme des mouvements. Avec un seul esprit et la meilleure utilisation, si les trois sont intégrés, vous pouvez. dominent déjà le monde Java. Comme mentionné ci-dessus, nous disposons d’une deuxième carte sur cette base.
La troisième photo, photo étendue
Quant à la troisième photo, je ne peux plus me donner de suggestions qui, je pense, sont quelque peu généraux. À ce stade, l'orientation de la croissance et du développement de chaque personne sera affectée par son environnement et sa situation réelle. Laissez-moi vous expliquer un peu en me prenant comme exemple. Au cours des dernières années, depuis que nous avons rejoint une société Internet, le développement de la technologie Java a commencé à évoluer des applications uniques conteneurisées J2EE vers la SOA et les microservices. Les systèmes distribués à grande échelle sont devenus la norme, c'est pourquoi une plus grande partie de mon travail connexe se concentre sur ce domaine. D'une part, des fouilles approfondies continuent de combler les angles morts des connaissances. Par exemple, la base des programmes distribués est l'appel RPC, et l'essence du RPC est la sérialisation du réseau et des objets. En conséquence, nous devons bien comprendre les principes de TCP, le modèle de programmation réseau sous Unix/Linux et plusieurs modèles d'E/S réseau différents. Passez ensuite au modèle de programmation réseau fourni par Java sur cette base, BIO (blocage), NIO (non bloquant) et AIO (IO asynchrone), et combinez-le avec une pratique de travail réelle pour acquérir une compréhension approfondie.
Au cours de ce processus, je suis entré en contact avec un grand nombre de technologies RPC différentes, de la RMI de Java aux spécifications techniques des services Web. Plus tard, certains frameworks RPC plus simples et plus puissants ont émergé les uns après les autres, comme Hessian, Thrift, etc. L'essence des différents frameworks reste la même. Avec le développement de la servitisation, des frameworks de services qui fournissent des fonctions à valeur ajoutée supplémentaires ont été dérivés du framework RPC, comme le Dubbo open source d'Alibaba. Avec l'approfondissement des pratiques de travail, il est possible de descendre au niveau JVM pour analyser l'utilisation de la mémoire des objets, la planification des threads et les retards. Ce qui joue un rôle essentiel à ce stade, c'est toujours la capacité d'apprendre rapidement et de l'appliquer à la pratique professionnelle mentionnée précédemment.
L'autre côté de la profondeur est l'expansion horizontale. À mesure que la nature du travail change, des connaissances techniques plus larges peuvent également être nécessaires. Par exemple, après être devenu architecte, l’étendue des connaissances techniques requises dans certains aspects sera plus élevée. L'apprentissage technique méthodique et les compétences d'expérimentation vous permettent d'élargir plus rapidement l'étendue de la technologie, d'examiner différentes directions techniques et produits d'un point de vue plus élevé et de prendre les décisions techniques appropriées plus efficacement.
Chacun à ce stade peut être confronté à des environnements et des pratiques différents, de sorte que les cartes formées à ce stade varieront considérablement. Ce qui suit est ma troisième photo, qui est uniquement destinée à servir de référence aux autres voyageurs du voyage à Java. Et les chemins que vous empruntez le long de ces cartes très différentes forment un vous unique.
Même si vous n'avez pas encore de carte, ne vous y trompez pas et arrêtez d'avancer pour toujours. Si vous continuez à avancer, vous trouverez toujours un moyen. En fait, c’est comme ça que je suis arrivé ici, je n’ai jamais osé m’arrêter.
Ce qui précède est le contenu de Java Journey : Walker's Map. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !