Heim  >  Artikel  >  Java  >  JAVAEE-Projektstruktur und Parallelitätsgedanken

JAVAEE-Projektstruktur und Parallelitätsgedanken

高洛峰
高洛峰Original
2017-01-17 11:11:191458Durchsuche

Das Gerüst, das seit langem das Javaee-Feld dominiert, wird von Spring Struts2 mybatis/hibernate angeführt.

Spring:

Spring ist nicht nur für Java-Dienste gedacht. Als Implementierung des CGI-Standards ist Spring nicht nur ein Framework im Java-Bereich, die C#-Plattform kann dennoch von verschiedenen praktischen Annotationskonfigurationsmethoden wie Abstraktion oder Bootde-Integration profitieren, was Javaee-Projekte erheblich vereinfacht >

Bei der Verwendung von Spring gibt es zwei Seiten: Ein Teil ist eine leichte Annotation und der andere Teil ist eine Neigung zur vollständigen Annotation.

Zuallererst besteht die Prämisse der Annotation darin, dass sie über einen Proxy, einen dynamischen, einen statischen oder einen cglib-Proxy erfolgen muss. Bei leichten Anmerkungen handelt es sich um statische oder einmalige Anmerkungen, z. B. Controller-Anmerkungen. Diese einmaligen Anmerkungen oder Anmerkungen zur Kompilierungszeit werden im Projektkontext als impliziter einmaliger Scan initialisiert , die Singleton-Lightweight-Objektinstanzen bereitstellen. Gilt als erste Wahl. Dies reduziert die Kosten für Proxys und Reflexionen während der Laufzeit und spart während der Laufzeit bessere Ressourcen für den Stapel.

Ein anderer Typ ist „Responsebody“, bei dem es sich um eine dynamische Annotation oder eine Laufzeitanmerkung handelt. Jedes Mal, wenn eine Anfrage gestellt wird, wird die Reflexion der Annotation ausgeführt. Anmerkungen zur Laufzeit belegen natürlich Ressourcen.

Wenn Anmerkungen nicht erforderlich sind, können sie im Allgemeinen weggelassen werden. Basierend auf den Servlet-basierten Anforderungs- und Antwortmethoden gibt es keine Probleme, die MVC nicht lösen kann, z. B. Parameterabruf, Parameterübergabe, Rückgabe usw. usw., und es besteht überhaupt keine Notwendigkeit für Laufzeitanmerkungen. Laufzeitanmerkungen scheinen die Menge an Code zu reduzieren. Um verschiedene Mängel in diesem Prozess auszugleichen, wird ein Ring dynamischer Anmerkungen ausgeführt, um eine Anmerkung auszuführen Verwendung innerhalb der Methode. Welcher Code fehlt für die in der Methode geschriebene Parameteranmerkung im Vergleich zur Verwendung von „request get“? Es fügt dem ursprünglichen einstufigen Prozess lediglich eine Ebene zum Abfangen von Code hinzu.

Wie erkennt man, ob es sich bei einer Anmerkung um eine Laufzeit- oder Kompilierungszeit-Anmerkung handelt? Es ist ganz einfach, Strg+Maus zu drücken und Sie sehen:

@Target({ElementType. TYPE, ElementType.METHOD})

@Retention(RetentionPolicy.RUNTIME)

@Documented

Retention Dieser Aufzählungstyp erklärt vollständig und klar den Gültigkeitszeitraum der von Ihnen verwendeten Annotation .

Jeder verwendet gerne Singletons. Dies hat nichts mit Parallelität selbst zu tun, außer dass es zu einem Ressourcenidentifikationswettbewerb kommen muss Es müssen viele Prototypobjekte in Ihrem Projekt vorhanden sein, was bedeutet, dass MVC im Grunde genommen Parameter und Rückgabewerte hat und deren eingehende und ausgehende Dinge vollständig isoliert sind. Wenn es um Mybatis geht, verwenden viele Leute verschiedene Resmapper in einer Konfiguration von Mybatis. Jedes Mal, wenn eine Anfrage gestellt wird, müssen die Beans als Parameter und Ergebnisse einmalig sein Auf Kosten der Effizienz von JDBC kümmern sich viele Menschen nicht darum. Wenn Probleme auftreten, fügen sie Speicher hinzu Die einzige Lösung ist Zeit, Raum gegen Zeit einzutauschen. Die gleiche Parameter- und Ergebniszuordnung, dann können Sie die Karte von jdk verwenden, um eine neue Bean zu erstellen. Natürlich ist es die eigene Karte von jdk von jdk ist viel weniger als Definieren Sie eine Bean selbst. Warum, weiß ich leider auch nicht. Ich habe also immer eine Karte zum Kommen und eine Karte zum Gehen. Wenn Sie mybatis verwenden, müssen Sie genau prüfen, ob Ihre Dinge an Ihre Klasse weitergeleitet werden. Öffnen Sie im Projektprotokoll, ob Ihr Protokoll jedes Mal eine neue SQL-Sitzung erstellt Die mybatis-Sitzung ist nicht gepoolt und wird nicht durch Dinge ersetzt. Wenn in einer Methode ein konkurrierendes SQL auftritt, liegt leider kein Fehler vor, aber die Datenbank führt Ihr SQL nicht aus. Sie werden bald feststellen, dass der Verbindungspool schnell genutzt wird und häufig neue Verbindungen erstellt werden. Wenn Sie auf mybatis verzichten können, zögern Sie natürlich nicht, es ist richtig, es nicht zu verwenden.

