Vor einiger Zeit wurde ich von CSDN eingeladen, den Inhalt der Java-Wissensdatenbank zu überprüfen. Ich hoffe, dass dieser Artikel Programmierern helfen kann, die gerade dabei sind, einzutreten Trekking in die Java-Welt.
Das erste, grundlegende Bild
Ich begann etwa 2003, Java zu kennen (damals nutzte ich noch Delphi), aber das dauerte erst, als ich 2004 mein Grundstudium abschloss Ich habe mich offiziell entschieden, Java zu lernen. Zu dieser Zeit hatte ich das Gefühl, dass die Verwendung von Delphi zum Schreiben von C/S-Architekturprogrammen nicht interessant war. Das damals von Java vorgeschlagene J2EE-Standardkonzept und die Architektur auf Unternehmensebene fühlten sich alle Arten von High-End an, und ich konnte es nicht unterdrücken inneren Wunsch, also begann ich Javas Reise. Ehrlich gesagt war mir schon beim Eintritt in die Java-Welt schwindelig. Verschiedene Spezifikationen, Konzepte und englische Akronyme können Menschen schwindelig machen.
J2SE
J2EE
J2ME
JSP
JDBC
JMS
EJB
JNDI
JDBC
JTA
Erinnern Sie sich nur an den Moment, als ich hereinkam. Das erste, was ich sah, waren viele unbekannte englische Abkürzungen (glücklicherweise blühte zu dieser Zeit in Java nicht jede Art von Framework auf, sonst wäre mir noch schwindliger geworden), und ich wusste nicht, wo ich anfangen sollte. Es kam vor, dass mein Klassenkamerad ein JSP-Buch hatte, also begann ich mit JSP. Um ehrlich zu sein, war es ein wirklich schlechtes Buch. Ich erinnere mich wahrscheinlich nicht einmal daran, dass ich mit einigen Beispielen begonnen habe, um eine JSP-Demo-Site zu erstellen. Nachdem ich tausende Male von verschiedenen Umgebungs- und Containerproblemen geplagt wurde, sah ich endlich die Seite im Beispiel über meinen lokalen Browser und hatte dann für eine Sekunde das Gefühl, etwas erreicht zu haben. Da ich überhaupt nicht verstehe, wie das alles funktioniert, was ist ihr Prinzip? Es war ein großer Kreis und viele Umwege. Wenn ich die Chance hätte, noch einmal von vorne zu beginnen, würde ich mit den grundlegenden Java-Sprachgrundlagen beginnen.
Was ist die Basis? Java ist eine objektorientierte Sprache. Das wichtigste Konzept sind Objekte, und die gesamte Syntax dreht sich darum. Die Grundstrukturen und Variablen anderer Programme: Sequenzen, Schleifen und Verzweigungen basieren auf anderen Sprachen zuvor, liegen jedoch nur in einer anderen Form vor. Sobald Sie Objekte verstanden haben, sind die Konzepte rund um Objekte: Klassen und Schnittstellen natürliche Erweiterungen. Wenn Sie die Kernkonzepte und die grundlegende Grammatik beherrschen, können Sie natürlich nur „Hello World“ schreiben. Aber der Punkt ist: Wenn Ihr Ausgangspunkt stimmt, ist die Reise nahe.
In dieser Phase können Sie sich mit der Sprache und den zugehörigen Bibliotheken vertraut machen, indem Sie gute Bücher lesen und einige grundlegende Übungen machen. Meiner Meinung nach ist „Thinking In Java“ ein geeignetes Buch für den Einstieg in Java (hey, ich habe einen langen Umweg gemacht, bevor ich dieses Buch gesehen habe). Natürlich gibt es auch andere gute Bücher, wie zum Beispiel „Introduction to Java Programming“. "," Core Java》. Ich habe das Gefühl, dass man sich ein paar weitere Einstiegsbücher dieser Art besorgen und jeden Wissenspunkt mit Referenz lesen kann. Schließlich hat ein Autor möglicherweise einige Auslassungen horizontal gemacht, anstatt ein Buch vertikal vom Anfang bis zum Ende zu lesen. Erfassen Sie einen Wissenspunkt nach dem anderen, verstehen Sie ihn und machen Sie einen tiefen Eindruck. Laufen Sie nicht herum, die Ergebnisse werden allgemein sein, und dann können Sie schneller vorgehen.
Was die Grundlagen angeht, gibt es in meinen Augen nicht viele Kern- und wichtige Teile, die ich hier kurz auflisten werde:
Kernkonzepte
Objektmodell
Interface-Design
Klassenbibliothek
lang
Sammlungen
gleichzeitig
io
Ich werde hier nicht viel über die Kernkonzepte schreiben. Sie spiegeln sich grundsätzlich in allen Java-Codebibliotheken wider. Der Unterschied liegt von Anfang an nur in der Angemessenheit des Verstehens und der Abstraktion. Es gibt so viele Bibliotheken im JDK, aber hier werden nur die oben genannten aufgelistet. Tatsächlich ist String die wichtigste in lang, was viele Leute ignorieren. In C gibt es kein String-Konzept. Java stellt dieses Objekt bereit, aber wenn Sie dieses Objekt nicht verstehen und nicht sinnvoll nutzen, werden Sie in Zukunft in endlose Fallstricke geraten und immer wieder darauf treten. Wenn Sie mir nicht glauben, gehen Sie auf die Suche und finden Sie heraus, wie viele einfache Probleme es bei der Kodierung verschiedener verstümmelter Zeichen gibt. Darüber hinaus gibt es verschiedene Leistungsprobleme, die durch String verursacht werden. Das Kernobjekt von String ergibt sich aus der Kodierung von Zeichen, dem Byte-Ausdruck von Zeichen (Big Endian, Little Endian, Netzwerk-Byte-Reihenfolge), der Auswirkung auf GC, regulären Ausdrücken und dem Mustervergleich. Dies ist möglicherweise der umfangreichste Inhalt in Java. Objekt.
Das Collections-Framework bietet eine große Anzahl häufig verwendeter Datenstrukturkapselungen, was es Java-Programmierern grundsätzlich ermöglicht, sich von der manuellen Implementierung der meisten gängigen Datenstrukturen, die Sie in Datenstrukturkursen lernen, zu verabschieden. Es ist viel nützlicher, die anwendbaren Szenarien verschiedener Datenstrukturen richtig zu verstehen, als sie manuell zu implementieren. Wenn Sie nichts zu tun haben, werfen Sie einen Blick auf den Code in Sammlungen. Es handelt sich bei allen um Implementierungen auf Masterebene. Ich erinnere mich, dass es, als ich Java lernte, noch JDK 1.3 war. Nachdem ich mit der Arbeit begonnen hatte, war JDK 1.4 der Mainstream, und zu diesem Zeitpunkt gab es keine gleichzeitige Bibliothek. Als ich die Kommunikation zwischen Threads selbst abwickelte, wurden verschiedene Benachrichtigungen ausgelassen, es wurden frühe Benachrichtigungen vorgenommen und es kam zu Deadlocks. Daher sind die heutigen Java-Programmierer viel zufriedener. Concurrent ist eine weitere Implementierung einer Klassenbibliothek auf Master-Ebene, und Sie können einen genaueren Blick darauf werfen und es herausfinden. Die IO-Bibliothek, ob Datei-IO oder Netzwerk-IO, ist das, womit Java-Programmierer am meisten zu tun haben. Es ist wichtig, mit ihrer API vertraut zu sein, aber noch wichtiger ist es, zu verstehen, wie IO-Operationen abstrahiert und modelliert werden, und die Unterschiede zu verstehen IO-Modelle. Die Essenz und Prinzipien dahinter.
Okay, nachdem wir die oben genannten grundlegenden Inhalte abgeschlossen haben, haben wir die erste Karte erhalten, wie die untenstehende.
Zweitens, Fertigkeitskarte
Selbst wenn Sie die erste Karte beherrschen, müssen Sie immer noch frei in der Karte laufen Welt von Java. Es ist immer noch ein wenig schwierig. Eines der gängigen Einsatzszenarien von Java ist heute die Backend-Entwicklung. In seiner früheren Ära wurde dieser Bereich von J2EE (heute Java EE genannt), auch bekannt als Java Enterprise Edition, dominiert. J2EE enthält viele Inhalte, deren Kern EJB ist. Zu diesem Zeitpunkt hatte ich gerade mein Studium der verteilten Objekttechnologie in der Schule abgeschlossen und sie am Beispiel von CORBA und EJB implementiert. Ich habe mehrere Bücher über EJB-Entwurfsmuster und Best Practices gelesen, und bevor ich meinen Abschluss machte und bei einem Unternehmen ein Praktikum absolvierte, stellte ich fest, dass alle sagten, dass EJB nicht mehr benötigt wird und wir etwas namens Spring verwenden. Neue englische Abkürzungen wie IoC und DI tauchten wieder auf, bevor ein Schluck altes Blut herausgespritzt werden konnte, stand ich wieder auf und begann eine neue Lernreise.
Ja, EJB begann zu dieser Zeit (2005) langsam aus dem Mainstream zu verschwinden. Das Buch „Expert One-on-One J2EE Development without EJB“ von Rod Johnson, einem Doktor der Musikwissenschaft, verkündete das Todesurteil für EJB und Spring betrat die Bühne der Geschichte. Seitdem ist für Java eine Ära der großartigen Entwicklung von Frameworks eingetreten. Die Kombination technischer Frameworks wie SSH/SSI hat den Mainstream der Java-Entwicklung geprägt und beeinflusst sie bis heute.
Es gibt immer mehr Frameworks in Java und das Ökosystem wird immer größer, wenn man mit einem so komplexen Framework konfrontiert wird Kein Ende des Lernens. Tatsächlich gibt es in realen Projekten nicht viele Frameworks, die tatsächlich verwendet werden. SSH/SSI ist im Grunde das Kerntool für den Einstieg und Sie müssen damit vertraut sein. Um dies zu wissen, müssen Sie jedoch wissen, warum Spring die Arbeit der Objekterstellung und des gegenseitigen Abhängigkeitsmanagements übernimmt und Entwurfsmuster bei der Verwendung des Frameworks verbirgt. Viele Menschen wissen nur, wie man es verwendet, denken aber nie darüber nach. Die Webentwicklung hat sich von einem JSP-Durcheinander in den frühen Tagen (HTML + CSS + JS + Java + SQL) entwickelt. In den frühen Tagen habe ich all dies einfach in eine JSP gepackt und darüber nachgedacht, wie schwierig es zu warten ist Aufgabenteilung von MVC. Nur eine Ansichtsebene hat ebenfalls eine Weiterentwicklung von der Tag-Bibliothek zur Seitenvorlage erfahren (Velocity, Freemarker). Jetzt bevorzuge ich das gründlichere Front-End- und Back-End-Trennungsmodell. Es gab einmal eine Zeit, in der mich die Anpassung der CSS-Stile einiger Seiten umgebracht hat. Die durch die rasante Entwicklung des Internets und des mobilen Internets verursachte Weiterentwicklung der Webversion hat das heutige Frontend geprägt Die Komplexität ist der des Backends nicht mehr unterlegen.
Wie viele Frameworks muss ich als Java-Ingenieur beherrschen? Dies ist eine falsche Behauptung, denn egal wie viele Sie beherrschen, es wird nicht ausreichen. Die Lösung besteht darin, einige Kernthemen kompetent zu beherrschen, viele davon im Allgemeinen zu verstehen und den Rahmen für schnelles Lernen zu beherrschen. Am Beispiel von SSH/SSI wird der Trend zur professionellen Front-End-Arbeitsteilung immer offensichtlicher und befreit die Back-End-Java-Ingenieure vollständig von ihren Sorgen. Das Framework, das Spring als Beispiel nimmt, löst eine große Anzahl allgemeiner Probleme. Der heutige Frühling ist mehr als Dutzende Male größer als zuvor (einschließlich aller nach Spring benannten Unterprojekte), die alle spezifische allgemeine Probleme lösen. Wenn Sie also Code schreiben und plötzlich eine nach Util benannte Klasse schreiben möchten, denken Sie darüber nach, ob dies eine Klasse ist, die ein häufiges Problem löst. Sie können auch nach einer vorgefertigten Klassenbibliothek suchen Möglicherweise haben Sie den Code, den Sie benötigen. Allgemeine Klassenbibliotheken und Frameworks geben uns die Möglichkeit, uns auf Geschäftslogik und Effizienz zu konzentrieren. Dies ist wahrscheinlich der wertvollste Teil Ihres Codes. Einige Programmierer beschweren sich möglicherweise darüber, dass diese keinen technischen Inhalt haben, aber ich denke, dass die effektivste Technologie verwendet werden kann, um Geschäfte zu machen . Den Wert zu maximieren ist das Technischste.
Der Rahmen ist wie eine Waffe. Ich kenne vielleicht nicht alle achtzehn (weit mehr als achtzehn) Waffen, aber wir müssen die gleiche Fähigkeit haben, genau wie Zhang Wuji Tai lernt Chi-Schwert. Der Feind kann ihn immer noch besiegen, indem er das Schwert erlernt. Der Trick hier besteht nicht darin, die Tricks zu lernen. Sie denken vielleicht, dass Ihre Hibernate-Nutzung perfekt ist, aber die Datenbank stürzt ab, sobald sie online geht. Das Wesentliche hier ist immer noch das Verständnis relationaler (SQL) Datenbanken, und jetzt kann es notwendig sein, ein Verständnis der Prinzipien und Mechanismen spezifischer nicht relationaler (NoSQL) Datenbanken und sogar ein grundlegendes Verständnis des O/R-Zuordnungsmodells hinzuzufügen.
Die Grundlagen sind also wie innere Stärke, das Gerüst ist wie Waffen und der Einsatz ist wie Bewegungen. Mit einem Geist und dem besten Nutzen, wenn die drei integriert sind, können Sie dominieren bereits die Java-Welt. Wie oben erwähnt, haben wir darauf basierend eine zweite Karte.
Das dritte Bild, erweitertes Bild
Was das dritte Bild betrifft, kann ich mir keine Vorschläge mehr machen das halte ich für einigermaßen allgemein. In dieser Phase wird die Wachstums- und Entwicklungsrichtung jedes Menschen von seiner Umgebung und seiner tatsächlichen Situation beeinflusst. Lassen Sie mich dies am Beispiel meiner Person etwas erklären. In den letzten Jahren seit dem Einstieg in ein Internetunternehmen hat die Entwicklung der Java-Technologie begonnen, sich von J2EE-Container-Einzelanwendungen hin zu SOA und Microservices zu entwickeln. Groß angelegte verteilte Systeme sind zur Norm geworden, daher konzentrieren sich meine einschlägigen Arbeiten mehr auf diesen Bereich. Einerseits vervollständigt eine eingehende Ausgrabung weiterhin den Wissens-Blindspot. Die Grundlage verteilter Programme sind beispielsweise RPC-Aufrufe, und das Wesentliche von RPC ist die Netzwerk- und Objektserialisierung. Dementsprechend müssen wir die Prinzipien von TCP, dem Netzwerkprogrammiermodell unter Unix/Linux und mehreren verschiedenen Netzwerk-IO-Modellen gründlich verstehen. Steigen Sie dann auf das von Java bereitgestellte Netzwerkprogrammiermodell BIO (blockierend), NIO (nicht blockierend) und AIO (asynchrones IO) auf und kombinieren Sie es mit der tatsächlichen Arbeitspraxis, um ein tiefgreifendes Verständnis zu erlangen.
Dabei kam ich mit einer Vielzahl verschiedener RPC-Technologien in Kontakt, von Javas eigenem RMI bis hin zu technischen Spezifikationen für WebServices. Später entstanden nacheinander einige einfachere und leistungsfähigere RPC-Frameworks wie Hessian, Thrift usw. Die Essenz verschiedener Frameworks bleibt gleich. Mit der Entwicklung der Servitisierung wurden Service-Frameworks, die zusätzliche Mehrwertfunktionen bereitstellen, weiter auf der Grundlage des RPC-Frameworks abgeleitet, wie beispielsweise Alibabas Open-Source-Dubbo. Mit der Vertiefung der Arbeitspraxis ist es möglich, auf die JVM-Ebene zu gelangen, um die Speichernutzung von Objekten, die Thread-Planung und die Verzögerung zu analysieren. Was in dieser Phase immer noch eine zentrale Rolle spielt, ist die Fähigkeit, schnell zu lernen und es in der bereits erwähnten Arbeitspraxis anzuwenden.
Die andere Seite der Tiefe ist die horizontale Erweiterung. Da sich die Art der Arbeit ändert, können auch umfassendere technische Kenntnisse erforderlich sein. Wenn Sie beispielsweise Architekt werden, ist der Umfang der erforderlichen technischen Kenntnisse in einigen Bereichen höher. Methodisches technisches Lernen und praktische Fähigkeiten ermöglichen es Ihnen, die Breite der Technologie schneller zu erweitern, verschiedene technische Richtungen und Produkte aus einer höheren Perspektive zu betrachten und geeignete technische Entscheidungen am effektivsten zu treffen.
Jeder in dieser Phase kann mit unterschiedlichen Umgebungen und Praktiken konfrontiert sein, daher werden die in dieser Phase erstellten Karten stark variieren. Das Folgende ist mein drittes Bild, das nur als Referenz für Mitreisende auf der Java-Reise dient. Und die Wege, die Sie auf diesen sehr unterschiedlichen Karten gehen, formen zufällig ein einzigartiges Ich.
Auch wenn Sie noch keine Karte haben, lassen Sie sich nicht verwirren und hören Sie für immer auf, weiterzumachen. Wenn du weitermachst, wirst du immer einen Weg finden. Tatsächlich habe ich es nie gewagt, so hierher zu kommen.
Das Obige ist der Inhalt von Java Journey: Walker's Map. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).