Das Gerüst, das das Javaee -Feld seit langem dominiert hat, hat mit Frühlings -Struts2 MyBatis/Hibernate geführt.
Frühling:
Der Frühling ist nicht nur für Java -Dienste gedacht. Als Implementierung von Frühling als CGI -Standard ist es nicht nur ein Framework im Java -Feld, sondern die C# -Plattform kann weiterhin davon profitieren. Spring bietet verschiedene bequeme Annotationskonfigurationsmethoden wie Abstraktions- oder Bootde -Integrated -Lösungen, die die Projektbasis von Javaee erheblich vereinfachen.
Während des Frühlings sind die beiden Seiten differenziert, einige sind leichte Annotationen, und einige tendieren dazu, volle Annotationen zu sein.
Zunächst einmal ist die Prämisse der Annotation, dass sie Proxy-, Dynamik-, statische und CGGLIB -Proxy durchlaufen muss. Für leichte Anmerkungen ist der Winkel statische oder einmalige Anmerkungen.
Beispielsweise werden Controller-Annotationen, diese einmaligen Anmerkungen oder Kompilierungs-Zeit-Anmerkungen im Projektkontext als implizite einmalige Scan und verwandte Annotationen wie Service initialisiert, wobei Singleton Lightweight-Objektinstanzen bereitgestellt werden. Als erste Wahl betrachtet. Dies senkt die Kosten für Proxy und Reflexion während der Laufzeitzeit und spart auch bessere Ressourcen für den Laufzeitstapel.
Ein anderer Typ wie Reaktionsbody ist eine dynamische Annotation oder Annotation für Laufzeit. Jedes Mal, wenn Sie anfordern, wird das Spiegelbild der Annotation ausgeführt. Die Annotation der Laufzeit besteht natürlich darin, Ressourcen zu belegen.
Im Allgemeinen können keine notwendigen Anmerkungen vollständig ignoriert werden. Basierend auf der Anforderungs- und Antwortmethode, die auf den Servlet -Grundlagen basiert, gibt es kein MVC, das nicht gelöst werden kann, Parameter einnehmen, Parameter übergeben, zurückkehren usw. und während der Laufzeit keine Annotationen benötigt. Anmerkungen während der Laufzeit scheinen die Codemenge zu verringern. Um die verschiedenen Mängel in diesem Prozess auszugleichen, wird eine dynamische Annotation eines Kreises ausgeführt, um eine Annotation auszuführen, die Sie innerhalb der Methode verwenden. Welchen Code fehlt für Param -Anmerkungen, die in der Methode geschrieben wurden, im Vergleich zur Verwendung von Anfrage Get Yourself? Es ist nur so, dass der ursprüngliche Ein-Schritt-Prozess hinzugefügt wurde, um eine Code-Abfangen-Ebene hinzuzufügen.
Wie man weiß, ob eine Annotation eine Annotation in der Laufzeit- oder Kompilierungszeitraum ist, ist sehr einfach. Klicken Sie auf Strg+Maus und Sie sehen:
@Target ({elementtype.type, elementtype.method})
@Retention (RetentionPolicy.Runtime)
@Documented
Aufbewahrung Dieser Aufzählungsart vollständig veranschaulicht die Periode der von Ihnen verwendeten Annotation.
Jeder benutzt gerne Singletons mit Frühling, was ein hervorragender Weg ist. Singleton hat nichts mit Parallelität selbst zu tun, außer dass Sie es um die Ressourcenidentifikation konkurrieren müssen.
Wenn Sie viele Prototypobjekte in Ihrem Projekt haben müssen, bedeutet dies, dass Sie das falsche Objekt missbraucht oder verwendet haben. MVC hat im Grunde eingehende Parameter und Rückgaben. Jede Anfrage ist ein Thread. Eine separate Anfrageantwort hat das, was sie eingeben und beenden, was vollständig isoliert ist. Wenn es um MyBatis geht, verwenden viele Menschen verschiedene Resmapper in der MyBatis -Konfiguration, und jedes Mal, wenn verschiedene Bohnen hin und her gehen. Nach einer Anfrage müssen die Bohnen als Parameter und Ergebnisse einmal betragen. Die Oberfläche von MyBatis ist der SQL -Wartung klar, was für die starke Verringerung der Effizienz von JDBC erheblich ist. Dann kümmert sich niemand darum. Für sie haben Bohnen nichts und sie verstehen oder kümmern sich nicht um GC. Wenn sie Probleme bekommen, fügen Sie Speicher hinzu und fügen Sie Speicher an die Oberseite hinzu. Alles, was sie lösen, ist das Problem der Zeit und nutzen Platz für den Austauschzeit. Wenn Sie bei den gleichen Parametern und Ergebniskartierungen die Karte von JDK verwenden, ist es natürlich die eigene Karte von JDK.
Ich habe immer hartnäckig geglaubt, dass der Konsum von New JDKs eigenem Objekt viel kleiner ist als das, eine Bohne durch sich selbst zu definieren. Tut mir leid, ich weiß es auch nicht. Also komme ich immer zur Karte und zur Karte. Wenn Sie MyBatis verwenden, müssen Sie genau erkennen, ob Ihre Dinge in Ihrer Klasse steigen? Die Methode ist sehr einfach. Öffnen Sie im Projektprotokoll das Debug, um festzustellen, ob Ihr Protokoll jedes Mal eine neue SQLSession erstellt wird. Wenn dies der Fall ist, sollten Sie beachten, dass Ihre MyBatis -Sitzung nicht gepoolt und nicht von Dingen verfolgt wird. Wenn eine Methode wettbewerbsfähig ist, gibt es keinen Fehler in der Entschuldigung, aber es wird festgestellt, dass die Datenbank Ihre SQL nicht ausführt. Bald werden Sie feststellen, dass der Verbindungspool sehr schnell verwendet wird und häufig neue Verbindungen herstellt. Wenn Sie MyBatis nicht verwenden können, zögern Sie nicht, es ist richtig, es nicht zu verwenden.
Warum müssen wir versuchen, statische Anmerkungen zu verwenden? Es ist sehr einfach. Frühlingsklassen sind im Grunde genommen Singletons. Die Projekte sind groß genug und die Bohnen -Instanzen reichen aus. Was nehmen diese Singletons auf? Die Objektinstanz befindet sich im Haufen und wird im Stapel verwiesen. Wann werden GC Objekte von diesen Singletons recyceln? was Sie denken? Versuchen Sie daher bei der Anmerkung, die Verwendung von dynamischem Proxy zu minimieren. Lassen Sie bei Bedarf mehr Ressourcen für den Einsatz.
In der Vergangenheit würden wir sagen, dass es keinen Haufen gibt, aber jetzt ist der konstante Stringpool von JDK1.7 bereits in den Haufen eingegeben.
Was ist besser, Kompilierungstyp oder Interpretierbarkeit? Natürlich ist es analytisch und der Kompilierungstyp ähnelt dem Mediationsmodell. Daher ist es viel schwieriger, eine ausgezeichnete kompilierte Sprache zu erstellen als eine interpretierte Sprache.
Die Struktur des Web ist sehr klar. Zunächst befindet es sich noch im Kontext und dann eine Reihe von Komponenten in Sequenz. Das Wichtigste sind die Servlet -Komponente, die der Javaee -Standard ist, und der Rest der Webkomponenten sind Protokollstandards, die jeder haben muss. Dann werden Sie sehen, dass die Zuordnung von Servlets in vielen Projekten /, was ein schlechter Weg ist. Weil es sehr einfach ist, müssen JS oder CSS nie über Servlets verarbeitet werden. Daher werden die Zuordnungen hauptsächlich die Interaktion mit den Serverkomponenten von Webcontainern berücksichtigt und im Allgemeinen zwei Arten von Identifikationen ergeben, z. JS usw. müssen nicht das Servlet eingeben und gemäß der URL direkt aus dem Web -Kontext zurückkehren, und dann gibt es keine Möglichkeit, MVC in MVC abzufangen und zu veröffentlichen. Dies ist Zeitverschwendung, um Probleme zu verursachen und Probleme zu lösen, was kein guter Weg ist. Auf diese Weise sind Ihre statischen Ressourcen für Webcontainer, unabhängig davon, ob Nginx beteiligt ist oder nicht, und haben keine Beziehung zu Servlets. Servlets beziehen sich nur auf das, was Sie umgehen müssen.
Wo ist der beste Ort, um JS zu schreiben?
Viele Menschen sind es gewohnt, JS in JSP oder HTML zu schreiben, was schlecht ist.
Wenn wir ein Projekt bauen, müssen wir hoffen, dass unser JS und CSS vom Browser zwischengespeichert werden.
Dann ist JS, das im Skript -Tag der Seite geschrieben wurde, nur ein Tag, das sich nicht von Div oder Input unterscheidet und nicht zwischengespeichert wird. Ich habe viele Informationen überprüft, und der Cache, den ich offensichtlich gesehen habe, sagte, dass die Cache -Einheit eine Datei ist. Nicht das Etikett. Ich bin mir also nicht ganz sicher, dass Sie Ihre CSS -JS in die Datei schreiben und die Datei einführen, damit die Datei zwischengespeichert wird, da es keine direkte bejahende Antwort gibt, es ist meine Vermutung.
JSP ist eigentlich ein Servlet, also ist es eine dynamische Seite. Jedes Mal, wenn Sie die Klasse laden müssen, um dynamisch zu übersetzen, und dann die Schreibmethode in der Klasse auf HTTP in den Browser schreibt und den Browser rendert. Wenn es sich um HTML handelt, ist es statisch. Dynamisch und flexibel, es besteht kein Zweifel daran, dass es sich um ein Java -Objekt handelt, und verschiedene Java -Tags und -Methoden werden als Möglichkeiten bezeichnet. Statische Seiten müssen selbst behandelt werden. Wenn Sie eine Makrosprache verwenden, die statische Seiten ähnelt, ist es besser, JSP direkt zu verwenden.
Wie viele Daten werden jeweils auf der Seite geladen?
Wenn der auf Ihrer Seite angezeigte Inhalt auf Kategorien und Listen basiert, ist die Datenmenge mit Hunderten von Elementen sehr gering. Der Typ wird jetzt in der App zum Mitnehmen angezeigt, dann werden alle Kategorien und Daten gleichzeitig angegeben. Daher wird die Verarbeitung auf der Client -Seite verarbeitet, wobei die Kategorieschaltung und -vorschau im gesamten Vorgang auf der Seite, einschließlich der Suche, verarbeitet werden. Der auf unseren Kunden ausgeführte JS, das Handy oder der Computer von A, der nicht mit dem Handy oder Computer von B konkurriert. Wenn Sie jedes Mal einen Typ wechseln, wenn Sie zu einem Typ wechseln, bürsten Sie einen AJAX und es ist dieselbe Web -Container -Gruppe, sodass es Konkurrenz gibt. Je häufiger der Betrieb ist, desto größer ist die Konkurrenz. Dies hängt eng mit dem tatsächlichen Szenario zusammen.
Die Datenmenge, die von einer Abfrage zurückgegeben wird, hat nichts mit Leistung zu tun. Tausende von Tausenden von Daten befinden sich nur auf der Ebene von KB.
Die Anzahl der Abfragen, dh die Anzahl der Interaktionen mit dem Server, ist der direkte Grund, der die Gesamtleistung beeinflusst.
Die Datenmenge in einer Abfrage ist proportional zur Größe der zu befragten Tabelle. Es wird die Abfrage nicht beschleunigt, indem 10 Abfragen gleichzeitig zurückgegeben werden, und 10 Abfragen gleichzeitig, wobei die Abfrage verlangsamt wird. Der Datenbankvorgang ist im Wesentlichen eine Sammelanwendung und es wird nichts erstellt.
Die Prämisse des Tunings ist, dass der angegebene Betrag umso geeignet ist, desto besser ist es, je mehr Sie angeben. Der Speicher, den JDK oder Tomcat auf verschiedenen Ziffern des Betriebssystems konsumieren kann.
Verwenden Sie Nginx;
Verwenden Sie bei Bedarf Cache;
Wählen Sie Message Middleware oder andere Middleware nach Bedarf aus.
Die Trennung von Datenbanken oder Master-Sklaven usw. muss sein, dass die aktuelle Datenbank das Verkehrsvolumen nicht unterstützen kann.
Singleton ist ein guter Weg.
Multithreading ist eine scharfe Klinge und unterscheidet nicht zwischen der spezifischen Sprache.
Maven Management ist ein guter Weg, aber Ihr Projekt -Hauptteil sollte WebMVC sein, ein Webprojekt erstellen, Maven als Komponente einbetten, anstatt ein Maven -Projekt zu erstellen und es dann in ein Webprojekt umzuwandeln, es sei denn, es ist untätig.
Mit dem Frühling ist es derzeit das beste Gerüst.
Verwenden Sie JDBC so viel wie möglich, wenn möglich.
Interagieren Sie nicht mit dem Server, wenn Sie Dinge im Client erreichen können. Die Ressourcen des Kunden sind groß und die Ressourcen des Servers begrenzt.
Versuchen Sie, weniger Anfragen zu senden. Codes, die weniger Anfragen senden, sind ein guter Code, es sei denn, Sie sind eine sofortige Anwendung.
Die Tools in jedem Code sind Tools, und die API ist das, was Sie am meisten verstehen müssen. Es gibt keine genaue Antwort, auf die man besser ist und welcher nicht gut ist.
Alles ist ein Objekt und es ist rein für Java. Der Proxy ist ein Objekt, die Reflexion ist ein Objekt, das Objekt ist ein Objekt und der grundlegende Datentyp ist kein Objekt.
Andere Dinge als grundlegende Typen werden durch Objekte abgeschlossen. Unabhängig davon, wie komplex der Prozess ist, werden sie durch die entsprechenden Objektmethoden in Kombination mit Methodenparametern abgeschlossen. Wie man eine Klasse serialisieren und sie deserialisieren, um sie unverblümt auszudrücken, ist es das IO und die Übertragung der Datei und laden sie dann in JVM und konstruieren sie in ein Objekt.
Der Grund, warum RPC nicht in einem Thread aufgerufen wird. Das so genannte Ding ist stellvertretend. Der Proxy wandelt Ihre Anforderungen in Parameter um und sendet sie als Datenströme aus. Der Server wandelt Ihren Anforderungsstrom in Objekte um und streamt sie dann zurück. Sie konstruieren dann das Objekt und verarbeiten es durch das Objekt.
NIO ist ein guter Weg, Netty ist eine gute Wahl. Gibt es eine Multi-Threaden-Sockel, die Netty übertrifft?
Zookeeper ist ein hervorragendes Werkzeug für eine Reihe von Lösungen wie eine gute verteilte Registrierung.
Diese Dinge sind alles Prinzipien und Objekte, daher müssen Sie sie verwenden, um sie hart zu lesen.
Das obige ist ein persönliches Verständnis, und Sie können es gerne korrigieren.