Warum müssen wir so oft wie möglich statische Annotationen verwenden? Es ist ganz einfach, dass es sich bei Spring-Klassen um Singletons handelt. Wenn das Projekt groß genug ist, wird es genügend Bean-Instanzen geben. Die Objektinstanz befindet sich im Heap-Bereich und die Referenz befindet sich im Stapel. Wann wird gc diese Singleton-Objekte recyceln? was Sie denken? Versuchen Sie daher, die Verwendung dynamischer Proxys zu reduzieren, wenn Sie auf Anmerkungen basieren. Lassen Sie mehr Ressourcen dort, wo sie benötigt werden.

Früher würden wir sagen, dass es keinen Stapel ohne Heap gibt, aber jetzt hat sich geändert, dass der String-Konstantenpool von jdk1.7 im Heap platziert wurde.

Welches ist besser, kompiliert oder interpretiert? Natürlich ist es analytisch und kompiliert ähnelt dem Zwischenmodell. Daher ist der Aufbau einer exzellenten kompilierten Sprache viel schwieriger als der Aufbau einer interpretierten Sprache.

Die Struktur des Webs ist sehr klar und dann eine Reihe von Komponenten. Unser wichtigstes Element ist die Servlet-Komponente, die der Standard von Javaee ist Standards, die jeder haben muss. Dann werden Sie sehen, dass die Servlet-Zuordnung vieler Projekte eine schlechte Methode ist, da sie niemals über Servlets verarbeitet werden muss -Seitenkomponenten des Webcontainers Im Allgemeinen erfordern zwei Arten der Identifizierung, z. B. .do und .action, eine Berechtigungsauthentifizierung, und die Aktion wird direkt freigegeben. js usw. müssen nicht in das Servlet eingegeben werden, der Webkontext kehrt direkt gemäß der URL zurück, und dann erfolgt kein MVC-Abfangen und -Freigeben in der MVC, was unnötig ist, Probleme verursacht und keine gute Möglichkeit zur Lösung des Problems darstellt Problem. Auf diese Weise sind Ihre statischen Ressourcen unabhängig vom Eingriff von Nginx für den Webcontainer statisch und haben keine Beziehung zum Servlet. Das Servlet kümmert sich nur um das, was es verarbeiten soll.

Wo kann man js am besten schreiben?

Viele Leute sind es gewohnt, JS in JSP oder HTML zu schreiben, was schlecht ist.

Wenn wir ein Projekt erstellen, müssen wir hoffen, dass unser JS und CSS vom Browser zwischengespeichert werden können.

Dann ist das im Skript-Tag der Seite geschriebene JS nur ein Tag. Es unterscheidet sich nicht von einem Div oder einer Eingabe und wird nicht zwischengespeichert. Ich habe viele Informationen überprüft und den Cache, den ich gesehen habe, klar angegeben Die Einheit des Caches ist eine Datei. statt Etiketten. Schreiben Sie also Ihre CSS-JS in die Datei und importieren Sie die Datei, damit die Datei zwischengespeichert wird, da es keine direkte, eindeutige Antwort gibt.

jsp ist eigentlich ein Servlet, also eine dynamische Seite. Jedes Mal muss die Klasse für die dynamische Übersetzung geladen werden, und dann schreibt die Schreibmethode in der Klasse die Seite an http in den Browser Der Browser rendert es. Wenn es sich um HTML handelt, ist es statisch. Es besteht kein Zweifel daran, dass es dynamisch und flexibel ist. Da es sich um ein Java-Objekt handelt, sind verschiedene Java-Tags und -Methoden möglich. Statische Seiten müssen von Ihnen selbst verwaltet werden. Es ist besser, JSP direkt zu verwenden.

Wie viele Daten sollen gleichzeitig auf der Seite geladen werden?

Wenn Ihre Seite Dinge nach Kategorien, nach Listen anzeigt, ist die Datenmenge sehr gering, Hunderte von Artikeln, der Typ wird in der aktuellen Take-Away-Bestell-App angezeigt, dann werden alle Kategorien und Daten unter angegeben Einmal, also Die Verarbeitung der Kategorie wird auf der Seite des gesamten Prozesses abgewickelt, einschließlich der Suche, der Js unseres Kunden und der auf dem Mobiltelefon oder Computer von A ausgeführten Js, die nicht mit dem Mobiltelefon von B konkurrieren Telefon oder Computer, richtig? Wenn Sie jedes Mal, wenn Sie einen Typ wechseln, ein Ajax flashen, handelt es sich um dieselbe Webcontainergruppe, sodass es Konkurrenz gibt. Je häufiger die Operationen durchgeführt werden, desto größer ist die Konkurrenz. Dieser Punkt hängt eng mit dem tatsächlichen Szenario zusammen.

Die von einer Abfrage zurückgegebene Datenmenge hat wenig mit der Leistung zu tun. Tausende und Abertausende von Daten liegen nur im Zehn-KB-Bereich.

Die Anzahl der Abfragen, also die Anzahl der Interaktionen mit dem Server, ist die direkte Ursache für die Gesamtleistung.

Die Datenmenge in einer Abfrage ist proportional zur Größe der abgefragten Tabelle. Die gleichzeitige Rückgabe von 10 Elementen beschleunigt die Abfrage nicht und die gleichzeitige Rückgabe von 1.000 Elementen führt zu einer Verlangsamung der Abfrage . Datenbankoperationen sind im Wesentlichen Sammlungsanwendungen, und es wird nichts erstellt.

Die Prämisse des Tunings besteht darin, die am besten geeignete Menge anzugeben. Es ist nicht so, dass es umso angemessener ist, je mehr Sie geben. Es gibt eine Obergrenze für den Speicher, den JDK oder Tomcat auf dem Betriebssystem verbrauchen können verschiedene Ziffern und verschiedene Ziffern.

Verwenden Sie Nginx; verwenden Sie bei Bedarf Caching.

Wählen Sie je nach Bedarf die Nachrichten-Middleware.

Separate oder Hauptdatenbank , muss es sein, dass die aktuelle Datenbank das Geschäftsvolumen nicht unterstützen kann.

Einzelfälle sind der beste Weg.

Multithreading ist ein scharfes Schwert, unabhängig von der spezifischen Sprache.

Maven-Management ist eine gute Möglichkeit, aber der Hauptteil Ihres Projekts sollte webmvc sein. Erstellen Sie ein Webprojekt und betten Sie Maven als Komponente ein, anstatt ein Maven-Projekt zu erstellen und es dann in ein Webprojekt zu konvertieren es ist müßig.

Mit Feder ist es derzeit das beste Gerüst.

Verwenden Sie JDBC so oft wie möglich, wenn möglich.

Wenn Sie Dinge auf dem Client tun können, interagieren Sie nicht mit dem Server. Die Ressourcen des Clients sind riesig, aber die Ressourcen des Servers sind begrenzt.

Versuchen Sie, so wenige Anfragen wie möglich zu senden. Code, der weniger Anfragen sendet, ist ein guter Code, es sei denn, es handelt sich um eine Echtzeitanwendung.

Jedes Tool im Code ist ein Tool, und die API ist das, was Sie am meisten verstehen müssen. Es gibt keine genaue Antwort darauf, welches besser ist und welches nicht.

Alles ist ein Objekt, was für Java rein ist. Proxy ist ein Objekt, Reflexion ist ein Objekt, Objekt ist ein Objekt und grundlegende Datentypen sind keine Objekte.

Mit Ausnahme der Grundtypen erfolgt alles über Objekte. Egal wie komplex der Prozess ist, er erfolgt über die Methoden der entsprechenden Objekte in Kombination mit den Parametern der Methoden. So serialisieren und deserialisieren Sie eine Klasse, um es ganz klar auszudrücken: Es handelt sich um die E/A und Übertragung von Dateien, das anschließende Laden in JVM und das Konstruieren in Objekte.

Der Grund, warum RPC nicht in einem Thread aufgerufen wird, ist, dass der Proxy Ihre Anforderungen in Parameter umwandelt und sie als Datenstrom sendet Der Stream wird dann in ein Objekt umgewandelt und dann gestreamt und zurückgesendet. Anschließend erstellen Sie das Objekt und verarbeiten es durch das Objekt.

NIO ist ein guter Weg und Netty ist eine gute Wahl. Gibt es einen Multithread-Socket, der Netty übertreffen kann?

zookeeper ist ein hervorragendes Tool für eine Reihe von Lösungen wie die verteilte Registrierung.

Diese Dinge sind Prinzipien plus Objekte, also muss man genau hinschauen, um sie zu nutzen.

Das Obige ist mein persönliches Verständnis. Korrekturen sind willkommen.

Weitere Artikel zur JAVAEE-Projektstruktur und Parallelitätsgedanken finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:8 Java RESTful FrameworksNächster Artikel:8 Java RESTful Frameworks